Sibiryachok
Sibiryachok личный блог
10 февраля 2013, 12:57

Price Action. Паттерн 123. Делаем систему.


Всех категорически приветствую.

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

Для начала немного теории. Что такое Price Action? Как слудет из самого название — это движение цены. Грубо говоря, определенные ценовые формации, которые используются для входа и выхода. 

Одим из самых элементарных и понятных является Паттерн 123. Отчего он понятен? От того, что  все движения на рынке происходят волнообразно. Существуют движения и коррекции к движению. Логично, что скорее всего после небольшой коррекции движение продолжится. Также он находит свою поддрежку и через волновую теорию. Ну да ладно… Изобразим это дело визуально, дабы любой мозг понял, о чем ему толкуют.


Допустим мы имеем начало движения. Возьмем эту точку за 0%. Движение дошло до определенного уровня и развернулось. Точку данного разворота мы возьмем за 100%. Согласно различных теорий скорее всего коррекционное движение продолжится до района 38% или 50% или 62% от первоначального диапазона. Именно в этих районах стоит входит в позицию по направлению первоначального движения. Выход осуществляется по двум целям — на 161% от первоначального движения, либо на 261%. Я думаю, рисунок дает полноценную картину сказанного.

Price Action. Паттерн 123. Делаем систему.

А вот так это выглядит на реальных торгах. После нисходящего движения в начале дня, цена вошла в небольшую коррекцию. На тестировании уровня 61.8% от первоначального движения система вошла в шортовую позицию — обозначено красной стрелкой. При достижении уровня 161.8% последовал выход из позиции — обозначено зеленой стрелкой.

 Price Action. Паттерн 123. Делаем систему.


Раньше я часто использовал подобный метод в ручной торговле. Но я стараюсь уйти от ней. Посему условия входа/выхода необходимо формализовать и оформить в виде, понятном машине. При этом мы получаем шикарную возможность для тестирования. После определенной работы был выдан продукт. В данном случае не используются индикаторы. Однако есть оптимизируемые параметры. Правда, я думаю, что оптимизировать их вполне разумно и логично. Во-первых, это время торгов. В данном случае с 10:30 по 18:00. И это логично, ведь в первые полчаса торговой сессии мы можем получить неважнецкий сигнал, поскольку инструмент может быть нерасторгован. Во-вторых, форма свечи. Я запрещаю входы на противонаправленных свечах, открытие которых лежит в определенном диапазоне. Этот диапазон подбирается тестированием, т.е. оптимизацией. И это тоже логично.

Получил я следующий результат:

Price Action. Паттерн 123. Делаем систему.
Price Action. Паттерн 123. Делаем систему.

Как мне кажется, результат весьма неплох.

Но есть подводные камни. Мы ведь имеем дело с программированием. Машине нужны конкретные формализованные вещи. Так, к примеру, во время разработки системы встал вопрос — как заставить машину понять, что цена достигла уровня 161%. Если мы просто напишем нечто вроде, (Хай-Лоу)*1.61, то выхода мы не получим никогда, ибо данное выражение не станет истинным. Поскольку на каждом обновлении Хая, Хай будет меняться. Масло масленное, но вот так. 

Очеивдно, что нам требуется запоминать параметры в момент входа. Я не знаю, как это реализовано в других программах теханализа, но в АмиБрокере с этим возникают проблемы. Как таковой записи я не нашел. Однако мы можем получить параметры из прошлого через такую вещь, как ValueWhen. Здесь мы можем указать время, либо событие.

Вроде вот оно. Решение. Но не все так просто. Ведь после входа, к примеру, в лонг, может пройти еще один системный сигнал Бай. Он не будет отработан через реальную покупку, поскольку система уже в ней, однако сам по себе он пройдет и тогда ValueWhen будет уже считать в момент последнего сигнала, а к этому моменту значения Хай и Лоу могут измениться от тех, что были на момент действительной покупки.

Т.е. нам необходимо удалять лишние сигналы из системы. В АмиБрокере это делается через подобную хитрость:

Buy = ExRem(Buy,Short);
Short = ExRem(Short,Buy);

Вроде вот оно. Решение. И именно на нем построена та модель, результаты которой я представил выше. В программном виде это выглядит следующим образом:

// сигналы
Buy = (BC1 OR BC4 OR BC3) AND TM4 AND TM5 AND !BeginDay AND !anBC2;
Short = (SC1 OR SC3 OR SC4) AND TM4 AND TM5 AND !BeginDay AND !anSC2;

Buy = ExRem(Buy,Short);
Short = ExRem(Short,Buy);

H1 = ValueWhen(Buy OR Short, NewHigh, n = 1);
L1 = ValueWhen(Buy OR Short, NewLow, n = 1);

Delta = H1-L1;

D161H = L1 + Delta*1.62;
D161S = H1 — Delta*1.62;

Lout3 = Cross (H, D161H);
Sout3 = Cross (D161S, L);

Sell = Lout3 OR Lout2 OR TM;
Cover = Sout3 OR Sout2 OR TM;


Но снова НО! В данном случае сброс значение Хай/Лой для расчета расширения 161% происходит при появлении обратного сигнала — шорт после покупки либо покупка после шорта. Смотрим на код с ExRem.

Но ведь в жизни могут быть другие ситуации. К примеру, на картинке:

Price Action. Паттерн 123. Делаем систему. 

 Система отработала первую сделку. Между 16 и 17 часами мы видим формацию для повторной покупки — цена тестирует уровень коррекции. Но сделки не происходит! Почему? Да потому, что для машины диапазон Хай/Лоу до сих пор находится там, внизу — обозначено зеленным прямоугольним. Ведь сигнала Шорт не было! И поэтому, благодаря ExRem, ситсема до сих пор хранит те значения. И по её логике цены между 16 и 17 часами не достигли необходимого уровня коррекции.

