Библиотеки: MultiTester - страница 41

 
Sleep на 10 секунд тоже не помогает. Решает проблему только очистка той папки.
 
klycko #:
Sleep на 10 секунд тоже не помогает. Решает проблему только очистка той папки.

Выложите код для оптимизации MQL5\Experts\Examples\MACD\MACD Sample.mq5. Тогда можно попробовать воспроизвести. Сейчас конструктива почти нет.

 
fxsaber #:

Выложите код для оптимизации MQL5\Experts\Examples\MACD\MACD Sample.mq5. Тогда можно попробовать воспроизвести. Сейчас конструктива почти нет.

Спасибо! Попробую подготовить файлы и выложу. Сейчас пока все в непричёсанном виде.

 
fxsaber #:

Выложите код для оптимизации MQL5\Experts\Examples\MACD\MACD Sample.mq5. Тогда можно попробовать воспроизвести. Сейчас конструктива почти нет.

Добрый день!

Подготовил файлы и прилагаю.

Оптимизация с 25.03 по 20.05.2024 на таймфрейме M1.

Депозит 17000. Плечо 40. Максимум комплексного критерия.


Сначала нужно для чистоты эксперимента очистить папку "C:\Users\ASUS\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache"

Скрипт Nocturne надо запускать по одному параметру для оптимизации.

Тогда он выдает:

По первому  параметру:   ProfitNow -1478    ParamMax 0.37    в первый раз

По второму  параметру:   ProfitNow -379     ParamMax 30      в первый раз

По третьему параметру:   ProfitNow -379     ParamMax 6       в первый раз


По третьему параметру:   ProfitNow -379     ParamMax 6       повторно

По третьему параметру:   ProfitNow -379     ParamMax 6       повторно

По третьему параметру:   ProfitNow -379     ParamMax 6       повторно


Здесь показано зависание в кеше данных по третьему параметру.


А теперь нужно снова очистить папку "C:\Users\ASUS\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache"

И тогда повторение заново:


По первому  параметру:   ProfitNow -1478    ParamMax 0.37    в первый раз

По второму  параметру:   ProfitNow -379     ParamMax 30      в первый раз

По третьему параметру:   ProfitNow -379     ParamMax 6       в первый раз


По третьему параметру:   ProfitNow -379     ParamMax 6       повторно

По третьему параметру:   ProfitNow -379     ParamMax 6       повторно

По третьему параметру:   ProfitNow -379     ParamMax 6       повторно


В строках 151-154 скрипта Nocturne написано все как вы меня инструктировали:

Run(Odinar);

int GLOC = MTTESTER::GetLastOptCache(Bytes); // Получили opt-файл в байтовый массив Bytes

TESTERCACHE<ExpTradeSummary> Cache;

bool CL = Cache.Load(Bytes);                 // Подаём в Cache байтовый массив Bytes


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

Однако экспериментально я установил, что если перед запуском Run убрать все opt-файлы вручную 

из папки "C:\Users\ASUS\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache",

то мой код работает правильно и проводит оптимизацию по выбранному параметру.


Если же эту папку не чистить, то Тестер повторные оптимизации (с теми же самыми неизменными данными) не проводит, а считывает

уже имеющийся opt-файл из этой папки. Это хорошо видно при неоднократном запуске вручную одной и той же оптимизации. 

Видно, что реальная оптимизация производится только в первый раз, а потом - только считывание opt-файла из папки. 

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


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

Но я не знаю, как это сделать. Пока же в кеше зависают данные от предыдущей реальной оптимизации (не соответствующие повторно считанным из папки).

К сожалению, из скрипта при помощи FolderClean нельзя очистить эту папку, потому что это запрещено в MQL5 - 

она вне "песочницы" и заполняется только Тестером стратегий.


Может следует создать средствами С++ какую-то внешнюю примочку и запускать ее из скрипта.


С уважением, Александр

Файлы:
 

Ошибка в тексте:



Добрый день!

Подготовил файлы и прилагаю.

Оптимизация с 25.03 по 20.05.2024 на таймфрейме M1.

Депозит 17000. Плечо 40. Максимум комплексного критерия.


Сначала нужно для чистоты эксперимента очистить папку "C:\Users\ASUS\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache"

Скрипт Nocturne надо запускать по одному параметру для оптимизации.

Тогда он выдает: 

По первому  параметру:   ProfitNow -1478    ParamMax 0.37    в первый раз

По второму  параметру:   ProfitNow -379     ParamMax 30       в первый раз

По третьему параметру:   ProfitNow -379     ParamMax 6        в первый раз


По первому параметру:   ProfitNow -379     ParamMax 6        повторно

По второму параметру:   ProfitNow -379     ParamMax 6         повторно

