Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2063

 
Порт-моне тв #:

У меня почему-то это не получалось. Как правильно через if это прописать и как при ordersend это послать?

//+----------------------------------------------------------------------------+
string MyComment()
  {
   string result="";
   if(твое первое условие) result="Red";
   if(твое второе условие) result="Blue";
   if(твое третье условие) result="Green";
   return()result;
  }
//+----------------------------------------------------------------------------+
OrderSend(_Symbol, OP_SELL, lot, Bid, Slippage, 0, 0, MyComment(), magic, 0, Red);
 
Tretyakov Rostyslav #:

спасибо я попробовал ваш вариант, и результаты абсолютно те же, что и в моем варианте. Сделки так же открываются до тех пор пока не закроется по профиту, и только тогда цикл начинается заново в рамках установленного времени

 
законопослушный гражданин #:

спасибо я попробовал ваш вариант, и результаты абсолютно те же, что и в моем варианте. Сделки так же открываются до тех пор пока не закроется по профиту, и только тогда цикл начинается заново в рамках установленного времени

А как надо? У Вас в условии открытие ордера при убытке.
 
Tretyakov Rostyslav #:
А как надо? У Вас в условии открытие ордера при убытке.

нет не совсем так написано.

там написано, что мне нужно, чтобы открывался при убытке основного ордера только один доп ордер (только один раз) 

а сейчас и у меня и у вас получается так:

открылся осн. ордер - закрылся по убытку, открылся доп ордер №1 - закрылся по убытку, открылся доп ордер №2 уже к доп ордеру №1 - закрылся по убытку..... ну и так далее, пока доп ордер №n не закроется профитом, и только тогда цикл начинается заново

 
законопослушный гражданин #:

нет не совсем так написано.

там написано, что мне нужно, чтобы открывался при убытке основного ордера только один доп ордер (только один раз) 

а сейчас и у меня и у вас получается так:

открылся осн. ордер - закрылся по убытку, открылся доп ордер №1 - закрылся по убытку, открылся доп ордер №2 уже к доп ордеру №1 - закрылся по убытку..... ну и так далее, пока доп ордер №n не закроется профитом, и только тогда цикл начинается заново

//+-----------------------------------------------------------------------------------------------+
//|                                                                               SMA рабочий.mq4 |
//|                                                                                               |
//|                                                                                               |
//+-----------------------------------------------------------------------------------------------+
#property copyright "Copyright 2021"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//Перечисление всех часов. Это необходимо для меню ввода часа.
enum Enum_Hour{
   h00=00,     //00:00
   h01=01,     //01:00
   h02=02,     //02:00
   h03=03,     //03:00
   h04=04,     //04:00
   h05=05,     //05:00
   h06=06,     //06:00
   h07=07,     //07:00
   h08=08,     //08:00
   h09=09,     //09:00
   h10=10,     //10:00
   h11=11,     //11:00
   h12=12,     //12:00
   h13=13,     //13:00
   h14=14,     //14:00
   h15=15,     //15:00
   h16=16,     //16:00
   h17=17,     //17:00
   h18=18,     //18:00
   h19=19,     //19:00
   h20=20,     //20:00
   h21=21,     //21:00
   h22=22,     //22:00
   h23=23,     //23:00
};
 
// Параметры советника
input string  sParametersEA = "";     // Параметры советника
input double  Lot           = 0.01;   // Количество лотов
input int     StopLoss      = 560;    // Стоп (SL)
input int     TakeProfit    = 200;    // Тейк (TP)

input int     Slippage      = 3;      // Проскальзование (в пунктах)
input int     Magic         = 1;      // Индентификатор советника
input int     DigitsLot     = 2;      // Точность лотности
input Enum_Hour StartHour   = h07;      //Час начала работы.
input Enum_Hour LastHour    = h17;       //Час окончания работы.

input string  sParametersMA = "";     // Параметры индикатора
input int     PeriodMA      = 14;     // Период мувинга
input int     MovingShift   = 1;      // Сдвиг мувинга
// Глобальные переменные
datetime Start,newbar;
double dMA;
bool order=false;
bool CheckActiveHours()
{
   //По умолчанию операции отключены
   bool OperationsAllowed=false;
   //Проверяем, находится ли текущий час между разрешенными часами работы, если да, то возвращаем true.
   if(StartHour==LastHour && Hour()==StartHour) OperationsAllowed=true;
   if(StartHour<LastHour && Hour()>=StartHour && Hour()<=LastHour) OperationsAllowed=true;
   if(StartHour>LastHour && ((Hour()>=LastHour && Hour()<=23) || (Hour()<=StartHour && Hour()>0))) OperationsAllowed=true;
   return OperationsAllowed;
}

//+-----------------------------------------------------------------------------------------------+
int OnInit()
  {
Start          = TimeCurrent();
return(INIT_SUCCEEDED);
 
  }
//+-----------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+-----------------------------------------------------------------------------------------------+
void OnTick()
  {
  
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

   if(CheckActiveHours()) 
   {
   Alert("Операции разрешены");  
   // Если нет открытых ордеров, то входим в условие
      if(!order && CountOrders()==0)
        {
         
   // Если появился сигнал на покупку, то откроем ордер на покупку
         if(bSignalBuy() == true)
           {
            vOrderOpenBuy(); order=true;
           }
   
   // Если появился сигнал на продажу, то откроем ордер на продажу
         if(bSignalSell() == true)
           {
            vOrderOpenSell(); order=true;
           }
        }
   }
   else Alert("Операции запрещены");

 if(order && CountOrders()==0)                   // GetTypeLastClosePos()==0) последним закрытым был ордер BUY
    {
     if (GetProfitLastClosePos()<0 && GetTypeLastClosePos()==0)
        {
         if(OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point,"продажа",Magic,0,clrRed))
         order=false;
        } 
     if (GetProfitLastClosePos()<0 && GetTypeLastClosePos()==1)
      {
         if(OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"покупка",Magic,0,clrGreen))
         order=false;
      } 
    }
 }   
