Machine Learning in ProOrder ProRealTime

Viewing 15 posts - 61 through 75 (of 455 total)
  • Author
    Posts
  • #121413 quote
    fifi743
    Participant
    Master
    defparam cumulateorders = false
    defparam preloadbars    = 10000
    //defparam flatbefore     = 080000
    //defparam flatafter      = 220000
    
    once period1=7
    once period2=14
    once ValueX =period1
    once Valuey =period2
    ONCE ResetPeriod = 25
    HeuristicsCycleLimit = 2
    // ONCE HeuristicsCycle=1
    If HeuristicsCycle >= HeuristicsCycleLimit  Then
    If HeuristicsAlgo1 = 1 Then
    HeuristicsAlgo2 = 0
    HeuristicsAlgo1 = 1
    ElsIf HeuristicsAlgo2 = 1 Then
    HeuristicsAlgo1 = 0
    HeuristicsAlgo2 = 1
    EndIf
    HeuristicsCycle = 0
    EndIf
     
    //If HeuristicsAlgo1 = 1 Then
    
    //Heuristics Algorithm 1 Start
    // 
    If (onmarket[1] = 1 and onmarket = 0) or (longonmarket[1] = 1 and longonmarket and countoflongshares < countoflongshares[1]) or (longonmarket[1] = 1 and longonmarket and countoflongshares > countoflongshares[1]) or (shortonmarket[1] = 1 and shortonmarket and countofshortshares < countofshortshares[1]) or (shortonmarket[1] = 1 and shortonmarket and countofshortshares > countofshortshares[1]) or (longonmarket[1] and shortonmarket) or (shortonmarket[1] and longonmarket) Then
    optimize = optimize + 1
    EndIf
     
    StartingValue = period1
    //Specify no of months after which to reset optimization
    Increment = 1
    MaxIncrement = 7 //Limit of no of increments either up or down
    Reps = 3 //Number of trades to use for analysis
    
    MinValue = 2 //Minimum allowed value
    MaxValue = 14 //Maximum allowed value
    
    If monthinit = 1 or monthinit = 3 or monthinit = 5 or monthinit = 7 or monthinit = 8 or monthinit = 10 or monthinit = 12 Then
    MonthDays = 31
    
    ElsIf monthinit = 4 or monthinit = 6 or monthinit = 9 or monthinit = 11 Then
    MonthDays = 30
    
    ElsIf monthinit = 2 Then
    If (yearinit/4 = round(yearinit/4)) or (yearinit/400 = round(yearinit/400)) Then //haha not sure how exactly to do this
    MonthDays = 29 //leap year
    Else
    MonthDays = 28
    
    EndIf
    EndIf
    
    If (month = monthinit and day = dayinit + ResetPeriod) or (month = monthinit + 1 and (day + (MonthDays - dayinit)) >= ResetPeriod) Then
    
    ValueX = StartingValue
    WinCountB = 0
    StratAvgB = 0
    BestA = 0
    BestB = 0
    dayinit = day
    monthinit = month
    yearinit = year
    EndIf
    
     ONCE ValueX = StartingValue
    once PIncPos = 1 //Positive Increment Position
    once NIncPos = 1 //Neative Increment Position
    once Optimize = 0 ////Initialize Heuristicks Engine Counter (Must be Incremented at Position Start or Exit)
    once Mode = 1 //Switches between negative and positive increments
    once WinCountB = 3 //Initialize Best Win Count
    GRAPH WinCountB coloured (0,0,0) AS "WinCountB"
    once StratAvgB = 4353 //Initialize Best Avg Strategy Profit
    GRAPH StratAvgB coloured (0,0,0) AS "StratAvgB"
     
    If Optimize = Reps Then
    WinCountA = 0 //Initialize current Win Count
    StratAvgA = 0 //Initialize current Avg Strategy Profit
    HeuristicsCycle = HeuristicsCycle + 1
     
    For i = 1 to Reps Do
    If positionperf(i) > 0 Then
    WinCountA = WinCountA + 1 //Increment Current WinCount
    EndIf
    StratAvgA = StratAvgA + (((PositionPerf(i)*countofposition[i]*100000)*-1)*-1)
    Next
    StratAvgA = StratAvgA/Reps //Calculate Current Avg Strategy Profit
    Graph (PositionPerf(1)*countofposition[1]*100000)*-1 as "PosPerf1"
    Graph (PositionPerf(2)*countofposition[2]*100000)*-1 as "PosPerf2"
    Graph StratAvgA*-1 as "StratAvgA"
    once BestA = 300
    GRAPH BestA coloured (0,0,0) AS "BestA"
    If StratAvgA >= StratAvgB Then
    StratAvgB = StratAvgA //Update Best Strategy Profit
    BestA = ValueX
    EndIf
    once BestB = 300
    GRAPH BestB coloured (0,0,0) AS "BestB"
    If WinCountA >= WinCountB Then
    WinCountB = WinCountA  //Update Best Win Count
    BestB = ValueX
    EndIf
     
    If WinCountA > WinCountB and StratAvgA > StratAvgB Then
    Mode = 0
    ElsIf WinCountA < WinCountB and StratAvgA < StratAvgB and Mode = 1 Then
    ValueX = ValueX - (Increment*NIncPos)
    NIncPos = NIncPos + 1
    Mode = 2
    ElsIf WinCountA >= WinCountB or StratAvgA >= StratAvgB and Mode = 1 Then
    ValueX = ValueX + (Increment*PIncPos)
    PIncPos = PIncPos + 1
    Mode = 1
    ElsIf WinCountA < WinCountB and StratAvgA < StratAvgB and Mode = 2 Then
    ValueX = ValueX + (Increment*PIncPos)
    PIncPos = PIncPos + 1
    Mode = 1
    ElsIf WinCountA >= WinCountB or StratAvgA >= StratAvgB and Mode = 2 Then
    ValueX = ValueX - (Increment*NIncPos)
    NIncPos = NIncPos + 1
    Mode = 2
    EndIf
     
    If NIncPos > MaxIncrement or PIncPos > MaxIncrement Then
    If BestA = BestB Then
    ValueX = BestA
    Else
    If reps >= 10 Then
    WeightedScore = 10
    Else
    WeightedScore = round((reps/100)*100)
    EndIf
    ValueX = round(((BestA*(20-WeightedScore)) + (BestB*WeightedScore))/20) //Lower Reps = Less weight assigned to Win%
    EndIf
    NIncPos = 1
    PIncPos = 1
    ElsIf ValueX > MaxValue Then
    ValueX = MaxValue
    ElsIf ValueX < MinValue Then
    ValueX = MinValue
    EndIF
     
    Optimize = 0
    EndIf
     
    // Heuristics Algorithm 1 End
    
    //ElsIf HeuristicsAlgo2 = 1 Then
    //
    //// Heuristics Algorithm 2 Start
    // 
    //If (onmarket[1] = 1 and onmarket = 0) or (longonmarket[1] = 1 and longonmarket and countoflongshares < countoflongshares[1]) or (longonmarket[1] = 1 and longonmarket and countoflongshares > countoflongshares[1]) or (shortonmarket[1] = 1 and shortonmarket and countofshortshares < countofshortshares[1]) or (shortonmarket[1] = 1 and shortonmarket and countofshortshares > countofshortshares[1]) or (longonmarket[1] and shortonmarket) or (shortonmarket[1] and longonmarket) Then
    //optimize2 = optimize2 + 1
    //EndIf
    //  StartingValue2 = period2
    //ResetPeriod2 = 3 //Specify no of months after which to reset optimization
    //Increment2 = 1
    //MaxIncrement2 = 7 //Limit of no of increments either up or down
    //Reps2 = 3 //Number of trades to use for analysis
    //
    //MinValue2 = 15 //Minimum allowed value
    //MaxValue2 = 28 //Maximum allowed value
    //
    //If monthinit2 = 1 or monthinit2 = 3 or monthinit2 = 5 or monthinit2 = 7 or monthinit2 = 8 or monthinit2 = 10 or monthinit2 = 12 Then
    //MonthDays2 = 31
    //ElsIf monthinit2 = 4 or monthinit2 = 6 or monthinit2 = 9 or monthinit2 = 11 Then
    //MonthDays2 = 30
    //ElsIf monthinit2 = 2 Then
    //If (yearinit2/4 = round(yearinit2/4)) or (yearinit2/400 = round(yearinit2/400)) Then //haha not sure how exactly to do this
    //MonthDays2 = 29 //leap year
    //Else
    //MonthDays2 = 28
    //EndIf
    //EndIf
    //
    //If (month = monthinit2 and day = dayinit2 + ResetPeriod2) or (month = monthinit2 + 1 and (day + (MonthDays2 - dayinit2)) >= ResetPeriod2) Then
    //ValueY = StartingValue2
    //WinCountB2 = 0
    //StratAvgB2 = 0
    //BestA2 = 0
    //BestB2 = 0
    //dayinit2 = day
    //monthinit2 = month
    //yearinit2 = year
    //EndIf
    //
    //once ValueY = StartingValue2
    //once PIncPos2 = 1 //Positive Increment Position
    //once NIncPos2 = 1 //Neative Increment Position
    //once Optimize2 = 0 ////Initialize Heuristicks Engine Counter (Must be Incremented at Position Start or Exit)
    //once Mode2 = 1 //Switches between negative and positive increments
    //once WinCountB2 = 3 //Initialize Best Win Count
    //GRAPH WinCountB2 coloured (0,0,0) AS "WinCountB2"
    //once StratAvgB2 = 4353 //Initialize Best Avg Strategy Profit
    //GRAPH StratAvgB2 coloured (0,0,0) AS "StratAvgB2"
    // 
    //If Optimize2 = Reps2 Then
    //WinCountA2 = 0 //Initialize current Win Count
    //StratAvgA2 = 0 //Initialize current Avg Strategy Profit
    //HeuristicsCycle = HeuristicsCycle + 1
    // 
    //For i2 = 1 to Reps2 Do
    //If positionperf(i) > 0 Then
    //WinCountA2 = WinCountA2 + 1 //Increment Current WinCount
    //EndIf
    //StratAvgA2 = StratAvgA2 + (((PositionPerf(i)*countofposition[i]*100000)*-1)*-1)
    //Next
    //StratAvgA2 = StratAvgA2/Reps2 //Calculate Current Avg Strategy Profit
    //Graph (PositionPerf(1)*countofposition[1]*100000)*-1 as "PosPerf1-2"
    //Graph (PositionPerf(2)*countofposition[2]*100000)*-1 as "PosPerf2-2"
    //Graph StratAvgA2*-1 as "StratAvgA2"
    //once BestA2 = 300
    //GRAPH BestA2 coloured (0,0,0) AS "BestA2"
    //If StratAvgA2 >= StratAvgB2 Then
    //StratAvgB2 = StratAvgA2 //Update Best Strategy Profit
    //BestA2 = ValueY
    //EndIf
    //once BestB2 = 300
    //GRAPH BestB2 coloured (0,0,0) AS "BestB2"
    //If WinCountA2 >= WinCountB2 Then
    //WinCountB2 = WinCountA2  //Update Best Win Count
    //BestB2 = ValueY
    //EndIf
    // 
    //If WinCountA2 > WinCountB2 and StratAvgA2 > StratAvgB2 Then
    //Mode = 0
    //ElsIf WinCountA2 < WinCountB2 and StratAvgA2 < StratAvgB2 and Mode2 = 1 Then
    //ValueY = ValueY - (Increment2*NIncPos2)
    //NIncPos2 = NIncPos2 + 1
    //Mode2 = 2
    //ElsIf WinCountA2 >= WinCountB2 or StratAvgA2 >= StratAvgB2 and Mode2 = 1 Then
    //ValueY = ValueY + (Increment2*PIncPos2)
    //PIncPos2 = PIncPos2 + 1
    //Mode = 1
    //ElsIf WinCountA2 < WinCountB2 and StratAvgA2 < StratAvgB2 and Mode2 = 2 Then
    //ValueY = ValueY + (Increment2*PIncPos2)
    //PIncPos2 = PIncPos2 + 1
    //Mode2 = 1
    //ElsIf WinCountA2 >= WinCountB2 or StratAvgA2 >= StratAvgB2 and Mode2 = 2 Then
    //ValueY = ValueY - (Increment2*NIncPos2)
    //NIncPos2 = NIncPos2 + 1
    //Mode2 = 2
    //EndIf
    // 
    //If NIncPos2 > MaxIncrement2 or PIncPos2 > MaxIncrement2 Then
    //If BestA2 = BestB2 Then
    //ValueY = BestA
    //Else
    //If reps2 >= 10 Then
    //WeightedScore2 = 10
    //Else
    //WeightedScore2 = round((reps2/100)*100)
    //EndIf
    //ValueY = round(((BestA2*(20-WeightedScore2)) + (BestB2*WeightedScore2))/20) //Lower Reps = Less weight assigned to Win%
    //EndIf
    //NIncPos2 = 1
    //PIncPos2 = 1
    //ElsIf ValueY > MaxValue2 Then
    //ValueY = MaxValue2
    //ElsIf ValueY < MinValue2 Then
    //ValueY = MinValue2
    //EndIF
    // 
    //Optimize2 = 0
    //EndIf
    // 
    //// Heuristics Algorithm 2 End
    //
    //EndIf
    
    c1=average[valuex](close)
    c2=average[valuey](close)
    
    //
    condbuy =c1 crosses over c2 and rsi[14](close)<70
    condsell=c1 crosses under c2 and rsi[14](close)>30
    
    //
    if condbuy then
    buy at market
    endif
    if condsell then
    sellshort at market
    endif
    
    //pp=positionperf(0)*100
    
    //if pp<-0.125 then
    //sell at market
    //exitshort at market
    //endif
    
    set stop %loss 0.5 // exit sooner on performance criteria above
    set target %profit 0.25
    //GRAPH OPTIMIZE
    graph ValueX coloured(121,141,35,255) as "fastperiod1"
    graph ValueY coloured(255,0,0,255) as "slowperiod"
    GRAPH dayinit + ResetPeriod
    GRAPH ResetPeriod
    GRAPH monthinit
    graph dayinit

    Good evening,
    Unable to initialize variables
    Monthinit
    Dayinit
    removing some of the code works.

    Paul thanked this post
    #121416 quote
    fifi743
    Participant
    Master

    SHOULD we initialize it is variable?

    if not onmarket then
    dayinit = day
    monthinit = month
    yearinit = year
    endif
    #121417 quote
    fifi743
    Participant
    Master
    #121420 quote
    fifi743
    Participant
    Master
    add

    ONCE valuey=5
    once HeuristicsAlgo1 = 1
    

     

    Bard thanked this post
    Capture-d’écran-695.png Capture-d’écran-695.png
    #121422 quote
    GraHal
    Participant
    Master

    @fifi743 … got ValueY working so my (now deleted) comment is no longer needed.

    #121432 quote
    GraHal
    Participant
    Master

    only a single increment is made either up or down

    Is the 1 x increment of the value set as increment?

    So if I set increment = 2 then in any one bar, ValueX or Value Y should not change by more than ‘2’ (up or down)?

    #121435 quote
    juanj
    Participant
    Master

    only a single increment is made either up or down

    Is the 1 x increment of the value set as increment?

    So if I set increment = 2 then in any one bar, ValueX or Value Y should not change by more than ‘2’ (up or down)?

    Correct, unless the increment limit value has been reached, after which ValueX will revert to the new Average best performing value

    GraHal and Paul thanked this post
    #121436 quote
    fifi743
    Participant
    Master

    for test :
    Depending on the month it changes from HeuristicsAlgo1 to HeuristicsAlgo2
    I moved valuey to line 40

    defparam cumulateorders = false
    defparam preloadbars    = 10000
    //defparam flatbefore     = 080000
    //defparam flatafter      = 220000
    
    period1=7
    period2=14
    if not onmarket then
    dayinit = day
    monthinit = month
    yearinit = year
    
    endif
    HeuristicsCycleLimit = 2
    IF monthinit mod 2 = 1 then
    HeuristicsAlgo1 = 1
    elsif monthinit mod 2 =0 then
    HeuristicsAlgo2 = 1
    endif
    If HeuristicsCycle >= HeuristicsCycleLimit  Then
    If HeuristicsAlgo1 = 1 Then
    HeuristicsAlgo2 = 1
    HeuristicsAlgo1 = 0
    ElsIf HeuristicsAlgo2 = 1 Then
    HeuristicsAlgo1 = 1
    HeuristicsAlgo2 = 0
    EndIf
    HeuristicsCycle = 0
    EndIf
     
    If HeuristicsAlgo1 = 1 Then
    
    //Heuristics Algorithm 1 Start
     
    If (onmarket[1] = 1 and onmarket = 0) or (longonmarket[1] = 1 and longonmarket and countoflongshares < countoflongshares[1]) or (longonmarket[1] = 1 and longonmarket and countoflongshares > countoflongshares[1]) or (shortonmarket[1] = 1 and shortonmarket and countofshortshares < countofshortshares[1]) or (shortonmarket[1] = 1 and shortonmarket and countofshortshares > countofshortshares[1]) or (longonmarket[1] and shortonmarket) or (shortonmarket[1] and longonmarket) Then
    optimize = optimize + 1
    EndIf
     
    StartingValue = period1
    valuey= PERIOD2
    ResetPeriod = 3//Specify no of months after which to reset optimization
    Increment = 1
    MaxIncrement = 3//Limit of no of increments either up or down
    Reps = 3 //Number of trades to use for analysis
    
    MinValue = 2 //Minimum allowed value
    MaxValue = 14 //Maximum allowed value
    
    If monthinit = 1 or monthinit = 3 or monthinit = 5 or monthinit = 7 or monthinit = 8 or monthinit = 10 or monthinit = 12 Then
    MonthDays = 31
    ElsIf monthinit = 4 or monthinit = 6 or monthinit = 9 or monthinit = 11 Then
    MonthDays = 30
    ElsIf monthinit = 2 Then
    If (yearinit/4 = round(yearinit/4)) or (yearinit/400 = round(yearinit/400)) Then //haha not sure how exactly to do this
    MonthDays = 29 //leap year
    Else
    MonthDays = 28
    EndIf
    EndIf
    
    If (month = monthinit and day = dayinit + ResetPeriod) or (month = monthinit + 1 and (day + (MonthDays - dayinit)) >= ResetPeriod) Then
    ValueX = StartingValue
    WinCountB = 0
    StratAvgB = 0
    BestA = 0
    BestB = 0
    dayinit = day
    monthinit = month
    yearinit = year
    EndIf
    
    once ValueX = StartingValue
    once PIncPos = 1 //Positive Increment Position
    once NIncPos = 1 //Neative Increment Position
    once Optimize = 1 ////Initialize Heuristicks Engine Counter (Must be Incremented at Position Start or Exit)
    once Mode = 1 //Switches between negative and positive increments
    once WinCountB = 3 //Initialize Best Win Count
    //GRAPH WinCountB coloured (0,0,0) AS "WinCountB"
    //once StratAvgB = 0 //Initialize Best Avg Strategy Profit
    //GRAPH StratAvgB coloured (0,0,0) AS "StratAvgB"
     
    If Optimize = Reps Then
    WinCountA = 0 //Initialize current Win Count
    StratAvgA = 0 //Initialize current Avg Strategy Profit
    HeuristicsCycle = HeuristicsCycle + 1
     
    For i = 1 to Reps Do
    If positionperf(i) > 0 Then
    WinCountA = WinCountA + 1 //Increment Current WinCount
    EndIf
    StratAvgA = StratAvgA + (((PositionPerf(i)*countofposition[i]*100000)*-1)*-1)
    Next
    StratAvgA = StratAvgA/Reps //Calculate Current Avg Strategy Profit
    Graph (PositionPerf(1)*countofposition[1]*100000)*-1 as "PosPerf1"
    Graph (PositionPerf(2)*countofposition[2]*100000)*-1 as "PosPerf2"
    Graph StratAvgA*-1 as "StratAvgA"
    once BestA = 0
    GRAPH BestA coloured (0,0,0) AS "BestA"
    If StratAvgA >= StratAvgB Then
    StratAvgB = StratAvgA //Update Best Strategy Profit
    BestA = ValueX
    EndIf
    once BestB = 0
    GRAPH BestB coloured (0,0,0) AS "BestB"
    If WinCountA >= WinCountB Then
    WinCountB = WinCountA  //Update Best Win Count
    BestB = ValueX
    EndIf
     
    If WinCountA > WinCountB and StratAvgA > StratAvgB Then
    Mode = 0
    ElsIf WinCountA < WinCountB and StratAvgA < StratAvgB and Mode = 1 Then
    ValueX = ValueX - (Increment*NIncPos)
    NIncPos = NIncPos + 1
    Mode = 2
    ElsIf WinCountA >= WinCountB or StratAvgA >= StratAvgB and Mode = 1 Then
    ValueX = ValueX + (Increment*PIncPos)
    PIncPos = PIncPos + 1
    Mode = 1
    ElsIf WinCountA < WinCountB and StratAvgA < StratAvgB and Mode = 2 Then
    ValueX = ValueX + (Increment*PIncPos)
    PIncPos = PIncPos + 1
    Mode = 1
    ElsIf WinCountA >= WinCountB or StratAvgA >= StratAvgB and Mode = 2 Then
    ValueX = ValueX - (Increment*NIncPos)
    NIncPos = NIncPos + 1
    Mode = 2
    EndIf
     
    If NIncPos > MaxIncrement or PIncPos > MaxIncrement Then
    If BestA = BestB Then
    ValueX = BestA
    Else
    If reps >= 10 Then
    WeightedScore = 10
    Else
    WeightedScore = round((reps/100)*100)
    EndIf
    ValueX = round(((BestA*(20-WeightedScore)) + (BestB*WeightedScore))/20) //Lower Reps = Less weight assigned to Win%
    EndIf
    NIncPos = 1
    PIncPos = 1
    ElsIf ValueX > MaxValue Then
    ValueX = MaxValue
    ElsIf ValueX < MinValue Then
    ValueX = MinValue
    EndIF
     
    Optimize = 0
    EndIf
     
    // Heuristics Algorithm 1 End
    
    ElsIf HeuristicsAlgo2 = 1 Then
    
    // Heuristics Algorithm 2 Start
     
    If (onmarket[1] = 1 and onmarket = 0) or (longonmarket[1] = 1 and longonmarket and countoflongshares < countoflongshares[1]) or (longonmarket[1] = 1 and longonmarket and countoflongshares > countoflongshares[1]) or (shortonmarket[1] = 1 and shortonmarket and countofshortshares < countofshortshares[1]) or (shortonmarket[1] = 1 and shortonmarket and countofshortshares > countofshortshares[1]) or (longonmarket[1] and shortonmarket) or (shortonmarket[1] and longonmarket) Then
    optimize2 = optimize2 + 1
    EndIf
     
    StartingValue2 = period2
    valuex=period1
    ResetPeriod2 = 3//Specify no of months after which to reset optimization
    Increment2 = 1
    MaxIncrement2 = 5//Limit of no of increments either up or down
    Reps2 = 3 //Number of trades to use for analysis
    
    MinValue2 = 15 //Minimum allowed value
    MaxValue2 = 30 //Maximum allowed value
    
    If monthinit2 = 1 or monthinit2 = 3 or monthinit2 = 5 or monthinit2 = 7 or monthinit2 = 8 or monthinit2 = 10 or monthinit2 = 12 Then
    MonthDays2 = 31
    ElsIf monthinit2 = 4 or monthinit2 = 6 or monthinit2 = 9 or monthinit2 = 11 Then
    MonthDays2 = 30
    ElsIf monthinit2 = 2 Then
    If (yearinit2/4 = round(yearinit2/4)) or (yearinit2/400 = round(yearinit2/400)) Then //haha not sure how exactly to do this
    MonthDays2 = 29 //leap year
    Else
    MonthDays2 = 28
    EndIf
    EndIf
    
    If (month = monthinit2 and day = dayinit2 + ResetPeriod2) or (month = monthinit2 + 1 and (day + (MonthDays2 - dayinit2)) >= ResetPeriod2) Then
    ValueY = StartingValue2
    WinCountB2 = 0
    StratAvgB2 = 0
    BestA2 = 0
    BestB2 = 0
    dayinit2 = day
    monthinit2 = month
    yearinit2 = year
    EndIf
    
    once ValueY = StartingValue2
    once PIncPos2 = 1 //Positive Increment Position
    once NIncPos2 = 1 //Neative Increment Position
    once Optimize2 = 1 ////Initialize Heuristicks Engine Counter (Must be Incremented at Position Start or Exit)
    once Mode2 = 1 //Switches between negative and positive increments
    once WinCountB2 = 3 //Initialize Best Win Count
    GRAPH WinCountB2 coloured (0,0,0) AS "WinCountB2"
    once StratAvgB2 = 0 //Initialize Best Avg Strategy Profit
    GRAPH StratAvgB2 coloured (0,0,0) AS "StratAvgB2"
     
    If Optimize2 = Reps2 Then
    WinCountA2 = 0 //Initialize current Win Count
    StratAvgA2 = 0 //Initialize current Avg Strategy Profit
    HeuristicsCycle = HeuristicsCycle + 1
     
    For i2 = 1 to Reps2 Do
    If positionperf(i) > 0 Then
    WinCountA2 = WinCountA2 + 1 //Increment Current WinCount
    EndIf
    StratAvgA2 = StratAvgA2 + (((PositionPerf(i)*countofposition[i]*100000)*-1)*-1)
    Next
    StratAvgA2 = StratAvgA2/Reps2 //Calculate Current Avg Strategy Profit
    //Graph (PositionPerf(1)*countofposition[1]*100000)*-1 as "PosPerf1-2"
    //Graph (PositionPerf(2)*countofposition[2]*100000)*-1 as "PosPerf2-2"
    Graph StratAvgA2*-1 as "StratAvgA2"
    once BestA2 = 0
    GRAPH BestA2 coloured (0,0,0) AS "BestA2"
    If StratAvgA2 >= StratAvgB2 Then
    StratAvgB2 = StratAvgA2 //Update Best Strategy Profit
    BestA2 = ValueY
    EndIf
    once BestB2 = 0
    GRAPH BestB2 coloured (0,0,0) AS "BestB2"
    If WinCountA2 >= WinCountB2 Then
    WinCountB2 = WinCountA2  //Update Best Win Count
    BestB2 = ValueY
    EndIf
     
    If WinCountA2 > WinCountB2 and StratAvgA2 > StratAvgB2 Then
    Mode = 0
    ElsIf WinCountA2 < WinCountB2 and StratAvgA2 < StratAvgB2 and Mode2 = 1 Then
    ValueY = ValueY - (Increment2*NIncPos2)
    NIncPos2 = NIncPos2 + 1
    Mode2 = 2
    ElsIf WinCountA2 >= WinCountB2 or StratAvgA2 >= StratAvgB2 and Mode2 = 1 Then
    ValueY = ValueY + (Increment2*PIncPos2)
    PIncPos2 = PIncPos2 + 1
    Mode = 1
    ElsIf WinCountA2 < WinCountB2 and StratAvgA2 < StratAvgB2 and Mode2 = 2 Then
    ValueY = ValueY + (Increment2*PIncPos2)
    PIncPos2 = PIncPos2 + 1
    Mode2 = 1
    ElsIf WinCountA2 >= WinCountB2 or StratAvgA2 >= StratAvgB2 and Mode2 = 2 Then
    ValueY = ValueY - (Increment2*NIncPos2)
    NIncPos2 = NIncPos2 + 1
    Mode2 = 2
    EndIf
     
    If NIncPos2 > MaxIncrement2 or PIncPos2 > MaxIncrement2 Then
    If BestA2 = BestB2 Then
    ValueY = BestA
    Else
    If reps2 >= 10 Then
    WeightedScore2 = 10
    Else
    WeightedScore2 = round((reps2/100)*100)
    EndIf
    ValueY = round(((BestA2*(20-WeightedScore2)) + (BestB2*WeightedScore2))/20) //Lower Reps = Less weight assigned to Win%
    EndIf
    NIncPos2 = 1
    PIncPos2 = 1
    ElsIf ValueY > MaxValue2 Then
    ValueY = MaxValue2
    ElsIf ValueY < MinValue2 Then
    ValueY = MinValue2
    EndIF
     
    Optimize2 = 0
    EndIf
     
    // Heuristics Algorithm 2 End
    
    EndIf
    pp=positionperf(0)*100
    IF pp<-0.02 and HeuristicsAlgo2 and longonmarket then
    HeuristicsAlgo1=1
    SELL AT MARKET
    elsif pp<-0.05  and HeuristicsAlgo1 and shortonmarket then
    HeuristicsAlgo2=1
    EXITSHORT AT MARKET
    endif
    c1=average[valuex](close)
    c2=average[valuey](close)
    
    //
    condbuy =c1 crosses over c2  and rsi[14](close)<50
    condsell=c1 crosses under c2 and rsi[14](close)>40
    
    //
    if condbuy then
    buy at market
    endif
    if condsell then
    sellshort at market
    endif
    //
    
    
    //if pp<-0.125 then
    //sell at market
    //exitshort at market
    //endif
    
    set stop %loss 0.5 // exit sooner on performance criteria above
    set target %profit 3
     graph pp
    graph valuex coloured(121,141,35,255) as "fastperiod1"
    graph valuey coloured(255,0,0,255) as "slowperiod"
    
    Paul thanked this post
    #121443 quote
    Vonasi
    Moderator
    Master

    I just had a little play with the first code that Juanj posted and I noticed that I could sometimes get the ‘Periods’ variable to go negative. You might want to add a minimum value allowed to prevent this as it could cause a strategy to be stopped.

    #121480 quote
    juanj
    Participant
    Master

    @Vonasi, if you consider the latest version of the algorithm (not the one from a few years back), there is a minimum value and as long as MinValue is specified as a positive value a negative value shouldn’t occur

    #121546 quote
    GraHal
    Participant
    Master

    Attached results using Paul’s System.

    • Top Curve WITHOUT Heuristics (code is bare System / Paul’s original code only).
    • Bottom Curve WITH Heuristics.

    Bottom Curve … Heuristic Algo1 and Algo2 are both working at the same time.

    I found that it is not a case of adding Heuristics on top of a best effort bare code.

    I am going to start my version on Forward Test now to establish that my version is not just a massive curve fit of the Heuristics!? 🙂

    I am posting my results as encouragement / to show that JuanJ code does work.

    Maybe you can get JuanJ code to work with even better results on Paul’s System than attached?

    fifi743, Paul and Jan thanked this post
    Paul-5.jpg Paul-5.jpg
    #121716 quote
    Jan
    Participant
    Veteran

    Hi Juan,

    I try to understand the concepts of what you are trying to obtain with this machine learning, could you explain this ?

    Normally you develop a strategy with fixed settings (eg like a Macd crossing strategy) based upon past data, and assuming the future movements of price are relatively similar, and you let run your trading-algo.

    With this machine learning concept, are you trying to further optimize the following of past changes in price movements, then with those optimized findings approaching the future price movements with the new strategy ?

    Or when running a algo-strategy, with this machine learning concept, it adjust the setting of the variables automatically given the structure of price movements ?

    (I hope my question is clear,  in this case it would be great to discuss this kind of topics face to face in a meeting with others, to avoid misunderstandings)

    #121819 quote
    Jan
    Participant
    Veteran

    Hi Grahal or others,

    Could you be so kind to spend a few words to explain the concepts of the “Heuristics” ?   Is it daily optimising of a fixed setting, and yes, what is the base of the adjustment, how many bars backwards ?

    I am sorry, but I missed that out of lots of interesting code.

    Thanks in advance for your help !

    Your comment “Attached results using Paul’s System.

    • Top Curve WITHOUT Heuristics (code is bare System / Paul’s original code only).
    • Bottom Curve WITH Heuristics. “
    #121909 quote
    GraHal
    Participant
    Master

    when running a algo-strategy, with this machine learning concept, it adjust the setting of the variables automatically given the structure of price movements ?

    It is above. (I am commenting as JuanJ is probably busy trading or mentoring etc)

    I have found though that the starting value for ValueX is important to get good results.

    Also a few other variables in the Heuristics are important re initialisation value. This is understandable else the Heuristics would be the panacea for all!? 🙂

    #121910 quote
    GraHal
    Participant
    Master

    how many bars backwards ?

    This is a setting in the Heuristics Algo (Halgo), but it is set by number of Trades backwards.

    So to use an example … the results of the last 3 Trades Trades 1, 2 and 3 are used to vary the Halgo variables in order to produce an optimum ValueX to go forward with for the next Trade (4).

    Then it is my understanding that … Trade4 would be used together with Trade3 and Trade 2 to repeat above.

    I will try and decide … from the code … if it is above or is it … the Halgo variables are next optimised after Trade 6 using Trade 4, 5 and 6??


    @Jan
    you are far better at coding than I so maybe you can read JuanJ code and decide??

    Whoever finds out first, post on here, unless JuanJ passes by and tells us first?

Viewing 15 posts - 61 through 75 (of 455 total)
  • You must be logged in to reply to this topic.

Machine Learning in ProOrder ProRealTime


ProOrder: Automated Strategies & Backtesting

New Reply
Author
author-avatar
juanj @juanj Participant
Summary

This topic contains 454 replies,
has 32 voices, and was last updated by Khaled
4 years, 1 month ago.

Topic Details
Forum: ProOrder: Automated Strategies & Backtesting
Language: English
Started: 08/06/2017
Status: Active
Attachments: 207 files
Logo Logo
Loading...