Pull to refresh

Прогнозирование валютных колебаний статистическими методами

Programming *
С чего все начиналось

Осваивая новое направление в программировании (программирование под платформу MetaTrader), мне пришла идея попробовать свои силы в чем-то большем. Например, найти какой-то нестандартный способ прогнозирования движения цен на валютные пары.

Изначально, предпринимались попытки реализовать либу со всеми статистическими показателями, но на полпути я обнаружил, что таковые уже существуют:
Проанализировав их содержимое, я понял одну простую вещь…

Все функции, описанные и реализованные в вышеизложенных исходниках являются основой стандартных торговых индикаторов.

Для справки
Торговый индикатор — это прежде всего экономико-математическая модель, представляющаяся в удобном виде, чаще всего в виде линий на графике или под ним. Он рисуется вслед за изменениями в цене или других данных о рынке.

Все они берут за основу статистику и математику, а именно: аппроксимацию и интерполяцию, расчет средних значений различных порядков, расчет гистограмм распределения и др. Данные таких индикаторов основываются на показаниях цены в зависимости от времени.

Количество формул просто внушало! Затея казалась практически нереальной, по-этому я решил отложить в сторону мат. расчеты и использовать шаблонный подход.

Как это было

Первый шаг (провал)

Попытавшись следовать примеру индикаторов, я пытался программно анализировать цену на всем историческом промежутке времени. За основу брал размер бара, его объем и направление:

image

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

Второй шаг (провал)

Далее были предприняты попытки найти некие «шаблоны», состоящие из нескольких баров. То-есть, теперь, за основу бралось понятие шаблона, или как я это называю — маска. Также, было введено новое понятие — длина маски.
Соорудив «пирамиду» из вложенных циклов, я запустил первый проход по всей истории в поисках схожих масок длиной в 6 баров. Результат меня шокировал! Программа ничего не нашла за последние 12лет! Совпадений — 0! Что не так?

После нескольких часов «допиливания» алгоритма, выяснилось, что не в нем дело. Все дело в точности вычислений. Действительно, практически нереально найти одинаковые маски такой длины. Не долго думая, добавляю внешний параметр — максимальная точность вычислений. Пробуем опять тестировать, только уже с маской в 3 бара и максимальной точностью 90 процентов. Результат опять шокирует. 206 масок найдено, причем расположены они одна на одной:

image

Попытки изменять длину маски или точность приводили всегда то к нулевому результату, то к «куче» масок, в которой практически ничего нельзя разобрать, что уж говорить о прогнозировании. И снова провал.

Третий шаг — долгожданное прояснение

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

Я оставил позади, идею непосредственного анализа цены, и подключил мат. аппарат, а точнее его реализацию — торговые индикаторы.

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

И тут наступил переломный момент! Мы же можем получать не только значения цены, по историческим данным, но и так-же, беспрепятственно, мы способны рассчитать состояние тренда в любой момент истории.
Остается только техническая часть вопроса.

Чем закончилось

В результате «третьего шага», был разработан алгоритм анализа текущего состояния тренда и поиска шаблонных ситуаций в истории.
image
На скрине, пример работы программы, а именно — одна из найденных масок. Она характеризуется двумя показателями:
1. точность, которая рассчитывается по формулам расчета коэффициента корреляции но с небольшими корректировками диапазона выходных данных (оставил только значения >0, т.к. <0 — это уже совсем противоположный тренд);
2. отношение волатильностей, этот показатель я рассчитываю исходя из высоты текущей и найденной масок, по-этому получаю значения в процентах >0.

Помимо данных показателей, во внимание брались и различные виды дисперсии, линейные и среднеквадратичные отклонения, ранговая корреляция, конкордация и др., но они небыли использованы при расчете прогноза, т.к. уже косвенно в нем заложены, в виде торговых индикаторов (с аппроксимацией или без неё). Что-бы легче было понять логику, взгляните на схему:
image
1. Цену формирует и предоставляет брокер;
2. Индикаторы, считывая значения цены, выдают статистические значения (в виде линий или гисторгамм на графике) Все они имеют открытый исходный код и по-умолчанию доступны в любом торговом терминале;
3. Состояние тренда рассчитывается исходя из значений многих стандартных индикаторов (их список хорошо видно на скриншотах, справа в табличке). Расчет каждого индикатора позволяет упростить схему анализа направления тренда: вверх — зеленый(1) прямоугольник, вниз — красный(0). Комбинации из таких единиц и нулей (78знаков) я и называю — состоянием тренда;
4. Мои расчеты ведутся на основе простого анализа вышеуказанных состояний. После получения данных о цене и времени, я всего-лишь смотрю на дальнейшее поведение рынка и рассчитываю их суммарные значения, волатильность и среднее арифметическое.

Как видите — ничего сложного.

Данная программка успешно показала хороший публичный прогноз на конкурсе идей от 15.03.2012. При следовании указаниям этого прогноза, была возможность заработать более 1500пунктов за 15.02-16.02.2012. В данный момент проходят массовые доработки и оптимизации кода (т.к. вычисления получились ну очень тяжелыми), и уже в скором времени, я выложу его на всеобщее обозрение.

Выводы

Наступив на кучу граблей, теперь уже с уверенностью, могу дать пару советов начинающим трейдерам/исследователям/программистам:
1. Не пытайтесь анализировать конкретные значения цены.
2. Цена — это функция от спроса, предложения и брокерских уловок.
3. Пытайтесь подходить к исследованию вопросов прогнозирования со стороны трейдера, брокера и программиста.

Успешных вам прогнозов!

Подвал

1. Краткое определение индикаторов взято с сайта: http://infofx.ru/
2. Ссылки исходных кодов ведут на решения неизвестных мне людей. Но могу вас уверить, эти сорцы не способны навредить вашему компьютеру, т.к. это файлы обычного текстового формата.
3. К сожалению, нулевая карма не позволяет писать в «Финансы». Адаптировал топик под данный хаб. Как только смогу — перенесу.
4. Я открыт для обсуждения данного вопроса. Буду рад любому замечанию или дополнению.
Tags:
Hubs:
Total votes 24: ↑12 and ↓12 0
Views 15K
Comments Comments 32