Problème 1 achat par jour avec TF
Forums › ProRealTime forum Français › Support ProOrder › Problème 1 achat par jour avec TF
- This topic has 9 replies, 2 voices, and was last updated 4 years ago by imencity.
-
-
08/30/2020 at 5:44 PM #142981
Bonjour,
Je reprends ma question d’ici:
https://www.prorealcode.com/topic/probleme-de-condition-avec-le-symbole-different/
Puisque j’ai identifié la cause et qui m’amène à une autre question…… et c’est encore un TF.
Voici un code d’exemple:
123456789101112131415161718192021defparam cumulateorders=falsetimeAchat = TIME > 090000 AND TIME < 171500indicator1 = Average[7](close)indicator2 = Average[15](close)ONCE iteration = 1iterationMax = 1if day<>day[1] OR intradaybarindex= 0 then //2 précautions !iteration = 1 //resetendifCA1 = indicator1 CROSSES UNDER indicator2IF timeAchat AND NOT ONMARKET AND CA1 AND iteration <= iterationMax THENiteration = iteration + 1SELLSHORT 1 LOT AT MARKETset target Pprofit 4set stop ploss 2ENDIFSur DAX en 10 secondes. On a bien une transaction par jour.
Voici le même code avec TF M1:
12345678910111213141516171819202122defparam cumulateorders=falseTIMEFRAME(1 minute)timeAchat = TIME > 090000 AND TIME < 171500indicator1 = Average[7](close)indicator2 = Average[15](close)ONCE iteration = 1iterationMax = 1if day<>day[1] OR intradaybarindex= 0 then //2 précautions !iteration = 1 //resetendifCA1 = indicator1 CROSSES UNDER indicator2IF timeAchat AND NOT ONMARKET AND CA1 AND iteration <= iterationMax THENiteration = iteration + 1SELLSHORT 1 LOT AT MARKETset target Pprofit 4set stop ploss 2ENDIFPourquoi as-t-on parfois plus de 10 transactions ?
D’ailleurs sur le code sans TF qui fonctionne, je note un bug car le système indique 2,11 ordres par jours: mais il n’y en a QUE 2.
D’où sort le “,11” ?Merci de vos réponses. J’ai vraiment du mal avec le TF… on dirait qu’il remet le ONCE à zéro à chaque itération…
08/31/2020 at 8:02 AM #143024Pour le deuxième code, tu le lances dans quel TF ? Si tu veux qu’il fonctionne en TF 1-minute, et que le code ne comporte qu’une seule instruction TIMEFRAME, il est inutile de la déclarer. Il suffit simplement de lancer la stratégie dans le TF désiré qu’on choisit dans la liste déroulante des UT du graphique.
08/31/2020 at 9:04 AM #143027Oui il ne comporte pour l’instant qu’une instruction. C’est un TF M1 lancé sur du 10 sec.
évidemment je pourrais enlever le TF mais ce n’est pas la réponse… normalement je ne devrais pas avoir d’autres résultats que le même sans TF. C’est là le problème.
et je n’aborde pas le fait que les achats ventes sont totalement différentes dans d’autres test avec le meme type de tests 😉
09/01/2020 at 5:18 PM #14314309/02/2020 at 9:16 AM #143181J’ai un peu de mal à suivre désolé .. 🙂
J’essai de comprendre pourquoi le comportement est différent, la variable “iteration” ne devrait pas se reset à 1 dés qu’un ordre est passé (voir image jointe), je vais me renseigner.
Par ailleurs cette version du code fonctionne: (utilisation de timeframe(default)) :
version OK123456789101112131415161718192021222324252627defparam cumulateorders=falsedefparam preloadbars=0TIMEFRAME(1 minute)timeAchat = TIME > 090000 AND TIME < 171500indicator1 = Average[7](close)indicator2 = Average[15](close)//ONCE iteration = 1iterationMax = 1CA1 = indicator1 CROSSES UNDER indicator2timeframe(default)if day<>day[1] OR intradaybarindex= 0 then //2 précautions !iteration = 1 //resetendifIF timeAchat AND NOT ONMARKET AND CA1 AND iteration <= iterationMax THENiteration = iteration + 1SELLSHORT 1 LOT AT MARKETset target Pprofit 4set stop ploss 2ENDIFgraph iterationgraph day<>day[1] OR intradaybarindex= 0 coloured(255,0,0)version INCORRECTE1234567891011121314151617181920212223242526defparam cumulateorders=falsedefparam preloadbars=0TIMEFRAME(1 minute)timeAchat = TIME > 090000 AND TIME < 171500indicator1 = Average[7](close)indicator2 = Average[15](close)//ONCE iteration = 1iterationMax = 1CA1 = indicator1 CROSSES UNDER indicator2if day<>day[1] OR intradaybarindex= 0 then //2 précautions !iteration = 1 //resetendifIF timeAchat AND NOT ONMARKET AND CA1 AND iteration <= iterationMax THENiteration = iteration + 1SELLSHORT 1 LOT AT MARKETset target Pprofit 4set stop ploss 2ENDIFgraph iteration//graph day<>day[1] OR intradaybarindex= 0 coloured(255,0,0)09/02/2020 at 10:55 AM #143197Merci Nicolas,
oui je me doute que c’est bizarre et sur le multi TF je te raconte pas les écarts que j’ai pu observer.
ca fait un moment que je tourne en rond sans avoir identifié le bug mais avec ce code très simple, on s’en rend mieux compte.
j’attends ton retour.
09/04/2020 at 8:42 AM #143346Non, en fait ça n’est pas un bug, mais le fonctionnement normal d’une variable dans PRT. J’aurai du identifier cela dés le début ^^ 🙄
En effet, sur la bougie courante, les valeurs de variable ne sont pas historisées. Ici, les valeurs calculées dans la bougie M1 ne seront pas fixées tant que la bougie n’est pas clôturée, donc ta variable “iteration” ne s’incrémentera qu’une seule fois à la lecture du code (à la fin de la bougie du TF sur lequel tu as lancé le programme), puis se resettera.
Il faut bien intégrer que : à chaque tick reçu, dans la bougie courante, les variables sont réinitialisées.
Donc avec un code TF M1 et TF 10sec ; les variables dans le TF M1 (sans updateonclose), sont réinitialisées 6 fois (6 x 10 = 60 sec = 1 minute).
Il y a 2 solutions:
- les calculs sont faits dans le TF default (comme dans la version “correct” que j’ai posté dans le précédent message)
- soit tu utilises des variables de type array, puisque celles-ci ne sont pas ré-initialiser dans la barre courante
09/04/2020 at 8:59 AM #143347Alors, honnêtement, je crois que je vrai prendre un dafalgan pour la tête 😉
non pas que ton explication ne soit pas compréhensible, mais c’est tellement bourré (j’ai l’impression) de subtilité que pour un néophyte comme moi, c’est ces concepts sont difficiles à appréhender.
J’ai bien remarqué une réinitialisation des variables puisqu’à chaque fois que iteration passait à 1, à la bougie suivante ça repassait à zéro.
Ce qui pourrait être utile (mais ça existe peut-être déjà), c’est un post explicatif en deux parties par ex:
– Ce qui est exécuté pendant la création d’une bougie c-a-d entre le open et le close (lecture du close en cours, opération mathématique à chaque tick…)
– Ce qui est exécuté à l’open de la bougie suivante (les achats, les ventes, donc les mises à jours des variables…)Et pour finir donc quand tu dis: “chaque tick reçu, dans la bougie courante, les variables sont réinitialisées.” ça veut dire que le ONCE est exécuté à chaque fois ?
09/04/2020 at 9:17 AM #143349Un bête exemple avec un indicateur :
123456if close > last thencount=count+1last = closeendifreturn countSi le prix en cours est supérieur au dernier prix enregistré dans la variable “last” alors on incrémente “count”. En live, si tu observes la bougie courante, tu verras que “count” ne s’incrémente pas. Puisque à chaque fois que le code est lu dans la bougie, tout est remis à zéro et c’est ce qui se passe exactement de la même façon dans ta stratégie.
09/04/2020 at 9:23 AM #143351 -
AuthorPosts
Find exclusive trading pro-tools on