да чет никому не интересно)
думаю на этой неделе закончу с оптимизацией
Я в теме, просто надо было немного подумать над планом оптимизации перед тем, как запускать метатрейдер. В общем, что пришло в голову:
1) Проаназировав немного код, увидел, что некоторые параметры не надо оптимизировать, так как они совсем не играют никакой роли (ни в каких функциях не используются). Посему, будет немного меньше работы, но все-таки еще остается много параметров. Все параметры, которые используются в оптимизации я маркировал в файле RS_OptimizationAllParameters.set.
2) Разбиваем параметры по группам: ATR (группа W; включены только 2 параметра FinalTarget_x_H1_ATR и StopLoss_x_H1_ATR без трала, так как метатрейдер уже на предельных значениях), Полосы Боллинджера (группа X), Конверты (группа Y) и Стохастик (группа Z). Для каждой из групп я составил файлы по оптимизации (RS_OptimizationBB.set, RS_OptimizationEvelopes.set, RS_OptimizationStochastic.set), которые надо просто запустить.
3) Выбор временного интервала для оптимизации делаем исходя из общей картинки при прогоне на текущих параметрах, т.е. можно начинать оптимизировать в того периода, когда советник уже начинает показывать плохой результат.
4) Планы по возможной оптимизации:
Сначала обозначим фиксированную группу с индексом _f, оптимизированную с индексом _opt, а оптимизируемую группу оставим без индекса.
I) Алгоритм оптимизации можно построить следующими этапами:
а.1.1) оптимизируем (W, X, Y_f, Z_f) и получаем W_opt, X_opt => оптимизируем (W_opt, X_opt, Y, Z_f) и получаем Y_opt => оптимизируем (W_opt, X_opt, Y_opt, Z) и получаем Z_opt => в итоге обозначим полученную оптимизированную группу как (W_opt, X_opt, Y_opt11a, Z_opt11a).
а.1.2) оптимизируем (W, X, Y_f, Z_f) и получаем W_opt, X_opt => оптимизируем (W_opt, X_opt, Y_f, Z) и получаем Z_opt => оптимизируем (W_opt, X_opt, Y, Z_opt) и получаем Y_opt => в итоге обозначим полученную оптимизированную группу как (W_opt, X_opt, Y_opt12a, Z_opt12a).
a.1.3) усредняем полученные параметры из а.1.1) и а.1.2), и получаем группу, обозначенную как (W_a, X_a,Y_a,Z_a):=( W_opt, X_opt, (Y_opt11a+Y_opt12a)/2, (Z_opt11a+Z_opt12a)/2 ).
Аналогично делаем при фиксировании других групп параметров, т.е.:
b.1.1) оптимизируем (W, X_f, Y, Z_f) и получаем W_opt, Y_opt => оптимизируем (W_opt, X, Y_opt, Z_f) и получаем X_opt => оптимизируем (W_opt, X_opt, Y_opt, Z) и получаем Z_opt => в итоге обозначим полученную оптимизированную группу как (W_opt, X_opt11b, Y_opt, Z_opt11b).
b.1.2) оптимизируем (W, X_f, Y, Z_f) и получаем W_opt, Y_opt => оптимизируем (W_opt, X_f, Y_opt, Z) и получаем Z_opt => оптимизируем (W_opt, X, Y_opt, Z_opt) и получаем X_opt => в итоге обозначим полученную оптимизированную группу как (W_opt, X_opt12b, Y_opt, Z_opt12b).
b.1.3) усредняем полученные параметры из b.1.1) и b.1.2), и получаем группу, обозначенную как (W_b, X_b,Y_b,Z_b):=( W_opt, (X_opt11b+X_opt12b)/2, Y_opt, (Z_opt11b+Z_opt12b)/2 ).
И в последнем случае:
с.1.1) оптимизируем (W, X_f, Y_f, Z) и получаем W_opt, Z_opt => оптимизируем (W_opt, X, Y_f, Z_opt) и получаем X_opt => оптимизируем (W_opt, X_opt, Y, Z_opt) и получаем Y_opt => в итоге обозначим полученную оптимизированную группу как (W_opt, X_opt11c, Y_opt11c, Z_opt).
с.1.2) оптимизируем (W, X_f, Y_f, Z) и получаем W_opt, Z_opt => оптимизируем (W_opt, X_f, Y, Z_opt) и получаем Y_opt => оптимизируем (W_opt, X, Y_opt, Z_opt) и получаем X_opt => в итоге обозначим полученную оптимизированную группу как (W_opt, X_opt12c, Y_opt12c, Z_opt).
с.1.3) усредняем полученные параметры из c.1.1) и c.1.2), и получаем группу, обозначенную как (W_c, X_c,Y_c,Z_c):=( W_opt, (X_opt11c+X_opt12c)/2, (Y_opt11b+Y_opt12b)/2, Z_opt ).
d) усредняем итоговые параметры из пунктов a.1.3), b.1.3), c.1.3) и, возможно, подходим к оптимуму еще ближе:
(W_opt, X_opt,Y_opt,Z_opt):=( (W_a+W_b+W_c)/3, (X_a+X_b+X_c)/3, (Y_a+Y_b+Y_c)/3, (Z_a+Z_b+Z_c)/3 ).
Таким образом, получается пройтись по всевозможным ситуациям, когда можно получить разные значения, усредняя их на каждом этапе. В общем, работы и времени не мало придется потратить, но пока не вижу другого способа, как максимально можно приблизиться к оптимуму.
Замечу, что в алгоритме не использовались всевозможные комбинации с группой W, а просто усреднения на конечном этапе, так как эта группа кажется больше имеет второстепенное значение. Хотя, по-хорошему, с этой группой надо бы тоже комбинировать оптимизацию.
II) Другой вариант оптимизации состоит в том, что мы просто фиксируем группы параметров и берем то, что есть. Варианты, например, следующие:
а) оптимизируем (X, Y_f, Z_f) и получаем X_opt => оптимизируем (X_opt, Y, Z_f) и получаем Y_opt => оптимизируем (X_opt, Y_opt, Z) и получаем Z_opt => в итоге просто берем оптимизированную группу (X_opt, Y_opt, Z_opt).
или
b) оптимизируем (X_f, Y, Z_f) и получаем Y_opt => оптимизируем (X, Y_opt, Z_f) и получаем x_opt => оптимизируем (X_opt, Y_opt, Z) и получаем Z_opt => в итоге просто берем оптимизированную группу (X_opt, Y_opt, Z_opt).
и т.д.
Но тут естественный вопрос: а что делать с другими комбинациями групп параметров ...? В случае I) все варианты
были перепробованы, что кажется более точным алгоритмом для нахождения оптимума.
Еще возникает проблема подгонки оптимизированных параметров под историю. Но это обычная история и тут уже потом надо
смотреть на результат.
В общем, я бы предложил вместе как-то согласовать работу по оптимизации и тогда просто запускать все по алгоритму. Возможно, мои сет-файлы еще надо прорабатывать, но я уже брал значения на пределе, после которого метатрейдер отказывался оптимизировать из-за слишком большого объема информации; иначе, надо будет разбивать еще на более мелкие группы, чтобы получить более точные значения, но тогда время работы вырастает из-за большего количества комбинаций ...
Пилотный вариант оптимизации я мог бы уже на GBPUSD запустить: 15-минутный ТФ, период 2005.10.01-2012.11.05. Время
оптимизации при запуске у меня отображалось вначале около 80 часов, но потом может, конечно, и больше стать.







