Если мошенники EXANTE Вас кинули, то сообщите об этом нам

Как правильно построить торговую систему

Основная цель данного поста--дать инсайт во внутреннюю кухню нормального системостроительства. Поскольку цель эта противоречива--с одной стороны, это можно сделать только на примере, а с другой--работающие примеры в общий доступ выкладывать глупо--то я долго думал, как это примирить. Решение пришло вчера--во время дискуссии с 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
рисунок 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. Для наших целей можно его считать просто случайным блужданием

б) слагаемое (k1-a)*P1(t), определяемое ценой акции А1. Для наших целей его также можно считать случайным блужданием.

в) Величина deltaэто ограниченная контртрендовая величина

Таким образом, торгуемая величина 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
рисунок 2

Рис.2

Первоначальное тестирование 

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

if close>average(close,5)*1.001 then sell short next bar 1 share at open;

if close<average(close,5)*0.999 then buy next bar 1 share at open;

if barssinceentry=10 then sell next bar 1 share at open;

if barssinceentry=10 then buy to cover next bar 1 share at open;

Алгоритм этого кода: если цена отклонилась вверх более, чем на 0.1% от пятиминутной простой средней, то шортим. Через 10 минут выходим. Если цена отклонилась вниз более, чем на 0.1% от пятиминутной простой средней, то покупаем. Через 10 минут выходим.

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

Рисунок 3
Рисунок 3

Рис. 3

Параметры: PF=1.1, P=57.5%, MO=5.5.

Видно следующее:

а) Контртрендовость действительно есть

б) Параметры слишком плохи, чтобы систему торговать.

Улучшение и доводка

Что же теперь делать? Есть две альтернативы. Оставить все это просто как хорошую, прозрачную идею или доводить систему до ума. Я выбираю первое по следующим причинам:

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

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

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

Видео 1

Тест OOS

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

Рисунок 4
Рисунок 4

Рис. 4

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

Выводы

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

торговая система
торговая система

  Источники и ссылки

с Smart Lab Ru / Смарт Лаб Ру