Альтернативная оптимизация ТС

 
В режиме "по реальным тикам" один проход тестера длится иногда довольно долго. Что уж говорить про оптимизацию в таком режиме. Связано это с огромным количеством тиков и муторными проверками на различные условия на каждом тике.

Поэтому может быть интересен альтернативный способ оптимизации ТС

  1. Создается набор различных значений входных параметров ТС, как это делает обычный оптимизатор.
  2. Этот набор делится на группы по N штук.
  3. Для каждой группы создается корзина ТС - N штук соответствующих ТС.
  4. Делается стандартная оптимизация, но уже не ТС, а таких корзин. Грубо говоря, тестер делает в N-раз меньше одиночных проходов, чем при стандартном подходе.
  5. Историю торгов после каждого прохода расщепляем на N-штук (для каждого набора входных параметров). И лучшую историю отражаем в виде OnTester.

Поскольку последний пункт значительно дешевле (миллионы записей тиков vs тысячи записей сделок), чем N стандартных прогонов, то получается существенно сэкономить на количестве дорогих проходов и тем самым во много раз увеличить скорость оптимизации ТС без каких-либо потерь.

 
Интересная идея - типа разбить разные варианты альтернативных настроек на маджики, а потом одним ходом все прогнать... сложность в самокланировании советника внутри себя - нужен какой то класс, и нужно самостоятельно сохранять результаты оптимизации раздельно по каждому маджеку - т.е. надо отдельно учитывать все показатели тестера для каждого маджика. После решения этих двух задач можно экспериментировать с оставшейся скоростью.
 
-Aleks-:
Интересная идея - типа разбить разные варианты альтернативных настроек на маджики, а потом одним ходом все прогнать... сложность в самокланировании советника внутри себя - нужен какой то класс, и нужно самостоятельно сохранять результаты оптимизации раздельно по каждому маджеку - т.е. надо отдельно учитывать все показатели тестера для каждого маджика. После решения этих двух задач можно экспериментировать с оставшейся скоростью.
Зачем? История торгов все будет содержать.
 
Непонятно изложено.
 
Dmitry Fedoseev:
Непонятно изложено.

На примере будет проще. Чтобы понять, на каком интервале суток советник лучше всего показывает, можно пойти двумя путями

  • добавить, задающие интервал торговли, входные параметры и оптимизировать ТС вместе с ними - это стандартный вариант.
  • ничего не добавлять. Но в каждом проходе проанализировать торговлю по часам и выявить наилучший вариант, создав соответствующий OnTester.
Второй вариант будет дешевле. Вот примерно о том же и эта ветка.
 
fxsaber:
Зачем? История торгов все будет содержать.
Если использовать только такие показатели как прибыль, прибыльность, просадка по балансу, процент выиграных сделок, то да, этого будет достаточно, но мне как минимум важно знать просадку по эквити - её надо рассчитывать.
 
-Aleks-:
Если использовать только такие показатели как прибыль, прибыльность, просадка по балансу, процент выиграных сделок, то да, этого будет достаточно, но мне как минимум важно знать просадку по эквити - её надо рассчитывать.
Это делается без проблем во время самого прохода корзины ТС. Т.е. очень простая в решении задача.
 
fxsaber:
Это делается без проблем во время самого прохода корзины ТС. Т.е. очень простая в решении задача.

Да я и не говорю, что это очень сложная задача - просто это надо организовать все...

В общем, вопрос в том, как мультиплицировать (размножать) советники без особых хлопот внутри одного кода - универсально так сказать... 

 

Важно понимать, что выигрыш по времени будет только с корзинами ТС одной природы. Т.е. не получится, если корзина будет состоять из разных ТС. Тогда выигрыша никакого не будет чисто математически. А вот для корзин, составленных из одной ТС, как в первом посте - выигрыш получится за счет одних и тех же единоразовых вычислений для всех ТС в корзине.

Т.е. сам метод не универсален. Нельзя взять любую ТС и слабыми телодвижениями добиться эффекта, акромя таких тривиальных случаев, как выше привел - интервал торговли.

Метод работает, если есть ТС с тяжелыми вычислениями и прямые руки. Универсальное решение слабо себе представляю, хотя мысли есть.

 

А сразу все варианты прогнать за один проход тестера не получится? Зачем делить на группы?

 
Andrey Dik:

А сразу все варианты прогнать за один проход тестера не получится? Зачем делить на группы?

Получится, но это брутфорс. А с делением на группы можно использовать бесплатный ГА оптимизатора.