Обработка сложных событий с помощью цепочек

в 4:26, , рубрики: Алгоритмы, обработка сигналов, прогнозирование, Программирование, статистический анализ, метки: , ,

В статье описывается метод обработки сложных событий с помощью цепочек. В качестве практического приложения была выбрана относительно простая задача — прогнозирование движения валютного курса.

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

Введение

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

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

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

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

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

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

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

Постановка задачи

Попытаемся спрогнозировать направление движения курса EURUSD на рынке FOREX. Берем историю в виде одноминутных баров и пытаемся прогнозировать: цена пойдет вверх, или цена пойдет вниз? Если ни в том ни в другом уверенности нет, то даем неопределенный ответ. Полученные ответы потом сравниваем с реальным результатом и выясняем — верный был дан прогноз или нет.

В качестве платформы для реализации подойдет тестер стратегий MetaTrader 4 или 5. Пятая версия более предпочтительна, так как поддерживает Объектно-ориентированное программирование, но вполне можно обойтись и четвертой.

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

Я, при решении задачи, реализовал свой тестер на языке Java, что для меня оказалось оправданным.

Далее, реализуем алгоритм построения цепочек и используем его для прогнозирования.

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

Тестирование стратегий

При тестировании определяем количество пипсов минимального дохода (MinProfit), максимального убытка (MaxLoss) и задаем количество времени, за которое мы хотим увидеть результат (FeedbackHours). Последним параметром задается задержка между появлением исходных данных и использования их при прогнозировании. Для приближения к реальным условиям также учитываем спред (Spread).

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

MinProfit — 200 пипс
MaxLoss — 200 пипс
FeedbackHours — 24*7 часов
Spread — 30 пипс

Параметры MinProfit и MaxLoss взяты не слишком большими, чтобы время тестирования было не слишком велико. С такими параметрами стратегия будет напоминать пипсовку. Получать стабильный доход от пипсовки — мечта почти всех трейдеров. Попробуем им помочь.

Параметр FeedbackHours выбран не слишком маленьким, так как при меньшем его значении результат не всегда успевает сформироваться. Если учесть, что целью является поиск долгосрочных тенденций, то можно безболезненно брать и большие значения. Впрочем, уменьшая время ожидания результата можно получать преимущество во времени.

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

При тестировании одноминутная история за 2010-2011 годы бралась с серверов InstaTrader и MetaQuotes. Делать тестирование в более широких пределах (более двух лет) мне оказалось технически сложно.

Интерпретация результатов

Принятые величины задают вероятность выигрыша при случайном движении цены на уровне 17/43 (примерно 0,3953).

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

Если полученный результат будет меньше этого значения, то на метод следует ориентироваться с точностью до наоборот. То есть, если получен результат “Покупай”, то необходимо продавать, если получен “Продавай”, то необходимо покупать.

Если результат будет больше 17/43, то можно говорить о том, что метод эффективен и развитие его может принести результат.

Но даже если вероятность выигрыша будет более 0,5, то будет ошибкой считать, что так называемый “грааль” найден. Прибыльный метод очень быстро распространится и его преимущества очень быстро исчерпаются (1, 2).

Это, собственно, и является конечной целью данной работы. Если статистические методы перестанут оправдывать себя, то исчезнет всякая возможность для спекуляций.

Грубая оценка

Сначала сделана грубая оценка. То есть, на каждом шаге эксперт говорит одновременно “Покупай” и “Продавай”. Полученная выигрышность дает информацию о тенденициях в поведении цены. Если выигрышность близка к 0,3953, то можно говорить об отсутствии определенности. Если она более 0,3953, то движение цены подвержено тенденциям, если менее — движение горизонтальное.

Причем, если отклонение в ту или иную сторону достаточно большое, то будут оправданы стратегии, при которых MinProfit не равен MaxLoss.

Практическое исследование показало, что за 2010-2011 годы получена выигрышность на уровне 0,4250, что лучше выигрышности на случайной цене на 0,0297. Увеличение выигрышности достаточно заметное, и оно наблюдалось на протяжении всего времени тестирования.

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

Грубая оценка проводилась также на периоде с 2000 по 2011 годов включительно и была получена выигрышность 0,4212. То есть, цена EURUSD в целом подвержена тенденциям, иногда в большей степени, иногда в меньшей.

Анализ цены

Будем вести технический анализ, поэтому изучим форму движения цены: изгибы, наклоны в ту или иную сторону, под тем или иным углом. Можно привлекать множество разнообразных индикаторов, но в данном случае используем цепочку изменения цен Open.

Например, примем текущей дату 4 января 2010 г. и время 23:58. В это время цена открытия составляла 1,44163. А в предыдущую минуту цена составляла 1,44165, то есть, цена изменилась на -2 пункта. Еще минутой ранее цена составляла 1,44161, то есть, цена изменилась на +4 пункта. В результате получаем цепочку: -2, +4, +3, +5, -6, +6, -2, +0, +3… Цепочки, при необходимости, можно делать длинными.

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