По третьему  параметру:   ProfitNow -379     ParamMax 6       повторно


Здесь показано зависание в кеше данных по третьему параметру.


А теперь нужно снова очистить папку "C:\Users\ASUS\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache"

И тогда повторение заново:


По первому  параметру:   ProfitNow -1478    ParamMax 0.37    в первый раз

По второму  параметру:   ProfitNow -379     ParamMax 30        в первый раз

По третьему параметру:   ProfitNow -379     ParamMax 6         в первый раз


По первому  параметру:   ProfitNow -379     ParamMax 6         повторно

По второму   параметру:   ProfitNow -379     ParamMax 6         повторно

По третьему параметру:   ProfitNow -379     ParamMax 6         повторно


В строках 151-154 скрипта Nocturne написано все как вы меня инструктировали:

Run(Odinar);

int GLOC = MTTESTER::GetLastOptCache(Bytes); // Получили opt-файл в байтовый массив Bytes

TESTERCACHE<ExpTradeSummary> Cache;

bool CL = Cache.Load(Bytes);                 // Подаём в Cache байтовый массив Bytes


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

Однако экспериментально я установил, что если перед запуском Run убрать все opt-файлы вручную 

из папки "C:\Users\ASUS\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache",

то мой код работает правильно и проводит оптимизацию по выбранному параметру.


Если же эту папку не чистить, то Тестер повторные оптимизации (с теми же самыми неизменными данными) не проводит, а считывает

уже имеющийся opt-файл из этой папки. Это хорошо видно при неоднократном запуске вручную одной и той же оптимизации. 

Видно, что реальная оптимизация производится только в первый раз, а потом - только считывание opt-файла из папки. 

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


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

Но я не знаю, как это сделать. Пока же в кеше зависают данные от предыдущей реальной оптимизации (не соответствующие повторно считанным из папки).

К сожалению, из скрипта при помощи FolderClean нельзя очистить эту папку, потому что это запрещено в MQL5 - 

она вне "песочницы" и заполняется только Тестером стратегий.


Может следует создать средствами С++ какую-то внешнюю примочку и запускать ее из скрипта.


С уважением, Александр

 

Я выложил своего робота для оптимизации, так как на его перечень параметров ориентирован Nocturne.

А для  MQL5\Experts\Examples\MACD\MACD Sample.mq5 нужна сильная переделка.


А кстати не проясните зачем нужен параметр   input int inNum = 0;

Или это просто атавизм?

 
fxsaber #:

Выложите код для оптимизации MQL5\Experts\Examples\MACD\MACD Sample.mq5. Тогда можно попробовать воспроизвести. Сейчас конструктива почти нет.

Добрый день!

Все мои проблемы удалось решить с помощью Александра Славского: https://www.mql5.com/ru/users/s22aa

Он мне прислал код удаления содержимого Cache.

Напрямую почистить Cache не получалось, так как он вне песочницы.

Может кому-то это будет полезно перед запуском процедуры Run, чтобы результаты прошлых оптимизаций не препятствовали новым.

Я прилагаю этот скрипт.

Ваши библиотеки и эта процедура очистки обеспечили мне возможность последовательной оптимизации робота.

Большое спасибо за эти коды и вашу помощь.

С уважением, Александр

Aleksandr Slavskii
Aleksandr Slavskii
  • 2024.05.27
  • www.mql5.com
Профиль трейдера
Файлы:
 
klycko #:

Тестер повторные оптимизации (с теми же самыми неизменными данными) не проводит, а считывает

уже имеющийся opt-файл из этой папки. Это хорошо видно при неоднократном запуске вручную одной и той же оптимизации. 

Видно, что реальная оптимизация производится только в первый раз, а потом - только считывание opt-файла из папки. 

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

sinput uint Range = 2;

void OnTesterInit( void )
{
  ::MathSrand((int)::TimeLocal());

  const int Start = ::MathRand();
  const int Step = ::MathRand();

  const uint TmpRange = (::Range < 2) ? 2 : ::Range;

  ::ParameterSetRange("Range", true, TmpRange, Start, Step, Start + (TmpRange - 1) * Step);
}
 
klycko #:

код удаления содержимого Cache.

В MTTester.mqh есть такая очень востребованная функция, когда делаешь много одиночных прогонов.

  static bool DeleteLastTST( void )
  {
    const string Path = ::TerminalInfoString(TERMINAL_DATA_PATH)+ "\\Tester\\cache\\";
    string FileNames[];

    const int Size = MTTESTER::GetFileNames(Path, "*.tst", FileNames);

    return(Size && kernel32::DeleteFileW(Path + FileNames[Size - 1]));
  }

Если заменить tst на opt, то будет удалять последний opt-файл. Чистить всю папку Cache видится избыточным.

 
Спасибо!