Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 384

 
Fuk ! Désolé.
Comment gardez-vous la trace du numéro de commande unique si c'est le TP qui le fixe ? Comment le changer ?
 
Link_x:

Dans mon exemple : numéro d'ordre aléatoire, volume - 5, au prix de clôture, avec slippage 0, sans flèche.
Dans l'exemple du document : calcul du numéro d'ordre par order_id, volume 1, par prix de clôture, avec slippage 3, la flèche est rouge.

Intelligent comme l'enfer, mais il y a une chose, Voir en surbrillance, vous écrivez Symbol().

Et le code, "Comment ?", est simple.

for(int i=OrdersTotal()-1;i>=0;i--)  //
    {
   if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
       {
     if(OrderType()==OP_BUY) price=Bid;
     else                    price=Ask;
     OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE);
       }
    }    
Quelque chose comme ça
 
r772ra:
En quelque sorte

Wow ! Maintenant il ferme les positions, mais instantanément. Faisons cela :
if(AccountProfit() > 50)
{
for(int i=OrdersTotal()-1;i>=0;i--) 
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderType()==OP_BUY) price=Bid;
else                    price=Ask;
OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE);
}
}   
}

Et obtenez un code qui ferme toutes les positions à un profit potentiel de 50 $.
Merci beaucoup !
Maintenant tout est clair !
Cool ! :)
 
Bonjour à tous ! Aidez-moi, gens intelligents. Je règle Profit=10 pips (c'est-à-dire que lorsque j'obtiens un profit total de deux paires égal à 10 pips) les deux transactions ouvertes doivent être fermées. Cependant, mes transactions ne sont pas fermées. Où se trouve l'erreur ?
extern double lotAU=0.01;
extern double lotEA=0.01;
extern double Profit=10;
extern string Сomment           = "KVAZ_EURAUD_AUDUSD";
extern int Magic                = 1111;

int EASell, EABuy, AUSell, AUBuy;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
double prof;
double bidEA = MarketInfo("EURAUD",MODE_BID);
double askEA = MarketInfo("EURAUD",MODE_ASK);
double bidAU = MarketInfo("AUDUSD",MODE_BID);
double askAU = MarketInfo("AUDUSD",MODE_ASK);

string symEA = "EURAUD";
string symAU = "AUDUSD";

for(int i=OrdersTotal()-1; i>=0; i--)
{
 OrderSelect(i,SELECT_BY_POS);
 prof=prof+OrderProfit();
 Print("Profit="+prof);
}
if(prof>=Profit)
{
 for(i=OrdersTotal()-1; i>=0; i--)
 {
  OrderSelect(i,SELECT_BY_POS);
  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,0);
 }
}

double LineEA = iCustom (Symbol(), 0, "Ind_2 Line+1", 0, 1); // Первый инструмент
double LineAU = iCustom (Symbol(), 0, "Ind_2 Line+1", 1, 1); // Второй инструмент

if(NumberOfPositions("EURAUD")==0 && LineEA > 0.1 && LineAU < -0.1)
    {
       EASell = OrderSend(symEA,OP_SELL,lotEA,bidEA,3,0,0,"KVAZ_EURAUD_AUDUSD",Magic,0,Red);
    }
if(NumberOfPositions("AUDUSD")==0 && LineEA > 0.1 && LineAU < -0.1)
    {
       AUSell = OrderSend(symAU,OP_SELL,lotAU,bidAU,3,0,0,"KVAZ_EURAUD_AUDUSD",Magic,0,Red);
    }
if(NumberOfPositions("EURAUD")==0 && LineEA < -0.1 && LineAU > 0.1)
    {
       EABuy = OrderSend(symEA,OP_BUY,lotEA,bidEA,3,0,0,"KVAZ_EURAUD_AUDUSD",Magic,0,Red);
    }
if(NumberOfPositions("AUDUSD")==0 && LineEA < -0.1 && LineAU > 0.1)
    {
       AUBuy = OrderSend(symAU,OP_BUY,lotAU,bidAU,3,0,0,"KVAZ_EURAUD_AUDUSD",Magic,0,Red);
    }
    
  return(0);
  }
//+------------------------------------------------------------------+

