Статистика тестирования - Состояние окружения - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
А вот такие ошибки невероятно трудно обнаружить. Никак не мог понять, почему один и тот же код на MQL4 и MQL5 работает по-разному. А все оказалось из-за разных сигнатур у одноименной функции.
В MQL4:
int ArrayMinimum( const void&array[], // массив для поиска intcount=WHOLE_ARRAY, // количество проверяемых intstart=0 // с какого индекса начинаем поиск );
В MQL5:
int ArrayMinimum( const void&array[], // массив для поиска intstart=0, // с какого индекса начинаем поиск intcount=WHOLE_ARRAY // количество проверяемых );
А вот такие ошибки невероятно трудно обнаружить. Никак не мог понять, почему один и тот же код на MQL4 и MQL5 работает по-разному. А все оказалось из-за разных сигнатур у одноименной функции.
Это специально сделано или банальная невнимательность?
А вот такие ошибки невероятно трудно обнаружить. Никак не мог понять, почему один и тот же код на MQL4 и MQL5 работает по-разному. А все оказалось из-за разных сигнатур у одноименной функции.
Можно делать и тогда не тратить время на объяснения
// MQL4&5-code
#ifdef __MQL5__
template <typename T> int MT4ArrayMaximum( const T& array[], // массив для поиска int count=WHOLE_ARRAY, // количество проверяемых int start=0// с какого индекса начинаем поиск ) { return(ArrayMaximum(array, start, count)); }
2021.09.1000:16:36.045 MQL5 trying to free invalid memory in large allocator 0x000000445099E0B0, extra=0x000000444E7100002021.09.1000:16:36.045 MQL5 freeing failed in large allocator 0x000000445099E0C02021.09.1000:16:36.045 MQL5 freeing invalid allocator index (out of range) 0x000000444E9F40802021.09.1000:16:36.045 MQL5 freeing invalid allocator index (out of range) 0x000000444E9F8080
b3036, думал, починят. Останется?
А обойти это как-то можно ?
там внутри MT4Orders - может какое "заклинание" сказать надо ?
А обойти это как-то можно ?
там внутри MT4Orders - может какое "заклинание" сказать надо ?
Не думаю, что MT4Orders к этому имеет отношение. Компилируйте в b3007-.
Не думаю, что MT4Orders к этому имеет отношение. Компилируйте в b3007-.
видимо действительно не имеет...
перекомпилил в том-же самом 3036 - тестирование прошло успешно.
единственное что поправил, добавил принудительную конвертацию (IntegerToString) в строке типа такой: Alert("тра-ля "+IntegerToString(lastError));
чудеса :-)
TesterStatistics(STAT_LOSS_TRADES) выскакивает предупреждение на int ставишь double не ругается.
Цитата из справки по ENUM_STATISTICS и функции TesterStatistics() :
"Хотя при вычислении статистики используются показатели двух типов - int и double - функция возвращает все значения в виде double."
TesterStatistics() всегда возвращает значения в double поэтому и ругается на integer.
А вот такие ошибки невероятно трудно обнаружить. Никак не мог понять, почему один и тот же код на MQL4 и MQL5 работает по-разному. А все оказалось из-за разных сигнатур у одноименной функции.
В MQL4:
int ArrayMinimum(
const void& array[], // массив для поиска
int count=WHOLE_ARRAY, // количество проверяемых
int start=0 // с какого индекса начинаем поиск
);
В MQL5:
int ArrayMinimum(
const void& array[], // массив для поиска
int start=0, // с какого индекса начинаем поиск
int count=WHOLE_ARRAY // количество проверяемых
);
То же самое с ArrayMaximum.
Это специально сделано или банальная невнимательность?
А вот такие ошибки невероятно трудно обнаружить. Никак не мог понять, почему один и тот же код на MQL4 и MQL5 работает по-разному. А все оказалось из-за разных сигнатур у одноименной функции.
Это специально сделано или банальная невнимательность?
Почитайте
А вот такие ошибки невероятно трудно обнаружить. Никак не мог понять, почему один и тот же код на MQL4 и MQL5 работает по-разному. А все оказалось из-за разных сигнатур у одноименной функции.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Может стоит причесать?
fxsaber, 2017.02.06 20:13
Можно делать и тогда не тратить время на объяснения#ifdef __MQL5__
template <typename T>
int MT4ArrayMaximum(
const T& array[], // массив для поиска
int count=WHOLE_ARRAY, // количество проверяемых
int start=0 // с какого индекса начинаем поиск
)
{
return(ArrayMaximum(array, start, count));
}
#define ArrayMaximum MT4ArrayMaximum
#endif
void OnStart()
{
int Array[] = {5, 4, 3, 2, 7};
Print(ArrayMaximum(Array, 3));
return;
}
Обновился на 3037, в журнале постоянно вот такое: