Machine Learning in ProOrder ProRealTime

Viewing 15 posts - 46 through 60 (of 455 total)
  • Author
    Posts
  • #121321 quote
    GraHal
    Participant
    Master

    @Paul … comment out Line 144. Also then … 1 less endif should be needed?

    My ‘sweating over it’ time may be a benefit to others as I tried just about every conceivable thing possible to get mine to work. Then – when I got it working – I went back over some things I tried to see what difference they should have made! 🙂

    Let us know if it works?

    #121324 quote
    GraHal
    Participant
    Master

    Also you need the initialisation below to be inserted in your code at Line 10  …

    once HeuristicsCycle = 0
    once HeuristicsAlgo1 = 1
    once HeuristicsAlgo2 = 0
    #121329 quote
    GraHal
    Participant
    Master

    @Paul I got your code to run after making the changes above, but Valuex and ValueY are not changing.

    More sweating now! 🙂

    #121331 quote
    GraHal
    Participant
    Master

    Success … see attached!

    I looked at my working System and the only way I got mine to fully spark into life (with ValueX and ValueY changing) …  was to NOT include the code below … so there must be something wrong with below or the concept of below does not work??

    I guess JuanJ will have to help us with below?

    HeuristicsCycleLimit = 2
    once HeuristicsCycle = 0
    once HeuristicsAlgo1 = 1
    once HeuristicsAlgo2 = 0
    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
    Paul.jpg Paul.jpg
    #121333 quote
    GraHal
    Participant
    Master

    Aha … I just  looked at my other fully working working System including the above code … but we do NOT need either lines of code below …

    So that’s saved JuanJ a bit more time! 🙂

    If HeuristicsAlgo1 = 1 Then
    
    If HeuristicsAlgo2 = 1 Then

    EDIT / PS

    Comparing results of both my 2 fully functional Systems and Paul’s System with and without the HeuristicsCycle Code above  … the results are the same both with and without!

    Maybe there could be instances where the HeuristicsCycle Code makes a difference?

    Thoughts:
    JuanJ noted cross-errors when he tried 2 x Algos together (some time ago) so he kindly provided the HeuristicsCycle Code as a solution.

    These cross-errors may have been  due to the cross-use (between the 2 x Algos) of certain settings due to the missing ‘2’ from certain settings (of Algo2) which I highlighted and corrected in an earlier post.

    #121334 quote
    fifi743
    Participant
    Master

    Hi Paul
    add to line 61

    once Valuey = period2
    Paul thanked this post
    #121350 quote
    GraHal
    Participant
    Master

    we do NOT need either lines of code below …

    Away from the screen my brain cleared! 🙂

    Without the lines of code below, we have nothing that is controlling / defining Algo1 and Algo2 and so the HeuristicsCycle code is not doing anything?  (This is why both sets of results are the same!).

    So I am now back to my earlier assertion that HeuristicsCycle code is not working for some reason?

    If HeuristicsAlgo1 = 1 Then
     
    If HeuristicsAlgo2 = 1 Then
    #121356 quote

    Francesco did it before ….. he had two different results, but without code we don’t know how he did it.

    #121363 quote
    GraHal
    Participant
    Master

    he had two different results, but without code we don’t know how he did it.

    Francesco  results were before (without JuanJ code) and after (with JunanJ code).

    I have my Systems (and Paul’s) working – with the JuanJ Algo1 and Algo2 – but seemingly not using the code below.

    HeuristicsCycleLimit = 2
    once HeuristicsCycle = 0
    once HeuristicsAlgo1 = 1
    once HeuristicsAlgo2 = 0
    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
    #121364 quote

    If you remove this part of code, I seem to have understood that the results will not change you …. so there is something else different ….

    #121367 quote
    GraHal
    Participant
    Master

    Either …

    1.    The Cycle code above is not working and therefore achieving no change in the results?

    This scenario means that Algo1 and Algo2 are both working at the same time (on the same bar).

    OR

    2.   The Cycle code above is working as designed to do, but the results are the same as without the Cycle code above.

    This scenario means that Algo1 and Algo2 are working separately every 2 Cycles (on different bars).

    Item 2. is why I think that the Cycle code is not working as the results would not be identical??

    #121369 quote
    GraHal
    Participant
    Master

    Item 2. is why I think that the Cycle code is not working as the results would not be identical as without the Cycle code.

    #121393 quote
    Paul
    Participant
    Master

    A lot of idea’s but i’am stuck at the moment.

    @GraHal, I tried many combinations, but to result. Also tried fifi’s idea.

    If someone got it to a working version, then please post the whole code.

    #121406 quote
    GraHal
    Participant
    Master

    If someone got it to a working version, then please post the whole code.

    Below is your code working and the results attached … you can see Valuex and ValueY as variables changing … under the equity curve.

    defparam cumulateorders = false
    defparam preloadbars    = 10000
    defparam flatbefore     = 080000
    defparam flatafter      = 220000
     
    //period1=7
    //period2=14
     
    HeuristicsCycleLimit = 2
    once HeuristicsCycle = 0
    once HeuristicsAlgo1 = 1
    once HeuristicsAlgo2 = 0
    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 = 6
    ResetPeriod = 3 //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 = 1 //Minimum allowed value
    MaxValue = 12 //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 = 16
    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 = 14 //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 valuex coloured(121,141,35,255) as "fastperiod1"
    graph valuey coloured(255,0,0,255) as "slowperiod"
    //endif
    //endif
    
    GRAPH HeuristicsAlgo1 coloured(121,141,35,255)
    //GRAPH HeuristicsAlgo2 coloured(255,0,0,255)
    
    Paul thanked this post
    Paul-3.jpg Paul-3.jpg
    #121408 quote
    GraHal
    Participant
    Master

    And here is Paul’s code with the HeuristicsCycle all Rem’d out  … results on the top equity curve.

    Notice the top equity curve (rem’d out HeuristicsCycle  code) results are the same bottom equity curve (included HeuristicsCycle code ). Note: included = opposite of rem’d out.

    defparam cumulateorders = false
    defparam preloadbars    = 10000
    defparam flatbefore     = 080000
    defparam flatafter      = 220000
     
    //period1=7
    //period2=14
     
    //HeuristicsCycleLimit = 2
    //once HeuristicsCycle = 0
    //once HeuristicsAlgo1 = 1
    //once HeuristicsAlgo2 = 0
    //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 = 6
    ResetPeriod = 3 //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 = 1 //Minimum allowed value
    MaxValue = 12 //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 = 16
    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 = 14 //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 valuex coloured(121,141,35,255) as "fastperiod1"
    graph valuey coloured(255,0,0,255) as "slowperiod"
    //endif
    //endif
    
    //GRAPH HeuristicsAlgo1 coloured(121,141,35,255)
    //GRAPH HeuristicsAlgo2 coloured(255,0,0,255)
    //endif
    
    Paul thanked this post
    Paul-4.jpg Paul-4.jpg
Viewing 15 posts - 46 through 60 (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...