Rejoindre la communauté
banner_forum
Devenez membre de la plus grande
communauté francophone sur le Forex
Partagez, échangez et apprenez en gagnant des crédits sur votre compte de trading

Modification Stop Buy

  • stepaustras

    Bonjour à tous, :)

    Voilà j'ai un petit souci j'aimerais modifier un buystop. J'ai trouvé ça comme petit code mais il ne modifie que les stop profit et lose du buy en cours et j'aimerais évidemment qu'il me change aussi le stop du buy voici le code:

    En sachant que dans mon programme le BuyStoploss17 correspond a mon stop lose et BuyTakeprofit17 a mon take profit

    Code
    { for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == 1) { double price = Ask; if (true == false) { price = OrderOpenPrice(); } bool ret = OrderModify(OrderTicket(), OrderOpenPrice(), price - BuyStoploss17*PipValue*Point, price + BuyTakeprofit17*PipValue*Point, 0, White); if (ret == false) Print("OrderModify() error - ", ErrorDescription(GetLastError())); } } }

    J'ai essayé ça (au lieu de OP_BUY j'ai mis OP_BUYSTOP) mais il y a une erreur de parenthèse et je sais pas si ce que j'ai mis est tout a fais correct dans la ligne de ordermodify et rajouté donc "price+PriceOffset50*PipValue*Point" en sachant que PriceOffset50 est le nouveau prix d'achat du stop.

    Code
    { for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1) { double price = Ask; if (true == false) { price = OrderOpenPrice(); } bool ret = OrderModify(OrderTicket(), OrderOpenPrice(), price - BuyStoploss17*PipValue*Point, price + BuyTakeprofit17*PipValue*Point,price+PriceOffset50*PipValue*Point, 0, White); if (ret == false) Print("OrderModify() error - ", ErrorDescription(GetLastError())); } } }
  • stani

    Tu ferme une parenthèse de trop dans Print().
    Tu as un paramètre en trop dans OrderModify().
    Qu'appelle tu "le nouveau prix d'achat du stop"?
    Si tu veut déplacer ton ordre, c'est OrderOpenPrice() que tu doit modifier.
    Modifié le 2014-11-25 18:13:27 par stani
  • stepaustras — en réponse à stani dans son message #98327

    En faite je veux modifier une seule fois mon buystop pas qu'il me fasse non plus des modif a chaque tick mais par exemple si je met un buystop a un certain prix je voudrais changer ce prix avec ces nouveaux stop lose et profit.

    Pour la parenthèse de print dans le premier code est bonne si je la retire c'est plus bon ça me met une erreur lol le premier code est bon il n'y a rien a changer c'est le deuxième qui est pas top par contre si je retire la fin de ordermodify c'est a dire , 0, White je n'ai plus d'erreur à la compilation mais cela ne fonctionne pas top ça me change juste les SL et SP sans modifier le prix du buystop.

    Mais déjà si tu pouvais m'expliquer la ligne de ordermodify car tu dis que je dois changer orderopenprice !!! J'ai mis trois paramètre dans cette ligne car je veux qu'il me change le prix du buystop et ses stop profit et lose

    BUYSTOP différent de OP_BUY pour ta question "Qu'appelle tu "le nouveau prix d'achat du stop"? il a bien un prix au dessus de ASK et c'est toi qui peu le choisir !!!! ????

    En faite le premier il fonctionne pour modifier un OP_BUY "premier code en haut" mais moi je voudrais le modifier pour un OP_BUYSTOP "deuxième code en bas"
    Et à mon avis il faut que rajoute deux double quelque chose car la j'ai juste double price = Ask
    Modifié le 2014-11-25 18:53:56 par stepaustras
  • stani

    Le deuxième paramétre, si tu met OrderOpenPrice(), cela te renvoie le prix auquel est déjà placé l'ordre. Et donc ne te le modifie pas. Si tu veux le déplacer (si j'ai bien compris?...) Tu doit mettre a la place le nouveau prix auquel tu veut le placer.(PriceOffset50 ?)
    Ok pour le Print, autant pour moi.
  • stepaustras — en réponse à stani dans son message #98332

    Donc à la place de orderopenprice() tu met quoi ? PriceOffset50() ??
  • stani — en réponse à stepaustras dans son message #98333

    Le prix auquel tu veut déplacer l'ordre
    Modifié le 2014-11-25 21:52:33 par stani
  • stepaustras

    Bon bah merci ça a l'air de fonctionner comme ça par contre j'ai un petit souci avec les stop profit et lose il me met 5 pips de trop en lose et m'en manque 5 en profit en sachant que dans les extern j'ai ça.
    Et le nouveau prix du buystop me le met bien a 5 pips en dessous de l'ouverture de la bougie.

    extern int SellStoploss23 = 10;
    extern int SellTakeprofit23 = 22;
    extern int PriceOffset70 = 5;

    avec ce code là, doit y avoir des petit truc a changer déjà est ce que price = OrderOpenPrice(); il faut le changer par autre chose ?
    En sachant aussi que quand je veux modifier le buystop je veux qu'il me le modifie a l'open de la bougie en court, c'est pour ça que j'ai mis double price = Open[0]; et j'ai rajouté terminate à la fin sinon il me modifiait sans cesse.
    Code
    { for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1) { double price = Open[0]; if (true == false) { price = OrderOpenPrice(); } bool ret = OrderModify(OrderTicket(), price - PriceOffset70*PipValue*Point, price + SellStoploss23*PipValue*Point, price - SellTakeprofit23*PipValue*Point, 0, White); if (ret == false) Print("OrderModify() error - ", ErrorDescription(GetLastError())); } } Terminate28(); }
    Modifié le 2014-11-25 23:51:01 par stepaustras
  • stani

    Ok je vois ce que tu veux faire.

    En global, juste apres tes extern:

    Code
    datetime newbar =0;

    Ensuite dans ton code:

    Code
    if(newbar != Time[0]) { price = Close[1]; newbar = Time[0]; for (int i=OrdersTotal()-1; i >= 0; i--) if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true) { if ( OrderSymbol() == Symbol() && OrderMagicNumber() == 1) { if(OrderType() == OP_SELLSTOP)//modif sellstop { bool ret = OrderModify(OrderTicket(), price - PriceOffset70*Point, price + SellStoploss23*Point, price - SellTakeprofit23*Point, 0, White); if (ret == false) Print("OrderModify() error - ", ErrorDescription(GetLastError())); } if(OrderType() == OP_BUYSTOP)// etc...même chose pour le pending buy...

    !!!Non testé, donc bien sur vérifie la syntaxe!!!
    Modifié le 2014-11-26 13:30:45 par stani
  • stepaustras — en réponse à stani dans son message #98348

    Merci pour ton aide ;) par contre j'ai du changer quelque truc sur ça "price = Close[1];" et ça "newbar = Time[0];" mettre double juste avant sinon ça me donne une erreur. Et rajouter *PipValue dans la ligne de OrderModify sinon il me prenais que 1 pips de profit je comprenais pas lol.

    Mais sinon ça ne change rien de ce que j'avais avant le code d'avant fonctionne aussi mais je suis obligé de tricher sur les SL, SP et aussi le offsetprice pour qu'il me mette les bon réglages.

    Sinon le newbar il sert a quoi ? Faut le laisser a 0 ?
  • stani — en réponse à stepaustras dans son message #98352

    Non, ne pas mettre double devant "newbar", si tu as une erreur c'est parce que tu ne l'a pas déclaré en "datetime " au début du code. Relis le post!
    Il sert a faire exécuter le boucle une seule fois par barre, c'est ce que tu voulais, non?
    Il se met a jour chaque fois qu'il change(newbar = Time[0];)
    "PipValue" tu le sort d'ou? Est-il calculé quelque part dans ton code, a quoi correspond t-il??? A première vue aucun intérêt!
    Si tu n'a pas les bonnes valeur c'est parce que tu est sans doute en 5 digits. Multiplie tes valeurs par dix!!!
  • stepaustras — en réponse à stani dans son message #98353

    Oui je suis en 5 digits c'est pour ça que je met *PipValue en plus car dans mon code complet j'ai PipValue = 10 mais c'est sur le price que j'ai une erreur si je ne met pas le double devant.
  • stepaustras — en réponse à stepaustras dans son message #98355

    J'aimerais savoir aussi par exemple je voudrais ouvrir a tel heure tel minute et de tel a tel seconde au cas ou le tick ne bouge pas a x seconde alors je met une fourchette de seconde j'ai ce code là mais cela ne fonctionne pas pour les secondes !!!! Une idée ?

    Code
    void OnceAnHour27() { int datetime800 = TimeCurrent(); int hour0 = TimeHour(datetime800); int minute0 = TimeMinute(datetime800); if (hour0 != Hour27 && minute0 == Minute27) { Hour27 = hour0; HoursFilter26(); } } void HoursFilter26() { int datetime800 = TimeCurrent(); int hour0 = TimeHour(datetime800); if ((HoursFrom26 < HoursTo26 && hour0 >= HoursFrom26 && hour0 < HoursTo26) || (HoursFrom26 > HoursTo26 && (hour0 < HoursTo26 || hour0 >= HoursFrom26))) { secondesFilter26(); } } void secondesFilter26() { int datetime800 = TimeCurrent(); int hour0 = TimeSeconds(datetime800); if ((HoursFrom26 < HoursTo26 && hour0 >= HoursFrom26 && hour0 < HoursTo26) || (HoursFrom26 > HoursTo26 && (hour0 < HoursTo26 || hour0 >= HoursFrom26))) { IfOrderDoesNotExist66(); IfOrderDoesNotExist67(); } }
    Modifié le 2014-11-28 17:39:39 par stepaustras