Mon compte
Déjà membre ? S'identifier
Non inscrit ? S'inscrire
 
+ Répondre à la discussion
Page 1 sur 2 1 2 DernièreDernière
Affichage des résultats 1 à 10 sur 14
  1. #1
    Membre lvl 5 gollum est sur la route de la réputation...
    Date d'inscription
    April 2010
    Messages
    22
    Pouvoir de réputation
    4

    aide concernant pyramidage aide concernant pyramidage

    bonjour a tous,
    novice en programmation j'ai fait un EA qui fonctionne grâce au site expertadvisorbuilder.
    sur la paire EUR/USD je souhaiterais pyramider ma position mais dur dur
    j'ai essayé sur 2 fenêtres eur/usd de mettre mon EA avec un magicnumber different mais rien n'y fait ça prends position une seule fois impossible de lui faire prendre position une 2 e fois en même temps
    je vous donne ma ligne de code

    merci pour votre aide!!!


    //+------------------------------------------------------------------+

    //| This MQL is generated by Expert Advisor Builder |

    //| Expert Advisor Builder for metatrader 4 |

    //| |

    //| In no event will author be liable for any damages whatsoever. |

    //| Use at your own risk. |

    //| |

    //+------------------- DO NOT REMOVE THIS HEADER --------------------+



    #define SIGNAL_NONE 0

    #define SIGNAL_BUY 1

    #define SIGNAL_SELL 2

    #define SIGNAL_CLOSEBUY 3

    #define SIGNAL_CLOSESELL 4



    #property copyright "Expert Advisor Builder"

    #property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"



    extern int MagicNumber = 0;

    extern bool SignalMail = False;

    extern bool EachTickMode = False;

    extern double Lots = 0.1;

    extern int Slippage = 3;

    extern bool UseStopLoss = False;

    extern int StopLoss = 30;

    extern bool UseTakeProfit = False;

    extern int TakeProfit = 60;

    extern bool UseTrailingStop = False;

    extern int TrailingStop = 30;



    int BarCount;

    int Current;

    bool TickCheck = False;

    //+------------------------------------------------------------------+

    //| expert initialization function |

    //+------------------------------------------------------------------+

    int init() {

    BarCount = Bars;



    if (EachTickMode) Current = 0; else Current = 1;



    return(0);

    }

    //+------------------------------------------------------------------+

    //| expert deinitialization function |

    //+------------------------------------------------------------------+

    int deinit() {

    return(0);

    }

    //+------------------------------------------------------------------+

    //| expert start function |

    //+------------------------------------------------------------------+

    int start() {

    int Order = SIGNAL_NONE;

    int Total, Ticket;

    double StopLossLevel, TakeProfitLevel;







    if (EachTickMode && Bars != BarCount) TickCheck = False;

    Total = OrdersTotal();

    Order = SIGNAL_NONE;



    //+------------------------------------------------------------------+

    //| Variable Begin |

    //+------------------------------------------------------------------+





    double Buy1_1 = iBands(NULL, PERIOD_M30, 13, 2, 0, PRICE_CLOSE, MODE_UPPER, Current + 0);

    double Buy1_2 = iClose(NULL, PERIOD_M30, Current + 0);

    double Buy2_1 = iCustom(NULL, PERIOD_M30, "TrendMagic", 50, 5, 0, Current + 0);

    double Buy2_2 = iCustom(NULL, PERIOD_M30, "TrendMagic", 50, 5, 0, Current + 1);




    double Sell1_1 = iBands(NULL, PERIOD_M30, 13, 2, 0, PRICE_CLOSE, MODE_LOWER, Current + 0);

    double Sell1_2 = iClose(NULL, PERIOD_M30, Current + 0);

    double Sell2_1 = iCustom(NULL, PERIOD_M30, "TrendMagic", 50, 5, 1, Current + 0);

    double Sell2_2 = iCustom(NULL, PERIOD_M30, "TrendMagic", 50, 5, 1, Current + 1);




    double CloseBuy1_1 = iCustom(NULL, PERIOD_M30, "TrendMagic", 50, 5, 1, Current + 0);

    double CloseBuy1_2 = iCustom(NULL, PERIOD_M30, "TrendMagic", 50, 5, 1, Current + 1);



    double CloseSell1_1 = iCustom(NULL, PERIOD_M30, "TrendMagic", 50, 5, 0, Current + 0);

    double CloseSell1_2 = iCustom(NULL, PERIOD_M30, "TrendMagic", 50, 5, 0, Current + 1);







    //+------------------------------------------------------------------+

    //| Variable End |

    //+------------------------------------------------------------------+



    //Check position

    bool IsTrade = False;



    for (int i = 0; i < Total; i ++) {

    OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

    if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

    IsTrade = True;

    if(OrderType() == OP_BUY) {

    //Close



    //+------------------------------------------------------------------+

    //| Signal Begin(Exit Buy) |

    //+------------------------------------------------------------------+


    if (CloseBuy1_1 < CloseBuy1_2) Order = SIGNAL_CLOSEBUY;





    //




    //+------------------------------------------------------------------+

    //| Signal End(Exit Buy) |

    //+------------------------------------------------------------------+



    if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

    OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

    if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

    if (!EachTickMode) BarCount = Bars;

    IsTrade = False;

    continue;

    }

    //Trailing stop

    if(UseTrailingStop && TrailingStop > 0) {

    if(Bid - OrderOpenPrice() > Point * TrailingStop) {

    if(OrderStopLoss() < Bid - Point * TrailingStop) {

    OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

    if (!EachTickMode) BarCount = Bars;

    continue;

    }

    }

    }

    } else {

    //Close



    //+------------------------------------------------------------------+

    //| Signal Begin(Exit Sell) |

    //+------------------------------------------------------------------+

    if (CloseSell1_1 > CloseSell1_2) Order = SIGNAL_CLOSESELL;





    //





    //+------------------------------------------------------------------+

    //| Signal End(Exit Sell) |

    //+------------------------------------------------------------------+



    if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

    OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);

    if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");

    if (!EachTickMode) BarCount = Bars;

    IsTrade = False;

    continue;

    }

    //Trailing stop

    if(UseTrailingStop && TrailingStop > 0) {

    if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {

    if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {

    OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

    if (!EachTickMode) BarCount = Bars;

    continue;

    }

    }

    }

    }

    }

    }



    //+------------------------------------------------------------------+

    //| Signal Begin(Entry) |

    //+------------------------------------------------------------------+



    if (Buy1_1 < Buy1_2 && Buy2_1 > Buy2_2) Order = SIGNAL_BUY;



    if (Sell1_1 > Sell1_2 && Sell2_1 < Sell2_2) Order = SIGNAL_SELL;





    //+------------------------------------------------------------------+

    //| Signal End |

    //+------------------------------------------------------------------+



    //Buy

    if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

    if(!IsTrade) {

    //Check free margin

    if (AccountFreeMargin() < (1000 * Lots)) {

    Print("We have no money. Free Margin = ", AccountFreeMargin());

    return(0);

    }



    if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

    if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;



    Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

    if(Ticket > 0) {

    if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

    Print("BUY order opened : ", OrderOpenPrice());

    if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

    } else {

    Print("Error opening BUY order : ", GetLastError());

    }

    }

    if (EachTickMode) TickCheck = True;

    if (!EachTickMode) BarCount = Bars;

    return(0);

    }

    }



    //Sell

    if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

    if(!IsTrade) {

    //Check free margin

    if (AccountFreeMargin() < (1000 * Lots)) {

    Print("We have no money. Free Margin = ", AccountFreeMargin());

    return(0);

    }



    if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;

    if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;



    Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

    if(Ticket > 0) {

    if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

    Print("SELL order opened : ", OrderOpenPrice());

    if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");

    } else {

    Print("Error opening SELL order : ", GetLastError());

    }

    }

    if (EachTickMode) TickCheck = True;

    if (!EachTickMode) BarCount = Bars;

    return(0);

    }

    }



    if (!EachTickMode) BarCount = Bars;



    return(0);

    }

    //+------------------------------------------------------------------+

  2. #2
    Membre Star remjie est actif et passionnant Avatar de remjie
    Date d'inscription
    January 2011
    Localisation
    Rhone
    Messages
    279
    Pouvoir de réputation
    10

    Salut,
    Chapeau j'ai jamais rien compris au fonctionnement de ce site.

    Par contre j'ai beau chercher je voit pas a quel moment tu donne un signal de pyramidage. (remarque pour moi le code est presque illisible saletée de robot! )

  3. #3
    Membre lvl 5 gollum est sur la route de la réputation...
    Date d'inscription
    April 2010
    Messages
    22
    Pouvoir de réputation
    4

    merci pour ta reponse, le pyramidage (comme le breakeven) trop compliqué pour moi je le lance manuellement
    lorsque mon EA prend position et devient gagnant je met en breakeven et la je voudrais rerentrer une 2 fois en position lorsque les memes conditions de mon EA sont remplis c'est la que ca coince car mon EA n'arrive pas a se declencher une 2 fois sur la meme paire

  4. #4
    Membre Star remjie est actif et passionnant Avatar de remjie
    Date d'inscription
    January 2011
    Localisation
    Rhone
    Messages
    279
    Pouvoir de réputation
    10

    Merci? j'ai pas pu t'aider pour l'instant


    Je pense que c'est ton "check position" qui t’empêche de faire un autre trade, a vérifier mais la comme je te l'ai dit, c'est au dessus de mes moyens de modifier ce code. (a vérifier avec un pro, mais a mon avis il vérifie si une pos est en cour et fuis l'open order si un ordre est déja en cour)

    Sinon, après ton trailing stop, pourquoi ne pas simplement lancer un order send corespondant avec les parametres de SL et TP plus loing?

    //Trailing stop

    if(UseTrailingStop && TrailingStop > 0) {

    if(Bid - OrderOpenPrice() > Point * TrailingStop) {

    genre un petit trade dans le sens du précedant ici, donc quand ton TS atteind le breakeven et que ton trade précedent est en sécurité, tu pyramide depuis ce dernier point.


    if(OrderStopLoss() < Bid - Point * TrailingStop) {

    OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

    if (!EachTickMode) BarCount = Bars;

    continue;

    }

    }

    }

  5. #5
    Membre lvl 5 gollum est sur la route de la réputation...
    Date d'inscription
    April 2010
    Messages
    22
    Pouvoir de réputation
    4

    effectivement le probleme vient peut etre de la, merci pour tes idées

  6. #6
    Membre lvl 5 gollum est sur la route de la réputation...
    Date d'inscription
    April 2010
    Messages
    22
    Pouvoir de réputation
    4

    j'avance !!! mais maintenant j'ai le problème inverse!!!! ça passe des ordres tout le temps hors je voudrais un maximum de 2 ordres simultanément sur chaque paire....
    j'ai simplement modifier cette ligne (int i = 0; i < Total; i ++) {
    que j'ai remplacé par (int i = 0; i > Total; i ++) {
    j'imagine que pour limiter a 2 ordres ça doit etre tout simple mais je cale....

  7. #7
    Membre Star remjie est actif et passionnant Avatar de remjie
    Date d'inscription
    January 2011
    Localisation
    Rhone
    Messages
    279
    Pouvoir de réputation
    10

    Salut,
    je crois que vu que tu as inversé, il ne faut lui donner le nombre d'ordres totaux:

    (int i = 2; i > Total; i ++) {

    tu dira si ça marche, je vais manger j'ai la flème de réflechir plus

  8. #8
    Membre lvl 5 gollum est sur la route de la réputation...
    Date d'inscription
    April 2010
    Messages
    22
    Pouvoir de réputation
    4

    non ca marche pas si je met pas 0, aucun ordre n'arrive a passer ... je comprends pas mais je desepere pas

  9. #9
    Membre Star remjie est actif et passionnant Avatar de remjie
    Date d'inscription
    January 2011
    Localisation
    Rhone
    Messages
    279
    Pouvoir de réputation
    10

    Salut,
    de retour avec le ventre plein .

    Fait ça:

    - ajoute " int MaxOrdre = 2 "

    " //Check position

    bool IsTrade = False;

    If (Total<MaxOrdre)

    {


    for (int i = 0; i < Total; i ++) {

    OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

    if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

    IsTrade = True;

    if(OrderType() == OP_BUY) {

    //Close "


    MaxOrdre étant le Nb d'ordre max en même temps, ça te permettra de le modifier par la suite si tu en veux plus
    Bidouillage quand tu nous tiens

    Et n'oublie pas d'apporter ta serviette... euu, pardon, de fermer les crochet " } " plus loing dans le code

  10. #10
    Membre lvl 5 gollum est sur la route de la réputation...
    Date d'inscription
    April 2010
    Messages
    22
    Pouvoir de réputation
    4

    merci pour ta réponse!!
    désolé de faire le boulet mais le crochet tu le ferme ou?
    aprés //Close?

Discussions similaires

  1. martingal pyramidage hedge
    Par pips dans le forum Trading Divers
    Réponses: 21
    Dernier message: 15/11/2010, 12h14
  2. recherche code pyramidage
    Par mochel dans le forum Programmation
    Réponses: 0
    Dernier message: 13/06/2010, 10h40
  3. Aide concernant un indicateur
    Par djtild dans le forum Programmation
    Réponses: 4
    Dernier message: 06/03/2010, 23h38
  4. Martingale - Pyramidage
    Par Bassetbe dans le forum Trading Divers
    Réponses: 15
    Dernier message: 24/05/2009, 17h55
  5. simulation pyramidage
    Par Hypatia dans le forum Trading Divers
    Réponses: 3
    Dernier message: 16/03/2009, 00h26

Ajouter aux Favoris | Plan du site | Archives | Forex | Contact