Блог им. anatolyutkin

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

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

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





3
Система «Корреляция индекса со своими акциями»


Введение: корреляция инструментов и ее польза в торговле

    На всевозможных рынках торгуются множество всевозможных инструментов. И часто эти инструменты ходят с некоторой синхронностью. То есть если одно пошло вверх, то и другое склонно пойти вверх, и наоборот. Причины такого поведения могут быть самыми разнообразными и требуют, как правило, глубоких исследований для их понимания. Мы это здесь обсуждать не будем. Обсудим пока, какая польза может быть от корреляции. Простейших способов использовать корреляции два:
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
800px-White-noise
Рис. 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 интересующие нас данные. Типичный график выглядит так:
1
Рис.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 год. Вот результаты тестирования:

11
Рис. 3

Параметры: PF=1.1, P=57.5%, MO=5.5.
Видно следующее:
а) Контртрендовость действительно есть
б) Параметры слишком плохи, чтобы систему торговать.

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


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

Тест OOS


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

2
Рис. 4

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

Выводы

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

★58
49 комментариев
Не съедает ли суммарный спред (ask — bid) весь профит при торговле синтетики из 4-х инструментов? Входить лимитками вроде как не вариант — можно остаться без перекрытия. Как можно решить задачу входа в сделку с минимальным спредом?
avatar
Denoy System, Я все оставил в неторгуемом виде. Средняя сделка--5 рублей--не покрывает даже комиссий. Поэтому о том, чтобы торговать систему в нынешнем виде--не может быть и речи. Цель поста--показать на примере последовательный логичный подход к системостроительству.

Естественно, пост с боевой системой смотрелся бы ярче. Но выкладывать работающие системы просто глупо. Я и это то двадцать раз подумал, прежде чем выложить :)
avatar
anatolyutkin, Хотелось бы услышать ответ на свой вопрос :)
avatar
Denoy System, Отвечаю на ваши вопросы :)
1)Вопрос: «Не съедает ли суммарный спред (ask — bid) весь профит при торговле синтетики из 4-х инструментов?»
Ответ: вначале весь профит съедает комиссия. А спред приносит еще больший убыток.
2) Вопрос: «Как можно решить задачу входа в сделку с минимальным спредом?»
Ответ: Ответы на такие вопросы я не могу себе позволить :)
avatar
anatolyutkin, Ну так второй вопрос самый главный :) Спасибо за статью — она весьма полезна.
avatar
Denoy System, Спасибо!
avatar
anatolyutkin, 
Я и это то двадцать раз подумал, прежде чем выложить :)

И удивительно мало просмотров и плюсиков и за такой грамотный и полезный пост.  Не тянет СЛ. Тут можно и готовую прибыльную систему выкладывать — все равно не поймут что к чему )
avatar
Вы тестируете корзину по ценам закрытия баров, а когда оно было это закрытие большой вопрос, в 59 секунд или в 30 а то и несколько минут без трейдов что на вечерке характерно для GZ и SR. Оттуда и фиктивная контртрендовость, потому что при любом тренде RI где частота сделок делает закрытие бара информативным неплохо выглядит открывать позиции в GZ по ценам полминутной давности.
avatar
nfxzhzh, Согласен. Для нормального тестирования приведенного в статье нужны тиковые данные. Да и они не гарантия--в реале куча всего может выясниться. И вообще, из моего опыта--вряд ли из этой идеи можно выудить что-то торгуемое. Но я же не буду выкладывать рабочие системы :) То, что я написал--итак немало.
avatar
nfxzhzh, Уместное замечание.
avatar
Denoy System, Да оно не просто уместное, оно абсолютно правильное. И следующим шагом надо проводить тесты на тиках. А уж дальше делать выводы. Я в первых двух абзацах попытался объяснить цели поста.
avatar
Да, не тем Тимофей айпады раздает.
Спасибо.
avatar
madeyourtrade.ru, везде блат и круговая порука
avatar
whattheheck, точно :)
avatar
madeyourtrade.ru, :) Да я как-то и без айпада жив пока.
avatar
anatolyutkin, этого не может быть! :)
avatar
Вы системы свои в омеге пишете, я так понял?
avatar
madeyourtrade.ru, Язык Power Language, Multicharts, если не ошибаюсь.
avatar
madeyourtrade.ru, Основной инструментарий: TS, WL, Excel. В данной статье--TS.
avatar
хороший пример теоретического подхода, который трудно реализовать на практике.
1. Чрезвычайно трудно реализовать синхронизацию входов/выходов — есть риск остаться в направленной позиции, «без одной или без двух ног».
2. ГО увеличивается, комиссия больше.
3. Средняя сделка очень мала. С увеличением к-ва компонентов в Синтетике средняя сделка уменьшается.
4. Из-за пп 2. и 3. для осязаемого выхлопа, если он будет, требуется больше ден.средств для торговли. Что ведет к увеличению рисков в принципе, а из-за п1 особенно.
5. Удивил сигнал на выход — через 10 баров. Почему не через 11-ть или 12-ть?

