При вызове функции iCustom() если ошибиться в параметрах пользовательского индикатора и подставить целый параметр (int) в том месте, где должна была находится string вызывает:
2019.03.18 19:41:19.3322019.01.01 00:00:00 Access violation at 0x000000013FC7B9A6 write to 0x0000000000000010
Если запустить оптимизацию этого советника на EURUSD M1
// Создание mqd-Файла из Тестера, чтение mqd-файла из Терминала во фрейм/стандартном режиме работы советника.inputint Range = 0; // 0..10doubleOnTester()
{
uchar Data[];
return(FrameAdd(__FILE__ + " " + _Symbol + " " + (string)_Period, 0, MathRand(), Data)); // Отправили данные в mqd-файл Терминала.
}
#define TOSTRING(A) #A + " = " + (string)(A) + " "voidOnTesterPass()
{
ulong Pass;
string Name;
long ID;
double Value;
while (FrameNext(Pass, Name, ID, Value)) // Прочли очередной проход из mqd-файла.Print(TOSTRING(Pass) + TOSTRING(Name) + TOSTRING(Value)); // Вывели данные mqd-файла
}
voidOnTesterDeinit()
{
ChartClose();
}
intOnInit()
{
if (!MQLInfoInteger(MQL_TESTER) && FrameFirst()) // Удалось инициализировать mqd-файл.OnTesterPass();
return(MQLInfoInteger(MQL_OPTIMIZATION) ? INIT_SUCCEEDED : INIT_FAILED);
}
В Терминале в логе будет
Pass = 1 Name = Test2.mq5 EURUSD 1 Value = 19574.0
Pass = 7 Name = Test2.mq5 EURUSD 1 Value = 19574.0
Pass = 8 Name = Test2.mq5 EURUSD 1 Value = 19574.0
Pass = 2 Name = Test2.mq5 EURUSD 1 Value = 20070.0
Pass = 9 Name = Test2.mq5 EURUSD 1 Value = 19574.0
Pass = 10 Name = Test2.mq5 EURUSD 1 Value = 20070.0
Pass = 3 Name = Test2.mq5 EURUSD 1 Value = 20762.0
Pass = 5 Name = Test2.mq5 EURUSD 1 Value = 21311.0
Pass = 4 Name = Test2.mq5 EURUSD 1 Value = 27672.0
Pass = 0 Name = Test2.mq5 EURUSD 1 Value = 22264.0
Pass = 6 Name = Test2.mq5 EURUSD 1 Value = 17980.0
Автоматически будет создан файл Files\Tester\Test2.EURUSD.M1.0.mqd. Если затем оптимизировать на GBPUSD M1, будет такая же реакция, только везде вместо EURUSD будет GBPUSD.
Так вот после GBPUSD в Терминале невозможно запуском этого советника прочитать данные из Files\Tester\Test2.EURUSD.M1.0.mqd. Можно запустить хоть на GBPCAD, но будут выводиться данные только самого свежего mqd-файла. Соответственно, полностью теряется функционал хранимых mqd-файлов.
Просьба поправить следующим образом. Если есть Test2.EURUSD.M1.0.mqd, то давать его считывать, если произведен запуск советника в Терминале только на EURUSD M1 с именем Test2.
Точно так же, если есть Test123.AUDCAD.M5.0.mqd, то давать его считывать, если произведен запуск советника в Терминале только на AUDCAD M5 с именем Test123.
mqd-файлы удобны тем, что их можно перенести на другую машину (или выйти из фрейм-режима) и продолжить анализ результатов оптимизации. Сейчас, к сожалению, описанный выше баг не дает нормально сделать это.
ЗЫ А лучше всего сделать перегрузку
boolFrameFirst( conststring FileName ); // Инициализирует указатель начала проходов в соответствующем mqd-файле.
В МЕ теперь показывается прогресс компиляции в процентах - порадовало, спасибо, а то у меня есть советник, компенсирующийся более 3 часов и очень хотелось понимать, сколько ещё ждать его компиляцию.
Раз появляются новые функции для работы с массивом, то быть можно как то реализовать быструю функцию на удаление всех не уникальных значений в массиве, в том числе содержащие строки?
В МЕ теперь показывается прогресс компиляции в процентах - порадовало, спасибо, а то у меня есть советник, компенсирующийся более 3 часов и очень хотелось понимать, сколько ещё ждать его компиляцию.
Раз появляются новые функции для работы с массивом, то быть можно как то реализовать быструю функцию на удаление всех не уникальных значений в массиве, в том числе содержащие строки?
Да не, это просто база разных комбинаций листов дерева.
Что то типа такого:
Таких строк порядка 43к, ну и доп логика ещё на 2к строк (не считая дополнительных классов). Не знаю, почему так долго и нормально ли это...
Нарежьте функции на множество более мелких и сократите время компиляции в разы и десятки раз.
Все время тратится на многопроходную оптимизацию портянки инструкций. Если делать длинные функции, то лапша вашего кода получается такой, что каждый проход оптимизации дает улучшение. Это приводит к множеству проходов оптимизатора кода.
Нарежьте функции на множество более мелких и сократите время компиляции в разы и десятки раз.
Все время тратится на многопроходную оптимизацию портянки инструкций. Если делать длинные функции, то лапша вашего кода получается такой, что каждый проход оптимизации дает улучшение. Это приводит к множеству проходов оптимизатора кода.
Так 8 условий && это разве много, мне что их бить типа так для ускорения компиляции?
if(Test_P==6631)if(Povtor_Type_H1>=0 ) if ( Levl_Down_DC>=-7.5) if (Povtor_Low_M15>=1.5 ) if ( TimeH< 21.5 ) if ( Levl_Close_H1s1N< 2.5 ) if ( Levl_first_MN1>=-0.5 ) if ( DonProcVisota_M15>=6.5 ) if ( Levl_High_H4s1< 2.5) CalcTest=CalcTest+1; //(0.55797101 0.35507246 0.08695652)
А на само качество компиляции это влияет, т.е. как быстро будет исполняться код в зависимости от синтаксиса его изложения?
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
При вызове функции iCustom() если ошибиться в параметрах пользовательского индикатора и подставить целый параметр (int) в том месте, где должна была находится string вызывает:
2019.03.18 19:41:19.332 2019.01.01 00:00:00 Access violation at 0x000000013FC7B9A6 write to 0x0000000000000010
В Терминале в логе будет
Автоматически будет создан файл Files\Tester\Test2.EURUSD.M1.0.mqd. Если затем оптимизировать на GBPUSD M1, будет такая же реакция, только везде вместо EURUSD будет GBPUSD.
Так вот после GBPUSD в Терминале невозможно запуском этого советника прочитать данные из Files\Tester\Test2.EURUSD.M1.0.mqd. Можно запустить хоть на GBPCAD, но будут выводиться данные только самого свежего mqd-файла. Соответственно, полностью теряется функционал хранимых mqd-файлов.
Просьба поправить следующим образом. Если есть Test2.EURUSD.M1.0.mqd, то давать его считывать, если произведен запуск советника в Терминале только на EURUSD M1 с именем Test2.
Точно так же, если есть Test123.AUDCAD.M5.0.mqd, то давать его считывать, если произведен запуск советника в Терминале только на AUDCAD M5 с именем Test123.
mqd-файлы удобны тем, что их можно перенести на другую машину (или выйти из фрейм-режима) и продолжить анализ результатов оптимизации. Сейчас, к сожалению, описанный выше баг не дает нормально сделать это.
ЗЫ А лучше всего сделать перегрузку
...
ЗЫ А лучше всего сделать перегрузку
Вот так было бы очень удобно.
В МЕ теперь показывается прогресс компиляции в процентах - порадовало, спасибо, а то у меня есть советник, компенсирующийся более 3 часов и очень хотелось понимать, сколько ещё ждать его компиляцию.
Раз появляются новые функции для работы с массивом, то быть можно как то реализовать быструю функцию на удаление всех не уникальных значений в массиве, в том числе содержащие строки?
В МЕ теперь показывается прогресс компиляции в процентах - порадовало, спасибо, а то у меня есть советник, компенсирующийся более 3 часов и очень хотелось понимать, сколько ещё ждать его компиляцию.
Раз появляются новые функции для работы с массивом, то быть можно как то реализовать быструю функцию на удаление всех не уникальных значений в массиве, в том числе содержащие строки?
3 ЧАСА? Это священный грааль 80 левела?
3 ЧАСА? Это священный грааль 80 левела?
Да не, это просто база разных комбинаций листов дерева.
Что то типа такого:
Таких строк порядка 43к, ну и доп логика ещё на 2к строк (не считая дополнительных классов). Не знаю, почему так долго и нормально ли это...
Да не, это просто база разных комбинаций листов дерева.
Что то типа такого:
Таких строк порядка 43к, ну и доп логика ещё на 2к строк (не считая дополнительных классов). Не знаю, почему так долго и нормально ли это...
Нарежьте функции на множество более мелких и сократите время компиляции в разы и десятки раз.
Все время тратится на многопроходную оптимизацию портянки инструкций. Если делать длинные функции, то лапша вашего кода получается такой, что каждый проход оптимизации дает улучшение. Это приводит к множеству проходов оптимизатора кода.
Да не, это просто база разных комбинаций листов дерева.
Что то типа такого:
Таких строк порядка 43к, ну и доп логика ещё на 2к строк (не считая дополнительных классов). Не знаю, почему так долго и нормально ли это...
Оу... А... сколько выполняется расчет тика советником не замеряли?
Нарежьте функции на множество более мелких и сократите время компиляции в разы и десятки раз.
Все время тратится на многопроходную оптимизацию портянки инструкций. Если делать длинные функции, то лапша вашего кода получается такой, что каждый проход оптимизации дает улучшение. Это приводит к множеству проходов оптимизатора кода.
Так 8 условий && это разве много, мне что их бить типа так для ускорения компиляции?
А на само качество компиляции это влияет, т.е. как быстро будет исполняться код в зависимости от синтаксиса его изложения?
Нарежьте функции на множество более мелких и сократите время компиляции в разы и десятки раз.
Инлайн не пашет?