FLATBEFORE et CROSSES OVER/UNDER
Forums › ProRealTime forum Français › Support ProOrder › FLATBEFORE et CROSSES OVER/UNDER
- This topic has 7 replies, 4 voices, and was last updated 4 years ago by JC_Bywan.
-
-
08/26/2020 at 6:13 PM #142637
Bonjour,
Navré si cette question a déjà été posé , j’ai pourtant fait l’effort de rechercher sur le forum et dans la documentation mais je ne trouve pas la réponse.
En codant une stratégie je me suis aperçu plusieurs fois que le système ouvre un trade à l’heure d’autorisation des trades si un signal “CROSSES” est apparu durant la plage d’interdiction des trades.
Plus concrètement j’interdis l’ouverture des trades après 22h00 et avant 8h45 (FLATAFTER et FLATBEFORE).
La condition d’ouverture d’un trade est que “a” CROSSES OVER “b”.
Si “a” a croisé à la hausse “b” à 7h00 (donc pendant la période flat) et qu’il ne recroise pas à la baisse, à 8h45 le trade est ouvert.
Est-ce normal ? J’utilise CROSSES OVER/UNDER en instantané, donc le trade doit s’ouvrir au début de la bougie suivante. Ça marche parfaitement durant la période de trade.
Mais j’ai l’impression que le CROSSES OVER est un “flag” qui n’est “annulé” que si il est CROSSES UNDER …
Avez vous constaté cela ? est ce un bug ? est ce normal ?
Au poire j’utiliserai une formule du genre “a[1]<b[1] AND a>b” mais le CROSSES OVER est quand même plus facile à la lecture du code.
D’avance merci,
Regis
09/24/2020 at 4:26 PM #145249En effet CROSSES OVER/UNDER est testé sur la barre courante et ne retourne pas “true” durant plusieurs périodes.
Par contre, si tu as enregistré sa valeur dans une autre variable et que celle-ci n’est pas remise à zéro, alors cette condition persiste, par exemple :
123if a crosses over b thentest = 1endifici tant que test n’est pas remis à zéro quelque part ailleurs dans le code, alors il restera à 1 (vrai) et donc pourra agir comme une condition pour ouvrir un ordre.
1 user thanked author for this post.
09/24/2020 at 5:23 PM #145264Merci Nicolas,
Dans mon cas, il n’y a pas d’utilisation de variable, je vais faire un programme spécifique pour mettre en exergue ce que je pense être un bug.
Il ne s’agissait pas d’une variable stockée, mais bien du test CROSS OVER/UNDER qui était valide dés que le FLATE BEFORE se “terminait” alors que le CROSS avait eu lieu durant la période “flat” et non à la bougie courante.
Bref … un exemple (code et graph) sera plus parlant ! Je m’y atèle dés que possible.
09/24/2020 at 9:13 PM #145280Bon je n’arrive pas à reproduire le cas de figure, et je n’ai pas conservé le code de l’époque … donc soit je n’avais vraiment pas les yeux en face des trous (fortement probable) soit c’est un bug qui ne se produit que dans certaines conditions (peu probable)
Voici le code utilisé pour tenter de le reproduire, on sait jamais si je retombe dessus je pourrais faire des tests :
123456789101112131415161718192021222324DEFPARAM CumulateOrders = FalseDEFPARAM PRELOADBARS = 3000DEFPARAM FLATBEFORE = 084500DEFPARAM FLATAFTER = 220000noEntryBeforeTime = 084500noEntryAfterTime = 220000daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0AuthorizedEntries = (time >= noEntryBeforeTime) AND (time < noEntryAfterTime) AND NOT (daysForbiddenEntry)iPetiteMM = Average[20](close)iGrandeMM = Average[200](close)IF AuthorizedEntries THENcSignalAchat = iPetiteMM CROSSES OVER iGrandeMMcSignalAchat = cSignalAchat AND NOT ONMARKETIF cSignaleAchat THENEXITSHORT AT MARKETBUY 1 CONTRACT AT MARKETSET STOP pTRAILING 20ENDIFENDIF09/24/2020 at 9:45 PM #145282Remplacez la ligne 9 par:
1ONCE xSignalAchat = 0Remplacez les lignes 15-16 par:
1234IF iPetiteMM CROSSES OVER iGrandeMM THENxSignalAchat = 1ENDIFcSignalAchat = xSignalAchat AND Not OnMarketCela devrait se comporter comme vous l’avez dit. xSignalAchat conserve sa valeur après le croisement, jusqu’à ce que vous le remettiez à zéro.
09/25/2020 at 7:50 AM #145298Le problème c’est que tu ne reset pas ta variable cSignalAchat lorsque tu es hors AuthorizedEntries, on le voit bien dans l’image que j’ai jointe à ce message.
Ta condition booléenne est testé uniquement si tes conditions horaires sont valables, hors si à la barre juste avant tu as testé vrai, et que tu ne peux plus la tester dés la barre d’après, cette condition restera active (puisque elle ne ne sera plus testé) et donc ça impactera ton backtest.
Pour tester des variables, il faut utiliser l’instruction GRAPH.
12graph AuthorizedEntries coloured(255,200,0)graph cSignalAchat11/05/2020 at 10:56 AM #149516Bonjour à tous,
Merci pour vos réponses, j’ai pris le temps de pouvoir de nouveau constaté ce problème, et j’ai réussi à le reproduire et à comprendre sa cause !
Le problème ne vient pas du CROSSES UNDER/OVER mais vient du fait que dans mon algorithme original (pas celui présenté dans ce fil de discussion) le calcul des indicateurs était dans le bloc de condition comme ceci :123456789101112131415161718192021222324DEFPARAM CumulateOrders = FalseDEFPARAM PRELOADBARS = 3000DEFPARAM FLATBEFORE = 084500DEFPARAM FLATAFTER = 220000noEntryBeforeTime = 084500noEntryAfterTime = 220000daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0AuthorizedEntries = (time >= noEntryBeforeTime) AND (time < noEntryAfterTime) AND NOT (daysForbiddenEntry)IF AuthorizedEntries THENiPetiteMM = Average[20](close)iGrandeMM = Average[200](close)cSignalAchat = iPetiteMM CROSSES OVER iGrandeMMcSignalAchat = cSignalAchat AND NOT ONMARKETIF cSignaleAchat THENEXITSHORT AT MARKETBUY 1 CONTRACT AT MARKETSET STOP pTRAILING 20ENDIFENDIFLorsque l’indicateur n’est pas calculé (car AuthorizedEntries = 0) il prend la valeur 0, ce qui lorsqu’il est calculé de nouveau, provoquait déclenchait logiquement les CROSSES UNDER/OVER.
Merci Nicolas, tu avais cerné le problème “à l’aveugle” et même si ce n’était pas exactement cela, c’était bien un problème de ce type.J’incluais le calcul de mes indicateurs dans mes blocs de conditions afin d’optimiser les temps de calcul, mais cela ne s’avère pas toujours pertinent… la preuve !
Désolé de “déterrer” ce post, il me semblait judicieux d’apporter la réponse finale si quelqu’un fait la recherche plus tard.
@+
Regis11/05/2020 at 11:01 AM #149518Merci d’avoir livré ta conclusion même longtemps après, les discussions des topics étant effectivement aussi lues via le moteur de recherche du site, c’est toujours utile sur la durée pour la communauté
1 user thanked author for this post.
-
AuthorPosts