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

 
Sabit Dosaev:
Простой вопрос. Не компилируется сова. В конце кода есть ошибика.          + __FUNCSIG__
      + ": "+Market_Err_To_Str(errIndex)
      + "; order ticket = " + (string)OrderTicket()
      + "; order type = " + (string)OrderType()
      + "; order Stop Loss = " + DoubleToStr(OrderStopLoss(), Digits())
      + "; new Stop Loss = " + DoubleToStr(newStopLoss, Digits())
      + "; Bid = " + DoubleToStr(Bid, Digits())
      + "; Ask = " + DoubleToStr(Ask, Digits())
         );  
}
}
  lastSetNonlosTryTime = TimeLocal();
}


Выдает ошибку при компиляции. Прошу помочь если не трудно. Спасибо!

Вставляйте код правильно:


И... по куску кода не понятно что у вас за ошибка. Код должен быть воспроизводимым.

 
string LastComm(int a_magic_0)
  {
   int l_hist_total_4 = OrdersHistoryTotal();
   int l_datetime_8 = 0;
   int l_datetime_12 = 0;
   string ls_ret_16 = "0";
   for(int l_pos_24 = 0; l_pos_24 < l_hist_total_4; l_pos_24++)
     {
      OrderSelect(l_pos_24, SELECT_BY_POS, MODE_HISTORY);
      l_datetime_8 = OrderCloseTime();
      if(l_datetime_8 > l_datetime_12 && OrderMagicNumber() == a_magic_0)
        {
         l_datetime_12 = l_datetime_8;
         ls_ret_16 = OrderComment();
        }
     }
   return (ls_ret_16);
  }

@Artyom Trishkin 

Как я могу преобразовать эту функцию в MQL5 из MQL4?

 

Доброго Дня Всем.

Подскажите пожалуйста, куда правильно вставлять функцию  IsConnected () для определения состояния связи?

Если я вставляю в рамках функции OnTick() то связь всегда есть (т.е. есть поступление тика, значит есть связь, нет поступления тика (по причине его отсутствия или отсутствие связи) значит нет захода в  OnTick() и соответственно в функцию определения состояния связи  IsConnected () )) По этому вставлять  IsConnected () в рамках  OnTick() бесполезно (сколько я раз неотключал интернет, все равно не пишет в файл об отсутсвии связи)

По этому вопрос где правильно вставлять функцию IsConnected () или какие есть другие способы определения состояния соединения (Только для МТ4)

Спасибо!

 
Roni Iron:

Доброго Дня Всем.

Подскажите пожалуйста, куда правильно вставлять функцию  IsConnected () для определения состояния связи?

Если я вставляю в рамках функции OnTick() то связь всегда есть (т.е. есть поступление тика, значит есть связь, нет поступления тика (по причине его отсутствия или отсутствие связи) значит нет захода в  OnTick() и соответственно в функцию определения состояния связи  IsConnected () )) По этому вставлять  IsConnected () в рамках  OnTick() бесполезно (сколько я раз неотключал интернет, все равно не пишет в файл об отсутсвии связи)

По этому вопрос где правильно вставлять функцию IsConnected () или какие есть другие способы определения состояния соединения (Только для МТ4)

Спасибо!

OnTimer()

Документация по MQL5: Обработка событий / OnTimer
Документация по MQL5: Обработка событий / OnTimer
  • www.mql5.com
//|                                               OnTimer_Sample.mq5 | //|                        Copyright 2018, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Expert initialization function                                   |...
 
Roman Shiredchenko:

у  вас возникла путаница в переменных и функциях, если это функция, попробуйте так: 

код вставляйте через ALT + S

Спасибо

Roman Shiredchenko:

у  вас возникла путаница в переменных и функциях, если это функция, попробуйте так: 

код вставляйте через ALT + S

Да это функция.

Спасибо, но почему-то выдает ошибку

'}' - not all control paths return a value 

хотя по скобкам вроде все правильно проверял как в своем коде так и в пустом шаблоне. 

 ALT + S - спасибо, учту

 
wolder1:

Спасибо

Да это функция.

Спасибо, но почему-то выдает ошибку

'}' - not all control paths return a value 

хотя по скобкам вроде все правильно проверял как в своем коде так и в пустом шаблоне. 

 ALT + S - спасибо, учту

В хорошем вопросе содержится ответ (С)

 
wolder1:

Спасибо

Да это функция.

Спасибо, но почему-то выдает ошибку

'}' - not all control paths return a value 

хотя по скобкам вроде все правильно проверял как в своем коде так и в пустом шаблоне. 

 ALT + S - спасибо, учту

ф-ия double - должна возвращать занчение, если ф-ия тип void - то нет.

если у Вас переменные определены выше в коде, то их можо закомментить + пробелы тут у Вас  лишние были (Bid > = L8b)) - внес правки:

double lot=0; //, Lots;
//   double L0a3, L2a3, L5a3, L8a3, L0b1, L2b1, L5b1, L8b1, L0a, L2a, L5a, L8a,L0b,L2b,L5b,L8b,L0a1,L2a1,L5a1,L8a1,L0b3,L2b3,L5b3,L8b3;  
double _LOTS()
  {
   double lot=0, Lots;
   double L0a3, L2a3, L5a3, L8a3, L0b1, L2b1, L5b1, L8b1, L0a, L2a, L5a, L8a,L0b,L2b,L5b,L8b,L0a1,L2a1,L5a1,L8a1,L0b3,L2b3,L5b3,L8b3;  
   if((Ask <= L0a3) || (Ask <= L2a3) || (Ask <= L5a3) || (Ask <= L8a3) || (Bid >= L0b1) || (Bid >= L2b1) ||
      (Bid >= L5b1) || (Bid >= L8b1))
      {
       lot=(NormalizeDouble(Lots, 2));
       Print(" lot = ", lot); 
       return(lot);
      }
      
    if((Ask <= L0a) || (Ask <= L2a) || (Ask <= L5a) || (Ask <= L8a) || (Bid >= L0b) || (Bid >= L2b) ||
      (Bid >= L5b) || (Bid >= L8b))
      {
       lot=(NormalizeDouble((Lots*1.5), 2));
       Print(" lot = ", lot); 
       return(lot);
      }
     
    

   if((Ask <= L0a1) || (Ask <= L2a1) || (Ask <= L5a1) || (Ask <= L8a1) || (Bid >= L0b3) ||
      (Bid >= L2b3) || (Bid >= L5b3) || (Bid >= L8b3))      
      {
       lot=(NormalizeDouble((Lots*2.5), 2));
       Print(" lot = ", lot); 
       return(lot);
      }
    return(lot);  
  } 
 

Доброго утра.

Вопросик. На тестере на стыке дней (когда проходит линия следующего дня) программа должна была отработать постановку отложенки. Отложенка которая уже стояла и ее цена зацепила - она открылась, а вот инструкцию на открытие другого отложенного ордера - система почему-то проигнорила :( Почему? На реальном счете тоже такое может произойти, когда инструкция робота просто игнорится и соответственно нужное действие не происходит?


И еще вопрос. Гоняю тестер, но сильно смущает факт того, что в визуализации он проходит где-то неделю, а потом выкатывает надпись

177564 tick events (447 bars, 7888506 bar states) processed in 0:17:42.694 (total time 0:17:48.217)

177564 тиковых событий (447 баров, 7888506 баров) обработано в 0: 17: 42.694 (общее время 0: 17: 48.217)

Чет я не понял, ему что дальше тестировать религия не позволяет? Или он такой заботливый и за ресурсы моего компьютера беспокоится? Никакой ошибки ведь не выкатывается. Он просто сам завершает работу. Хотя по датам  у меня  выставленно не 7 дней,  7 месяцев. Хочется просмотреть весь путь тестов от и до. 

Что за религия ему не позволяет визуально затестить допустим год или несколько лет? А ты потом визуально увидешь как твоя программа отрабатывала бы в течение к примеру предыдущего года.


И еще вопросик. (Хотя он возможно будет без ответа )) ) Как может произойти такое, что на тестере 2 круга тестер отрабатывает как положено, а вот как раз перед выше упомянутой надписью в этот день просто игнорит все инструкции. Как такое возможно работала корректно программа несколько кругов (открывала ордера и потом их закрывала), а потом хоп и игнор всего. Ни открывает, ни закрывает. Это из-за окончания тестрируемого периода или есть какие другие причины?

 

Добрый день!!!

Нужно время последнего закрытого ордера.

Написал ф-ию, но она работает не корректно.

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

//|        Время закрытия последнего ордера                 |

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

double Last_Ticets_Close()

  {

   Last_Ticet    = 0; 

   Last_OrClTime = 0; 


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

     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY ))

        {

         if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic)

           {

            if(Last_Ticet<OrderTicket())

              {

               Last_Ticet    = OrderTicket(); 

               Last_OrClTime = OrderCloseTime();

              }

           }

        }

     }

   return (Last_Ticet);

  } 

Может кто подскажет, что не так.   

 
142vs:

Добрый день!!!

Нужно время последнего закрытого ордера.

Написал ф-ию, но она работает не корректно.

Может кто подскажет, что не так.   

при поиске более позднего времени сравнивайте время, а не тикеты