Comptage de trades
Forums › ProRealTime forum Français › Support ProOrder › Comptage de trades
- This topic has 3 replies, 2 voices, and was last updated 3 years ago by Fralex.
-
-
11/17/2021 at 11:02 AM #181730
Bonjour à tous,
Je suis en phase de test avec une stratégie simplissime et je voulais mettre des compteurs d’ouverture de trades (dans un premier temps, compteur de trades totaux, puis des compteurs de trades par tranches horaires)
Sur Allemagne 40 1€ H5, backtest tick par tick du 02/08/2010 à maintenant.
Donchian DAX H5123456789101112131415161718192021222324252627282930313233343536373839404142434445//Allemagne 40 1€ H5defparam cumulateorders = falsedefparam preloadbars = 10000once compteur=0n=1 // Nombre de contratDonchianSupA = highest[5](high)graphonprice DonchianSupA as "DonchianSupA"c1 = close crosses over DonchianSupA[1]sl=21if c1 thenBUY n CONTRACTS AT marketCompteur=Compteur+1graph Compteur COLOURED(0,128,0) as "Compteur"SET STOP pLOSS slendifIF NOT ONMARKET THENnewSL=0 //reset the stoploss valueENDIFoffset=21//manage long positionsIF LONGONMARKET THEN//first moveIF newSL=0 THENnewSL = DonchianSupA[1]-offsetfirstmove=newslgraphonprice firstmove COLOURED(0,128,0)ENDIF//next moves (trailing stop)IF newSL>0 THENnewSL = max(newsl, DonchianSupA[1]-offset) // trailingstop ne peux pas reculertrailingstop=newslgraphonprice trailingstop COLOURED(255,0,0)ENDIFENDIF//stop order to exit the positionsIF newSL>0 THENSELL AT newSL STOPENDIFLe rapport détaillé donne un nombre de trades total de 1198
La variable Compteur devrait commencer à 1 et terminer à 1198, or le Compteur commence à 370 et termine à 1679 soit une différence de 1309
Ceci est observé pour Preloadbars = 10000
Si Preloadbars = 1000 le compteur démarre à 94 et termine à 1403 soit une différence de 1309
Je ne comprends pas 3 choses :
-pourquoi le compteur ne démarre pas à 1 ?
-Pourquoi le compteur est affecté par Preloadbars ?
-Pourquoi le compteur s’incrémente quelques fois alors qu’on est avec cumulateorders = false, donc pas de nouvelle position à prendre si on est onmarket ?
Cerise sur le gâteau, si je puis dire, en ajoutant not onmarket à la ligne 13 (if not onmarket and c1 then), le résultat change encore une fois (redondance entre not onmarket et cumulateorder=false) :
le compteur démarre à 94 et termine à 1293 soit une différence de 1199 (presque pareil que le total du rapport détaillé, soit 1198)
11/17/2021 at 11:51 AM #181735Bonjour,
1 – le preloadbars permet de s’assurer que suffisamment de barres non affichées soient lues avant, pour que tout ce qui nécessite une période (une moyenne mobile, un highest sur N bougies etc…) soit calculable dès la bougie 1 affichée mais qui sera en fait la bougie “nombre du preloadbars”
2 – le compteur défini dans ce code s’en retrouve affecté car le code est lu sur chacune des barres du preloadbar, donc il va s’incrémenter avant la 1ère bougie affichée
3 – le compteur s’incrémente malgré le cumulateorders=false car la lecture de la ligne 16 compteur=compteur+1 ne dépend que d’avoir c1 vrai en ligne 14, pas du buy fait ou pas fait en ligne 15
Pour retomber sur ses pattes avec le compteur, on peut déjà encadrer la ligne compteur=compteur+1 par un “if barindex>=10000 then…endif” ce qui devrait éviter de l’incrémenter pendant le preloadbars (le 10000 du if étant celui du preloadbars, il serait à modifier si on diminue le preloadbars), et avoir un début d’affichage à 0 et 1ère incrémentation à 1.
1 user thanked author for this post.
11/17/2021 at 12:06 PM #18173611/18/2021 at 2:13 PM #181790Bonjour,
J’ai modifié le pgm en paramétrant BARINDEX avec la valeur de PRELOADBARS et le résultat est parfait :
Le compteur des positions ouvertes est à 1200 (la dernière étant clôturée, le total des trades du rapport détaillé est aussi 1200, si la dernière ne l’avait pas été, le rapport détaillé aurait mis 1199 ; c’est ce que j’avais pu observer dans un précédent test).
En H5, les bougies s’ouvrent à 1h, 6h, 11h, 16h, 21h
La stratégie implique une prise de position à l’ouverture de ces bougies, la répartition des trades ouverts à l’ouverture de ces bougies est donc :
1h : 176
6h : 134
11h : 386
16h : 261
21h : 243 soit un total de 1200
Première constatation et ce n’est pas une surprise, 74% des trades sont pris sur les bougies 11h, 16h et 21h
Il ne reste plus qu’à déterminer à quel moment les trades sont clôturés ce qui revient à déterminer le nombre de trades clôturés au stoploss initial, ou au premier mouvement du trailingstop ou aux suivants. J’ai fait des essais en s’inspirant de ce qui est fait pour l’ouverture des trades, mais cela ne fonctionne pas car la fermeture des trades se fait n’importe quand sur la durée d’une bougie H5.
J’ai fait un essai en MTF M15, mais comme le TF de base est H5, M15 n’étant pas un multiple de H5 et le code ne s’exécute pas.
La solution serait peut-être de mettre la stratégie en TF de base M15 (pour pouvoir connaitre sur quelles bougies M15 les ventes se font) avec les conditions de prise de position, stoploss et trailingstop déterminés en H5……à voir………je continue mes essais………bien sûr, d’autres idées sont bienvenues.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778//Allemagne 40 1€ H5defparam cumulateorders = falsedefparam preloadbars = 1000Bars=1000 //preloadbars pour barindexonce compteur=0 //Compteur du nombre total de trades ouverts//Compteurs des trades ouverts par périodeonce ComptA01H=0 //01.00-06.00once ComptA06H=0 //06.00-11.00once ComptA11H=0 //11.00-16.00once ComptA16H=0 //16:00-21.00once CompAt21H=0 //21.00-01.00n=1 // Nombre de contratDonchianSupA = highest[5](high)graphonprice DonchianSupA as "DonchianSupA"c1 = close crosses over DonchianSupA[1]sl=21 // stoploss initialif not onmarket and c1 thenBUY n CONTRACTS AT marketIF barindex>=1000 thenCompteur=Compteur+1 // le résultat peut être supérieur d'une unité par rapport au rapport détaillé car le trade à été ouvert mais pas encore clôturégraph Compteur COLOURED(255,0,255) as "Compteur"endifif (time>=010000 and time<060000) and barindex>=Bars thenComptA01H=ComptA01H+1graph ComptA01H COLOURED(0,128,0) as "ComptA01H"endifif (time>=060000 and time<110000) and barindex>=Bars thenComptA06H=ComptA06H+1graph ComptA06H COLOURED(0,128,0) as "ComptA06H"endifif (time>=110000 and time<160000) and barindex>=Bars thenComptA11H=ComptA11H+1graph ComptA11H COLOURED(0,128,0) as "ComptA11H"endifif (time>=160000 and time<210000) and barindex>=Bars thenComptA16H=ComptA16H+1graph ComptA16H COLOURED(0,128,0) as "ComptA16H"endifif (time>=210000) and barindex>=Bars thenCompAt21H=CompAt21H+1graph CompAt21H COLOURED(0,128,0) as "CompAt21H"endifSET STOP pLOSS slendifIF NOT ONMARKET THENnewSL=0 //reset the stoploss valueENDIFoffset=21//manage long positionsIF LONGONMARKET THEN//first moveIF newSL=0 THENnewSL = DonchianSupA[1]-offsetfirstmove=newslgraphonprice firstmove COLOURED(0,128,0)ENDIF//next moves (trailing stop)IF newSL>0 THENnewSL = max(newsl, DonchianSupA[1]-offset) // trailingstop ne peux pas reculertrailingstop=newslgraphonprice trailingstop COLOURED(255,0,0)ENDIFENDIF//stop order to exit the positionsIF newSL>0 THENSELL AT newSL STOPENDIF -
AuthorPosts