А так хорошо написано, для тех кто это не пробовал торговать.
avatar
_sg_, В первых двух абзацах, а также в комментах описаны цели поста. В выводах, в последнем предложении, также есть интересные вещи :)

По пунктам:
1.-4. согласен. В комментах выше все это раскрыто.
5. Это называется грубость системы. Что 10, что 11 или 12 дадут похожие результаты. Такое поведение--необходимый атрибут хорошей системы.
avatar
Теплый, ламповый изилэнг. Кайфанул :-)
avatar
Stanislao, Да, звучание что надо. Это вам не C# :)
avatar
вы описали классический пример статистического арбитража фьючерса на индекс против корзины из фьючерсов. Эту тему можно торговать. Надо решить задачу оптимизации по выбору кол-ва контрактов, так как 0.5 фьючерса вы не купите. Самое сложное войти лимит ордерами. В моем решении бид\аск корзины\спреда рассчитывается с заданной ликвидностью (5, 10 и т.д контрактов), поэтому спред строится «реальный», а не по клоузам.

вот программа, которая это делает
www.yurikon.net/synadapter
avatar
yurikon,
1. Да, это статистический арбитраж.
2. Задача оптимизации, конечно, есть, но она проста. Например, умножаем 0.6*RI-1*GZ-1.5*SR-0.75*LK на 8--и получаем практически целые числа.
3. Насколько понял, ваша программа строит настоящие аски и биды для синтетики. Безусловно, это полезная вещь. Но вначале надо понять, как вообще это торговать. Статистический арбитраж бывает разный.
4. Как вы относитесь к реализации арбитража посредством отклонений от скользящих средних? Может, есть более хорошие способы?
avatar
2. Поэтому и говорят, что для арбитража надо больше денег ))).
3. Торговать так — если уровень спреда в моменте по цене входа, а не по клоузу удовлетворяет — можем входить по маркету. Естественно, таких ситуаций в разы меньше. В идеале, надо начинать котировать слабую ногу и по мере ее исполнения — исполнять ликвидные ноги. Через омегу и мультичартс такое сложно сделать.

4.Сейчас я торгую спред сбер-сбер преф по стратегии отклонения от среднего. Очень даже не плохо получается.
Более хороший способ торговать портфель из пар и корзин. А механизм\стратегия примерно одна и таже — торговать отклонения от тренда.

Главное составить стационарный спред. В частности можно занулять не просто разницу, а подбирать лоты так, чтобы занулялась бета портфеля.
avatar
yurikon, Спасибо!
avatar
зря лук ввел… и зря не взял си
avatar
ves2010, Да, Si достойный кандидат, в отличие от неликвидного лукойла. И вес его в РТС вполне ничего. Но тут до такого уровня, когда об этом надо думать, рассмотрение не доведено. Показана лишь идея и начало реализации, фактически.
avatar
anatolyutkin, «И вес его в РТС вполне ничего.» какой же вес Si в РТС?
avatar
nfxzhzh, При изменении Si на один рубль RI меняется на пять пунктов при постоянных ценах акций. Вот формула:
«Малое изменение RI при малом изменении Si и постоянных ценах акций»=-RI/Si*(«малое изменение Si»).
Это следует из того, что RI обратно пропорционально Si.
avatar
anatolyutkin, ну да, но он в РТС не входит сам по себе. Т е хеджирующий доллар вес будет равен стоимости позиции в RI.
avatar
И кстати по Вашей дискуссии с JC поддерживаю его точку зрения.

Ставим скажем на 5минутки RI систему лонг если C<O и наоборот в шорт, смотрим эквити и что объявляем RI контртрендовым таким же макаром как Вы объявляете спреды более контртрендовыми чем базовые активы?

Т е Ваше утверждение что торговать тренды на спредах бессмысленно потому что инструмент по определению контртрендовый выглядит достаточно неаргументированно.
avatar
nfxzhzh, Поддерживайте кого хотите--это ваше дело. Лично я в той беседе вообще спора не увидел--это скорее был обмен мнениями.

По аргументации. Ваша фраза: «Ставим скажем на 5минутки RI систему лонг если C<O и наоборот в шорт, смотрим эквити и что объявляем RI контртрендовым» взята с потолка. Откуда, что, зачем, почему?

Я же привел последовательное и логичное описание начиная с того факта, что Газпром входит в индекс РТС. Впрочем, если вам это кажется слабой аргументацией--это дело ваше.
avatar
anatolyutkin, ну я и пишу в дискуссии. Пусть будет обмен мнениями.

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