//+-----------------------------------------------------------------------------------------------+
//|                                                             Функция проверки открытых оредров |
//+-----------------------------------------------------------------------------------------------+
int CountOrders() 
  {
   int cnt=0;
   int i=OrdersTotal()-1;
   for(int pos=i;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderMagicNumber()==Magic) cnt++;
           }
        }
     }
   return(cnt);
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                             Функция поиска сигнала на покупку |
//|                    Open[1] и Close[1]- цены открытия и закрытия каждого бара текущего графика |
//+-----------------------------------------------------------------------------------------------+
bool bSignalBuy()
  {
   if(dMA > Open[1] && dMA < Close[1])  
      return(true);

   return(false);
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                             Функция поиска сигнала на продажу |
//+-----------------------------------------------------------------------------------------------+
bool bSignalSell()
  {
   if(dMA < Open[1] && dMA > Close[1])
      return(true);

   return(false);
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                            Функция открытия ордера на покупку |
//+-----------------------------------------------------------------------------------------------+
void vOrderOpenBuy()
  {
   if(newbar!=Time[0])
     {
   // Тикет ордера
      int iOTi = 0;   
   
      iOTi = OrderSend(Symbol(), OP_BUY, Lot, Ask, Slippage, 0, 0, "", Magic, 0, clrNONE);
      
   // Проверим открылся ли ордер
      if(iOTi > 0)
   // Есди да, то выставим уровни убытка и прибыли
         vOrderModify(iOTi);
      else
   // Если нет, то получим ошибку
         vError(GetLastError());
      newbar=Time[0];
     }
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                            Функция открытия ордера на продажу |
//+-----------------------------------------------------------------------------------------------+
void vOrderOpenSell()
  {
   if(newbar!=Time[0])
     {
   // Тикет ордера  
      int iOTi = 0;   
   //Print(bCheckOrders());
      iOTi = OrderSend(Symbol(), OP_SELL, Lot, Bid, Slippage, 0, 0, "", Magic, 0, clrNONE);
   
   // Проверим открылся ли ордер
      if(iOTi > 0)
   // Есди да, то выставим уровни убытка и прибыли
         vOrderModify(iOTi);
      else
   // Если нет, то получим ошибку
         vError(GetLastError());
      newbar=Time[0];
     }
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                                    Функция модификации ордера |
//+-----------------------------------------------------------------------------------------------+
void vOrderModify(int iOTi)
  {
   int    iOTy = -1;    // Тип ордера
   double dOOP = 0;     // Цена открытия ордера
   double dOSL = 0;     // Стоп Лосс
   int    iMag = 0;     // Идентификатор советника
   double dSL  = 0;     // Уровень убытка
   double dTP  = 0;     // Уровень прибыли

// Выберем по тикету открытый ордер, получим некоторые значения
   if(OrderSelect(iOTi, SELECT_BY_TICKET, MODE_TRADES))
     {
      iOTy = OrderType();
      dOOP = OrderOpenPrice();
      dOSL = OrderStopLoss();
      iMag = OrderMagicNumber();
     }

// Если ордер открыл данный советник, то входим в условие
   if(OrderSymbol() == Symbol() && OrderMagicNumber() == iMag)
     {
// Если Стоп Лосс текущего ордера равен нулю, то модифицируем ордер
      if(dOSL == 0)
        {
         if(iOTy == OP_BUY)
           {
            dSL = NormalizeDouble(dOOP - StopLoss * Point, Digits);
            dTP = NormalizeDouble(dOOP + TakeProfit * Point, Digits);

            bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0, clrNONE);
           }

         if(iOTy == OP_SELL)
           {
            dSL = NormalizeDouble(dOOP + StopLoss * Point, Digits);
            dTP = NormalizeDouble(dOOP - TakeProfit * Point, Digits);

            bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0, clrNONE);
           }
        }
     }
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                                      Функция обработки ошибок |
//+-----------------------------------------------------------------------------------------------+
void vError(int iErr)
  {
   switch(iErr)
     {
      case 129:   // Неправильная цена
      case 135:   // Цена изменилась
      case 136:   // Нет цен
      case 138:   // Новые цены
         Sleep(1000);
         RefreshRates();
         break;

      case 137:   // Брокер занят
      case 146:   // Подсистема торговли занята
         Sleep(3000);
         RefreshRates();
         break;
     }
  }
//+------------------------------------------------------------------+
//считаем последний ордер
//+------------------------------------------------------------------+
int GetTypeLastClosePos(string sy="", int mn=-1) {
  datetime t=0;
  int      i, k=OrdersHistoryTotal(), r=-1;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (t<OrderCloseTime()) {
            t=OrderCloseTime();
            r=OrderType();
          }
        }
      }
    }
  }
  return(r);
} 
//+------------------------------------------------------------------+
//считаем профит последнего ордера
//+------------------------------------------------------------------+
double GetProfitLastClosePos(string sy="", int mn=-1) {
  datetime t=0;
  double pr=0;
  int i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (t<OrderCloseTime()) pr=OrderProfit()+OrderSwap()+OrderCommission();
          }
        }
      }
    }
  return(pr);
  }
//+------------------------------------------------------------------+
 
Tretyakov Rostyslav #:

благодарю, попробую

 
Tretyakov Rostyslav #:

что то не так.

сделки открываются как и задумано (не больше двух подряд), однако на периоде с 01.01.2019 - 19.10.2022 открывается всего 11 сделок и только в течение первого месяца.

выбрал другой инструмент, примерно такой же результат 17 сделок за первый мес.

а должно быть на таком временном отрезке примерно 400-500 сделок.

Где проблема сам найти не могу пока.

 
законопослушный гражданин #:

что то не так.

сделки открываются как и задумано (не больше двух подряд), однако на периоде с 01.01.2019 - 19.10.2022 открывается всего 11 сделок и только в течение первого месяца.

выбрал другой инструмент, примерно такой же результат 17 сделок за первый мес.

а должно быть на таком временном отрезке примерно 400-500 сделок.

Где проблема сам найти не могу пока.


//+-----------------------------------------------------------------------------------------------+
//|                                                                               SMA рабочий.mq4 |
//|                                                                                               |
//|                                                                                               |
//+-----------------------------------------------------------------------------------------------+
#property copyright "Copyright 2021"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//Перечисление всех часов. Это необходимо для меню ввода часа.
enum Enum_Hour{
   h00=00,     //00:00
   h01=01,     //01:00
   h02=02,     //02:00
   h03=03,     //03:00
   h04=04,     //04:00
   h05=05,     //05:00
   h06=06,     //06:00
   h07=07,     //07:00
   h08=08,     //08:00
   h09=09,     //09:00
   h10=10,     //10:00
   h11=11,     //11:00
   h12=12,     //12:00
   h13=13,     //13:00
   h14=14,     //14:00
   h15=15,     //15:00
   h16=16,     //16:00
   h17=17,     //17:00
   h18=18,     //18:00
   h19=19,     //19:00
   h20=20,     //20:00
   h21=21,     //21:00
   h22=22,     //22:00
   h23=23,     //23:00
};
 
