четверг, 26 февраля 2009 г.

Foreign Exchange Operations - Множественная корреляция и множествен�

Foreign Exchange Operations - Множественная корреляция и множествен�


Зависимости по среднему [090226_03]




В предыдущем эксперименте исследовали зависимости между закрытиями. В данном эксперименте исследуем зависимости между средними.

Картина прежняя. Только есть небольшое увеличение.

Исследование зависимостей между нормированными по амплитуде с предыдущим [090226_02]




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

Корреляция очень слабая. Для всех есть выделяющаяся зависимость от трех ведущих американских индексов (nasdaq, s&p500 и djia).

Преобразование амплитуды ряда [090226_01]

Проведен эксперимент.

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

Относительное изменение имеет разную амплитуду в разных участках. Нормирование по стандартному отклонению выравнивает ряд по амплитуде.

В дальнейшем лучше рассматривать именно такие нормированные по амплитуде ряды.

среда, 25 февраля 2009 г.

Проверка полной линейной модели [090225_02]









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

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

Результаты представлены на графиках выше.

Ни для одной из бумаг не удалось получить хорошего результата. Это означает одно - крайнее переобучение модели.

Этот путь тупиковый.

Но некоторые выводы можно сделать.

Попытка построения полной линейной модели [090225_01]











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

Было выдвинуто предположение о возможности построения линейной модели выдающей рекомендацию (покупать или продавать) и уровень на котором необходимо совершить сделку. Все эти показатели предполагается рассчитывать как линейное преобразование от разниц параметров в предыдущем дне.
open-high
open-low
open-close
open-mean
high-low
high-close
high-mean
low-close
low-mean
close-mean

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

Пример найденных векторов:

верхний рекомендация нижний

open-high - 0.9147268 1.0741542 2.5748263
open-low 2.2968453 2.4484743 2.4103524
open-close 1.8114637 1.0200746 1.1743096
open-mean 1.2643606 2.3029533 1.0526192
high-low 2.2228336 2.7541876 - 1.477148
high-close 2.2127047 0.0425113 - 0.8429090
high-mean - 1.4183845 0.4282706 - 0.6940659
low-close - 1.8787216 2.4171866 - 2.9777863
low-mean 1.2443177 - 2.9175345 2.9784378
close-mean 0.1371218 - 0.5493977 1.991716


В данном эксперименте данные вектора искались в рамках генетического алгоритма. По каждой модели в популяции моделировалась игра на 1000 последних дней. Качество каждой модели оценивалось по средней доходности в каждом дне. Генетикой искали модель с максимальным качеством.

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

Эксперимент проведен для 8-и бумаг от Сбербанка до Лукойла. Результаты представлены на графиках выше.

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

Результаты оказались не плохими несмотря на то что прогноз осуществлялся из данных только предыдущего дня и не привлекались данные от других бумаг. Кроме того модель была линейной.

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

вторник, 24 февраля 2009 г.

Процент попадания закрытия в окно следующего дня [090224_02]

sber [k = 70%]
sberp [k = 71%]
sngs [k = 66%]
rtkm [k = 77%]
gmkn [k = 73%]
msng [k = 81%]
sibn [k = 62%]
lkoh [k = 67%]

В предыдущем эксперименте мы исследовали как попадает в окно следующего дня среднее предыдущего. В этом эксперименте смотрим на курс закрытия предыдущего дня.

Как видно из результатов закрытие попадает в окно следующего дня чаще.

Процент попадания среднего в окно следующего дня [090224_02]

sber [k = 50%]
sberp [k = 52%]
sngs [k = 49%]
rtkm [k = 70%]
gmkn [k = 53%]
msng [k = 57%]
sibn [k = 53%]
lkoh [k = 56%]

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

Перспективы будущей модели

На сегодняшний момент имеется технология прогнозирования (см. Прогнозируем другие параметры по множественной корреляции и Прогнозируем закрытие по множественной корреляции). Появляется ряд вопросов.

Правильно-ли мы берем оценку качества по корреляции?

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

Как использовать полученные прогнозы?

Допустим у нас имеется некоторая технология прогнозирования будущих параметров в следующем дне. Как их использовать для игры на этой бумаге?

Есть небольшая проблема. В одном из экспериментов (см. Строим модель на прогнозах [090219_06]) мы пытались построить игру по прогнозам изменения среднего. модель имела одно грубое допущение - она всегда реализовывалась по предыдущему среднему курсу. После корректировки получили новую модель (см. Исправленная модель прогнозирования [090219_09]). Результаты упали до нуля. Она в редких случаях могла реализоваться в следующем дне по среднему курсу предыдущего дня.

Таким образом необходимо не только угадывать направление куда играть (вверх или вниз), но на каком уровне открывать позицию. Для этого понадобятся прогнозы среднего, верхнего и нижнего курса. Остается выяснить модель для перевода прогнозов в конкретную рекомендацию. Причем рекомендация будет включать два параметра: направление и уровень.

Будут ли в будущем повторяться эти зависимости?

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

Здесь просматриваются несколько путей проверки.

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

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

Каковы дальнейшие пути повышения качества модели?

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

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

Для дальнейшего совершенствования модели необходимо пробовать следующее.

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

Необходимо расширять входы в ширину. Должны быть решения при добавлении данных от других инструментов.

Необходимо вводить другие инструменты оценки зависимостей. Одним из таких инструментов может быть метод box-counting. Другими методами могут быть - оценка ошибки, оценка угадывания знака.

Необходимо вводить другие прогнозные инструменты. Это может быть нейронная сеть, ассоциативные сети и другие нелинейные преобразователи.


Прогнозируем другие параметры по множественной корреляции [090224_01]

MEAN

inp[(open(t-1)-close(t-1))/mean(t-1)] to out[(mean(t)-open(t-1))/mean(t-1)] corr = 0.7057210
inp[(close(t-1)-open(t-1))/mean(t-1)] to out[(mean(t)-open(t-1))/mean(t-1)] corr = 0.7057210
inp[(close(t-1)-mean(t-1))/mean(t-1)] to out[(mean(t)-open(t-1))/mean(t-1)] corr = 0.6742728
inp[(mean(t-1)-close(t-1))/mean(t-1)] to out[(mean(t)-open(t-1))/mean(t-1)] corr = 0.6742728

LOW
inp[(open(t-1)-close(t-1))/mean(t-1)] to out[(low(t)-open(t-1))/mean(t-1)] corr = 0.7019672
inp[(close(t-1)-open(t-1))/mean(t-1)] to out[(low(t)-open(t-1))/mean(t-1)] corr = 0.7019672
inp[(close(t-1)-mean(t-1))/mean(t-1)] to out[(low(t)-open(t-1))/mean(t-1)] corr = 0.6822825
inp[(mean(t-1)-close(t-1))/mean(t-1)] to out[(low(t)-open(t-1))/mean(t-1)] corr = 0.6822825

HIGH
inp[(open(t-1)-close(t-1))/mean(t-1)] to out[(high(t)-open(t-1))/mean(t-1)] corr = 0.7002619
inp[(close(t-1)-open(t-1))/mean(t-1)] to out[(high(t)-open(t-1))/mean(t-1)] corr = 0.7002619
inp[(close(t-1)-mean(t-1))/mean(t-1)] to out[(high(t)-open(t-1))/mean(t-1)] corr = 0.6848493
inp[(mean(t-1)-close(t-1))/mean(t-1)] to out[(high(t)-open(t-1))/mean(t-1)] corr = 0.6848493


OPENinp[(open(t-1)-close(t-1))/mean(t-1)] to out[(open(t)-open(t-1))/mean(t-1)] corr = 0.7129548
inp[(close(t-1)-open(t-1))/mean(t-1)] to out[(open(t)-open(t-1))/mean(t-1)] corr = 0.7129548
inp[(close(t-1)-mean(t-1))/mean(t-1)] to out[(open(t)-open(t-1))/mean(t-1)] corr = 0.6554768
inp[(mean(t-1)-close(t-1))/mean(t-1)] to out[(open(t)-open(t-1))/mean(t-1)] corr = 0.6554768

Вот такие результаты для других параметров. И опять результаты не плохие.

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

Прогнозируем закрытие по множественной корреляции [090224_01]

inp[(open(t-1)-close(t-1))/mean(t-1)] to out[(close(t)-open(t-1))/mean(t-1)] corr = 0.6955731
inp[(close(t-1)-open(t-1))/mean(t-1)] to out[(close(t)-open(t-1))/mean(t-1)] corr = 0.6955731
inp[(close(t-1)-mean(t-1))/mean(t-1)] to out[(close(t)-open(t-1))/mean(t-1)] corr = 0.6924458
inp[(mean(t-1)-close(t-1))/mean(t-1)] to out[(close(t)-open(t-1))/mean(t-1)] corr = 0.6924458

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

Для начала исследовались зависимости по корреляции разницы между закрытием следующего дня и различными параметрами предыдущего дня (open, high, low и close) с различными комбинациями разниц между параметрами предыдущего дня. Из полученных прогнозов вычислялся парогноз закрытия. Далее он нормаировался к среднему предыдущего дня по формуле (close(t) - mean(t-1))/mean(t-1). Рассматривалась корреляция с экспериментальными данными. Она приведена в таблице выше. Отбирались только модели где корреляция была выше 0,65.

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

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

Результат очень обнадеживающий.

Теперь стоит рассмотреть какие результаты может дать такой подход к прогнозированию других параметров.