Пример построения системы

Sep 24, 2013 13:41

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

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



Под катом--основной текст.



Система «Корреляция индекса со своими акциями»
Введение: корреляция инструментов и ее польза в торговле
    На всевозможных рынках торгуются множество всевозможных инструментов. И часто эти инструменты ходят с некоторой синхронностью. То есть если одно пошло вверх, то и другое склонно пойти вверх, и наоборот. Причины такого поведения могут быть самыми разнообразными и требуют, как правило, глубоких исследований для их понимания. Мы это здесь обсуждать не будем. Обсудим пока, какая польза может быть от корреляции. Простейших способов использовать корреляции два:
1) Если один инструмент пошел вверх, то и другой склонен идти вверх. То есть по одному инструменту можно торговать другой-это так называемая торговля по поводырям
2) Если один инструмент пошел вверх, а другой вверх не пошел, то можно шортить первый и покупать второй.
Таким образом, корреляция является полезной штукой и потенциально способна генерировать идеи для систем.

Идея системы
    На ФОРТС торгуется как фьючерс на индекс РТС, так и фьючерсы на отдельные акции из этого индекса. При этом, поскольку акции входят в индекс, то фьючерсы на акции будут коррелированы с фьючерсом на индекс. Таким образом, тут есть естественная корреляция.
  Для удобства введем обозначения: Пусть I(t)-цена индекса, P1(t)-цена некой акции (назовем ее А1), входящей в индекс. Тогда I(t) скоррелировано с P1(t). Попробуем составить модель, описывающую связь I(t) с P1(t).  В первом приближении, для связи индекса и акции можно записать соотношение:
I(t)=k1*P1(t)+delta+D       (*)   ,где k1-это доля акции в индексе, D-это влияние всех остальных акций. Обсудим, что такое delta. Предположим, что все остальные акции не меняют своих цен, то есть D-постоянно. Тогда, если бы не было delta, то формула была бы:
I(t)=k1*P1(t)+D, то есть это была бы однозначная связь между I(t) и P1(t). Но реально индекс и акция-это две разных цены, формируемые на двух различных аукционах (стаканах). Соответственно, в реальности никакой однозначной связи быть не может-и для описания этого и необходимо ввести в модель величину delta. При этом delta по крайней мере, ограничена-ибо торгующие в курсе о связи между акцией и индексом и не дадут им слишком разойтись. Типичный вид delta изображен на рис.1


Рис. 1
   Первое слагаемое в соотношении (*) отвечает за корреляцию между ценой акции и индексом. Если бы не было D-влияния остальных акций, то данное соотношение говорило бы нам об огромной, фактически единичной корреляции между акцией и индексом. Но влияние других акций эту корреляцию замыливает.
    Итак, корреляция у нас есть. Вопрос-что с ней делать? Мы будем прицеливаться на способ 2) из введения. То есть следим за ценами I(t) и P1(t)-и если они разошлись-то заключаем сделку, направленную в сторону схождения. Для формального исследования такого метода торговли удобно ввести вспомогательную величину
Sint(t)=I(t)-a*P1(t)         (**).Эта величина хороша тем, что:
а) Ее можно напрямую торговать как некий актив-скажем, при а=2 чтобы купить один лот Sint нужно купить один лот индекса и продать два лота акции.
б) На этой величине можно проводить историческое тестирование.
Таким образом, Sint-в приведенном выше смысле неотличима от цен обычных  активов (будем называть обычные активы физическими активами).
   Подумаем, что входит в величину Sint. Для этого подставим (*) в (**), получим:
Sint(t)=(k1-a)*P1(t)+delta+D           (***).Здесь есть:
а) влияние всех других акций D. Для наших целей можно его считать просто случайным блужданием (что это такое, смотри здесь: http://www.2stocks.ru/utkin/?p=113 ).
б) слагаемое (k1-a)*P1(t), определяемое ценой акции А1. Для наших целей его также можно считать случайным блужданием.
в) Величина delta-это ограниченная контртрендовая величина (определение контртрендовости смотри здесь: http://anatoly-utkin.livejournal.com/2114.html  ).
Таким образом, торгуемая величина Sint, являющаяся суммой а), б) и в), является контртрендовой. И исходя из этого можно строить логичную и разумную торговую систему.
     Итак, мы сумели найти естественную контртрендовую величину. Теперь подумаем, как можно улучшить контртрендовость. Ясно, что нам мешают входящие в Sint случайные блуждания P1(t) и D(t), ибо на их фоне контртрендовость замазывается. Из формулы (***) видно, что в наших силах изничтожить P1(t) просто правильным подбором лота акции А1 в Sint-так, чтобы a равнялось бы k1. Далее, подумаем, что делать с D? D-это влияние других акций. Ясно, что другие акции мы из индекса выкинуть не в силах. Тогда и не будем пытаться это сделать, а поступим наоборот-включим другие акции в наш синтетический инструмент. Для этого обсудим структуру фьючерсного рынка ФОРТС.
   Фьючерс РТС-это весьма ликвидный фьючерс, также более или менее ликвидны фьючерсы на акции Газпрома, Сбербанка, Лукойла. Акции Газпрома, Сбербанка и Лукойла имеют вес в индексе каждая в районе 15% и в сумме составляют около 45% индекса. Поэтому логично составить синтетическую величину, включающую в себя в равных долях акции Газпрома, Сбербанка и Лукойла.