Казалось бы, ну что сложного — сбрасывать значения не только по обратной операции, но и просто по закрытию позиции. Да. Но мы попадаем в ловушку. Мы не можем прописать для ExRem Cover или Sell. Почему? Да потому что они определены ниже. А условия для них определяются после ExRem. Т.е. мы имеем замкнутый круг.

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


buy = sell = short = cover = false;
CurrentPosition[0] = 0;

Last = LastValue(BarIndex());
for (i=1 ; i < Last ; i++)
{
  CurrentPosition[ i ] = CurrentPosition[ i-1 ];

  if (currentPosition[ i ] == 0)    // мы без позиции
  {    if (условиеBuy)                 // проверяем условие именно на i-той свече. Например   Close[i-1] > Open[i-1]
       {       Buy[ i ] = true;
                CurrentPosition[ i ] = Size;
       }
       else        if (условиеShort)
       {       Short[ i ] = true;
                CurrentPosition[ i ] = -Size;
       }
  }
  else if (CurrentPosition <0)      // Мы в шорте
      if (сработалCover)
      {    Cover[ i ] = true;
           CurrentPosition[ i ] = 0;
      }
  else if (CurrentPosition > 0)      // Мы в лонге
      if (сработалSell)
      {    Sell[ i ] = true;
           CurrentPosition[ i ] = 0;
      }

}

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

Или оставить имеющиеся наработки, пренебрегнув возможными профитными сделками? Или убыточными...? Добавить ряд фильтров, уменьшающих текущую просадку и наслаждаться работой?
34 Комментария
  • svanchik
    10 февраля 2013, 13:03
    почему вход у вас на откате при формеровании патерна? ведь сам смысл патерна-вход пробоя точки 2 со стопом на 3))
      • svanchik
        10 февраля 2013, 13:17
        Sibiryachok, да понятно… но при этом мы видим уже сформировавшийся патерн… а не его зарождение… и как будет называться каритнка когда от 50% корекции цена отскочит (ваш вход) и потом просто удетит наже точки 1? неудавшийся патерн1-2-3?
          • svanchik
            10 февраля 2013, 13:37
            Sibiryachok, в своей торговле-я использую " внутренний«бар… но что интересно-его смотрю только при полном формировании… а не пытаюсь предугодать по лою.это к тому-что если уж расматриваете патерн-то стоит смотреть именно его а не пытаться предугодать…
              • svanchik
                10 февраля 2013, 15:42
                Sibiryachok, верно но только в том случае что движение пойдет в верном для позы направлении… то какое это отношение будет иметь к патерну? имхо… никакого…
      • dsl
        10 февраля 2013, 16:53
        Sibiryachok, можно и вот так… картинка со смартлаба.

          • Гречик
            10 февраля 2013, 18:54
            Sibiryachok, 270 в данном примере расстояние от макс 2й свечи до мин 3й.
  • r1msy
    10 февраля 2013, 13:17
    Хороший паттерн, но если говорить о внутритрендовом то это уже крюки росса
    Спасибо, интересно почитать
    Ну и если уж совсем в классику, то коррекция 2-3 должна быть больше 50% 1-2, если не путаю?
  • r1msy
    10 февраля 2013, 13:23
    Ведь на картинке где 16-17 часов очень был опасный вход, может и свозить в стоп
      • Игорь (ФСБ рулит)
        10 февраля 2013, 22:04
        Sibiryachok, т.е. если коррекция 38, то вы входите всего 1/3 объема, а если 62 — то всем объемом. Если это так, то это невыгодно.
        На мой взгляд конечно входить по пробою точки 2 — не очень выгодно — соотношение плохое, но если избрать вариант разворота из коррекции, т.е. после коррекции ударная свеча в сторону движения, на ней и входим?
  • siva
    10 февраля 2013, 13:24
    А можно вопрос — как вы программируете вот такие паттерны на рынке? Я вот в принципе не понимаю, как машину обучить распознавать графические паттерны — это же когнитивная психология (распознавание образов и т.д.) — как вы вообще умудрились это запрограммировать? Можно в личку ;)
      • siva
        10 февраля 2013, 13:35
        Sibiryachok, Но ведь роботу нужно как-то понимать, откуда начать «считать». Или лоу дня(вашего ТФ) — это и есть точка отсчета?
          • siva
            10 февраля 2013, 13:43
            Sibiryachok, а можете прогнать на истории с 2008 года? :)
            Мне интересны результаты на большой волатильности.
              • siva
                10 февраля 2013, 13:59
                Sibiryachok, печально.
                3% просадки при 20% дохода. Если взять 50% на погрешность, то получаем 4.5% просадки — это можно брать спокойно плечо 1 к 5, 20% просадки по депо — отключаем робота.
                А заработать можно 100% в год.
                Любопытно.
  • Michael2301
    10 февраля 2013, 13:45
    Лучше и правильнее торговать руками.
  • roma095
    10 февраля 2013, 15:01
    Ваш паттерн 123 мы уже разбирали на форуме amisite.ru, в том числе и с кодами.
      • roma095
        10 февраля 2013, 19:02
        Sibiryachok, Олегу тамошнему админу напишите, он поможет. Смарт не место для алгоритмистов
  • svanchik
    10 февраля 2013, 15:46
    clip2net.com/s/2OzLo как пример входа в точке «3» без пробоя «2»)
  • svanchik
    10 февраля 2013, 15:51
    и тоже)) но спробоем) clip2net.com/s/2OzOP
  • svanchik
    10 февраля 2013, 19:31
    лишь только то что во втором-торговали патерн-а в первом-пытались его предугодать))

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

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