// Параметры советника
input string  sParametersEA = "";     // Параметры советника
input double  Lot           = 0.01;   // Количество лотов
input int     StopLoss      = 560;    // Стоп (SL)
input int     TakeProfit    = 200;    // Тейк (TP)

input int     Slippage      = 3;      // Проскальзование (в пунктах)
input int     Magic         = 1;      // Индентификатор советника
input int     DigitsLot     = 2;      // Точность лотности
input Enum_Hour StartHour   = h07;      //Час начала работы.
input Enum_Hour LastHour    = h17;       //Час окончания работы.

input string  sParametersMA = "";     // Параметры индикатора
input int     PeriodMA      = 14;     // Период мувинга
input int     MovingShift   = 1;      // Сдвиг мувинга
// Глобальные переменные
datetime Start,newbar;
double dMA;
bool order=false;

//+-----------------------------------------------------------------------------------------------+
int OnInit()
  {
Start          = TimeCurrent();
return(INIT_SUCCEEDED);
 
  }
//+-----------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+-----------------------------------------------------------------------------------------------+
void OnTick()
  {
  
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

 if(order && CountOrders()==0)                   // GetTypeLastClosePos()==0) последним закрытым был ордер BUY
    {
     if (GetProfitLastClosePos()<0 && GetTypeLastClosePos()==0)
        {
         if(OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point,"продажа",Magic,0,clrRed))
         order=false;
        } 
     if (GetProfitLastClosePos()<0 && GetTypeLastClosePos()==1)
      {
         if(OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"покупка",Magic,0,clrGreen))
         order=false;
      } 
    }
   if(CheckActiveHours()) 
   {
   Alert("Операции разрешены");  
   // Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
        {
         
   // Если появился сигнал на покупку, то откроем ордер на покупку
         if(bSignalBuy() == true)
           {
            vOrderOpenBuy();
           }
   
   // Если появился сигнал на продажу, то откроем ордер на продажу
         if(bSignalSell() == true)
           {
            vOrderOpenSell();
           }
        }
   }
   else Alert("Операции запрещены");

 }   