int NumberOfPositions(string sy="", int op=-1, int mn=1111) {      //|  Параметры:                                                                |
                                                                  //|    sy - наименование инструмента   (""   - любой символ,                   |
                                                                  //|                                     NULL - текущий символ)                 |
                                                                  //|    op - операция                   (-1   - любая позиция)                  |
                                                                  //|    mn - MagicNumber                (-1   - любой магик)                    
  int i, k=OrdersTotal(), kp=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) kp++;
          }
        }
      }
    }
  }
  return(kp);
}

Je comprends que lorsque je ferme, l'EA ne voit tout simplement pas les ordres sur le symbole et le meigic qu'il doit fermer. Et c'est tout............

Oui, il y avait aussi une variante de cela. Un seul ordre a été fermé, et la condition de profit de 10 pips n'a pas été remplie. En bref, c'était des conneries.

for(int i=OrdersTotal()-1; i>=0; i--)
{
 OrderSelect(i,SELECT_BY_POS);
 prof=prof+OrderProfit();
 Print("Profit="+prof);
}
if(prof>=Profit)
{
 for(i=OrdersTotal()-1; i>=0; i--)
 {
  OrderSelect(i,SELECT_BY_POS);
  {
  if(OrderSymbol()!= Symbol()  || OrderMagicNumber()!=Magic) continue;
  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,0);
  }
 }
}


 
Bonjour, pourriez-vous me dire comment faire apparaître une flèche sur le graphique à la barre actuelle et au prix actuel lorsque certaines conditions sont atteintes et qu'une alerte est déclenchée une fois, en donnant un message ? Par exemple : lorsqu'un muving traverse de bas en haut, une flèche vers le haut avec le message "acheter" et de haut en bas une flèche vers le bas avec le message "vendre", respectivement. Merci d'avance.
 
alexey1979621:
Bonjour à tous ! Aidez-moi, gens intelligents. Je règle Profit=10 pips (c'est-à-dire que lorsque j'obtiens un profit total de deux paires égal à 10 pips) les deux transactions ouvertes doivent être fermées. Cependant, mes transactions ne sont pas fermées. Où se trouve l'erreur ?

Je comprends que lorsque je ferme, l'EA ne voit tout simplement pas les ordres sur le symbole et le meigic qu'il doit fermer. Et c'est tout............

Oui, il y avait une autre variante. Une transaction ne fermait qu'une seule position, alors que la condition du bénéfice de 10 points n'était pas remplie. Bref, c'était des conneries.


1. Nous clôturons la position en utilisant le cours acheteur ou vendeur de l'instrument, auquel elle est ouverte.

pas comme vous le faites avec OrderClosePrice()

écrivez-le de cette façon

if(prof>=Profit)
   {
  for(int i=OrdersTotal()-1;i>=0;i--) 
      {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
     double AS=MarketInfo(OrderSymbol(), MODE_ASK);
     double BI=MarketInfo(OrderSymbol(), MODE_BID);

       if(OrderType()==OP_BUY) price=BI;
       else                    price=AS;

       OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE);
         }
      }   
   }
Quelque chose comme ça
 
Il est possible qu'un arrêt soit déclenché et que les drapeaux doivent alors être remis dans leur état initial. Ce problème est-il résolu en supprimant l'EA du graphique ?
 
r772ra:

1. Nous clôturons la position en utilisant le cours acheteur ou vendeur de l'instrument pour lequel elle est ouverte.

pas comme vous le faites avec OrderClosePrice()

écrivez-le de cette façon

Quelque chose comme ceci

C'est fait, mais cela ne résout pas le problème appliqué à la chouette ci-dessus. Je pense que lors de la fermeture, l'EA ne voit tout simplement pas les ordres sur le symbole et les majors qu'il doit fermer.
 
alexey1979621:
Bonjour à tous ! Aidez-moi, gens intelligents. Je règle Profit=10 pips (c'est-à-dire que lorsque j'obtiens un profit total de deux paires égal à 10 pips) les deux transactions ouvertes doivent être fermées. Cependant, mes transactions ne sont pas fermées. Où se trouve l'erreur ?

Je comprends que lorsque je ferme, l'EA ne voit tout simplement pas les ordres sur le symbole et le meigic qu'il doit fermer. Et c'est tout............

