ProRealCode - Trading & Coding with ProRealTime™
@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?
Also you need the initialisation below to be inserted in your code at Line 10 …
once HeuristicsCycle = 0
once HeuristicsAlgo1 = 1
once HeuristicsAlgo2 = 0
@Paul I got your code to run after making the changes above, but Valuex and ValueY are not changing.
More sweating now! 🙂
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
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.
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
Francesco did it before ….. he had two different results, but without code we don’t know how he did it.
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
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 ….
Either …
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??
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.
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.
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)
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
Machine Learning in ProOrder ProRealTime
This topic contains 454 replies,
has 32 voices, and was last updated by Khaled
4 years, 1 month ago.
| Forum: | ProOrder: Automated Strategies & Backtesting |
| Language: | English |
| Started: | 08/06/2017 |
| Status: | Active |
| Attachments: | 207 files |
The information collected on this form is stored in a computer file by ProRealCode to create and access your ProRealCode profile. This data is kept in a secure database for the duration of the member's membership. They will be kept as long as you use our services and will be automatically deleted after 3 years of inactivity. Your personal data is used to create your private profile on ProRealCode. This data is maintained by SAS ProRealCode, 407 rue Freycinet, 59151 Arleux, France. If you subscribe to our newsletters, your email address is provided to our service provider "MailChimp" located in the United States, with whom we have signed a confidentiality agreement. This company is also compliant with the EU/Swiss Privacy Shield, and the GDPR. For any request for correction or deletion concerning your data, you can directly contact the ProRealCode team by email at privacy@prorealcode.com If you would like to lodge a complaint regarding the use of your personal data, you can contact your data protection supervisory authority.