Главная > Торговые стратегии > Торговая стратегия «Пробойная»

Торговая стратегия «Пробойная»

22 марта 2009

proboylogo1Как и обещал, сегодня обсудим торговую стратегию, на основе которой, в скором времени, я опубликую рабочий код торгового робота «Пробойный». Используя такого робота я два года назад за 4 месяца увеличил капитал на 100%, но неправильный подход к управлению капиталом и отсутствие модуля фильтрующего флэт (боковое движение рынка) привело к потере прибыли, и возврату к начальному уровню капитала. Но, тем не менее, это очень хороший пример для начинающих по проектированию робота на основе какой-то идее с нуля до получения готового механизма.

В чем суть торговой стратегии?

Идея проста: на часовом интервале, покупаем, если текущая цена пробивает или равна максимальному уровню за прошлый час, продаем если текущая цена пробивает или равна минимуму за прошлый час. Стратегия реверсная, т.е. если у нас есть открытая длинная позиция, а цена пробила минимум — мы продает двойное кол-во лотов, чтобы оказаться сразу в короткой позиции, и наоборот. Стопзаявка выставляется на заданном уровне. Таким образом, мы постоянно в рынке. Рассмотрим рисунок:

Уровни пробоя

Уровни пробоя

красным показан уровень продажи, синим уровень покупки.

Теперь давайте составим план работы по созданию торгового робота:

  • сбор первоначальных данных: дата, время, текущая цена, текущая чистая позиция, доступные средства;
  • оценка состояния QUIK: контроль начала сессии, количество активных заявок, количество активных стопзаявок;
  • управление капиталом: расчет предполагаемой к открытию позиции (количество лотов);
  • получение котировок из графика: OHLC за прошлый час по определенному нами инструменту;
  • модуль принятия торгового решения: определение пробила ли текущая цена HIGH или LOW прошлого часа;
  • непосредственно торговый модуль: отправка транзакций в систему;
  • защитный модуль: постановка стопприказа;

У данной стратегии есть плюсы и минусы: плюс в том, что никакое движение не останется без внимания, особенно сейчас. Когда каждый день крутые взлеты и падения на рынке, минус, в принципе в том же — реакция как на правильное так и на неправильное движение. При тестах стратегии в MultiCharts, у меня получалось примерно 40% прибыльных сделок, и за счет того, что прибыльная сделка была больше, в итоге получалась прибыль. Вот код для  MultiCharts на PowerLanguage (те кто имеет опыт оптимизации стратегии — буду только рад, если мы с Вами улучшим ее прибыльность):


inputs: Enter(1), Capital(30000), Risk(30), Zalog(10000);

vars: Num(0);

Num = floor((Capital + NetProfit)*Risk*0.01/Zalog);

if Num>100 then begin

Num=100;

end;

Buy ("Buy_Enter") next bar Num shares at Highest(High,enter) stop;
Sellshort ("Sell_Enter") next bar Num shares Lowest(Low,enter) stop;

В этом коде не учтен стоплосс, его можно просто добавить как сторонний инструмент и оптимизировать его размер.

Итак, давайте обсудим вместе нюансы! Жду комментариев, а пока буду писать следующую статью, с первой частью кода на QPILE.

