Affichage des résultats 1 à 7 sur 7
  1. #1
    Membre lvl 5
    Date d'inscription
    June 2012
    Messages
    6
    Pouvoir de réputation
    3

    MQL4 J'ai un trou dans ma raquette avec un OrderSelect MQL4 J'ai un trou dans ma raquette avec un OrderSelect

    Bonjour à tous,

    M'essayant à la création d'un EA, j'ai quelques soucis avec mon OrderSelect.
    Mon souhait :
    J'ai un Buy (Achat_1) en cours avec un Take Profit.
    En attente, je souhaite positionner un BuyLimit (Achat_2) ou le supprimer si Achat_1 s'est cloturé avec le Take Profit.

    Je pense qu'il me manque une commande après OrderSelect.
    J'avais pensé à OrderType, mais je n'y arrive pas.

    Merci pour votre aide

    Code:
    //+------------------------------------------------------------------+                                                                                                                                // Ouverture comparaison Total<1    
                //|                           Buy Achat_1                            |
                //+------------------------------------------------------------------+
                Achat_1=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+(TakeProfitLong/10000)," Achat_1",10000,0,Navy);
                   if(Achat_1>0)
                      {                                                                                                                       // Ouverture Achat_1
                      if(OrderSelect(Achat_1,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY Achat_1 en cours : ",OrderOpenPrice());
                      }                                                                                                                       // Fermeture Achat_1
                   else Print("Erreur ouverture BUY Achat_1 : ",GetLastError());
                 
                
                // Récupération dans la variable du prix d'achat de Achat_1   
                PrixAchat_1=OrderOpenPrice();
                
                
                //+------------------------------------------------------------------+                                                                                                                                // Ouverture comparaison Total<1    
                //|                         BuyLimit Achat_2                         |
                //+------------------------------------------------------------------+ 
                Achat_2=OrderSend(Symbol(),OP_BUYLIMIT,Lots,PrixAchat_1-(Montante/10000),3,0,0," Achat_2",10000,0,Navy);
                   
                   // Suppression du BuyLimit en attente si Achat_1 est cloturé
                   if(OrderSelect(Achat_1,SELECT_BY_TICKET,MODE_TRADES)==true)
                      {                                                                                                                       // Ouverture Suppression BuyLimit Achat_2
                      OrderDelete(Achat_2, Olive);
                      return(0);
                      }                                                                                                                       // Fermeture Suppression BuyLimit Achat_2
                      
                   // Si l'ordre Achat_2 est passé
                   if(Achat_2>0)
                      {                                                                                                                       // Ouverture Achat_2
                      if(OrderSelect(Achat_2,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY Achat_2 en cours : ",OrderOpenPrice());

  2. #2
    Membre lvl 5
    Date d'inscription
    July 2011
    Messages
    12
    Pouvoir de réputation
    4

    Citation Envoyé par arsouille Voir le message
    Bonjour à tous,

    M'essayant à la création d'un EA, j'ai quelques soucis avec mon OrderSelect.
    Mon souhait :
    J'ai un Buy (Achat_1) en cours avec un Take Profit.
    En attente, je souhaite positionner un BuyLimit (Achat_2) ou le supprimer si Achat_1 s'est cloturé avec le Take Profit.

    Je pense qu'il me manque une commande après OrderSelect.
    J'avais pensé à OrderType, mais je n'y arrive pas.

    Merci pour votre aide

    Code:
    //+------------------------------------------------------------------+                                                                                                                                // Ouverture comparaison Total<1    
                //|                           Buy Achat_1                            |
                //+------------------------------------------------------------------+
                Achat_1=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+(TakeProfitLong/10000)," Achat_1",10000,0,Navy);
                   if(Achat_1>0)
                      {                                                                                                                       // Ouverture Achat_1
                      if(OrderSelect(Achat_1,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY Achat_1 en cours : ",OrderOpenPrice());
                      }                                                                                                                       // Fermeture Achat_1
                   else Print("Erreur ouverture BUY Achat_1 : ",GetLastError());
                 
                
                // Récupération dans la variable du prix d'achat de Achat_1   
                PrixAchat_1=OrderOpenPrice();
                
                
                //+------------------------------------------------------------------+                                                                                                                                // Ouverture comparaison Total<1    
                //|                         BuyLimit Achat_2                         |
                //+------------------------------------------------------------------+ 
                Achat_2=OrderSend(Symbol(),OP_BUYLIMIT,Lots,PrixAchat_1-(Montante/10000),3,0,0," Achat_2",10000,0,Navy);
                   
                   // Suppression du BuyLimit en attente si Achat_1 est cloturé
                   if(OrderSelect(Achat_1,SELECT_BY_TICKET,MODE_TRADES)==true)
                      {                                                                                                                       // Ouverture Suppression BuyLimit Achat_2
                      OrderDelete(Achat_2, Olive);
                      return(0);
                      }                                                                                                                       // Fermeture Suppression BuyLimit Achat_2
                      
                   // Si l'ordre Achat_2 est passé
                   if(Achat_2>0)
                      {                                                                                                                       // Ouverture Achat_2
                      if(OrderSelect(Achat_2,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY Achat_2 en cours : ",OrderOpenPrice());
    Si ton Buylimit ne se place pas , le problème viens d'un de tes paramètre dans l'ordersend ...

    Par contre pour fermer ton ordre en attente, tu dois tester si Orderselect(ACHAT_1) == FALSE et pas a true vu que tu veux le fermer si et seulement si ton premier ordre est fermer ...

    La tu le ferme alors que l'autre est toujours ouvert ...

  3. #3
    Membre lvl 5
    Date d'inscription
    June 2012
    Messages
    6
    Pouvoir de réputation
    3

    Merci pour la réponse,

    J'avance petit à petit

    A tout hazard, si quelqu'un dispose d'un code simple permettant de fermer l'ensemble des ordres en attente disposant du même Magic Number

    Merci

  4. #4
    Membre lvl 75 Avatar de kouyate
    Date d'inscription
    October 2009
    Localisation
    Côte d'Ivoire, Abidjan
    Messages
    88
    Pouvoir de réputation
    6

    salut

    J'aurais aimé t'aider, mais ne connaissant pas grande chose dans la programmation, je ne peux que t'encourager.

  5. #5
    Membre lvl 5
    Date d'inscription
    July 2011
    Messages
    12
    Pouvoir de réputation
    4

    Citation Envoyé par arsouille Voir le message
    Merci pour la réponse,

    J'avance petit à petit

    A tout hazard, si quelqu'un dispose d'un code simple permettant de fermer l'ensemble des ordres en attente disposant du même Magic Number

    Merci
    Euh tu as des sous ? xD LOL

  6. #6
    Membre lvl 5
    Date d'inscription
    June 2012
    Messages
    6
    Pouvoir de réputation
    3

    Bonjour à tous,

    Pour ceux qui comme moi considère qu'un forum est un lieu de partage de connaissance, et non pas une tractation commerciale pour une ligne de code, voici la ligne que j'ai trouvé pour intégrer le Magic Number.

    //+------------------------------------------------------------------+
    //| Suppression des Buy Pending Order |
    //+------------------------------------------------------------------+

    // Récupération du nombre de Trades en cours
    Total=OrdersTotal();

    //Suppression du BuyLimit Achat_2 en attente
    if(OrderSelect(Achat_1, SELECT_BY_TICKET, MODE_HISTORY)==true && Total==1)
    {
    for(int i=0; i<Total; i++)
    {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
    {
    Cmd=OrderType();
    // Les Ordres en attentes sont uniquement pris en compte
    if(Cmd!=OP_BUY && Cmd!=OP_SELL && Magic==OrderMagicNumber())
    {
    // Suppression de l'ordre en attente
    Result=OrderDelete(OrderTicket());
    if(Result==TRUE) Print("Suppression du BUY Limit effectué : ",OrderTicket());
    if(Result!=TRUE) Print("Erreur lors de la Suppression du BUY Limit : ",OrderTicket());
    break;
    }
    }
    else { Print( "Erreur lors de la sélection du Buy Limit à supprimer ", GetLastError()); break; }
    }
    }

    return(0);
    }
    Vous aurez en amont déclaré les variables.
    bool Result;
    int Cmd;
    Cordialement

  7. #7
    Membre lvl 5
    Date d'inscription
    July 2011
    Messages
    12
    Pouvoir de réputation
    4

    Partage de connaissance pas de code source ;-)

    La plus part des programmeur débutant, veulent qu'on leurs servent leur code tout prêt ! bah non désolé la vie sa ne fonctionne pas comme ça ...

    Et puis mon "tu as des sous" était ironique de toute façon ...

Discussions similaires

  1. Japon : l'économie dans un trou d’air en octobre
    Par BNP Paribas dans le forum Actualité marchés
    Réponses: 0
    Dernier message: 30/11/2010, 16h17
  2. Orderselect
    Par TAAD dans le forum Programmation
    Réponses: 0
    Dernier message: 22/07/2010, 14h23
  3. Trou de mémoire ?
    Par morgane dans le forum Comptoir des Traders Forex
    Réponses: 0
    Dernier message: 11/11/2009, 19h47
  4. Boucles et Fonctions avec language MQL4
    Par Edellion dans le forum Systèmes de Trading Auto
    Réponses: 14
    Dernier message: 04/03/2009, 22h39

Plan du site |