//+-----------------------------------------------------------------------------------------------+
//|                                                             Функция проверки открытых оредров |
//+-----------------------------------------------------------------------------------------------+
int CountOrders() 
  {
   int cnt=0;
   int i=OrdersTotal()-1;
   for(int pos=i;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderMagicNumber()==Magic) cnt++;
           }
        }
     }
   return(cnt);
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                             Функция поиска сигнала на покупку |
//|                    Open[1] и Close[1]- цены открытия и закрытия каждого бара текущего графика |
//+-----------------------------------------------------------------------------------------------+
bool bSignalBuy()
  {
   if(dMA > Open[1] && dMA < Close[1])  
      return(true);

   return(false);
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                             Функция поиска сигнала на продажу |
//+-----------------------------------------------------------------------------------------------+
bool bSignalSell()
  {
   if(dMA < Open[1] && dMA > Close[1])
      return(true);

   return(false);
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                            Функция открытия ордера на покупку |
//+-----------------------------------------------------------------------------------------------+
void vOrderOpenBuy()
  {
   if(newbar!=Time[0])
     {
   // Тикет ордера
      int iOTi = 0;   
   
      iOTi = OrderSend(Symbol(), OP_BUY, Lot, Ask, Slippage, 0, 0, "", Magic, 0, clrNONE);
      
   // Проверим открылся ли ордер
      if(iOTi > 0)
        {
   // Есди да, то выставим уровни убытка и прибыли
         vOrderModify(iOTi);
         order=true;
        }
      else
   // Если нет, то получим ошибку
         vError(GetLastError());
      newbar=Time[0];
     }
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                            Функция открытия ордера на продажу |
//+-----------------------------------------------------------------------------------------------+
void vOrderOpenSell()
  {
   if(newbar!=Time[0])
     {
   // Тикет ордера  
      int iOTi = 0;   
   //Print(bCheckOrders());
      iOTi = OrderSend(Symbol(), OP_SELL, Lot, Bid, Slippage, 0, 0, "", Magic, 0, clrNONE);
   
   // Проверим открылся ли ордер
      if(iOTi > 0)
        {
   // Есди да, то выставим уровни убытка и прибыли
         vOrderModify(iOTi);
         order=true;
        }
      else
   // Если нет, то получим ошибку
         vError(GetLastError());
      newbar=Time[0];
     }
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                                    Функция модификации ордера |
//+-----------------------------------------------------------------------------------------------+
void vOrderModify(int iOTi)
  {
   int    iOTy = -1;    // Тип ордера
   double dOOP = 0;     // Цена открытия ордера
   double dOSL = 0;     // Стоп Лосс
   int    iMag = 0;     // Идентификатор советника
   double dSL  = 0;     // Уровень убытка
   double dTP  = 0;     // Уровень прибыли

// Выберем по тикету открытый ордер, получим некоторые значения
   if(OrderSelect(iOTi, SELECT_BY_TICKET, MODE_TRADES))
     {
      iOTy = OrderType();
      dOOP = OrderOpenPrice();
      dOSL = OrderStopLoss();
      iMag = OrderMagicNumber();
     }

// Если ордер открыл данный советник, то входим в условие
   if(OrderSymbol() == Symbol() && OrderMagicNumber() == iMag)
     {
// Если Стоп Лосс текущего ордера равен нулю, то модифицируем ордер
      if(dOSL == 0)
        {
         if(iOTy == OP_BUY)
           {
            dSL = NormalizeDouble(dOOP - StopLoss * Point, Digits);
            dTP = NormalizeDouble(dOOP + TakeProfit * Point, Digits);

            bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0, clrNONE);
           }

         if(iOTy == OP_SELL)
           {
            dSL = NormalizeDouble(dOOP + StopLoss * Point, Digits);
            dTP = NormalizeDouble(dOOP - TakeProfit * Point, Digits);

            bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0, clrNONE);
           }
        }
     }
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                                      Функция обработки ошибок |
//+-----------------------------------------------------------------------------------------------+
void vError(int iErr)
  {
   switch(iErr)
     {
      case 129:   // Неправильная цена
      case 135:   // Цена изменилась
      case 136:   // Нет цен
      case 138:   // Новые цены
         Sleep(1000);
         RefreshRates();
         break;

      case 137:   // Брокер занят
      case 146:   // Подсистема торговли занята
         Sleep(3000);
         RefreshRates();
         break;
     }
  }
//+------------------------------------------------------------------+
//считаем последний ордер
//+------------------------------------------------------------------+
int GetTypeLastClosePos(string sy="", int mn=-1) {
  datetime t=0;
  int      i, k=OrdersHistoryTotal(), r=-1;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (t<OrderCloseTime()) {
            t=OrderCloseTime();
            r=OrderType();
          }
        }
      }
    }
  }
  return(r);
} 
//+------------------------------------------------------------------+
//считаем профит последнего ордера
//+------------------------------------------------------------------+
double GetProfitLastClosePos(string sy="", int mn=-1) {
  datetime t=0;
  double pr=0;
  int i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (t<OrderCloseTime()) pr=OrderProfit()+OrderSwap()+OrderCommission();
          }
        }
      }
    }
  return(pr);
  }
//+------------------------------------------------------------------+
bool CheckActiveHours()
{
   //По умолчанию операции отключены
   bool OperationsAllowed=false;
   //Проверяем, находится ли текущий час между разрешенными часами работы, если да, то возвращаем true.
   if(StartHour==LastHour && Hour()==StartHour) OperationsAllowed=true;
   if(StartHour<LastHour && Hour()>=StartHour && Hour()<=LastHour) OperationsAllowed=true;
   if(StartHour>LastHour && ((Hour()>=LastHour && Hour()<=23) || (Hour()<=StartHour && Hour()>0))) OperationsAllowed=true;
   return OperationsAllowed;
}
//+------------------------------------------------------------------+
 
Tretyakov Rostyslav #:


спасибо! заработало всё как надо.

 
Здравствуйте! Подскажите, как на MQL4 написать функцию, чтобы она находила лот последнего открытого ордера по времени? т.е. ордер может быть открытым (действующим), так и закрытым по StopLoss?
Причина обращения: