ProRealCode - Trading & Coding with ProRealTime™
@Andre Vorster, maybe you can just share the SL and TP levels you used for the different fx pairs (as identified by you using WF analysis).
I recently stopped Auto trading on these strategies. Mainly because I want to run more Backtesting with WFA.
I was away for a while and could not watch the market so I did not give trading much attention.
These SL, TP values I did by manually changing each value, run back test and exported the results to Excel to make comparisons. None of these has TS, which can or can’t give better results. Still need to backtest these with TS. Just out of curiosity, I also want to test my manual way of analysing against WFA. Then put the manual values I think good in WFA to see the “future”.
1 contract each.
AUD/USD – 1min – TP-6 SL-25. 09 trades – Gain 419.50 – Loss 0 – Avg gain: £46,61
EUR/USD – 1min – TP-6 SL-29. 11 trades – Gain 474,68 – Loss 224,33 – Avg gain: £22,76
EUR/CHF – 1min – TP-8 SL-70. 06 trades – Gain 393,43 – Loss 0 – Avg gain: £65,57
As you will see the trades done is quite low so one can’t take any statistics from these results.
FYI, new data engine is coming soon. 7 times faster, currently testing it myself in Beta. Should help a lot for WF analysis!
Concerning the division by zero issue see: https://www.prorealcode.com/topic/division-by-zero-error-solved/
Ref. post n. #45737
HI Inertia ,
the specific window seems like so good , DO you think to use this strategy it in real account ?
thanks
REgards.
Hello.
Some WFA and backtesting results from the code below.
The WFA analysis seems a bit confusing 😐 The results with the lowest score 16,08% seems to yield the best results. Or may be I’m missing something…
Any suggestions on these WFA results? Which would you chose..?
Firstly I ran the backtest a few times to get the best ST/TP figures. Then ran WFA with the same figures with some points higher and some lower just to confirm WFA gets the same values.
//------------------------------------------------------------------------- // Main code : EUR/USD 1min 0.8 //------------------------------------------------------------------------- Defparam cumulateorders = false If longonmarket and close < positionprice and (barindex-tradeindex) > 650 Then Sell at market ElsIf shortonmarket and close > positionprice and (barindex-tradeindex) > 60 then Exitshort at market EndIf body=close-open abody=abs(body) if range>0 then ratio=abody/range else ratio=0 endif middle=(open+close)/2 bodytop=max(open, close) bodybottom=min(open, close) shadowtop=high-bodytop shadowbottom=bodybottom-low longcandle= (ratio>0.6) Bull = 0 Bear = 0 //Bullish Signals MorningStar=(body[2]<0 and body>0 and longcandle[2] and open[1]<close[2] and open>close[1] and ratio[1]<0.3 and abody[1]<abody[2] and abody[1]<abody and low[1]<low and low[1]<low[2] and high[1]<open[2] and high[1]<close) if MorningStar then Bull = 1 //Positive endif PiercingLine=(body[1]<0 and body>0 and longcandle[1] and longcandle and open<low[1] and close>middle[1] and close<open[1]) if PiercingLine then Bull = 1 //None endif AbandonedBabyBottom=(body[2]<0 and body>0 and longcandle[2] and ratio[1]<0.3 and high[1]<low[2] and high[1]<low) if AbandonedBabyBottom then Bull = 1 //None endif ThreeInsideUp=(body[2]<0 and body[1]>0 and body>0 and BullishHarami[1] and close>close[1]) if ThreeInsideUp then Bull = 1 //Positive endif ThreeOutsideUp=(body[2]<0 and body[1]>0 and body>0 and BullishEngulfing[1] and close>close[1]) if ThreeOutsideUp then Bull = 1 //Positive endif ThreeWhiteSoldiers=(body[2]>0 and body[1]>0 and body>0 and high[1]>high[2] and high>high[1] and close[1]>close[2] and close>close[1] and open[1]>open[2] and open[1]<close[2] and open>open[1] and open<close[1]) if ThreeWhiteSoldiers then //Bull = 1 //Increase Drawdown endif ConcealingBabySwallow=(body[3]<0 and body[2]<0 and body[1]<0 and body<0 and ratio[3]>0.8 and ratio[2]>0.8 and ratio>0.8 and open[1]<close[2] and high[1]>close[2] and shadowtop[1]>0.6*(abody[1]+shadowbottom[1]) and bodybottom<bodybottom[1] and bodytop>high[1]) if ConcealingBabySwallow then Bull = 1 //None endif BullishHarami=(body[1]<0 and body>0 and longcandle[1] and bodybottom>bodybottom[1] and bodytop<bodytop[1]) if BullishHarami then //Bull = 1 //Negative Impact endif HomingPigeon=(body[1]<0 and body<0 and longcandle[1] and bodybottom>bodybottom[1] and bodytop<bodytop[1]) if HomingPigeon then Bull = 1 //None endif BullishEngulfing=(body[1]<0 and body>0 and bodybottom<bodybottom[1] and bodytop>bodytop[1] and longcandle) if BullishEngulfing then Bull = 1 //Positive endif LastEngulfingBottom=(body[1]>0 and body<0 and bodybottom<bodybottom[1] and bodytop>bodytop[1] and longcandle) if LastEngulfingBottom then Bull = 1 //None endif DragonflyDojiBottom=(body[1]<0 and longcandle[1] and low<low[1] and shadowbottom>3*abody and shadowtop<shadowbottom/3) if DragonflyDojiBottom then Bull = 1 //None endif GravestoneDojiBottom=(body[1]<0 and longcandle[1] and low<low[1] and shadowtop>3*abody and shadowbottom<shadowtop/3) if GravestoneDojiBottom then Bull = 1 //None endif DojiStarBottom=(body[1]<0 AND longcandle[1] AND low<low[1] AND open<close[1] AND ratio<0.3 AND range<0.3*range[1]) if DojiStarBottom then Bull = 1 //None endif BullishHaramiCross=(body[1]<0 and longcandle[1] and bodybottom>bodybottom[1] and bodytop<bodytop[1] and ratio<0.3 and range<0.3*range[1]) if BullishHaramiCross then Bull = 1 //None endif ThreeStarsInTheSouth=(body[2]<0 and body[1]<0 and body<0 and shadowtop[2]<range[2]/4 and shadowbottom[2]>abody[2]/2 and low[1]>low[2] and high[1]<high[2] and abody[1]<abody[2] and shadowtop[1]<range[1]/4 and shadowbottom[1]>abody[1]/2 and low>low[1] and high<high[1] and abody<abody[1] and shadowtop<range/4 and shadowbottom<range/4) if ThreeStarsInTheSouth then Bull = 1 //None endif BullishBreakaway=(body[4]<0 and body[3]<0 and body>0 and open[3]<close[4] and close[2]<close[3] and close[1]<close[2] and longcandle and close<close[4] and close>open[3]) if BullishBreakaway then Bull = 1 //None endif Hammer=(body[1]<0 and longcandle[1] and low<low[1] and shadowbottom>2*abody and shadowtop<0.3*abody) if Hammer then Bull = 1 //None endif InvertedHammer=(body[1]<0 and longcandle[1] and low<low[1] and shadowtop>2*abody and shadowbottom<0.3*abody) if InvertedHammer then Bull = 1 //None endif RisingThreeMethods=(body[4]>0 and body[3]<0 and body[1]<0 and body>0 and longcandle[4] and longcandle and close[2]<close[3] and close[1]<close[2] and high[2]<high[3] and high[1]<high[2] and low[1]>low[4] and open>close[1] and close>high[4] and close>high[3] and close>high[2] and close>high[1]) if RisingThreeMethods then Bull = 1 //None endif BullishThreeLineStrike=(body[3]>0 and body[2]>0 and body[1]>0 and body<0 and longcandle[3] and longcandle[2] and longcandle[1] and close[2]>close[3] and close[1]>close[2] and open>close[1] and close<open[3]) if BullishThreeLineStrike then Bull = 1 //None endif BullishMatHold=(body[4]>0 and body[3]<0 and body[1]<0 and body>0 and longcandle[4] and close[3]>close[4] and close[2]<close[3] and close[1]<close[2] and high[2]<high[3] and high[1]<high[2] and low[1]>low[4] and open>close[1] and close>high[4] and close>high[3] and close>high[2] and close>high[1]) if BullishMatHold then Bull = 1 //None endif BullSash=(body[1]<0 AND longcandle[1] AND body>0 AND longcandle AND open>close[1] AND open<open[1] AND close>open[1] AND shadowtop<0.1*abody) if BullSash then Bull = 1 //Positive endif BullSeparatingLine=(body[1]<0 AND longcandle[1] AND body>0 AND longcandle AND open>=open[1] AND shadowtop<0.1*abody) if BullSeparatingLine then Bull = 1 //None endif BullishCounterAttack=(body[1]<0 AND longcandle[1] AND body>0 AND longcandle AND close<=close[1]) if BullishCounterAttack then Bull = 1 //None endif BullishKicking=(body[1]<0 AND longcandle[1] AND body>0 AND longcandle AND open>=open[1] AND shadowtop=0 AND shadowbottom=0) if BullishKicking then Bull = 1 //None endif //Bearish Signal EveningStar=(body[2]>0 AND body<0 and longcandle[2] and open[1]>close[2] and open<close[1] and ratio[1]<0.3 and abody[1]<abody[2] and abody[1]<abody and high[1]>high and high[1]>high[2] and low[1]>open[2] and low[1]>close) if EveningStar then Bear = 1 endif DarkCloudCover=(body[1]>0 and body<0 and longcandle[1] and longcandle and open>high[1] and close<middle[1] and close>open[1]) if DarkCloudCover then Bear = 1 endif AbandonedBabyTop=(body[2]>0 and body<0 and longcandle[2] and ratio[1]<0.3 and low[1]>high[2] and low[1]>high) if AbandonedBabyTop then Bear = 1 endif ThreeInsideDown=(body[2]>0 and body[1]<0 and body<0 and bearishharami[1] and close<close[1]) if ThreeInsideDown then Bear = 1 endif ThreeOutsideDown=(body[2]>0 and body[1]<0 and body<0 and bearishengulfing[1] and close<close[1]) if ThreeOutsideDown then Bear = 1 endif ThreeBlackCrows=(body[2]<0 and body[1]<0 and body<0 and longcandle[2] and longcandle[1] and longcandle and low[1]<low[2] and low<low[1] and close[1]<close[2] and close<close[1] and open[1]<open[2] and open[1]>close[2] and open<open[1] and open>close[1]) if ThreeBlackCrows then Bear = 1 endif UpsideGapTwoCrows=(body[2]>0 and body[1]<0 and body<0 and longcandle[2] and open[1]>close[2] and bodytop>bodytop[1] and bodybottom<bodybottom[1] and close>close[2]) if UpsideGapTwoCrows then Bear = 1 endif BearishHarami=(body[1]>0 and body<0 and longcandle[1] and bodybottom>bodybottom[1] and bodytop<bodytop[1]) if BearishHarami then Bear = 1 endif DescendingHawk=(body[1]>0 and body>0 and longcandle[1] and bodybottom>bodybottom[1] and bodytop<bodytop[1]) if DescendingHawk then Bear = 1 endif BearishEngulfing=(body[1]>0 and body<0 and bodybottom<bodybottom[1] and bodytop>bodytop[1] and longcandle) if BearishEngulfing then Bear = 1 endif LastEngulfingTop=(body[1]<0 and body>0 and bodybottom<bodybottom[1] and bodytop>bodytop[1] and longcandle) if LastEngulfingTop then Bear = 1 endif DragonflyDojiTop=(body[1]>0 and longcandle[1] and high>high[1] and shadowbottom>3*abody and shadowtop<shadowbottom/3) if DragonflyDojiTop then Bear = 1 endif GravestoneDojiTop=(body[1]>0 and longcandle[1] and high>high[1] and shadowtop>3*abody and shadowbottom<shadowtop/3) if GravestoneDojiTop then Bear = 1 endif DojiStarTop=(body[1]>0 AND longcandle[1] AND high>high[1] AND open>close[1] AND ratio<0.3 AND range<0.3*range[1]) if DojiStarTop then Bear = 1 endif BearishHaramiCross=(body[1]>0 and longcandle[1] and bodybottom>bodybottom[1] and bodytop<bodytop[1] and ratio<0.3 and range<0.3*range[1]) if BearishHaramiCross then Bear = 1 endif AdvanceBlock=(body[2]>0 and body[1]>0 and body>0 and high[2]<high[1] and high[1]<high and open[1]>bodybottom[2] and open[1]<bodytop[2] and open>bodybottom[1] and open<bodytop[1] and abody[1]<abody[2] and abody<abody[1]) if AdvanceBlock then Bear = 1 endif TwoCrows=(body[2]>0 and body[1]<0 and body<0 and longcandle[2] and open[1]>close[2] and close[1]>close[2] and open<bodytop[1] and open>bodybottom[1] and close<bodytop[2] and close>bodybottom[2]) if TwoCrows then Bear = 1 endif BearishBreakaway=(body[4]>0 and body[3]>0 and body<0 and open[3]>close[4] and close[2]>close[3] and close[1]>close[2] and longcandle and close>close[4] and close<open[3]) if BearishBreakaway then Bear = 1 endif ShootingStar=(body[1]>0 and longcandle[1] and high>high[1] and shadowtop>2*abody and shadowbottom<0.3*abody) if ShootingStar then Bear = 1 endif HangingMan=(body[1]>0 and longcandle[1] and high>high[1] and shadowbottom>2*abody and shadowtop<0.3*abody) if HangingMan then Bear = 1 endif FallingThreeMethods=(body[4]<0 and body[3]>0 and body[1]>0 and body<0 and longcandle[4] and longcandle and close[2]>close[3] and close[1]>close[2] and low[2]>low[3] and low[1]>low[2] and high[1]<high[4] and open<close[1] and close<low[4] and close<low[3] and close<low[2] and close<low[1]) if FallingThreeMethods then Bear = 1 endif BearishThreeLineStrike=(body[3]<0 and body[2]<0 and body[1]<0 and body>0 and longcandle[3] and longcandle[2] and longcandle[1] and close[2]<close[3] and close[1]<close[2] and open<close[1] and close>open[3]) if BearishThreeLineStrike then Bear = 1 endif BearishMatHold=(body[4]<0 and body[3]>0 and body[1]>0 and body<0 and longcandle[4] and close[3]<close[4] and close[2]>close[3] and close[1]>close[2] and low[2]>low[3] and low[1]>low[2] and high[1]<high[4] and open<close[1] and close<low[4] and close<low[3] and close<low[2] and close<low[1]) if BearishMatHold then Bear = 1 endif BearSash=(body[1]>0 AND longcandle[1] AND body<0 AND longcandle AND open>open[1] AND open<close[1] AND close<open[1] AND shadowbottom<0.1*abody) if BearSash then Bear = 1 endif BearSeparatingLine=(body[1]>0 AND longcandle[1] AND body<0 AND longcandle AND open<=open[1] AND shadowbottom<0.1*abody) if BearSeparatingLine then Bear = 1 endif BearishCounterAttack=(body[1]>0 AND longcandle[1] AND body<0 AND longcandle AND close>=close[1]) if BearishCounterAttack then Bear = 1 endif BearishKicking=(body[1]>0 AND longcandle[1] AND body<0 AND longcandle AND open<=open[1] AND shadowtop=0 AND shadowbottom=0) if BearishKicking then Bear = 1 endif //Entry/Exit Criteria possize = 1 NearMA = Average[7,2](close) If countofposition = 0 and Bull = 1 and NearMA[1] > NearMA[3] and RSI[2](close) > 75 and NearMA > Average[150,2](close) Then //If shortonmarket Then //Exitshort at market //EndIf Buy possize contract at market EndIf If countofposition = 0 and Bear = 1 and NearMA[1] < NearMA[3] and RSI[2](close) < 25 and NearMA < Average[150,2](close) Then //If longonmarket Then //Sell at market //EndIf //Sellshort possize contract at market EndIf Set Target pProfit tp //change according to own profile Set Stop pLoss sl //change according to own profile //EOF #####################################################
Run now a single run (no WFA) beginning 6 weeks back from today. Then receive the parameters you should use for the next 2 weeks. Then you have to re optimize. This is how you should do it if you want to trade it.
But well, the result crashes in the last period. So this doesn’t look very encouraging.
Still monitoring…
I publish the results I get for others here. Just as an FYI.
I’m running these on Live account.
What just puzzeled me from the WFA analysis is the results with the lowest % score showed the highest return. Interesting ….
The score is always relative to the profit during respective insample period. So there is nothing strange about it.
Makes sense. Thank you.
is there a possibility to program something like weekperformance or dayperformance?
example: if performance of week is bigger than x euro than no trade in the week anymore
I hope you guys know what I mean. Thanks!
Yes, this is possible but I don’t think it will improve the results significantly. I think such daily or weekly goals or max DD are more used in manual trading to avoid overtrading.
Applying such a tactic on an automated strategy will introduce a random element in the results. To get a static of a system to see if it is good or bad it is important that the system takes all trade signals generated by the system. If you select from the generated results arbitrarily you will get a distorted test result.
ok, thanks for the answer. I understand you. could you give me the code anyway? I would just like to know how to program it…
1 Min Trading Strategy
This topic contains 219 replies,
has 29 voices, and was last updated by Leo
8 years, 2 months ago.
| Forum: | ProOrder: Automated Strategies & Backtesting |
| Language: | English |
| Started: | 07/13/2017 |
| Status: | Active |
| Attachments: | 65 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.