Alexey Kozitsyn: Не знаю, про какой GUI Вы говорите, но на вкладке параметры окна тестера можно задать поля старт и стоп. И тестер корректно определяет количество значений параметра.
// Возвращает true только в случае, если выбран (в тестере) режим по реальным тикам// Перед использованием должен быть хотя бы один OnTick вызван тестеромbool IsRealTicks( void )
{
MqlTick Tick;
return(SymbolInfoTick(_Symbol, Tick) && (Tick.volume || !(Tick.flags & TICK_FLAG_LAST)));
}
Пример использования
// Советник будет тестироваться только в режиме по реальным тикамvoidOnTick()
{
staticbool IsRemove = true;
if (IsRemove)
{
IsRemove = MQLInfoInteger(MQL_TESTER) && !IsRealTicks();
if (IsRemove)
{
Print("Real ticks mode is needed!");
ExpertRemove();
return;
}
}
//........
}
Не используйте выражения в параметрах принта (или коммента). Указывайте параметры через запятую. Тогда точно все строковые преобразования будут перекрыты
Могли бы Вы на примере пояснить, чем эти две строки отличаются в режиме Оптимизации?
Print((string)i + (string)d);
Print(i, d);
Support Team2017.11.24 08:44
При оптимизации в первом случае перед принтом будет вычислено строковое выражение. Сам принт вызовется, но не отработает
Во втором случае принт вызовется, но не отработает. И не отработает преобразование в строку i+d
При простом тестировании результаты первого и второго вызовов и по времени, и по полученному выводу будут одинаковыми.
Т.е. гораздо дешевле для режимов Оптимизации использовать Print с запятыми, чем формировать для него один входной параметр в виде строки.
С другой стороны, если формировать все в виде одной строки прямо внутри Print, то легко отрубить ее формирование в режиме Оптимизации через
#define Print(A)
но такая конструкция не будет работать, если использовать запятые. Более того, такая конструкция выключит и такое в режиме Оптимизации
Print(SendOrder()); // SendOrder будет проигнорирован при #define Print(A)
Поэтому (и по другим причинам) внутри Print лучше не вызывать, действительно, важные функции. По итогу, если заботиться о производительности в режиме Оптимизации, все равно потребуется делать нечто такое
Т.е. гораздо дешевле для режимов Оптимизации использовать Print с запятыми, чем формировать для него один входной параметр в виде строки.
С другой стороны, если формировать все в виде одной строки прямо внутри Print, то легко отрубить ее формирование в режиме Оптимизации через
но такая конструкция не будет работать, если использовать запятые. Более того, такая конструкция выключит и такое в режиме Оптимизации
Поэтому (и по другим причинам) внутри Print лучше не вызывать, действительно, важные функции. По итогу, если заботиться о производительности в режиме Оптимизации, все равно потребуется делать нечто такое
Извините, может я не понимаю? А зачем в print вызывать важные функции?
я сейчас столкнулся с проблемой, когда в истории более 1000 сделок и при вызове функции обработки истории, например посчитать прибыль истории. + добавить прибыль текущих сделок - информация на графике начинает подтормаживать и подвисает сам терминал. Т.е. котировки приходят с задержкой.
Не знаю, про какой GUI Вы говорите, но на вкладке параметры окна тестера можно задать поля старт и стоп. И тестер корректно определяет количество значений параметра.
Поле шаг.
Поле шаг.
Поле шаг.
Вероятно причина в том, что полям перечисления можно задать собственные значения, которые могут быть не кратны любому шагу.
Вероятно причина в том, что полям перечисления можно задать собственные значения, которые могут быть не кратны любому шагу.
Да, это не баг, поэтому и речь завелась в этой ветке. А шаг Оптимизации, если очень нужно, задается через MQL для enum.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: TesterBenchmark
fxsaber, 2017.11.22 16:54
Вставляем в каждый из MT5-вариантов всего одну строку
Полноценный ускорился на 67%, кустарный - 108%!
Но главное не в этом. Одной строкой получилось ускорить советники! И это в Оптимизаторе, где Comment никакой роли не играет.
Пример использования
Как это сделать в OnInit (без OnTick) - не знаю.Кусок из диалога по упомянутой теме
Могли бы Вы на примере пояснить, чем эти две строки отличаются в режиме Оптимизации?
При оптимизации в первом случае перед принтом будет вычислено строковое выражение. Сам принт вызовется, но не отработает
Во втором случае принт вызовется, но не отработает. И не отработает преобразование в строку i+d
При простом тестировании результаты первого и второго вызовов и по времени, и по полученному выводу будут одинаковыми.
Т.е. гораздо дешевле для режимов Оптимизации использовать Print с запятыми, чем формировать для него один входной параметр в виде строки.
С другой стороны, если формировать все в виде одной строки прямо внутри Print, то легко отрубить ее формирование в режиме Оптимизации через
но такая конструкция не будет работать, если использовать запятые. Более того, такая конструкция выключит и такое в режиме Оптимизации
Поэтому (и по другим причинам) внутри Print лучше не вызывать, действительно, важные функции. По итогу, если заботиться о производительности в режиме Оптимизации, все равно потребуется делать нечто такое
Кусок из диалога по упомянутой теме
Т.е. гораздо дешевле для режимов Оптимизации использовать Print с запятыми, чем формировать для него один входной параметр в виде строки.
С другой стороны, если формировать все в виде одной строки прямо внутри Print, то легко отрубить ее формирование в режиме Оптимизации через
но такая конструкция не будет работать, если использовать запятые. Более того, такая конструкция выключит и такое в режиме Оптимизации
Поэтому (и по другим причинам) внутри Print лучше не вызывать, действительно, важные функции. По итогу, если заботиться о производительности в режиме Оптимизации, все равно потребуется делать нечто такое
Извините, может я не понимаю? А зачем в print вызывать важные функции?
Это не запрещено.
Это не запрещено.
согласен.
просто хотел узнать какой смысл?
я сейчас столкнулся с проблемой, когда в истории более 1000 сделок и при вызове функции обработки истории, например посчитать прибыль истории. + добавить прибыль текущих сделок - информация на графике начинает подтормаживать и подвисает сам терминал. Т.е. котировки приходят с задержкой.