anatolyutkin
anatolyutkin личный блог
25 сентября 2013, 09:54

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

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

49 Комментариев
  • lama
    25 сентября 2013, 10:33
    Не съедает ли суммарный спред (ask — bid) весь профит при торговле синтетики из 4-х инструментов? Входить лимитками вроде как не вариант — можно остаться без перекрытия. Как можно решить задачу входа в сделку с минимальным спредом?
      • lama
        25 сентября 2013, 10:55
        anatolyutkin, Хотелось бы услышать ответ на свой вопрос :)
          • lama
            25 сентября 2013, 11:04
            anatolyutkin, Ну так второй вопрос самый главный :) Спасибо за статью — она весьма полезна.
      • SMT
        07 декабря 2018, 02:13
        anatolyutkin, 
        Я и это то двадцать раз подумал, прежде чем выложить :)

        И удивительно мало просмотров и плюсиков и за такой грамотный и полезный пост.  Не тянет СЛ. Тут можно и готовую прибыльную систему выкладывать — все равно не поймут что к чему )
  • quant_trader
    25 сентября 2013, 10:43
    Вы тестируете корзину по ценам закрытия баров, а когда оно было это закрытие большой вопрос, в 59 секунд или в 30 а то и несколько минут без трейдов что на вечерке характерно для GZ и SR. Оттуда и фиктивная контртрендовость, потому что при любом тренде RI где частота сделок делает закрытие бара информативным неплохо выглядит открывать позиции в GZ по ценам полминутной давности.
    • lama
      25 сентября 2013, 10:52
      nfxzhzh, Уместное замечание.
  • Kir
    25 сентября 2013, 10:44
    Да, не тем Тимофей айпады раздает.
    Спасибо.
    • whattheheck
      25 сентября 2013, 10:47
      madeyourtrade.ru, везде блат и круговая порука
      • Kir
        25 сентября 2013, 10:49
        whattheheck, точно :)
      • Kir
        25 сентября 2013, 10:55
        anatolyutkin, этого не может быть! :)
  • Kir
    25 сентября 2013, 10:56
    Вы системы свои в омеге пишете, я так понял?
    • lama
      25 сентября 2013, 10:58
      madeyourtrade.ru, Язык Power Language, Multicharts, если не ошибаюсь.
  • _sg_
    25 сентября 2013, 11:18
    хороший пример теоретического подхода, который трудно реализовать на практике.
    1. Чрезвычайно трудно реализовать синхронизацию входов/выходов — есть риск остаться в направленной позиции, «без одной или без двух ног».
    2. ГО увеличивается, комиссия больше.
    3. Средняя сделка очень мала. С увеличением к-ва компонентов в Синтетике средняя сделка уменьшается.
    4. Из-за пп 2. и 3. для осязаемого выхлопа, если он будет, требуется больше ден.средств для торговли. Что ведет к увеличению рисков в принципе, а из-за п1 особенно.
    5. Удивил сигнал на выход — через 10 баров. Почему не через 11-ть или 12-ть?

    А так хорошо написано, для тех кто это не пробовал торговать.
  • Stanislao
    25 сентября 2013, 11:28
    Теплый, ламповый изилэнг. Кайфанул :-)
  • yurikon
    25 сентября 2013, 12:28
    вы описали классический пример статистического арбитража фьючерса на индекс против корзины из фьючерсов. Эту тему можно торговать. Надо решить задачу оптимизации по выбору кол-ва контрактов, так как 0.5 фьючерса вы не купите. Самое сложное войти лимит ордерами. В моем решении бид\аск корзины\спреда рассчитывается с заданной ликвидностью (5, 10 и т.д контрактов), поэтому спред строится «реальный», а не по клоузам.

    вот программа, которая это делает
    www.yurikon.net/synadapter
  • yurikon
    25 сентября 2013, 13:04
    2. Поэтому и говорят, что для арбитража надо больше денег ))).
    3. Торговать так — если уровень спреда в моменте по цене входа, а не по клоузу удовлетворяет — можем входить по маркету. Естественно, таких ситуаций в разы меньше. В идеале, надо начинать котировать слабую ногу и по мере ее исполнения — исполнять ликвидные ноги. Через омегу и мультичартс такое сложно сделать.

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

    Главное составить стационарный спред. В частности можно занулять не просто разницу, а подбирать лоты так, чтобы занулялась бета портфеля.
  • ves2010
    25 сентября 2013, 14:04
    зря лук ввел… и зря не взял си
      • quant_trader
        25 сентября 2013, 15:43
        anatolyutkin, «И вес его в РТС вполне ничего.» какой же вес Si в РТС?
          • quant_trader
            25 сентября 2013, 16:18
            anatolyutkin, ну да, но он в РТС не входит сам по себе. Т е хеджирующий доллар вес будет равен стоимости позиции в RI.
  • quant_trader
    25 сентября 2013, 16:10
    И кстати по Вашей дискуссии с JC поддерживаю его точку зрения.

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

    Т е Ваше утверждение что торговать тренды на спредах бессмысленно потому что инструмент по определению контртрендовый выглядит достаточно неаргументированно.
      • quant_trader
        25 сентября 2013, 16:24
        anatolyutkin, ну я и пишу в дискуссии. Пусть будет обмен мнениями.

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

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

        Меня собственно зацепил только тезис о бессмысленности торговли трендов на спредах, это не аргументировано.
          • SergeyJu
            25 сентября 2013, 16:46
            anatolyutkin, интересно все, что Вы написали.
            В двух словах, если очень сложно, в чем причины трендовости?
              • SergeyJu
                25 сентября 2013, 18:27
                anatolyutkin, и у крупных участников бывает лимитировано время на операцию… тогда — да.
                Бывают еще ситуации, когда внешняя общая причина влияет на рынок…
          • quant_trader
            25 сентября 2013, 17:07
            anatolyutkin, консенсус
      • quant_trader
        25 сентября 2013, 16:27
        anatolyutkin, то что газпром входит в ртс само по себе не предполагает отсутствия там трендов. Вот фонд начнет перекладку внутри портфеля поменяв вес газа по фунд соображениям и будет Вам тренд. Пойдет флоу или аутфлоу в маркет (вес на РФ) будет флет на спреде.
  • Lukasus
    25 сентября 2013, 22:23
    Я подобное изучал для Украинского рынка, спрэд из ниболее ликвидных акций индекса и самого индекса. Для себя обнаружил действительно контрендовость системы. Она замечательно работает на низковалатильном рынке, но думаю что на периоде высокой волатильности все может быть иначе — неслучайно у Вас 2012,2013 года для теста взяты)
      • _sg_
        26 сентября 2013, 15:51
        Уважаемый anatolyutkin, мой «некорепший» ум просто взорван. С такой картинкой можно уже давно в теплых краях жить :-) и расплачиваться этой картинкой вместо денег.
        А комиссии в картинку сколько заложено?

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн