Codage du prix courant, croisement en temps réel et pas à fin de bougie
Forums › ProRealTime forum Français › Support ProBuilder › Codage du prix courant, croisement en temps réel et pas à fin de bougie
- This topic has 12 replies, 4 voices, and was last updated 7 months ago by pingpong.
-
-
08/29/2020 at 2:38 PM #142916
Bonjour,
je souhaiterais coder un contact du prix COURANT d’une bougie avec une moyenne mobile. Pas le prix d’ouverture ou de clôture d’une bougie mais le prix courant. C’est à dire que dès que le prix touche la moyenne mobile la condition est remplie. Ceci est pour jouer les rebonds.
Ca paraît simple, mais je n’ai trouvé nulle part….
En gros, comment remplacer “close” dans la formule suivante pour avoir le prix courant d’une bougie et non pas son prix de clôture : close crosses under Average[3](low)
Merci pour votre support
08/30/2020 at 11:43 AM #142961Close est bien le prix courant tant que la bougie n’est pas clôturé. Cependant, comme le code est lu à chaque fin de bougie, c’est en effet le prix de clôture de la bougie et pas le prix durant la bougie. Pour lancer un order sur un seuil de prix durant une bougie, tu peux utiliser un autre conditionnel, dans ce cas, si tu vendre à découvert au croisement d’une moyenne mobile (et que le prix est au dessus), tu fais :
1sellshort 1 contract at average[3](low) STOP08/30/2020 at 2:49 PM #142975Merci pour l’astuce Nicolas.
par contre je n’arrive pas à l’insérer dans une série de conditions, voila mon code d’origine dans lequel je voulais remplacer “close” par le prix courant.
123IF NOT LongOnMarket AND c1 and c2 and c3 and c4 and c5 and c6 and close crosses under Average[3](low)THENBUY 1 CONTRACTS AT MARKETENDIFEst-ce possible?
Merci à vous
08/31/2020 at 7:51 AM #143018Dans ce genre de cas, il vaudrait mieux utiliser 2 timeframes différents, celui de la stratégie et un plus petit pour prendre les ordres dés que le prix courant (donc à l’intérieure du chandelier croise ta moyenne mobile).
Soit :
1234567timeframe(5 minutes) //change ici le timeframe de la stratégie, je ne le connais pas !test = c1 and c2 and c3 and c4 and c5 and c6 and close crosses under Average[3](low)timeframe(default)IF test THENBUY 1 CONTRACTS AT MARKETENDIFgrâce à “timeframe(default)”, si tu lances la stratégie en UT 1 seconde, ce qui se passe dans l’UT 5-minutes sera testé toutes les secondes et tu pourras alors prendre un ordre dés que le prix actuel croise cette moyenne mobile.
08/31/2020 at 8:47 PM #14309707/26/2023 at 1:39 PM #218168Bonjour,
J’ai le même problème que Dragon.
J’utilise le graphe principale en 5minutes pour visualier le cour en live ou j’ai toute ma stratégie et toutes les variables rattachées, mais je souhaiterai pouvoir passer des ordres en 1 minute, sauf que dans le 1 minute il utilise des variables qui sont aussi dans le 5 mn (ce sont les conditions d’achats et de ventes). Comme on ne peut pas passer des variables d’un timeframe à un autre comme dans les autres types de programmations, comment fait on ?
Faut il déclarer toutes les variables en commun au début du programme ? Y t’il une astuce pour faire cela ?
Si quelqu’un à une idée la dessus ?
En vous remerciant.
07/27/2023 at 9:56 AM #218199On peut utiliser des variables entre les différents timeframes, mais pas leur affecter des valeurs, sinon en fonction de l’update des temporalités différentes, cela deviendrait un casse tête de savoir quelle valeur a été affecté et quand.
Si les conditions sont réunis en UT 5-minutes, on les teste en UT 1-minute et on prend action, comme dans mon dernier exemple: https://www.prorealcode.com/topic/codage-du-prix-courant/#post-143018
Si tu veux que j’intervienne dans ton code, poste le ici et je ferai le nécessaire, merci.
07/27/2023 at 7:00 PM #218228Bonjour Nicolas, est-ce que sur le 5 minutes le système attent que la bougie cloture pour que le code soit lu et executé à l’open de la bougie suivante ?
Car si c’est le cas, on ne peut donc pas envoyer un ordre au marché en quelques secondes à l’intérieur de la bougie 5 minutes.
J’ai une condition en timeframe 5 minutes avec donc tout mon programme en timeframe 5mn y compris toutes les variables à l’intérieur et le mon code.
En fin de programme, avant le return, j’ai mon timeframe 1mn dans lequel je test la variable et si elle est ok il lance un ordre au marché.
Déjà, j’avais fait ce code et je l’ai lancé, mais il y avait un problème de multiple de timeframe. J’ai donc mis ‘default’ à la place de 1mn et j’ai ouvert le graphique en 1mn déjà pour voir ce qui se passe. Ben ca ne le fait pas.
Tu dis dans l’exemple, le timeframe 1 mn vérifie toutes les minutes si la condition dans le 5mn est réalisée, ok mais si pour savoir si la condition se réalise dans le 5mn il faut attendre la fin de sa bougie 5mn , ce n’est pas jouable.
C’est cela que je n’arrive pas à saisir, le déroulement d’une opération entre deux timeframe ou l’un se sert de l’autre pour passer des ordres et en fonction des bougies en cours dans les 2 unités de temps.
Merci
07/28/2023 at 11:48 AM #218265Tu dis dans l’exemple, le timeframe 1 mn vérifie toutes les minutes si la condition dans le 5mn est réalisée, ok mais si pour savoir si la condition se réalise dans le 5mn il faut attendre la fin de sa bougie 5mn , ce n’est pas jouable.
Pas d’inquiétude 🙂
Voici 2 exemples qui vont te permettre de bien comprendre comment il est possible de trader à l’intérieur d’une bougie :
Exemple #1: à chaque bougie qui se termine du timeframe ‘default’ (soit le timeframe sur lequel tu vas lancer la stratégie), on teste les conditions de la variable “test” du timeframe 5-minutes à l’instant T (et donc sans attendre sa clôture).
1234567timeframe(5 minutes)test = close crosses under Average[3](low)timeframe(default)IF test THENBUY 1 CONTRACTS AT MARKETENDIFExemple #2: à chaque bougie qui se termine du timeframe ‘default’ (soit le timeframe sur lequel tu vas lancer la stratégie), on teste les conditions de la variable “test” du timeframe 5-minutes de la dernière bougie clôturée (soit la précédente), grâce à l’ajout de l’option “updateonclose”.
1234567timeframe(5 minutes, UPDATEONCLOSE)test = close crosses under Average[3](low)timeframe(default)IF test THENBUY 1 CONTRACTS AT MARKETENDIFAvec l’exemple #1, tu pourras très bien lancer la stratégie sur un timeframe 1-seconde et donc tester 5 * 60 = 300 fois les conditions du timeframe 5-minutes avant qu’il se termine.
J’espère que c’est plus clair pour toi désormais. Merci.07/29/2023 at 9:54 PM #218298C’est plus clair pour moi. Merci beaucoup pour ta contribution. Bonne journée.
04/08/2024 at 10:42 PM #231268Bonsoir Nicolas et à vous tous,
je galère pas mal pour essayer de mettre en place la fonction timeframe dans mes stratégies.
Merci déjà pour vos explications sur la fonction timeframe
Dans les stratégies en 1mm sur l’euro/dollar, je suis pris à contre-pied assez souvent, lors décalages violents provoqués par exemple, par les annonces de la Fed et/ou de la BCE. Pour résoudre ce problème, je souhaite intervenir sur la bougie 1mn en cours en ajoutant à la vente une condition supplémentaire c7 et c17) qui serait scrutée à chaque seconde.
pour illustrer ma demande, ci-dessous une stratégie simple
123456789101112131415161718192021222324252627ma1 = Average[a1](close)ma2 = Average[a2](close)RSI1=RSI[r1](close)// Conditions pour ouvrir une position acheteusec1 = ma1 crosses over ma2IF Not longonmarket and c1 THENBUY 1 SHARES AT MARKETENDIF// Conditions pour fermer une position acheteusec5 = (RSI1>(50+la1))c6 = (RSI1<(50-la1))c7 = (close[1]-close)>xx1IF longonmarket and (c5 or c6 or c7) THENSELL AT MARKETENDIF//Conditions pour ouvrir une position vendeusec10 = ma1 crosses under ma2IF Not shortonmarket and c10 THENSELLSHORT 1 SHARES AT MARKETENDIF//Conditions pour fermer une position vendeusec15 = (RSI1>(50+la1))c16 = (RSI1<(50-la1))c17 = (close[1]-close)<-xx1IF shortonmarket and (c15 or c16 or c17) THENEXITSHORT AT MARKETENDIFEn 1 minute, les conditions c5, c6 et c15, c16 avec timeframe(1 minute)
En 1 seconde, les conditions c7 et c17 avec timeframe(default)
Pourriez-vous m’aider à insérer ces 2 fonctions sur le programme ci-dessus pour que pendant la bougie active d’1mn, l’on puisse sortir du marché en cas de retournement violent.
Merci
04/09/2024 at 4:59 PM #231320Si j’ai bien compris l’idée, voici ton code modifié:
12345678910111213141516171819202122232425262728293031323334353637383940//En 1 minute, les conditions c5, c6 et c15, c16 avec timeframe(1 minute)timeframe(1 minutes, updateonclose)ma1 = Average[a1](close)ma2 = Average[a2](close)RSI1=RSI[r1](close)c5 = (RSI1>(50+la1))c6 = (RSI1<(50-la1))c15 = (RSI1>(50+la1))c16 = (RSI1<(50-la1))c1 = ma1 crosses over ma2c10 = ma1 crosses under ma2//En 1 seconde, les conditions c7 et c17//les conditions ci-dessous seront vérifiées toutes les secondes//avec les données courantes du timeframe 1-minutetimeframe(1 minute)c7 = (close[1]-close)>xx1c17 = (close[1]-close)<-xx1timeframe(default)// Conditions pour ouvrir une position acheteuseIF Not longonmarket and c1 THENBUY 1 SHARES AT MARKETENDIF// Conditions pour fermer une position acheteuseIF longonmarket and (c5 or c6 or c7) THENSELL AT MARKETENDIF//Conditions pour ouvrir une position vendeuseIF Not shortonmarket and c10 THENSELLSHORT 1 SHARES AT MARKETENDIF//Conditions pour fermer une position vendeuseIF shortonmarket and (c15 or c16 or c17) THENEXITSHORT AT MARKETENDIF04/10/2024 at 6:42 PM #231370Bonsoir Nicolas
Tout d’abord, un grand merci pour ton retour. Tu as bien compris mon sujet.. Ton codage est clair et j’ai l’impression de le comprendre. Cependant, j’ai toujours un problème pour l’exécution. Je dois avoir encore un problème de raisonnement.
Je m’explique :
stratégie EURO/DOLLAR en 1mn
1234567891011121314151617181920212223242526272829303132333435363738394041424344xx1=1a1=700a2=800r1=100la1=20timeframe(1 minutes, updateonclose)ma1 = Average[a1](close)ma2 = Average[a2](close)RSI1=RSI[r1](close)c5 = (RSI1>(50+la1))c6 = (RSI1<(50-la1))c15 = (RSI1>(50+la1))c16 = (RSI1<(50-la1))c1 = ma1 crosses over ma2c10 = ma1 crosses under ma2//En 1 seconde, les conditions c7 et c17//les conditions ci-dessous seront vérifiées toutes les secondes//avec les données courantes du timeframe 1-minutetimeframe(1 minute)c7 = (close[1]-close)>xx1c17 = (close[1]-close)<-xx1timeframe(default)// Conditions pour ouvrir une position acheteuseIF Not longonmarket and c1 THENBUY 1 SHARES AT MARKETENDIF// Conditions pour fermer une position acheteuseIF longonmarket and (c5 or c6 or c7) THENSELL AT MARKETENDIF//Conditions pour ouvrir une position vendeuseIF Not shortonmarket and c10 THENSELLSHORT 1 SHARES AT MARKETENDIF//Conditions pour fermer une position vendeuseIF shortonmarket and (c15 or c16 or c17) THENEXITSHORT AT MARKETENDIFj’exécute le programme en unité 1mn pour définir les différentes valeurs (a1, a2, r1, la1) sauf xx1 que je met à “1” ce qui a pour effet de rendre inopérant les conditions c7 et c17; Si je comprends bien l’idée, dans ce cas, la commande “timeframe(default)”, prendra l’unité “1mn” et n’interféra pas sur le résultat. J’ai d’ailleurs les mêmes résultats avec le programme sans les commandes “timeframe”. Jusqu’ici tout va bien.
J’exécute ensuite le programme en unité “1 seconde” (unité dans laquelle nous devons tester la stratégie si j’ai bien compris) en laissant xx1 à “1” dans un 1er temps, ce qui a pour effet de rendre inopérant les conditions c7 et c17 et je devrais donc obtenir, les mêmes performances que précédemment dans le temps “1mn” ce qui n’est pas du tout le cas. Pourquoi?
Si tu peux éclairer ma lanterne sur ce mystère? Merci à toi
-
AuthorPosts
Find exclusive trading pro-tools on