Составление синтетического инструмента
   В соответствии с выводами предыдущего раздела, составим интересующий нас синтетический инструмент. В общем виде Sint=I-a*P1-b*P2-c*P3. Определим коэффициенты a, b, c. Для этого вспомним характерные цены фьючерсов RI, GZ, SR и LK. Это, соответственно, 100, 15, 10 и 20 тысяч рублей. Стало быть, три акции должны в сумме дать 45% от стоимости индекса в 100 тысяч, то есть 45 тысяч. Далее, в соответствии со структурой индекса эти три акции должны быть в равных долях. Отсюда легко найти коэффициенты, a=15/15=1, b=15/10=1.5, c=15/20=0.75. Таким образом, нас интересует торгуемая величина

S=0.6*RI-1*GZ-1.5*SR-0.75*LK  (1)
Здесь цены для RI в пунктах (поэтому коэффициент 0.6=30/50 перед RI), цены фьючерсов на акции в рублях.
   Построим минутки этой величины. Поскольку ничего кроме простейшего тестирования в этой документации не предусмотрено, то минутки S будем строить по минуткам отдельных физических инструментов методом простого сопоставления-то есть цена открытия S равна 0.6 цены открытия RI минус 1 цена открытия GZ минус 1.5 цены открытия
SR минус 0.75 цены открытия LK.  Точно так же строятся и high, low, close. Конечно, это неправильно, для корректного построения нужны тиковые данные. Но для наших грубых целей сойдет. Вот код на easy language, строящий такую величину:

vars: alpha(1),beta_(1.5),gamma_(0.75);

value1=alpha*open of data2+beta_*open of data3+gamma_*open of data4;
value2=alpha*high of data2+beta_*high of data3+gamma_*high of data4;
value3=alpha*low of data2+beta_*low of data3+gamma_*low of data4;
value4=alpha*close of data2+beta_*close of data3+gamma_*close of data4;

value1=0.6*open of data1-value1;
value2=0.6*high of data1-value2;
value3=0.6*low of data1-value3;
value4=0.6*close of data1-value4;

value5=20000000+date-1000000;

print(File("C:\1.txt"),Numtostr(value5,0),",",Numtostr(time,0),",",Numtostr(value1,0),",",Numtostr(value2,0),",",Numtostr(value3,0),",",Numtostr(value4,0));

Для его применения надо на одном графике построить минутки RI, GZ, SR и LK. В результате получим в файле 1.txt интересующие нас данные. Типичный график выглядит так:


Рис.2

Первоначальное тестирование  
В соответствии с нашей идеей этот график обладает контртрендовыми свойствами. Подумаем, как эту контртрендовость выявить. Если вспомнить формулу (***), то ясно, что мы собираемся торговать delta-отклонения индекса от своего «справедливого значения». Ясно, что слишком долгими и сильными такие отклонения быть не могут. Соответственно, зададим простейшие контртрендовые правила-если цена слишком сильно отклонилась от своей скользящей средней, то играем против этого. Характерные временные масштабы-несколько минут, подразумеваем, что за это время происходит выравнивание цен. Вот простейший код:

if close>average(close,5)*1.001 then sell short next bar 1 share at open;
if close
Рис. 3
Параметры: PF=1.1, P=57.5%, MO=5.5.
Видно следующее:
а) Контртрендовость действительно есть
б) Параметры слишком плохи, чтобы систему торговать.

Улучшение и доводкаЧто же теперь делать? Есть две альтернативы. Оставить все это просто как хорошую, прозрачную идею или доводить систему до ума. Я выбираю первое по следующим причинам:
а) Я придумал значительное количество систем с малой средней сделкой. Они требуют тщательного тестирования в реале. И даже системы для одного инструмента порой выказывают кучу трудностей. Здесь же-целых четыре инструмента.
б) Время. На такие вещи уйдет много времени-а его можно потратить на более важные вещи.
в) Давно уже хотел запустить в общее пользование что-нибудь простое и логичное, чтобы показать, как вообще надо проектировать торговые системы. Естественно, работающие вещи я выкладывать не буду-а такую вещицу, с непонятными перспективами можно и выложить. Если же продолжить ее улучшать (а тут, похоже, есть куда копать, есть некоторые четкие и внятные принципы, за счет которых можно фильтровать лишние сделки), то в общий доступ уже не выложишь.

Тест OOSНу, и поскольку я решаю не копать это направление дальше, то можно и ООС посмотреть прямо сейчас (в случае же дальнешей разработки ООС смотреть строго не рекомендуется). Хотя лично мне в силу опыта понятно, что с большой вероятностью там все в порядке-ибо это система с простой, четкой идеей.  Вот результаты 2012-2013:



Рис. 4
Как и ожидалось, тут все в порядке.

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

системы

Previous post Next post
Up