Qui peut aider avec le robot, pourquoi ne fonctionne-t-il pas ? - page 4

 
GIM:

for(int i=0;i<OrdersTotal();i++)

Erreur : "i".

Quelle est l'erreur ?

//+------------------------------------------------------------------+
//|                                                          123.mq4 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

input double  lots       = 0.01;   // Лот
input int     stop_loss      = 10; // Указываем в валюте депозита
input int     take_profit    = 20; // Указываем в валюте депозита
extern int    Slippage = 3;        // Допустимое проскальзываение цены в пунктах
input int     Magic = 16384;       // Уникальный номер эксперта

int            last_bar       = 0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
// ===== Пересчет под пятизнак =========
   if(Digits()==3 || Digits()==5)
     {
      Slippage           *= 10;
     }   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if (last_bar == Bars) {return;}
   last_bar = Bars;
   if (OrdersTotal() == 0){
          int ticketbuy = OrderSend(Symbol(), OP_BUY, lots ,Ask, Slippage, 0, 0,  "", Magic, 0, clrBlue);
            if(ticketbuy<0)
               Print(Symbol()," OpenPosition. OrderSend Buy fail #",GetLastError());
            else
               Print(Symbol()," OpenPosition. OrderSend Buy successfully");
          int ticketsell = OrderSend(Symbol(), OP_SELL, lots ,Bid, Slippage, 0, 0,  "", Magic, 0, clrRed);
            if(ticketsell<0)
               Print(Symbol()," OpenPosition. OrderSend Sell fail #",GetLastError());
            else
               Print(Symbol()," OpenPosition. OrderSend Sell successfully");      
}
 double profit=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== Magic)
        {
         profit+=OrderProfit()+OrderSwap()+OrderCommission();
        }
     }
 int requot=0;
 if(profit>=take_profit || (-profit)>=stop_loss)
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== Magic)
        {
         if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,clrRed))
               requot=0;
            else
              {
               requot++;
              }
         if(requot>10)
              {
               i++;
               requot=0;
              }
            i--;
        }
     }
 
  }
//+------------------------------------------------------------------+

 
GIM:
Que voulez-vous dire, seulement avec vos propres commandes....
Si vous placez plusieurs exemplaires de l'EA sur un même compte afin de ne pas confondre l'EA qui a ouvert la commande, le numéro d'identification est utilisé.
 
Serait-ce le nombre de transactions ou de paires de devises ?
 
GIM:
Que voulez-vous dire, seulement avec vos propres commandes....
Si l'EA ne fonctionne qu'avec des ordres propres au compte, c'est la façon correcte de l'écrire. S'il y a plusieurs stratégies et experts, ils ne doivent pas confondre leurs propres ordres avec ceux des autres.
 
Sergey Gritsay:
Si vous avez plusieurs copies de l'EA sur un même compte, il ne confond pas quel EA a ouvert l'ordre et utilise un numéro d'identification unique.
Tout est clair, ça vient du cœur !
 
Vladimir Zubov:

Quelle est l'erreur ?

L'erreur ici est que la variable i est initialisée 2 fois dans la première boucle for et dans la deuxième boucle for, soit la deuxième initialisation doit être supprimée, soit le nom de la variable doit être changé.
 
Merci à tous !
 
Sergey Gritsay:
L'erreur ici est que la variable i est initialisée deux fois dans la première boucle for et dans la deuxième boucle for, soit la deuxième initialisation doit être supprimée, soit le nom de la variable doit être modifié.
C'est vrai, je pensais que son compilateur se battait.
 
Vladimir Zubov:
C'est vrai, je pensais que son compilateur se battait.
Le compilateur le fait probablement, mais il devrait donner un avertissement, pas une erreur.
 

et non, si tu l'enlèves.

#property strict

ça dit que c'est une erreur.