Кто-нибудь (желательно из разработчиков) объяснит косяки в оптимизаторе? - страница 3

 
Slava:

.........

И мы храним в одном и том же кеше результаты всех генетических оптимизаций, выполненных по одним и тем же условиям. Если вы что-то поменяете, например хотя бы один диапазон одного из входных параметров, начальный депозит, даты тестирования etc, то это будет уже другой кеш. А если вы перекомпилируете эксперта, то предыдущий кеш будет совсем стёрт.

..........

1. Это абсолютно понятно и давно известно. Но в процессе оптимизации ничего из этого физически изменить нельзя, ибо неактивно.

2. Тут я с Вами не соглашусь. На днях один из советников при оптимизации начал выдавать ошибку runtime из совершенно простейшей функции из включаемого файла (состоит из нескольких функций как то проверка маржи, открытие/закрытие позиций и проверка гэпа (именно проверка гэпа и заглючила)). Так вот, этот файл, условно, называется file5, я его несколько изменил и сохранил под под именем file6. Изменил всё необходимое в сове, откомпилировал (в это время в терминале в поле выбора эксперта был выбран мною редактируемый) и запустил оптимизацию. В журнале пошли теже ошибки, но вместо ожидаемых "ошибка в file6, строка такая-то, колонка такая-то" я увидел "ошибка в file5, строка такая-то, колонка такая-то". Перегрузил терминал и только после этого стало писать "ошибка в file6, строка такая-то, колонка такая-то". 

Это я к тому, что вполне возможно и с кешем происходит нечто подобное.

Вот сегодня я терминал ещё не запускал. Сейчас запущу, выберу совсем другой символ (не использованный ранее) включу оптимизацию и посмотрю, что будет.

3. Если это так, то почему прерванная оптимизация начинается заново?
 

Вы представляете себе, как работает генетический алгоритм?

Как Вы предлаете продолжить прерванную генетическую оптимизацию? Какой смысл в возобновлении прерванной оптимизации?

 
Slava:

Вы представляете себе, как работает генетический алгоритм?

Как Вы предлаете продолжить прерванную генетическую оптимизацию? Какой смысл в возобновлении прерванной оптимизации?

Представляю. Никак не предлагаю. Я не спец в этом.

Но как пользователь, я помню времена, когда прерванная оптимизация продолжалась при повторном запуске с момента остановки. В своё время было много дискуссий по этому поводу.

Но вопрос сейчас состоит в том, что зачем их хранить, если продолжить нельзя, а использование при перекомпилированном советнике не имеет никакой ценности? Может из-за этого и возникают описанные мною ситуации?

 

Раньше у нас не было возможности читать полученные ранее кеши оптимизации в таблицу оптимизации. Поэтому, чтобы не пропали предыдущие расчёты, мы сделали ещё один кеш, который хранил состояния всех поколений конкретной прерванной генетической оптимизации.

После того, как мы пересмотрели наш подход к кешам, получилось следующее:

1. Засчёт того, что кеши из текстовых превратились в бинарные, увеличилась скорость загрузки кешей.

2. Засчёт того, что для каждого набора оптимизируемых параметров организуется свой отдельный кеш, можно наглядно видеть историю оптимизаций.

3. Засчёт того, что мы организовали возможность загрузки кешей в таблицу оптимизации, можно анализировать любую ранее сделанную оптимизацию

4. Кроме этого теперь можно экспортировать и импортировать кеши оптимизации - делиться своими результатами с другими, анализировать чужие результаты (для одиночных запусков наборов параметров нужен эксперт и подключение к тому же самому торговому серверу)

5. Так как появилась возможность загрузки кешей, то отпала необходимость в возобновлении генетической оптимизации. Кстати, вдруг пришла мысль, можно на основе существующего кеша отбирать в первое поколение генетики лучшие результаты предыдущих оптимизаций.

 
Slava:

5. Так как появилась возможность загрузки кешей, то отпала необходимость в возобновлении генетической оптимизации. Кстати, вдруг пришла мысль, можно на основе существующего кеша отбирать в первое поколение генетики лучшие результаты предыдущих оптимизаций.

Я эту мысль на прошлой странице озвучил, видимо она из-за моего изложения витиевато двигалась, главное что дошла до точки назначения :)

 
Slava:

.............

"всё правильно, граждане, всё справедливо, но паспорта нужно носить с собой"...

Слава, вопрос сейчас не в самой генетике, а в том, что, по видимому, есть "протечка". Где-то что-то не срастается. На мой взгляд, при перекомпиляции советника, старые кеши не удаляются, а должны! Отсюда вот и вся свистопляска. Логика совы чуть изменилась, все остальные параметры оптимизации остаются прежними, оптимизатор выхватывает "лучшие проходы" из предыдущего кеша, а они в текущем исполнении совы выдают совершенно другие результаты... Вот в чём беда.

 
Сергей Таболин:

........

Это я к тому, что вполне возможно и с кешем происходит нечто подобное.

Вот сегодня я терминал ещё не запускал. Сейчас запущу, выберу совсем другой символ (не использованный ранее) включу оптимизацию и посмотрю, что будет.

........

Итак...

Провёл оптимизацию.

  • Никаких "пустых" проходов не обнаружил.
  • Все одиночные тесты из разных "уголков" оптимизации полностью соответствуют данным оптимизации.

Изменил в коде >=4 на >=3. Откомпилировал. Запустил оптимизацию.

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

 

P.S.

Перегрузил терминал. Провёл оптимизацию.

  • Никаких "пустых" проходов не обнаружил.
  • Но все одиночные тесты немного отличаются от данных оптимизации...
В общем, есть с чем разбираться....
 

Сергей Таболин:

На мой взгляд, при перекомпиляции советника, старые кеши не удаляются, а должны!

Просто перекомпиляция того же самого исходника или перекомпиляция после внесения изменений?

Перекомпиляция того же самого исходника без изменений не меняет его контрольную сумму, которая используется для проверки актуальности кеша.

 
Slava:

Просто перекомпиляция того же самого исходника или перекомпиляция после внесения изменений?

Перекомпиляция того же самого исходника без изменений не меняет его контрольную сумму, которая используется для проверки актуальности кеша.

Я же писал: "Изменил в коде >=4 на >=3. Откомпилировал."

Да и зачем перекомпилировать, если не внесены изменения?
Причина обращения: