Новая версия платформы MetaTrader 5 build 2007: Экономический календарь, MQL5-программы в виде сервисов - страница 64

 
fxsaber :

Вы можете вызвать OnCalculate из любой другой функции.

Да, это я знаю, и вы должны предоставить все параметры, это громоздко.

Спасибо, в любом случае.

 
Aleksey Vyazmikin :

Пожалуйста. Очень надеюсь, что проблему удастся решить в ближайших обновлениях.

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

Есть у меня и другой индикатор, по структуре очень похожий - имеются функции, и он так же шлет такие ошибки параллельно.

Прошлый билд, где ошибку я не наблюдал 1950 (кажется).

@Slava

Для вашей информации, я получаю аналогичную ошибку 4401 с iBarShift ().

       int shift= iBarShift ( _Symbol , PERIOD_D1 ,time);           // Indicator chart is H1 
       if (shift== WRONG_VALUE )
      {
         printf ( "iBarshift error %i. Bars=%i" , _LastError , Bars ( _Symbol , PERIOD_D1 ));
      }

2019.05.09 11: 27: 22.349 ИндикаторXYZ (EURUSD, H1) Ошибка iBarshift 4401. Столбцы = 0

Это не всегда случается, но я не мог найти способ воспроизвести это. Бары D1 хорошо доступны.

 

Заметил, что Агенты не возвращают в Тестер результат сразу, а через несколько проходов.

Вот доказательство. Лог Агента (только один Агент включен)

GM      0       21:36:05.768    Tester  0 OnTester result 0 : passed in 0:00:07.460
MM      0       21:36:09.795    Tester  1 OnTester result 0 : passed in 0:00:04.024
PM      0       21:36:14.002    Tester  2 OnTester result 0 : passed in 0:00:04.207
CL      0       21:36:18.381    Tester  3 OnTester result 0 : passed in 0:00:04.377
CL      0       21:36:22.769    Tester  4 OnTester result 0 : passed in 0:00:04.386
NL      0       21:36:27.210    Tester  5 OnTester result 0 : passed in 0:00:04.438
JL      0       21:36:31.566    Tester  6 OnTester result 0 : passed in 0:00:04.355
PL      0       21:36:35.745    Tester  7 OnTester result 0 : passed in 0:00:04.177
CL      0       21:36:40.035    Tester  8 OnTester result 0 : passed in 0:00:04.289
PL      0       21:36:44.546    Tester  9 OnTester result 0 : passed in 0:00:04.509


И лог Тестера

2019.05.09 21:36:09.795 Core 1  pass 0 returned result 10000.00 in 0:00:07.460
2019.05.09 21:36:09.795 Core 1  pass 1 returned result 10000.00 in 0:00:04.024
2019.05.09 21:36:22.769 Core 1  pass 2 returned result 10000.00 in 0:00:04.207
2019.05.09 21:36:22.780 Core 1  pass 3 returned result 10000.00 in 0:00:04.377
2019.05.09 21:36:22.780 Core 1  pass 4 returned result 10000.00 in 0:00:04.386
2019.05.09 21:36:35.745 Core 1  pass 5 returned result 10000.00 in 0:00:04.438
2019.05.09 21:36:35.745 Core 1  pass 6 returned result 10000.00 in 0:00:04.355
2019.05.09 21:36:35.745 Core 1  pass 7 returned result 10000.00 in 0:00:04.177
2019.05.09 21:36:44.546 Core 1  pass 8 returned result 10000.00 in 0:00:04.289
2019.05.09 21:36:44.546 Core 1  pass 9 returned result 10000.00 in 0:00:04.509


По времени видно, что 5-й и 6-й проходы дожидались результата 7-го, чтобы отправиться в Тестер. Разве это правильно?


ЗЫ Видно, что 5-й проход дожидался 8 секунд (время, которое ушло на следующие два прохода). Понятно, что это время ожидания могло бы измеряться и минутами.

 

Ошибка и недоработка отладчика

При первой остановке i == 1 (должен быть ноль или не определен). AMOUNT не определен (должен быть 10).

#define AMOUNT 10

void OnStart()
{
  for (int i = 0; i < AMOUNT; i++)
    ;
}
 

Можно ли заставить MetaEditor работать полностью с переменными, используя символ Unicode, пожалуйста.

// Go to Definition (Alt+G) NOT ok
   переменная123=6;           // Intellisense NOT oK. List Names (Ctrl+Space) Ok
   функция456(1);             // Parameter Info (Ctrl+Shift+Space) NOT ok

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void функция456(int a)
  {
//...
  }
standard characters Не работает с символами Юникода.
 
fxsaber :

Ошибка и недоработка отладчика

При первой остановке i == 1 (должен быть ноль или не определен). AMOUNT не определен (должен быть 10).

Препроцессор не может быть отлажен!
 
Alain Verleyen:
Препроцессор не может быть отлажен!

Вы отлично понимаете, что имелось в виду.

 
Alain Verleyen:

@Slava

Для вашей информации, я получаю аналогичную ошибку 4401 с iBarShift ().

2019.05.09 11: 27: 22.349 ИндикаторXYZ (EURUSD, H1) Ошибка iBarshift 4401. Столбцы = 0

Это не всегда случается, но я не мог найти способ воспроизвести это. Бары D1 хорошо доступны.

Это совсем иное поведение, нежели то, что описал Aleksey Vyazmikin.

Вы хотите получить данные с другого ТФ (или символа - не важно), но они не всегда доступны сразу. Сделайте в таймере запрос данных нужного символа/ТФ раз в минуту (например, CopyTime()), тогда ошибка должна пройти.

 
fxsaber:

Ошибка и недоработка отладчика

AMOUNT не определен (должен быть 10).

А в таком случае по Вашему какое значение должно быть у AMOUNT?

    int AMOUNT = 20;
#define AMOUNT   10
void OnStart()
{
        for (int i = 5; i < AMOUNT; i++ )
                ;
}
 
fxsaber:

Ошибка и недоработка отладчика

При первой остановке i == 1 (должен быть ноль или не определен).

Это равносильно
void OnStart()
{
        int i;
        i = 5;
}

первоначально значение i случайное: не исключено, что 1 - это случайное совпадение, а не результат какого-либо вычисления. По крайней мере в x32 так

Причина обращения: