Aide pour création code Proorder avec RSI
Forums › ProRealTime forum Français › Support ProOrder › Aide pour création code Proorder avec RSI
- This topic has 9 replies, 4 voices, and was last updated 2 years ago by JC_Bywan.
-
-
01/28/2022 at 11:18 AM #186821
Bonjour,
Je poste ce message pour avoir de l’aide sur la creation d’un code sur une stratégie assez simple avec indicateur RSI 14, dont voici les caractéristiques :
Stratégie uniquement basé sur ACHAT de 5 mini lot FRANCE 40 lorsque RSI <30 à la fin de la bougie (achat sur ouverture bougie suivante).
Si cours diminue de 40 points, alors achat de 5 lots supplémentaire
Si cours diminue de 80 points, alors achat de 5 lots supplémentaire
Si cours diminue de 120 points, alors achat de 5 lots supplémentaire.Si cours diminue de 160 points, alors fermeture des 3 positions en perte.
Limite = RSI croise 70 immédiatement
Merci pour votre aide.
Bonne journée.
02/01/2022 at 9:47 AM #187207Bonjour,
à tester, avec beaucoup de méfiance, pas seulement en cas de mauvaise interprétation de ma part, ou d’erreur de codage, mais aussi parce que ce genre de système “semble” rapporter sur certaines phases favorables, mais cause des pertes conséquentes sur phases défavorables qui peuvent aller jusqu’à vider un compte. Il n’est pas dit que le bilan sera toujours positif. Pour se faire une idée du bilan global, et ne pas vider le compte “avant” qu’éventuellement ça rapporte (et si ça rapporte), la prudence impose de beaucoup backtester sur toutes sortes d’UT et de phases de marché.
Un léger doute lié à 4 entrées (une en ouverture de bougie quand RSI passe sous 30 + les 3 renforts) contre mention de coupure de “3 ^psitions en perte”, dans le doute j’ai codé pour sortir les 4 (annotée “A” ligne 43) et ajouté en commentaires les lignes 45 à 48 qui correspondent à en couper seulement 3 (“B”).
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263defparam CUMULATEORDERS=true//achat0=5//chute1=40achat1=5//chute2=80achat2=5//chute3=120achat3=5//chutestop=160//indi=RSI[14](close)//if indi crosses under 30 and startlevel=0 thenstartlevel=closeIF NOT LongOnMarket THENBUY achat0 CONTRACTS AT MARKETENDIFendifif startlevel<>0 thenlevel1=startlevel-chute1*pipsizelevel2=startlevel-chute2*pipsizelevel3=startlevel-chute3*pipsizestoplevel=startlevel-chutestop*pipsizeif onmarket and countofposition<=achat0 thenBUY achat1 CONTRACTS AT level1 limitBUY achat2 CONTRACTS AT level2 limitBUY achat3 CONTRACTS AT level3 limitelsif onmarket and countofposition<=achat0+achat1 thenBUY achat2 CONTRACTS AT level2 limitBUY achat3 CONTRACTS AT level3 limitelsif onmarket and countofposition<=achat0+achat1+achat2 thenBUY achat3 CONTRACTS AT level3 limitendif//Choisir si stop sur 4 positions, ou 3 sur 4SELL AT stoplevel STOP // A - 4 positions coupées//trois=achat1+achat2+achat3// B - 3 dernières sur 4 positions coupées//if countofposition>=trois then// B - 3 dernières sur 4 positions coupées//SELL trois CONTRACTS AT stoplevel STOP// B - 3 dernières sur 4 positions coupées//endif// B - 3 dernières sur 4 positions coupéesendifIF indi crosses under 30 and startlevel=0 THENBUY achat0 CONTRACTS AT MARKETENDIFIf LongOnMarket AND indi crosses over 70 THENSELL AT MARKETENDIFif indi crosses over 70 or close<startlevel-chutestop*pipsize thenstartlevel=0endif1 user thanked author for this post.
02/01/2022 at 3:41 PM #187242Je vous remercie beaucoup pour votre aide et votre temps pour ce code.
Je sais qu’il doit être optimisé avant de le mettre en réel, mais je voudrai tester plusieurs paramètres avant.
J’ai une erreur sur la ligne 3 apparemment lorsque je lance le backtest, et je constate qu’il n’ouvre pas une 2eme, ni 3eme position si le cours tombe de 40 points.
Ou est l’erreur?
Pour info il y a max 3 positions ouvertes et fermetures sur -160 points.
02/01/2022 at 11:01 PM #187287Là je suis perdu 2 fois, la première parce que ça ne me renvoie pas d’erreur en ligne 3, et la 2e parce qu’autant j’avais un doute sur s’il fallait en fermer 3 ou 4 sur les 4, autant je n’ai pas compris du tout qu’il n’y en a que 3 en tout. J’essaye de relire le post de départ en ce sens, mais j’en compte une (de 5) dès que rsi passe sous 30, puis si chute de 40 la requête parle de 5 supplémentaires (donc le mot supplémentaire qui confirme qu’on en est à une 2ème de 5), puis encore 2 autres fois 5 supplémentaires, j’en suis à 4. S’il n’y en a que 3, et en supposant que celle de trop n’est pas celle de 40 de chute ni celle de 80, faut-il supprimer la première dès que RSI<30 ou la quatrième quand chute de 120? Quelque chose me dit que c’est probablement la première quand rsi passe sous 30 avant chute de 40 points qui n’en est pas une et que c’est le mot “supplémentaire” qui est de trop sur la chute à 40 et l’a fait passer pour une 2ème au lieu d’une première, mais bon, je préfèrerais en être sûr avant de revoir le code…
02/02/2022 at 10:54 AM #187315Bonjour JC_Bywan,
Effectivement mon explication n’était pas très claire, je m’en excuse. J’ai revu mon texte, et je vous ai mis 3 exemples ci-dessous pour que ce soit plus clair:
Stratégie uniquement basé sur ACHAT de 5 mini lot FRANCE 40 lorsque RSI <30 à la fin de la bougie (achat sur ouverture bougie suivante).
1/ Achat 1 position 5 lots sur bougie suivante dès que RSI ferme en dessous de 30.
2/ Si cours diminue de 40 points, alors achat de 5 lots supplémentaire
3/ Si cours diminue de 80 points, alors achat de 5 lots supplémentaire
4/ Si cours diminue de 120 points, alors achat de 5 lots supplémentaire.
5/ Si cours diminue de 160 points : FERMETURE DE TOUTES LES POSITIONS EN PERTE
Fermeture de toutes les positions = RSI croise 70 immédiatement
Exemple 1:
Bougie X minutes ferme avec RSI < 30. Sur Bougie suivante ouverture position 5 unités (à 7160 points par exemple).
Si cours descend à 7120 points, alors ouverture 2ème position de 5 unités.
Si cours descend à 7080 points, alors ouverture 3ème position de 5 unités
Si cours descend à 7040 points, alors ouverture 4ème position de 5 unités
Si cours descend à 7000 points : FERMETURE EN PERTE DE TOUTES LE POSITIONS
Dans tous les cas, fermeture immédiate de 1 ou toutes les positions dès que RSI croise 70. (Et non à la fin de la bougie)
Exemple 2:
Bougie X minutes ferme avec RSI < 30.
Sur Bougie suivante ouverture position 5 unités (à 7160 points par exemple).
Si cours descend à 7120 points, alors ouverture 2ème position de 5 unités.
Si cours remonte et RSI croise 70 à 7250 points alors fermeture immédiate des postions 1 + 2 à 7250 points.
Exemple 3:
Bougie X minutes ferme avec RSI < 30.
Sur Bougie suivante ouverture position 5 unités (à 7160 points par exemple).
Si cours descend à 7120 points, alors ouverture 2ème position de 5 unités.
Si cours descend à 7080 points, alors ouverture 3ème position de 5 unités.
Si cours remonte RSI croise 70 à 7250 points alors fermeture immédiate des postions 1 + 2 + 3 à 7250 points.
02/07/2022 at 8:29 AM #187720Bonjour, sauf erreur que je ne vois pas (je veux bien un contre exemple graphique pour avoir une point de départ permettant de chercher l’erreur), le code proposé faisait toutes les ouvertures de position décrites, ainsi que le stop. La seule différence est la sortie, le code d’une stratégie automatique étant lu en fin de chaque bougie pour placer des ordres à éxécuter en ouverture de bougie suivante (hors éventuel slippage), le code envoie donc un ordre au marché en fin de bougie et non pas en cas de touchette 70 intra-bougie. On pourrait s’amuser à contourner la contrainte de fin de bougie en anticipant mathématiquement le niveau de cours nécessaire à un rsi à 70 et envoyer des pending orders en avance valable pendant une bougie à renouveler à chaque fois, mais ce serait beaucoup d’efforts pour pas grand chose car grande proba de se voir le pending order refusé par IG de toute façon à chaque fois que posé à moins de la distance minimale requise par IG, et donc rater la sortie.
Ci-joint exemple pour Dax 5 minutes où les 5 et 6 janvier on a consécutivement un exemple 1 à 4 positions fermées en perte et un exemple 2 à 2 positions fermées en gain.
Je remets le code avec les “graphonprice” rajoutés pour voir les niveaux et une modif de la ligne 61 à impact uniquement graphique (ne change pas le comportement des ordres par rapport au premier code):
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172defparam CUMULATEORDERS=true//achat0=5//chute1=40achat1=5//chute2=80achat2=5//chute3=120achat3=5//chutestop=160//indi=RSI[14](close)//if indi crosses under 30 and startlevel=0 thenstartlevel=closeIF NOT LongOnMarket THENBUY achat0 CONTRACTS AT MARKETENDIFendifif startlevel<>0 thenlevel1=startlevel-chute1*pipsizelevel2=startlevel-chute2*pipsizelevel3=startlevel-chute3*pipsizestoplevel=startlevel-chutestop*pipsizeif onmarket and countofposition<=achat0 thenBUY achat1 CONTRACTS AT level1 limitBUY achat2 CONTRACTS AT level2 limitBUY achat3 CONTRACTS AT level3 limitelsif onmarket and countofposition<=achat0+achat1 thenBUY achat2 CONTRACTS AT level2 limitBUY achat3 CONTRACTS AT level3 limitelsif onmarket and countofposition<=achat0+achat1+achat2 thenBUY achat3 CONTRACTS AT level3 limitendif//Choisir si stop sur 4 positions, ou 3 sur 4SELL AT stoplevel STOP // A - 4 positions coupées//trois=achat1+achat2+achat3// B - 3 dernières sur 4 positions coupées//if countofposition>=trois then// B - 3 dernières sur 4 positions coupées//SELL trois CONTRACTS AT stoplevel STOP// B - 3 dernières sur 4 positions coupées//endif// B - 3 dernières sur 4 positions coupéesendifIF indi crosses under 30 and startlevel=0 THENBUY achat0 CONTRACTS AT MARKETENDIFIf LongOnMarket AND indi crosses over 70 THENSELL AT MARKETENDIFif indi crosses over 70 or low<=startlevel-chutestop*pipsize thenstartlevel=0level1=0level2=0level3=0endifgraphonprice startlevel as "premier in"graphonprice level1 as "chute 40"graphonprice level2 as "chute 80"graphonprice level3 as "chute 120"graphonprice stoplevel as "chutestop"02/15/2022 at 4:36 PM #188304Bonjour JC,
Je ne suis pas revenu vers vous de suite car je voulais laisser tourner l’algo pour voir les résultats.
Merci encore pour le code, ça fonctionne très bien et conforme à mon besoin.
Cependant, l’algo a de moins bon résultats en phase de baisse. Pour cela je voudrai insérer un filtre dans le code qui empêche toutes ouvertures de positions en phase de baisse.
Est-il possible de rajouter au code un blocage (ou non ouverture de positions) quand le cours ferme en dessous de la Moyenne mobile 50 sur unité de temps 1 heure ? (et inversement redémarre dès que le cours clôture au dessus de la Moyenne mobile 50 1H )
Merci par avance.
02/18/2022 at 9:29 AM #188444En utilisant le dernier code fournit par Noobywan, voici la version avec le filtre de la moyenne mobile 50 sur l’unité de temps H1:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576defparam CUMULATEORDERS=truetimeframe(1 hour,updateonclose)filtre = close>average[50]timeframe(default)//achat0=5//chute1=40achat1=5//chute2=80achat2=5//chute3=120achat3=5//chutestop=160//indi=RSI[14](close)//if indi crosses under 30 and startlevel=0 and filtre thenstartlevel=closeIF NOT LongOnMarket THENBUY achat0 CONTRACTS AT MARKETENDIFendifif startlevel<>0 thenlevel1=startlevel-chute1*pipsizelevel2=startlevel-chute2*pipsizelevel3=startlevel-chute3*pipsizestoplevel=startlevel-chutestop*pipsizeif onmarket and countofposition<=achat0 thenBUY achat1 CONTRACTS AT level1 limitBUY achat2 CONTRACTS AT level2 limitBUY achat3 CONTRACTS AT level3 limitelsif onmarket and countofposition<=achat0+achat1 thenBUY achat2 CONTRACTS AT level2 limitBUY achat3 CONTRACTS AT level3 limitelsif onmarket and countofposition<=achat0+achat1+achat2 thenBUY achat3 CONTRACTS AT level3 limitendif//Choisir si stop sur 4 positions, ou 3 sur 4SELL AT stoplevel STOP // A - 4 positions coupées//trois=achat1+achat2+achat3// B - 3 dernières sur 4 positions coupées//if countofposition>=trois then// B - 3 dernières sur 4 positions coupées//SELL trois CONTRACTS AT stoplevel STOP// B - 3 dernières sur 4 positions coupées//endif// B - 3 dernières sur 4 positions coupéesendifIF indi crosses under 30 and startlevel=0 THENBUY achat0 CONTRACTS AT MARKETENDIFIf LongOnMarket AND indi crosses over 70 THENSELL AT MARKETENDIFif indi crosses over 70 or low<=startlevel-chutestop*pipsize thenstartlevel=0level1=0level2=0level3=0endifgraphonprice startlevel as "premier in"graphonprice level1 as "chute 40"graphonprice level2 as "chute 80"graphonprice level3 as "chute 120"graphonprice stoplevel as "chutestop"Non testé!
02/18/2022 at 1:08 PM #188465Bonjour Nicolas,
Je vous remercie pour votre aide. En revanche, avec la ligne “filtre <span class=”crayon-o”>=</span> <span class=”crayon-st”>close</span><span class=”crayon-o”>></span><span class=”crayon-r”>average</span><span class=”crayon-o”>[</span><span class=”crayon-cn”>50</span><span class=”crayon-o”>]” cela ferme toutes les positions dès que le cours croise/atteint la MM50.</span>
Mon souhait serait différent: Je voudrai que le système fonctionne (ouverture de positions) quand le cours est au dessus de MM50 H1, et inversement s’arrête (aucune ouverture de positions) lorsque le cours est en dessous de MM50 H1, et cela sans incidence sur la fermeture de positions.
Les positions se fermeront comme précédemment, lorsque le RSI touchera la zone 70.
Cela revient à un ON/OFF pour les ouvertures de positions en dessous de MM50 H1 et garde les positions ouvertes précédemment.
Merci par avance.
02/22/2022 at 4:35 PM #188668Bonjour, à tester:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374defparam CUMULATEORDERS=truetimeframe(1 hour,updateonclose)filtre = close>average[50]timeframe(default)//achat0=5//chute1=40achat1=5//chute2=80achat2=5//chute3=120achat3=5//chutestop=160//indi=RSI[14](close)//if indi crosses under 30 and startlevel=0 thenstartlevel=closeIF NOT LongOnMarket and filtre THENBUY achat0 CONTRACTS AT MARKETENDIFendifif startlevel<>0 thenlevel1=startlevel-chute1*pipsizelevel2=startlevel-chute2*pipsizelevel3=startlevel-chute3*pipsizestoplevel=startlevel-chutestop*pipsizeif filtre thenif longonmarket and countofposition<=achat0 thenBUY achat1 CONTRACTS AT level1 limitBUY achat2 CONTRACTS AT level2 limitBUY achat3 CONTRACTS AT level3 limitelsif longonmarket and countofposition<=achat0+achat1 thenBUY achat2 CONTRACTS AT level2 limitBUY achat3 CONTRACTS AT level3 limitelsif longonmarket and countofposition<=achat0+achat1+achat2 thenBUY achat3 CONTRACTS AT level3 limitendifendifif longonmarket thenSELL AT stoplevel STOPendifendifIf longOnMarket AND indi crosses over 70 THENSELL AT MARKETENDIFif indi crosses over 70 or low<=startlevel-chutestop*pipsize thenstartlevel=0level1=0level2=0level3=0endifgraphonprice startlevel as "premier in"graphonprice level1 as "chute 40"graphonprice level2 as "chute 80"graphonprice level3 as "chute 120"graphonprice stoplevel as "chutestop"//graph startlevel as "premier in"//graph level1 as "chute 40"//graph level2 as "chute 80"//graph level3 as "chute 120"//graph stoplevel as "chutestop" -
AuthorPosts
Find exclusive trading pro-tools on