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

 
Andy:

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


Каковы результаты тестирования после этого сообщения? PS Уже вижу про нехватку денег.

Это - отладочное сообщение для нашего внутреннего использования, которое не должно появляться.

Разберёмся

Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - MetaTrader 5
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - MetaTrader 5
  • www.metatrader5.com
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии (советники) перед началом использования их в реальной торговле. При тестировании советника происходит его однократная прогонка с начальными параметрами на исторических данных. При оптимизации торговая стратегия прогоняется несколько раз с различным набором параметров...
 
Slava:

Каковы результаты тестирования после этого сообщения?

Это - отладочное сообщение для нашего внутреннего использования, которое не должно появляться.

Ну результаты такие, что не стало хватать денег для открытия сделки и ни одна не открылась, хотя после написало, что финальный баланс правильный - 1 000 000 руб.

Поэтому и удивился - раньше такого никогда не было, в чем может быть причина? На втором терминале при аналогичных условиях такого не было.

Версия 2007 (пока не видит новую 2009 на счете дилера при запросе через меню).

Реузультат
 
Aleksey Vyazmikin:


Потому что так происходит по факту. Я предполагаю, что проблема в том, что обрабатывающий фреймы советник просто не знает, сколько их будет, поэтому если пришел один, то этого ему достаточно, что бы считать проход успешным, а фреймов, к примеру, должно быть 1000.

Сейчас увидел, что фреймы не потеряны при остановке на локальном агенте оптимизации - прошлый билд 1950 терял (или мне так показалось), но проблема актуальна, если произошел разрыв соединения с агентом.

 
Andy:

Ну результаты такие, что не стало хватать денег для открытия сделки и ни одна не открылась, хотя после написало, что финальный баланс правильный - 1 000 000 руб.

Поэтому и удивился - раньше такого никогда не было, в чем может быть причина? На втором терминале при аналогичных условиях такого не было.

Версия 2007 (пока не видит новую 2009 на счете дилера при запросе через меню).

А можно попросить логи тестерного агента до записи о нулевом балансе?
 
Slava:
А можно попросить логи тестерного агента до записи о нулевом балансе?

Логи

Вот записи с самого начала.

 
Комментарии, не относящиеся к этой теме, были перенесены в "Пользовательские символы. Ошибки, баги, вопросы, предложения.".
 

Может быть, я что-то пропустил, но профилировщик ведет себя странно. MT5 Build 2009.

Индикатор, где все рассчитывается внутри OnCalculate (), он дает% выше 100% для 2 методов (?):

Кроме того, как вы можете видеть, это дает ~ 3 секунды для OnCalculate (), но я также печатаю BEGIN / END в журнале, и это дает ~ 21 секунду (?):

Так что же происходит с профилировщиком сейчас?

 

Все еще на профилировщике. Сборка 2009 года (то же самое в 2007 году).

Как вы можете видеть в моем предыдущем посте, у меня есть метод ApplOperator, который объявлен как абстрактный в родительском классе:

 virtual CGenericType *ApplyOperator(CScope&environment)= NULL ;

Затем реализовано в детском классе:

   virtual CGenericType *ApplyOperator(CScope&environment) override 

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

Но НИЧЕГО для конкретной реализации:

Я не помню, было ли это чем-то новым или уже было так в предыдущих сборках (1995?).

 

Баг компилятора.  Не выдаётся ошибка при модификации константного объекта:

struct A
{
  int arr[];
};

void OnStart()
{
  const A a;
  a.arr[0]= 0;  // Нет ошибки компиляции!
}
 

Ещё один баг.   Здесь в шаблон передаётся константный указатель, но константность теряется.

class A { };

template<typename T>
void f(T * a)
{ 
  *a= *a;  // Нет ошибки компиляции!
}

void OnStart()
{
  f((const A*)NULL);
}
Причина обращения: