Новая версия платформы MetaTrader 5 build 3180: Векторы и матрицы в MQL5 и повышение удобства работы - страница 10

 
Этот советник изменяет поведение окна Навигатор.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Бета-версия платформы MetaTrader 5 build 3160: Векторы и матрицы в MQL5 и повышение удобства работы

fxsaber, 2022.01.25 23:25

// Ловим баг CopyTicks*.

void OnInit()
{
  MqlTick LastTick;
  MqlTick HistoryTick[];
  
  Sleep(5000);
  
  if (SymbolInfoTick(_Symbol, LastTick) && (CopyTicks(_Symbol, HistoryTick, COPY_TICKS_ALL, 0, 1) == 1) &&
      (LastTick.time - HistoryTick[0].time > 10))
  {
    Alert(LastTick.time);
    ArrayPrint(HistoryTick);
  }
  
  ChartSetSymbolPeriod(0, NULL, (_Period == PERIOD_M1) ? PERIOD_M2 : PERIOD_M1);
}
Попробуйте скроллить данные в окне Навигатор во время работы этого советника.
 
Roman #:

Логика не нарушена, тернарное условие по прежней логике выполняется.
Отличие только в выносе в переменную, это не логика. 

Совершенно разная логика у этих двух записей.

   bool hs = HistorySelect(0, INT_MAX);
   int hot = HistoryOrdersTotal()-1;
    
   return(Step() && hs ? hot : 0);
   return(Step() && HistorySelect(0, INT_MAX) ? HistoryOrdersTotal()-1 : 0);

Это азы. Возможно, кто-то сможет объяснить.

 
fxsaber #:

Возможно, кто-то сможет объяснить.

экономный && и порядок.

этим двоим надо вообще запретить комментировать чужие репорты в баг-репорт ветках.

 
fxsaber #:

Совершенно разная логика у этих двух записей.

Это азы. Возможно, кто-то сможет объяснить.

В этом случае тернарное условие обрабатывает исторические, а не текущие данные.

   bool hs = HistorySelect(0, INT_MAX);
   int hot = HistoryOrdersTotal()-1;
    
   return(Step() && hs ? hot : 0);
 
Ihor Herasko #:

Автоторговлю разрешили? Потому как без нее результат будет всегда одинаковый.

У меня так без автоторговли:

И вот так с автоторговлей:

Конечно да. У меня на этой демке работает советник. И запуск скрипта ему не помеха.
 
TheXpert #:

экономный && и порядок.

этим двоим надо вообще запретить комментировать чужие репорты в баг-репорт ветках.

Ну так ищи ошибку, раз такой умный.
Пришел под конец, когда уже код разобрали,
показали возможные недочёты, а он тут язвит.
 
TheXpert #:

экономный && и порядок.

этим двоим надо вообще запретить комментировать чужие репорты в баг-репорт ветках.

Тогда объясните нам почему индекс получился 10

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Бета-версия платформы MetaTrader 5 build 3160: Векторы и матрицы в MQL5 и повышение удобства работы

Alexey Viktorov, 2022.01.26 12:14

Я так понимаю, что на новом счёте, где нет других ордеров, вы устанавливаете 10 ордеров, удаляете их, потом запрашиваете HistorySelect(0, INT_MAX); и получаете 10 ордеров в истории

2022.01.26 10:53:48.870 Test (EURUSD,M1)        Alert: Index = 10 HistoryOrderGetTicket(Index) = 1244739395 

Но… если ордеров 10, то максимальный индекс может быть только 9, а вы запрашиваете 10-ый. Откуда он у вас взялся?

И почему эта строка кода

    return(Step() && HistorySelect(0, INT_MAX) ? HistoryOrdersTotal() - 1 : 0);

возвращает 10???

 
Lilita Bogachkova #:

В этом случае тернарное условие обрабатывает исторические, а не текущие данные.

.
hot

 
Roman #:

.

Пока работает функция Step() 

Может изменится: History Select(0, INT_MAX);  и  HistoryOrdersTotal()-1;

 
Lilita Bogachkova #:

Пока работает функция Step() 

Может изменится: History Select(0, INT_MAX);  и  HistoryOrdersTotal()-1;

Теперь понял.
Тогда возможно тернарное условие не подходит для такой задачи,
и есть смысл изменить на if/else конструкцию.

p.s.
Хотя это не решает проблему.