В прошлый раз http://smart-lab.ru/blog/329488.php предложил добавить к скользящим средним каких-нибудь сигналов/индикаторов, чтобы использовать в стратегии для примера. Но ни от кого идей не поступило.
Подумав в указанном направлении, решил добавить в стратегию поиск шаблона/паттерна. Для поиска шаблона буду использовать корреляцию. Такая идея у меня была давно, но никак не доходили руки её проверить. Поэтому устрою проверку её эффективности в стратегии, используемой для примера. Появляется какая-то польза и для меня, так как результат мне не известен и полученные наработки (код) можно будет использовать в дальнейшем.
Сама идея проста – задаем последовательность значений, описывающих некоторое изменение цены, например:
Tpl = { 1, 2, 3, 4, 5, 4, 4.5, 3.5, 4, 3 };
Если указанную последовательность изобразить графически, то получим картинку, показанную на рисунке.
Вычисляем корреляцию между шаблоном и ценами закрытия баров. Если значение корреляции превышает некоторый уровень, например 0.8, то считаем, что имеется совпадение.
Почему выбрал такой шаблон – предположил, что движение, которое может нас заинтересовать, должно быть направленным (первая половина шаблона), но после движения желательно дождаться коррекции (втора половина шаблона), после чего можно пытаться входить в лонг (для шорта зеркально отображенный шаблон).
Всего в шаблоне 10 точек, количество точек можно менять, но одномоментно рассматривается только один шаблон, для примера достаточно, если будет от этого польза, то можно увеличить количество шаблонов, рассматриваемых одномоментно.
Так как мы не ищем строгого соответствия, а рассматриваем корреляцию, то и другие виды шаблонов, близкие к заданному могут нам «посигналить». На рисунке показаны «посигналившие» реальные последовательности (между зелеными вертикальными линиями) и указаны значения их корреляции (кстати, попался участок с очень похожими на шаблон последовательностями, бывают и покорявее).
Таким образом, стратегия для примера вырисовывается следующая: скользящие средние показывают направление торговли – тренд, а шаблон показывает подходящий момент для входа. Так как шаблон быстро «исчезает» – значение корреляции скорее всего изменится за 1-2 бара, то для сигнала шаблона будем делать задержку на указанное количество баров (например 5 баров), чтобы у робота было время «выбрать» цену для входа получше, после чего сигнал будет отменяться.
Функции для вычисления корреляции уже запрограммировал и добавил в код робота: FunCor – вычисляет значения корреляции, FunBeepCor и FunBeepCorProlong вычисляют сигналы корреляции – обычный и с задержкой отмены на 5 баров, соответственно. Еще переписал функции для вычисления элементарных сигналов, теперь они все будут вызывать универсальную функцию FunBooleanSignal4, которая принимает логические значения событий и состояний и вычисляет сигнал. Добавил вывод в файл сигналов в двоичном и десятичном виде. В остальном пока без изменений.
Скачать новую версию можно здесь
Кстати, если кто не знает, в виндусовом калькуляторе (наверное, начиная с семерки), можно включить Вид/Программист, и там появятся разряды двоичного представления, нажимая мышью на разряды можно их включать/отключать, при этом будет отображаться соответствующее число в десятичном виде, либо наоборот – набираешь десятичное число и смотришь, как оно выглядит в двоичном представлении – очень удобно, также есть и 8-(oct) и 16-ричные (hex) представления (если они кому нужны).
т.е. надо искать такую корреляцию, которая статистически даст преимущество — но это уже датамайнинг какой-то, а не программирование робота — вопрос поиска — это другая тема