Oui, il y avait aussi une option comme celle-ci. L'opération n'a été clôturée qu'une seule fois et la condition de 10 pips de profit n'a pas été respectée. En bref, c'était des conneries.

Erreur sur erreur. Peut-être que ça fera marcher quelque chose :

extern double lotAU=0.01;
extern double lotEA=0.01;
extern double Profit=10;
extern string EXP_Comment           = "KVAZ_EURAUD_AUDUSD";
extern int Magic                = 1111;

int EASell, EABuy, AUSell, AUBuy;
string gsa_SMB[2];
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  gsa_SMB[0] = "EURAUD";
  gsa_SMB[1] = "AUDUSD";
   return (0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
    int    li_N;
    double prof = 0., ld_Price = 0.;

    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {
        OrderSelect (i,SELECT_BY_POS);
        li_N = fGet_NumSymbol (OrderSymbol(), gsa_SMB);
        if (li_N < 0) continue;
        if (OrderMagicNumber() != Magic) continue;
        prof += OrderProfit();
        Print ("Profit=", prof);
    }
    if (prof>=Profit)
    {
        for (i=OrdersTotal()-1; i>=0; i--)
        {
            OrderSelect (i, SELECT_BY_POS);
            li_N = fGet_NumSymbol (OrderSymbol(), gsa_SMB);
            if (li_N < 0) continue;
            if (OrderMagicNumber() != Magic) continue;
            if (OrderType() == OP_BUY) ld_Price = MarketInfo (gsa_SMB[li_N], MODE_BID);
            else if (OrderType() == OP_SELL) ld_Price = MarketInfo (gsa_SMB[li_N], MODE_ASK);
            OrderClose (OrderTicket(), OrderLots(), ld_Price, 5);
        }
    }
    double bidEA = MarketInfo ("EURAUD", MODE_BID),
           askEA = MarketInfo ("EURAUD", MODE_ASK),
           bidAU = MarketInfo ("AUDUSD", MODE_BID),
           askAU = MarketInfo ("AUDUSD", MODE_ASK),
           LineEA = iCustom (Symbol(), 0, "Ind_2 Line+1", 0, 1), // Первый инструмент
           LineAU = iCustom (Symbol(), 0, "Ind_2 Line+1", 1, 1); // Второй инструмент

    if (NumberOfPositions (gsa_SMB[0], -1, Magic) == 0)
    {
        if (LineEA > 0.1) if (LineAU < -0.1)
        {EASell = OrderSend (gsa_SMB[0], OP_SELL, lotEA, bidEA, 3, 0, 0, EXP_Comment, Magic, 0, Red);}
        if (LineEA < -0.1) if (LineAU > 0.1)
        {EABuy = OrderSend (gsa_SMB[0], OP_BUY, lotEA, askEA, 3, 0, 0, EXP_Comment, Magic, 0, Blue);}
    }
    if (NumberOfPositions (gsa_SMB[1], -1, Magic) == 0)
    {
        if (LineEA < -0.1) if (LineAU > 0.1)
        {AUBuy = OrderSend (gsa_SMB[1], OP_BUY, lotAU, askAU, 3, 0, 0, EXP_Comment, Magic, 0, Blue);}
        if (LineEA > 0.1) if (LineAU < -0.1)
        {AUSell = OrderSend (gsa_SMB[1], OP_SELL, lotAU, bidAU, 3, 0, 0, EXP_Comment, Magic, 0, Red);}
    }
    return (0);
}
//+------------------------------------------------------------------+
int fGet_NumSymbol (string fs_Symbol, string ar_SMB[])
{
    for (int li_IND = 0; li_IND < 2; li_IND++)
    {if (fs_Symbol == ar_SMB[li_IND]) return (li_IND);}
    return (-1);
}
//+------------------------------------------------------------------+

? ??

 
alexey1979621:
C'est fait, mais cela ne résout pas le problème de la chouette ci-dessus. Je pense que lors de la fermeture, l'EA ne voit tout simplement pas les ordres sur le symbole et les majors qu'il doit fermer.


Il ne devrait voir ni symbole ni magie, tout est correct dans votre EA. Regardez les journaux pour voir quel type d'erreur il produit.