Евгений Торговые стратегии

  1. Олег
    24 Март 2009 в 15:26 | #1

    Стратегия интересная. Мне кажеться ее минус в том, что по сути потери никак не ограничены. Серия нескольких неудачных сделок может сдуть счет где-нибудь на 30%, и чтобы их отыграть, придеться зарабатывать уже 50% :)

    Но как пример робота, мне бы такой очень пригодился, я бы его модифицировал под свою стратегию. Так что жду, пока выложите :)

  2. Евгений
    24 Март 2009 в 15:41 | #2

    График эквити достаточно дерганный, но Вы правы, что этот робот как шаблон, и на его основе можно делать какие-то свои задумки.

  3. мужык
    25 Март 2009 в 05:50 | #3

    У рынка 2 состояния боковик и тренд. В боковике большие потери у робота будут, это понятно. Хотя если уменьшить интервал скажим минут до 10-15 то может что то и получится. В качестве стопа можно использовать среднюю цену за последнии n баров. Либо цену «рыночная цена» из таблицы. Также с тейком не все понятно. Пример как было сказанно хорош для наглядности, для торговли требует хорошей дроботки. Думаю полезно будет спользование индикаторов на графике для открытия. Можно использовать два индикатора один с параметрами который охватывает большой период, второй маленький. работать в направлении Первого индикатора а заходить по второму. Пример для боковика 2 стахостика, 1 на 5 минут другой на 1 минуте и т.д. для принятия решения одного соседнего бара думаю мало :)

  4. Евгений
    25 Март 2009 в 17:31 | #4

    Вот, продуктивный разговор!

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

  5. мужык
    26 Март 2009 в 07:51 | #5

    Я торгую на минутках. Использую пораболик сар. 2 индикатора. Один с параметрами 0,002 второй 0,02. Общий тренд показывает первый индикатор, сигналы для входа второй. Сигнал для входа: второй индикатор перевернулся и стал разноноправлен первому. Вход на второй свече после переворота.

    Пример: первый индикатор показывает на продажу, т.е. медвежий тренд, мы ждем когда второй индикатор покажет на покупку, и после того как он перевернулся ждем второй бар, обычно он самый высокий и шортим на нем. Откупаем когда второй индикатор покажет в туже сторону что и первый на втором баре. Ну вот так я торгую.

  6. Евгений
    26 Март 2009 в 13:24 | #6

    Отлично! Предлагаю такой план действий: я выкладываю первоначальный вариант кода с расшифровками для новичков, затем открываю новую серию статей, где уже по Вашему алгоритму, так же с расшифровкой, выложу новый код.

  7. Mr.Swift
    28 Март 2009 в 18:48 | #7

    Евгений, огромное спасибо за Ваш труд! Дело в том, что имея некоторый опыт программирования, я все откладывал знакомство с этим динозавром «QPILE», пока не обнаружил в инете Ваш сайт. Умеете Вы вызвать интерес к тому, что Вам самим интересно! У Вас просто профессиональный талант преподавателя!

    Ну что ж, если Вы утверждаете, что и на QPILE можно писать работающие МТС, придется изучить этого динозавра! Можно несколько вопросов, Евгений?

    Насколько я понял, программы на QPILE не компилируются, а интерпретируются, а значит тормозят, а отсюда вопрос — как интерпретатор справляется с таким потоком данных (несколько сот котировок в секунду), ведь период расчета «портфеля» не может быть меньше 1 секунда. Что произойдет, если период расчета установить равным 1 секунде, а программа не успела выполнить все расчеты по заполнению вновь создаваемой таблицы, я увижу не полностью заполненную таблицу? И чтобы исправить ситуацию, мне нужно будет экспериментально подбирать подходящий период расчета?

  8. Mr.Swift
    28 Март 2009 в 19:08 | #8

    Евгений, Вы написали о проведенных Вами тестах стратегии в MultiCharts.

    А сколько всего существует различных систем тех.анализа, в которых можно тестировать стратегии и которые работают в связке с QUIK/QPILE? Со сколькими из них Вы знакомы? Можете дать им сравнительную характеристику? Какой системе Вы отдаете предпочтение и почему?

  9. Евгений
    29 Март 2009 в 00:02 | #9

    На самом деле, стратегии можно тестировать в любой системе теханализа, в которой присутствует встроенный язык программирования. Из широкораспространенных это уже упомянутый MultiCharts (в прошлом Omega TradeStation), Metastock, WealthLab. В тесте стратегии, и последующем ее применении есть две главные вещи: использование правильных данных, и сама стратегия. Данные рекомендую брать на www.finam.ru.

  10. Евгений
    29 Март 2009 в 00:13 | #10

    Что касается первого вопроса (вначале на крайний ответил. потом посмотрел вверх) да, QPILE это интерпретатор. самый объемный код у меня на данный момент это 29Кб и 850 строк кода. Робот каждую секунду переставляет заявки на ммвб и контролирует позиции по фортс, просматривая и анализируя также оба стакана по этим рынкам (арбитраж). Так вот если учесть что качество связи отличное, то 1 секунды вполе хватает на обработку данных и отправку транзакций. Но есть момент когда в течении торговой сессии подтормаживает сам торговый сервер, есть еще прочие форсмажорные моменты, но в целом возможностей QUIK хватает для быстрого исполнения программ.

  11. 10 Апрель 2009 в 06:20 | #11

    Спасибочки за то что просветили, выводы соответствующие обязательно сделаем. ;)

  12. Николай
    11 Апрель 2009 в 16:31 | #12

    Здравствуйте Евгений.Решил изложить свои мысли и предложить схему работы.

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

    2.После создания основного модуля все усилия можно будет сосредоточить на создании стратегии,коих имеется огромное количество.

    3.Создать отдельный модуль «moneymanagment»(здесь у каждого трейдера тоже свой комфортный уровень работы). Очень практичный подход я встретил у Ю.Чеботарева (кстати ярого поклонника торговых роботов)в его книге «Торговые роботы на российском фондовом рынке». В ней он предлагает устанавливать стоп на LOW предыдущего бара,т.е. скользящий стоп,изменяющийся на каждом баре и закрывающий все открытые позиции по рынку как только LOW текущего бара (при восходящем тренде) станет ниже LOW предыдущего бара (при нисходящем наоборот).Пока шорты на фондовой бирже запрещены,играть на понижение возможно только на фьючерсах.Кроме того, он предлагет вести постоянный мониторинг всего доступного депозита и выходить в кеш как только просадка доступных средств превысит устанволенный ранее уровень(например 3%).Дальнейшие действия каждый трейдер должен определять для себя сам.Считаю, что это и есть алгоритм работы модуля по Вашему последнему пункту плана.

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

    Что касается пробойной стратегии,то главной в отзывах считаю мысль о том,что рынок может быть только в двух состояниях-тренд и флет.Пробойная стратегия на флетовом рынке будет приносить лишь убытки.Поэтому отфильтровав флет-состояние(например при помощи индикатора BandWidth Боллинджера(отсылаю к книге"Боллинджер о лентах Боллинджера"-удивительная по качеству подаваемой информации книга, имеющая к тому же множество описаний стратегий) получим надежную систему торговли,которая смещает кривую доходности в нашу пользу.BandWidth (BW)=(верхняя лента Боллинджера-Нижняя лента Боллинджера)/средняя лента Боллинджера.Параметры лент-строятся на основе SMA с периодом 20 и стандартным отклонением 0,2 (задаются в квике при построении индикатора и являются установками по умолчанию).BW являтеся мерой волатильности и определяет сжатие(т.е. флет).Работает как осциллятор.Работать следует,когда BW превысит определенное значение,например 0,2,если же это условие не выполняется,следует воздержаться от покупки.Еще лучше динамически сравнивать значение BW c его предыдущим значением во время флета и при резком изменении значения,например в 2 раза, производить активные действия. Кроме того можно использовать дополнительно индикаторы тренда ADX,который при тренде должен быть более 40 и не уменьшаться,хотя это уменьшит количество сделок,одновременно снизив просадку депозита.В общем можно поставить кучу фильтров из кучи опубликованных стратегий, но все это требует обкатки.

    Для тех кому интересно-программа ММК-ММ_1.09-очень хороший помощник по управлению капиталом,причем,совершенно бесплатный, хотя мое мнение таково-сумел заработать с помощью предложенного бесплатного ПО — поделись, не жлобись.

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

  13. Евгений
    11 Апрель 2009 в 19:07 | #13

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

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

    Николай, от имени местного коммьюнити, приглашаю к разработке робота для участия в конкурсе! мой ICQ 110056049

  14. Николай
    11 Апрель 2009 в 19:15 | #14

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

  15. Евгений
    11 Апрель 2009 в 19:22 | #15

    Я уверен, что никто не обидится! Добро пожаловать!

  16. 20 Апрель 2009 в 15:24 | #16

    Я птыаюсь написать робота под эту стратегию уже 2 месяца, первые попытки былли на форекс, только под акции котрые там торгуются MSFT например, работа по созданию робота сделана на 98%, есть детали которые мешают нормально торговле.

    Умоля помочь написать робота под QUIK.

    Я провёл статистический анализ этой стратеги на некоторых бумагах результат впеатлительный.

    Прошу помочь.

    Михаил Reply:

    Алексей, если этот вопрос для Вас еще актуален, свяжитесь со мной через e-mail zaps@mail.ru

  17. Евгений
    20 Апрель 2009 в 17:28 | #17

    Сейчас уже можете из частей составить общий код робота, либо подождать, в одной из следующих публикаций будем запускать этого робота и тестировать

  18. Евгений-2:)
    23 Май 2009 в 23:20 | #18

    Николай, а где можно посмотреть рекомендуемую Вами программу

    ММК-ММ_1.09 («очень хорошего помощника по управлению капиталом»)?

  19. Евгений-2:)
    24 Май 2009 в 01:03 | #19

    Николай, цитирую фразу из Вашего поста:

    «...вести постоянный мониторинг всего доступного депозита и выходить в кеш как только просадка доступных средств превысит установленный ранее уровень(например 3%). Дальнейшие действия каждый трейдер должен определять для себя сам.»

    Ограничение просадки тремя процентами и выход в кеш — это понятно.

    Но дальнейшая передача управления трейдеру — это по сути фиаско робота.

    А если в этот момент робот показывает 50% прибыли?

    Думаю, что робот должен работать и дальше самостоятельно, вот только

    подобная просадка должна включать механизм защиты капитала — например,

    уменьшение вдвое размера торгуемого сайза, или другие приёмы.

    Николай Reply:

    Евгений прошу извинить за долгое молчание. Давно не заходил на сайт.

    Касаемо робота.

    Для его работы нужно вести торговлю в нескольких временных интервалах

    (идея не моя-плагиат, но автор выложил в свободный доступ) -1 мин,2 мин,3 мин,5 мин,10 мин.и т.д.кратно общему времени торговой сессии(495 мин). У автора это называется «нарезками времени». (Автор Ю.Чеботарев. Кстати ,очень рекомендую почитать его статьи.) При этом количество транзакций резко возрастает. Отслеживание и торговля ведется в каждом интервале отдельно. Что это дает?

    1.Диверсификация по времени. Т.к. торговля в каждом интервале ведется независимо, появляется возможность торговать одним инструментом как несколькими. (Посмотрите графики скользящих средних на разных временных интервалах — если на одном интервале покупаем, то на другом, возможно, продаем).

    2.Возможность отслеживания просадки депозита на каждом интервале отдельно. Делим общую допустимую просадку на количество интервалов и при превышении допуска на одном из интервалов «отключаем» его, при этом остальные интервалы остаются в работе. Дальнейшие действия мне видятся такими – ведем «виртуальную» торговлю (т.е. без реальных покупок, а только вычисляя профит) и при восстановлении доходности «подключаем» временной интервал.

    Таким образом робот остается в работе постоянно.

    Кроме того, если изменились внешние условия, а робот торгует дальше, то даже при 50 процентах доходности при дальнейшей просадке депозита слив неизбежен.Это значит, что нужна другая стратегия при этих новых условиях и лучше все же выйти в кеш и пересмотреть концепцию работы робота.

Необходимо войти на сайт, чтобы написать комментарий.