Для начала несколько банальностей. Торговый алгоритм состоит из правил входа и выхода. Проверка набора правил обычно заключается в моделировании торговли на истории. Алгоритм пробегает по историческому набору данных, моделируя сделки и считая прибыльность. Потом параметр меняется - и прогон повторяется. Снова и снова...
Но есть способ лучше! (с) )). В самом деле, если зафиксировать набор правил выхода, то на графике цены можно заранее рассчитать точки выхода. Следовательно, можно для каждой точки истории точно рассчитать полученный финрезультат. Остается только оптимизировать правила входа, используя вместо набора данных [время, цена] набор [время, финрезультат]
Для того, чтобы опитмизировать правила выхода, необходимо использовать финрезультат выхода. Для этого для каждой точки [t,X] необходимо найти величину максимального отклонения цены от t до момента возврата к уровню X. Грубо говоря, в точке t1 цена была 1,5 затем стала 1,6 и вернулась к 1,5. Значит, в точке t1 финрезультат выхода составил 0,1 что трактуется как упущенная прибыль при покупке и неполученный убыток при продаже.
Окно поиска финрезультата необходимо ограничивать по времени, а сам финрезультат - по величине, чтобы избежать чрезмерного влияния начала длинных трендов.
Честно говоря не совсем понял идею. Возможно картинки бы разъяснили лучше ситуацию. В чем преимущество описанного выше алгоритма перед банальным прогоном всех параметров на истории ?
Ща попробую разжевать. Предположим, вы хотите создать ТС основанную на индикаторах X,Y,Z. Стандартный способ:
вы пишете ТС, назначая правила типа: "входным сигналом считается:
(a1<=X<=a2 && b1<=Y<=b2 && c1<=Z<=c2)" - итого 6 параметров для входа
плюс еще 6 параметров для выхода. Дальше вы загоняете все в тестер и надеетесь что он все сварит.
Предлагаемый способ:
1. Разбиваете область возможных значений индикаторов X,Y,Z на диапазоны. Пусть для простоты - на 10. Получаем 1000 кубиков в трехмерном простанстве X,Y,Z. В тестере, кстати вы делаете то же самое, говоря что A меняется от А1 до А10 с шагом Adelta.
2. Для каждой точки истории считаете финрезультат выхода и сохраняете его статистику для каждого кубика отдельно. Имеем 1000 статистик - для каждого сочетания элементарных диапазонов x,y,z.
3. Отбираем наиболее симпатичные статистики-кубики, в которых оказалось достаточное количество точек и матожидание выхода в которых достаточно велико. Фактически, получаем набор правил выхода, не одно а несколько.
4. На основании набора правил выхода прогоняем историю и получаем массив [t1,t2.....tN] точек времени, - точек, где сработали правила выхода и где в нашей ТС будет совершаться выход.
5. Снова собираем статистику. Только на этот раз финрезультат для каждой точки считается как разница между текущей ценой и ценой в ближайшей точке t.
В результате получаем набор правил-кубиков для входа и набор правил-кубиков для выхода. То есть - несколько оптимальных сочетаний параметров для входа и выхода, полученных путем практически "полного перебора" всех вариантов.
Если что непонятно - спрашивайте, обязательно отвечу.
Не понятно почему такой подход лучше. Оптимизация по скорости вычислений?