Получившиеся цепочки принимаем за качественные характеристики цены. Далее ведем их подсчет. В памяти производим поиск наболее длинной цепочки, которая наблюдается в данный момент времени. Если в памяти ничего не найдено — рассматриваем цепочку длиной 1 (в данном случае: -1).

По найденной цепочке запоминаем конечный результат (цена идет вверх, цена идет вниз, не определено). Если по данной цепочке получился определенный результат, то есть, цена всегда идет вверх или цена всегда идет вниз или всегда не определено, то так и оставляем. Иначе — удлинняем цепочку на один и запоминаем для нее текущий результат.

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

Для оценки эффективности вопользуемся полученной базой данных при торговле. Если по текущей цепочке в памяти имеется определенный результат, то ставим на него. В результате за 2010-2011 годы получена выигрышность 0,4281, что лучше результата грубого анализа на 0,0031 и лучше выигрышности на случайной цене на 0,0328.

Улучшение не сильно заметно, по сравнению с результатом грубого анализа. Это можно объяснить тем, что выбран относительно небольшой диапазон движения цены — 200 пипс, и стратегия напоминает “пипсовку”. С другой стороны, это говорит о том, что метод построения цепочек может оказаться недостаточно эффективным и его необходимо изменить. Пока же удовлетворимся тем, что на протяжении всего времени тестирования улучшение результата наблюдается стабильно.

При тестировании на более широких движениях цены, эксперт показывает более интересные результаты. Нередко демонстрируется даже положительная прибыльность.

Впрочем, на этапе построения цепочек результативность не обеспечивается, производится, всего лишь, изучение поведения цены.

Согласование сигналов

Не исключена ситуация, когда в одну минуту имеем сигнал на покупку, а в следующую — на продажу. При условии, что цена изменилась не сильно — чему верить?

Задача из области теории игр. Мы пытаемся понять, какие из сигналов верны, а какие являются отвлекающими или даже ложными. В результате, необходимо переиграть оппонентов, в данном случае, других участников рынка FOREX.

Согласование производим по тому же самому принципу: выстраиваем цепочки последних сигналов, учитываем изменение цены, собираем статистику по выигрышности.

При тестировании за 2010-2011 годы была получена выигрышность 0,4293, что лучше, чем при простом анализе цены на 0,0012.

Увеличение выигрышности почти не заметно. Временами отмечался очень плохой результат, значительно хуже не только результата грубой оценки, но и результата на совершенно случайной цене, то есть менее 0,3953. Иногда отмечался даже результат около 0,3. Но иногда наблюдались и очень удачные периоды, когда результат, при столь высокой комиссии, был даже на уровне 0,5. Отсюда вывод — иногда эксперт обыгрывает рынок, а иногда рынок обыгрывает эксперта.

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

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

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

Отбор сигналов

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

Была сделана попытка произвести простой отсев. Вычисляется некоторый параметр, и если он меньше (или больше) среднего значения, то сигнал отсеивается. В некоторых случаях удавалось получать стабильно выигрышную стратегию. Но сделано пока недостаточно, чтобы говорить о максимальном результате.

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

Кризисное управление

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

Ведение профилактики

На этом этапе собираем статистику по возникающим кризисным ситуациям и заранее избегаем их.

Пример прибыльной стратегии

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

MinProfit — 300 пипс
MaxLoss — 2700 пипс
FeedbackHours — 24*7*4 часов
Spread — 30 пипс

Из-за того, что в 2007 году результат слишком часто не формировался за 4 недели (цена долго колебалась в коридоре менее 600 пипс), 2007 год был просчитан исходя из FeedbackHours — 24*7*8 часов.

Грубая оценка
image

При такой стратегии выигрыш можно получать только тогда, когда цена движется горизонтально и движется с размахом преимущественно более 600 пипс, но менее 5400 пипс. Из результатов видно, что преимущественно горизонтальное движение цены наблюдалось только в послекризисном 2009 году.

Анализ цены
image

Анализ цены дает представление о поведении. Если поведение со временем не меняется, то стратегия будет выигрышной. Из результатов видно, что до 2008 года включительно поведение цены меняется почти постоянно, а это значит, что стратегии основанные на повторяемости движения приводили к убытку.

Возможно, это и стало причиной кризиса 2008 года, когда финансовые структуры понесли огромные убытки и когда обанкротилось несколько крупнейших банков. Начиная с 2009 года в движении цены появилась предсказуемость, которая имеет тенденцию со временем расти. Это может быть следствием того, что масштабы стимулирования экономики в это время также растут.

Согласование сигналов
image

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

Отбор сигналов
image

Как сказано выше, алгоритм отбора сигналов реалиован не был, но был реализован простой отсев, при котором отсеивались те ситуации, которые встречались реже обычного. Это позволило улучшить результат, но по результатам нескольких лет, все таки, наблюдались убытки. Особенно высокая убыточность наблюдалась в предкризисном 2007 году.

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

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

Выводы

Движение цены EURUSD на рынке FOREX не случайно и его поведение, в большинстве случаев, имеют тенденцию. Это говорит о его предсказуемости.

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

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

Автор: luksian


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js