Monday, August 29, 2011

Сравнение временных рядов

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

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

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

Thursday, August 25, 2011

Куплю будущее, недорого


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

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

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

А важны нам сейчас фьючерсы. О них и поговорим.

Thursday, August 18, 2011

Feature selection с примерами на R

В серии постов о data mining я уже описал несколько различных методов и алгоритмов. Они все разные, но у них есть одна неизбежная общая черта: на вход подается некоторый набор "входных параметров" (в англоязычной литературе используется слово feature) и уже дальше начинаются все чудеса и преобразования. В случае с финансовыми данными, этими параметрами могут быть цены, объемы торгов, день недели, технические индикаторы и много чего еще. Но откуда берутся эти параметры и почему они именно такие? До сих пор, этот вопрос я не рассматривал.

Часто в различных обсуждениях проскакивает точка зрения, что в модель нужно напихать как можно больше различных параметров, а дальше мощные алгоритмы data mining сами разберутся, что им нужно, а что нет. На самом деле, это конечно чушь. Неограниченное увеличение количества входных параметров не только снижает общее понимание модели, но и приводит к оверифитингу. Кроме того, скорость работы некоторых моделей экспоненциально убывает с ростом количества параметров. Поэтому, слишком много параметров, это плохо. Слишком мало параметров, очевидно, тоже не хорошо. Ведь чем меньше параметров, тем меньше информации о системе мы имеем. Получается, что необходимо каким-то образом определять, когда параметров слишком много, а когда мало. Но даже этого не достаточно. Необходимо еще каким-то образом выбирать из имеющегося множества параметров те, которые наиболее нам важны. Те, которые несут в себе больше всего уникальной информации. Как это сделать? Об этом и поговорим.

Monday, August 8, 2011

Исследуем Российский рынок ценных бумаг с помощью R

В прошлых статьях, посвященных среде разработки R, я многократно упоминал о расширении quantmod, пожалуй, одном из самых полезных расширений для желающих строить математические модели финансовых рынков в R. Единственный недостаток этого расширения - отсутствие поддержки российских рынков, и этот недостаток я решил исправить. Для этого, было написано маленькое расширеньице, оно позволяет автоматически выкачивать данные для российских площадок с сайта Finam. По мере возможности, постараюсь добавить еще данные с сайта РТС.

Установить это расширение просто. Если у вас R последней версии (2.13 на момент написания текста) то достаточно запустить его и выполнить команду:

install.packages("rusquant", repos="http://R-Forge.R-project.org")

Если R более ранней версии, но вы используете Windows, то можно поступить так:

install.packages("rusquant", contriburl="http://r-forge.r-project.org/bin/windows/contrib/latest/")

И третий вариант установки. Можно зайти на http://r-forge.r-project.org/projects/rusquant/ и вручную скачать либо исходники либо готовую версию.

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

Например, можно построить дневной график фьючерса на индекс РТС:

library(rusquant)
getSymbols("SPFB.RTS", from="2011-01-01", src="Finam")
chartSeries(SPFB.RTS)


Кроме того, в отличии от оригинального quantmod, здесь есть маленький бонус, а именно, нам доступны не только дневные но и внутри-дневные данные. Например, можно посмотреть часовик фьючерса на золото:

library(rusquant)
getSymbols("SPFB.GOLD", from=Sys.Date()-5, src="Finam", period="hour")
chartSeries(SPFB.GOLD)


Или, даже, 5 минутку (будьте, однако осторожны выбирая диапазон, очень легко накачать реально много данных)

library(rusquant)
getSymbols("SPFB.GOLD", from=Sys.Date()-5, src="Finam", period="5min")
chartSeries(SPFB.GOLD)


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

Всего доступны для загрузки 9 временных интервалов: 1min, 5min, 10min, 15min, 30min, hour, day, week, month. Доступные инструменты и их коды можно смотреть на сайте источника в поле имя контракта.

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