Avoir un Stop Loss placé en fonction de l’ouverture d’une bougie

Forums ProRealTime forum Français Support ProOrder Avoir un Stop Loss placé en fonction de l’ouverture d’une bougie

Viewing 15 posts - 1 through 15 (of 16 total)
  • #140183

    Bonjour,

    J’ai actuellement un algorithme qui prend des positions de la manière suivante :

    Lorsque je fais un backtest, le prix d’ouverture d’une position correspond toujours parfaitement au prix d’ouverture de la bougie sur laquelle le système à ouvert une position, ce qui est complétement normal. Cependant en trading réel il arrive très souvent (notamment à cause du slippage) qu’il y ait une différence de quelques points entre le prix d’ouverture de la position et le prix d’ouverture de la bougie. Comme le Stop Loss et le Take Profit sont calculés en fonction du prix d’ouverture de la position, ils n’ont donc pas les mêmes niveaux en trading réel et en backtest, sauf dans le cas ou le prix d’ouverture de la position est égale au prix d’ouverture de la bougie.

    Pour pallier à ce problème et avoir toujours les mêmes niveaux de Stop Loss et de Take Profit en trading réel et en backtest, j’aimerais que le Stop Loss et le Takes Profit soient calculés en fonction du prix d’ouverture de la bougie et non pas du prix d’ouverture de la position.

    J’ai d’abord essayé de la manière suivante :

    Malheureusement ça ne fonctionne pas, les valeurs du Stop Loss et du Take profit ne sont pas bien calculés, comme ci le système n’arrivait pas à détecter la nouvelle position. J’ai utilisé GRAPH pour regarder les valeurs des différentes variables et elles ne sont pas bonnes, notamment TRADEPRICE qui ne se met pas à jour avec la nouvelle position.

    J’ai donc essayé autrement en essayant de laissant le temps au système de bien prendre en compte la nouvelle position :

    Les résultats sont bien meilleurs, sauf pour les positions qui s’ouvrent et se ferment sur une seule bougie (la première du coup). Vu le résultat, je suppose donc que les variables comme TRADEPRICE ne s’actualisent qu’a la fin de la première bougie et non pas au moment de l’ouverture de la position ce qui est bien dommage.

    Pour l’instant je me suis arrêté là, je pense peut être avoir recours au MULTI TIME FRAME, pour essayé de récupérer les bonnes variables (TRADEPRICE et les autres) sur des UT plus petites (1 seconde par exemple) mais je ne sais pas si c’est possible de faire ça, je n’ai encore jamais utilisé le MULTI TIME FRAME. Si cette solution fonctionne, c’est quand même une solution très compliquée pour un problème qui est très simple à la base, n’y aurait-il pas un autre moyen ?

    #140190

    TRADEPRICE ne sera renseigné avec la valeur prix d’ouverture de l’ordre qu’à la bougie suivante, puisque dans le code, juste après l’instruction BUY, on ne peut toujours pas savoir son prix d’ouverture puisque il faudra attendre l’ouverture (Open) de la bougie suivante.

    Donc il convient d’utiliser un TP/SL basé sur le Close actuel au moment de passer l’ordre et de le modifier si tu es au marché dés la bougie suivante (ON MARKET).

    1 user thanked author for this post.
    #140191

    Mais tu peux aussi en effet descendre en UT avec le MTF pour ta gestion des ordres pour modifier plus rapidement ton TP/SL.

    1 user thanked author for this post.
    #140202

    Donc il convient d’utiliser un TP/SL basé sur le Close actuel au moment de passer l’ordre et de le modifier si tu es au marché dés la bougie suivante (ON MARKET).

    Ce n’est pas déjà ce que je fais dans mon derniers exemple ?

    J’attends bien que la position soit prise et que LONGONMARKET soit TRUE, avant d’utiliser les variables dont j’ai besoin (TRADEPRICE et autres), mais même en faisant cela, il me semble que sur la première bougie (la bougie ou le trade commence, en général aux alentours de son OPEN), les variables n’ont pas les bonnes valeurs. D’ailleurs je n’arrive pas bien à comprendre ce phénomène, comment LONGONMARKET  peut être TRUE et en même temps avoir un TRADEPRICE qui n’a pas la bonne valeur ? Mon algorithme fonctionne sur du M15, donc pendant les 15 min suivant l’ouverture de la positon, j’ai un TRADEPRICE qui n’a pas la bonne valeur, alors que la position est bien ouverte. Suite à cela la bougie ce clôture, et ce n’est qu’à ce moment là que TRADEPRICE  obtient la bonne valeur.

    #140208

    C’est logique puisque le code est lu à la clôture, puisque l’ordre vient de s’ouvrir, il faut attendre une bougie supplémentaire pour que TRADEPRICE du dernier ordre soit connu. Sinon ce sera celui de l’ordre juste avant, d’où ton incompréhension sur sa valeur.

    #140213

    Effectivement, comme vous le dites, le code est lu à la clôture, donc TRADEPRICE n’est actualisé qu’à partir de ce moment là. Mais alors dans ce cas, pourquoi LONGONMARKET est TRUE ? Pourquoi n’est-il pas FALSE sur la première bougie, puis TRUE à la cloture de celle ci ? Pourquoi n’a t-il pas le même comportement que TRADEPRICE ?

    Comment savoir à l’avance quel variable se comportera comme TRADEPRICE (actualisation à la clôture) ou comme LONGONMARKET (actualisation dés la prise de position) ?

    #140345

    Bon du coup j’ai un peu essayé les différentes solutions proposées :

    Dans un premier temps j’ai essayé de résoudre la problème via le MTF, mais j’ai assez rapidement arrêté. J’ai l’impression que le MTF est plutôt fait pour aller sur des UT supérieurs à notre UT principale, plutôt que vers des UT inférieurs (ce dont j’ai besoin pour résoudre mon problème) ou alors il faut descendre notre UT principale ce qui est assez contraignant.

    Peu après cela, j’ai donc essayé l’autre solution, celle proposée par Nicolas que je remercie beaucoup parce que je ne l’aurais surement pas trouvé tout seul. Ainsi à l’ouverture d’une position, j’utilise dans un premier temps le CLOSE de la bougie précédente pour déterminé mon Stop Loss et mon Take Profit, puis une fois la bougie actuel clôturé, je réajuste le Stop Loss et le Take Profit grâce à son OPEN.  Bien que cette solution ne soit pas parfaite, puisque que j’aurais aimé pouvoir définir mon Stop Loss et mon Take Profit en exploitant directement le OPEN ce qui n’est pas possible sur la première bougie, elle est quand même satisfaisante puisqu’elle me permet théoriquement d’avoir des niveaux de Stop Loss et de Take Profit identique en backtest et en Trading réel ce qui était mon objectif à la base.

    Merci beaucoup de m’avoir aidé.

    1 user thanked author for this post.
    #140792

    D’ailleurs je n’arrive pas bien à comprendre ce phénomène, comment LONGONMARKET  peut être TRUE et en même temps avoir un TRADEPRICE qui n’a pas la bonne valeur ?

    Je crois que je commence à comprendre !

    Début Bougie 1
    – A la fin de cette Bougie, le cours rempli les conditions de trade.
    Fin de Bougie 1 :
    – le code s’exécute
    – Les conditions d’entrer au marché sont réunies
    – Un ordre est envoyé au broker d’acheter.
    – Un ordre Stop loss est aussi envoyé au Broker. Tu ne sais pas à combien il va acheter mais tu peux lui dire à quelle distance mettre le STOP LOSS en fonction du close de la bougie.
    – L’ordre est envoyé, il ne faut pas renvoyer un ordre au broker à la fin de la bougie suivante : onmarket = true (sinon risque envoi second ordre)
    Début Bougie 2
    – Durant la bougie 2, un ordre se déploie rapidement chez le Broker.
    – Le stop Loss en fonction de la Bougie 1 se déploie rapidement chez le Broker
    – On est onmarket = true pour pas renvoyer un ordre à la fin de la bougie
    Fin de bougie 2
    – L’ordre a été filled.
    – Le Stop Loss a été mis en place
    – Le code s’exécute
    – On regarde déjà si les conditions de sortie sont réunies.
    – LE STOP LOSS peut être modifié en fonction de l’open de la bougie 2, proche surement du tradeprice mais je pense que tu as reçu tradeprice de la part du Broker et que tu dois pouvoir l’utiliser.
    Début Bougie 3
    – Un nouveau Stop Loss se met en place chez le Broker
    Fin Bougie 3
    – Un nouveau Stop Loss est en place depuis le Début de la bougie 3
    – Le code s’exécute
    – On regarde si les conditions de sortie sont réunies.
    Qu’est ce que tu en penses ?
    #140823
    Fin de Bougie 1 :
    L’ordre est envoyé, il ne faut pas renvoyer un ordre au broker à la fin de la bougie suivante : onmarket = true (sinon risque envoi second ordre)
    Donc pour vous, ONMARKET = TRUE avant même que l’ordre soit exécuté par le broker et donc avant même que la position soit ouverte ? Imaginons que pour une raison quelconque le broker ne parvienne pas à exécuter l’ordre, ONMARKET sera TRUE alors qu’il n’y a aucun ordre sur le marché. Cela me paraît assez risqué, personnellement j’aurais plus tendance à penser que ONMARKET devient TRUE au moment de l’ouverture de la position (sans avoir à attendre la clôture de la bougie) mais ce n’est qu’une supposition.
    Fin de Bougie 1 :
    – L’ordre est envoyé, il ne faut pas renvoyer un ordre au broker à la fin de la bougie suivante : onmarket = true (sinon risque envoi second ordre)
    Imaginons que ONMARKET soit FALSE pendant la bougie suivante, puis TRUE à sa clôture, pourquoi y aurait-il l’envoi d’un second ordre ? Si à la clôture de la bougie suivante, ONMARKET est actualisé (passe de FALSE à TRUE) avant le système de transmission d’ordre, à mon sens il n’y aurait pas de problème de second ordre.
    Fin de bougie 2
    – LE STOP LOSS peut être modifié en fonction de l’open de la bougie 2, proche surement du tradeprice mais je pense que tu as reçu tradeprice de la part du Broker et que tu dois pouvoir l’utiliser.
    Oui à ce moment là, le TRADEPRICE est accessible et utilisable en tant qu’humain. Mais ce qui est un peu étrange avec le système, c’est que la machine a accès au TRADEPRICE (le bon TRADEPRICE, pas celui avec une mauvaise valeur) dés l’ouverture de la positon et donc bien avant nous.  Si je reprends mon tout première exemple :

    Ce code fonctionne et la machine place parfaitement le Stop Loss et le Take Profit. Pour pouvoir le faire, elle a forcément accès au prix d’ouverture de la position (une sorte de TRADEPRICE en interne) sans avoir besoin d’attendre la clôture de la bougie. Malheureusement en tant qu’humain ce “TRADEPRICE interne” nous est inaccessible vu que la variable TRADEPRICE n’est actualisé qu’à la clôture de la bougie et non à l’ouverture de la position. Ainsi ce code là :

    Ne fonctionnera pas bien (mauvaise valeur du Stop Loss et du Take Profit à cause de la non actualisation du  TRADEPRICE), alors qu’en théorie ces deux exemples sont censé faire la même chose (à un arrondi près).

    #140863

    Merci de ton retour.

    Tu as bien expliqué, je me range à cet avis, le plus pertinent c’est d’avoir le onmarket = true à la fin de la bougie 2, quand on a confirmation du trade de la part du broker, accompagné du tradeprice et avant l’exécution du code de bougie 2. Plutôt qu’à la fin de l’exécution du code de bougie 1. Mais du coup tu as onmarket = true et le tradeprice disponible en début de code  en fin de bougie 2  donc tu n’as pas  de moment où tu as tradeprice indisponible et onmarket = true en même temps comme tu le déplorais au final.

    Sur l’histoire du tradeprice interne. Sur le code suivant :

    tu envois au broker un STOP LOSS et un TARGET  PROFIT avec un pourcentage. Pour moi c’est le Broker qui place le STOP LOSS avec le prix d’achat qu’il connaît et évalue avec le STOP LOSS en pourcentage, pas pro real time qui calcule les valeurs de cours correspondant aux STOP LOSS et TAKE PROFIT en pourcentage et les enverrai au broket car effectivement Prorealtime ne connaît pas le tradeprice en fin de Bougie 1.

    Tu peux aussi la calculer en points mais à ce moment là tu prends close de la bougie 1 et dès la fin de la bougie tu as une valeur de STOP LOSS que tu peut tracer sur ta courbe de prix avec graphonprice.

    Sur le Code :

    Il ne peut donc  marcher correctement qu’avec onmarket = true à partir de la fin de la bougie 2 quand Prorealtime reçoit du Broker le Tradeprice  Avant On market = 1,  tradeprice = 0 si c’est le premier ordre ou alors la valeur de clôture de trade précédent.

    Est ce que le code suivant n’actualiserai pas ton stop loss chez le Broker à partir de la bougie 3  pour avoir un stop loss avec le tradeprice réel ? J’ai jamais essayé

    Après si tu veux avoir le même STOP LOSS en réel et en BACKTEST, oui c’est un STOP LOSS réel en fonction de l’open qu’il te faut puisque qu’apparemment tradeprice = open en backtest. Quelque chose comme cela peut-être :

    Qu’est  tu en penses ? je suis pas spécialiste, je suis nouveau la dedans.

     

    #140899

    Effectivement, comme vous l’avez dit, les instructions comme “SET STOP %LOSS 0.25″ sont surement calculées chez le broker qui lui possède un TRADEPRICE utilisable directement, contrairement aux instructions comme “SET STOP LOSS (0.25/100)*TRADEPRICE” qui elles sont calculées par ProRealTime qui lui ne possède pas la bonne valeur du TRADEPRICE avant la clôture de la bougie. Merci, cela semble être une explication cohérente et ça expliquerait la différence de comportement entre ces instructions.

    Est ce que le code suivant n’actualiserai pas ton stop loss chez le Broker à partir de la bougie 3 pour avoir un stop loss avec le tradeprice réel ? J’ai jamais essayé

    Je ne comprends pas trop ce que vous voulez dire par “tradeprice réel”.

    En regardant le code, je remarque une petite erreur au niveau des “SET” au lieu (0.25/100) et (1/100), il faudrait mettre 0.25 et 1 :

    Sinon à mes yeux, il faudrait enlever le deuxième “IF”, le premier fait déjà le boulot et calcul les bonnes valeurs de Stop Loss et de Take Profit (comme ce sont des ordres de protections, il vont rester jusqu’à la fin du trade). Le deuxième “IF” en plus de refaire le même boulot que le premier (à un arrondi près), va venir saboter (que sur la bougie 2) ce boulot. Comme sur la bougie 2, ONMARKET sera TRUE, le TRADEPRICE récupéré pour calculer le Stop Loss et le Take Profit n’aura pas la bonne valeur. Ainsi, sur la bougie 2,  le deuxième “IF” va remplacer les bonnes valeurs de Stop Loss et Take Profit calculé par le premier “IF” par des valeurs erronées.

    De la même manière avec ce code là :

    Je pense qu’il y aura également quelques problèmes pour les mêmes raisons évoquées plus haut.

    Mais attention, tous ce que je viens de dire n’est pas sûr à 100%, je n’ai fait que lire le code, je n’ai rien testé, peut être que je me trompe complétement. Je base mon raisonnement sur le code que j’avais mis dans mon premiers message :

    Ici dès l’ouverture de la position, le programme entre dans le deuxième “IF” et place le Stop Loss et le Take Profit (avant le clôture de la bougie 2). Ce code est similaire au votre, donc je suppose que le comportement est le même.

    Comme vous, j’avais moi même essayé des chose comme “UPDATEREQUIRED” (avec un nom différent bien sûr), qui vaut 1 puis ensuite 0 comme vous l’avez fait, ça n’avait pas bien fonctionné dans mes souvenirs. La chose qui a réglé mes problèmes c’est de remplacé les “SET STOP LOSS …” par des “SELL AT … STOP”. Par exemple dans mon algorithme actuel j’ai quelque chose comme ça :

    Cela fonctionne parfaitement. Attention les “SELL ATT …” ne durent qu’une seule bougie.

    #140907

    Dans le code actuel qui est utilisé actuellement, est ce que les premier  SELL STOP/LIMIT pendant not onmarket vont marcher ? Est ce qu’on peut placer un SELL alors qu’on est not onmarket ? Est ce qu’en réel ou démo ça place un ordre de vente STOP/Limit qui sera en fonction durant la bougie 2 ? Si oui tant mieux car le risque c’est qu’il n’y ait pas d’ordre de vente pendant la bougie 2 et donc pas de protection.

    #140923

    Dans le code actuel qui est utilisé actuellement, est ce que les premier SELL STOP/LIMIT pendant not onmarket vont marcher ?

    Oui ils fonctionnent parfaitement en démo comme en réel.

    Est ce qu’on peut placer un SELL alors qu’on est not onmarket ?

    Je ne sais pas. J’ai jamais essayé.

    Est ce qu’en réel ou démo ça place un ordre de vente STOP/Limit qui sera en fonction durant la bougie 2 ?

    Oui, j’ai vérifié en démo, je suis allez voir les trades qui ne durent qu’une bougie (la bougie 2), ils ont bien un Stop Loss et un Take Profit et ils sont parfaitement calculés (avec le CLOSE de la bougie 1). J’ai également vérifié en réel la semaine dernière, le Stop Loss et le Take Profit sont bien en fonction durant la bougie 2.

    Comme vous, j’avais peur en utilisant “SELL ATT …” qu’il n’y ai pas de Stop Loss, ni de Take Profit sur la bougie 2, mais en pratique il est bien là. Il se met en place à la clôture de la bougie 1 j’imagine (donc possiblement avant que l’ordre d’achat soit exécuté, ou au même moment peut être). Une fois que la bougie 2 se clôture, le Stop Loss et le Take Profit sont bien réajustés (avec le OPEN de la bougie 2), je l’ai également vérifié en démo et je l’ai vu de mes yeux en réel.

    #140928

    Ca doit prendre le SELL à la bougie 2 parce que il y a un Buy qui est pris juste avant. sinon un SELL tout seul ne serait peut-être pas pris, je crois qu’il n’est associé à qu’à un ordre BUY. Sur d’autres plateforme, SELL aurait pu vouloir dire placer un short au marché. Et si notre Buy n’est pas pris et que le Sell est pris, alors on placerait un ordre dans le sens inverse au sens voulu. Mais ça c’est sur une plateforme sur laquell SELL placerait un Short. Ici un short c’est SELLSHORT

    Bon ben c’est pas mal alors. Est ce qu’il nous reste un soucis ? Sinon, on a bien avancé la compréhension de Pro Real Code

    #140931

    Personnellement de mon côté tout fonctionne parfaitement maintenant.

    Merci de m’avoir aider à résoudre mon problème et à mieux comprendre le fonctionnement du système.

Viewing 15 posts - 1 through 15 (of 16 total)

Create your free account now and post your request to benefit from the help of the community
Register or Login