Вот я ставлю контртрендову страту на инструмент, получаю ровно растущую еквити и по той же логике можно сделать вывод что ри не менее контртрендовый?

Меня собственно зацепил только тезис о бессмысленности торговли трендов на спредах, это не аргументировано.
avatar
nfxzhzh, Я не говорил, что торговля трендов на спредах бессмысленна. Она очень даже может иметь смысл, при условии понимания, откуда возьмется трендовость.

Если вспомните, JC, увидев график RI-6*GZ первый раз в своей жизни, сказал, что его можно торговать трендовухами. А я ответил, что это будет безыдейная подгонка. Потому что, имхо, после первого взгляда на график инструмента, в состав которого входит то, у чего JC даже цену не знает, (RI--Юрий не знал, что оно не 145к рублей стоит :) ) вот так сразу что-то заявлять--это ничем иным, кроме подгонки быть не может.

Потому что трендовость--это сложный феномен, это не статистический арбитраж, который описал я, это сложнее. А аргументы Юрия--«не проиграть все во флэте, тяжелые хвосты, итд итп»--это все мантры в стиле Б. Вильямса и прочих. У трендовости имеются вполне четкие причины, их можно логично и последовательно объяснить--так же, как я объяснил контртрендовость на несколькоминутном масштабе в этом посте.
avatar
anatolyutkin, интересно все, что Вы написали.
В двух словах, если очень сложно, в чем причины трендовости?
avatar
SergeyJu, В двух словах и если очень сложно не получится :)

У трендовости несколько причин. Все называть не буду, назову одну. Например, трендовость естественным и логичным образом следует из того простого факта, что крупных участников мало, а мелких--много.
avatar
anatolyutkin, и у крупных участников бывает лимитировано время на операцию… тогда — да.
Бывают еще ситуации, когда внешняя общая причина влияет на рынок…
avatar
SergeyJu, Никаких дополнительных предположений или усложнений не надо. Просто большое число мелких участников и малое число--крупных. Плюс некое известное свойство человеческого поведения.

Есть такой человек--Кирилл Ильинский. У него есть лекции на рыночные темы. Есть лекция про психологию. Там неплохо описано то, что я имею в виду.
avatar
anatolyutkin, консенсус
avatar
nfxzhzh, Консенсус :)
avatar
anatolyutkin, то что газпром входит в ртс само по себе не предполагает отсутствия там трендов. Вот фонд начнет перекладку внутри портфеля поменяв вес газа по фунд соображениям и будет Вам тренд. Пойдет флоу или аутфлоу в маркет (вес на РФ) будет флет на спреде.
avatar
nfxzhzh, Более того, взгляните на рис. 2 этого поста--там тоже тренды есть :) Или постройте сами эту величину--там такие тренды есть, что мама не горюй. Но это не мешает торговать ее контртрендовым образом.
avatar
Я подобное изучал для Украинского рынка, спрэд из ниболее ликвидных акций индекса и самого индекса. Для себя обнаружил действительно контрендовость системы. Она замечательно работает на низковалатильном рынке, но думаю что на периоде высокой волатильности все может быть иначе — неслучайно у Вас 2012,2013 года для теста взяты)
avatar
Lukasus,
1) Выбор для теста 2011--2013, конечно, неслучаен. Причины такого выбора:
а) Сейчас сентябрь 2013 года :)
б) На большом периоде эта система даст граальную картинку--а я не хотел тревожить некорепшие умы читателей смартлаба :)
2) Картинка за 5 лет--2008--2012 годы включительно:
avatar
Уважаемый anatolyutkin, мой «некорепший» ум просто взорван. С такой картинкой можно уже давно в теплых краях жить :-) и расплачиваться этой картинкой вместо денег.
А комиссии в картинку сколько заложено?
avatar
_sg_, Ага! Не зря я картинку с 2008 года вчера не привел, не зря. А то бы комментов было бы не 47, а 147, и все такие смартлабные, милые и похожие :)

Вы ведь уже задавали этот вопрос. Ответ то читали?

Итак, специально для вас, после четкого и внятного текста, после 50 комментариев еще раз копирую сюда свой комментарий №2. Изучайте:
«Denoy System, Я все оставил в неторгуемом виде. Средняя сделка--5 рублей--не покрывает даже комиссий. Поэтому о том, чтобы торговать систему в нынешнем виде--не может быть и речи. Цель поста--показать на примере последовательный логичный подход к системостроительству.

Естественно, пост с боевой системой смотрелся бы ярче. Но выкладывать работающие системы просто глупо. Я и это то двадцать раз подумал, прежде чем выложить :)»
avatar

теги блога anatolyutkin

....все тэги



UPDONW
Новый дизайн