ProRealCode - Trading & Coding with ProRealTime™
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.
SHOULD we initialize it is variable?
if not onmarket then
dayinit = day
monthinit = month
yearinit = year
endif
Valuex :
MOVE
@fifi743 … got ValueY working so my (now deleted) comment is no longer needed.
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)?
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
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"
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.
@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
Attached results using Paul’s System.
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?
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)
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.
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!? 🙂
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?
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.