
15 паттернов Price Action и японских свечей для алготрейдинга
Кевин Дж. Дэйви предлагает 15 формализованных вариантов входа: от подсчёта направленных баров и импульса до свечных моделей. Для каждого приведены правила, код EasyLanguage и исторический пример. Это исходные идеи для проверки, а не законченные торговые системы.
Примечание TLAP. Основные кривые капитала относятся к историческим тестам 2012–2020 годов; они не показывают текущую доходность и не являются подтверждением торговли реальными деньгами. Белая область — результаты внутри выборки, голубая — вне выборки. Высказывания автора о работе паттернов на рынках относятся к этим примерам. Параметры BCount, PCount, PullBack и ExitBars сохраняют смысл, заданный в соответствующем фрагменте кода; X в описаниях выхода соответствует ExitBars.
Код приведён как в источнике. Перед применением требуется проверить его компиляцию, параметры встроенных свечных функций, комиссии, проскальзывание и правила исполнения. Результаты приведённых графиков здесь заново не рассчитывались.

Обычно я не включаю в свои материалы сторонние исследования, но команда Data Is Beautiful подготовила интересное исследование свечных паттернов.
С его результатами можно ознакомиться в проекте Five Hundred. Ниже приведена сводная таблица из этого исследования.

В этой отдельной таблице Data Is Beautiful показаны проценты по семи свечным моделям и четырём периодам 1984–2024 годов. В статье не раскрыты определение результата, горизонт и условия сделки для этих процентов. Их нельзя автоматически считать вероятностью прибыльной сделки по следующим 15 алгоритмам.
Большинство алготрейдеров всегда ищут новые идеи для тестирования и оценки. Я не исключение.
Как насчет 15 ценовых паттернов, которые могут стать основой хорошей торговой стратегии?
Представляю эти паттерны вместе с общими советами и оговорками об их использовании.
Паттерн №1. Направление баров и краткосрочный откат
Паттерн сочетает два условия. Для длинной позиции за последние BCount баров должно быть больше растущих баров (Close − Open > 0), чем падающих. Одновременно требуется краткосрочный откат. При выполнении обоих условий возникает сигнал на покупку. Для короткой позиции условия зеркальные.
Подсчитайте количество восходящих баров (цена закрытия минус цена открытия больше 0) в течение последних «BCount» баров.
Подсчитайте количество нисходящих баров (цена закрытия минус цена открытия меньше 0) в течение последних «BCount» баров.
Если растущих баров больше, чем падающих, а текущая цена закрытия ниже цены закрытия PullBack баров назад, открывайте длинную позицию на открытии следующего бара. PullBack — настраиваемое число баров для сравнения цен закрытия.
Для коротких сделок выполняйте противоположные действия.
Выходите через X баров после входа, если к этому времени не возникнет сигнал разворота.
input:
BCOunt(1), PullBack(1), ExitBars(1);
if CountIf(close-open>0,BCOunt)>countif(close-open<0,BCount)
and close<close[pullback]
then buy next bar at market;
if CountIf(close-open>0,BCOunt)<countif(close-open<0,BCount)
and close>close[pullback]
then sellshort next bar at market;
If Barssinceentry>=ExitBars then Begin
sell next bar at market;
buy to cover next bar at market;
end;
Этот паттерн очень хорошо работает на дневном графике серебра. Другие рынки для проверки (на дневных графиках):
SF – швейцарский франк
US – 30-летние казначейские облигации США
GC – золото
ES – E-mini S&P 500
LC – живой крупный рогатый скот
NQ – E-mini Nasdaq
Общий совет №1. Тест входов без стопов
Чтобы оценить сам вход, я протестировал все 15 паттернов с простым выходом через заданное число баров, независимо от текущей прибыли или убытка. Это полезный вариант выхода; говорят, что его предпочитал и Джон Генри.
Конечно же, в любую разрабатываемую вами стратегию вы можете включить стоп-лоссы и/или тейк-профиты. Это может КАРДИНАЛЬНО изменить результаты, которые вы получите.
Паттерн №2. Более высокие максимумы, более низкие минимумы и импульс отката
Паттерн сочетает два условия. Для длинной позиции за последние BCount баров число баров с максимумом выше предыдущего должно превышать число баров с минимумом ниже предыдущего. Одновременно требуется краткосрочный откат. При выполнении обоих условий возникает сигнал на покупку. Для короткой позиции условия зеркальные.
Подсчитайте количество баров с более высокими максимумами (максимум текущего бара больше максимума предыдущего бара) в течение последних «BCount» баров.
Подсчитайте количество баров с более низкими минимумами (минимум текущего бара меньше минимума предыдущего бара) в течение последних «BCount» баров.
Если количество баров с более высокими максимумами больше, чем количество баров с более низкими минимумами, и цена закрытия текущего бара ниже, чем цена закрытия “pullback” баров назад, то открывайте длинную позицию по цене открытия следующего бара.
Для коротких сделок выполняйте противоположные действия.
Выходите через X баров после входа, если к этому времени не возникнет сигнал разворота.
input:
BCOunt(1), PullBack(1), ExitBars(1);
if CountIf(high-high[1]>0,BCOunt)>countif(low-low[1]<0,BCount)
and close<close[pullback]
then buy next bar at market;
if CountIf(high-high[1]>0,BCOunt)<countif(low-low[1]<0,BCount)
and close>close[pullback]
then sellshort next bar at market;
If Barssinceentry>=ExitBars then Begin
sell next bar at market;
buy to cover next bar at market;
end;
Этот паттерн довольно хорошо работает на 360-минутных графиках откормочного крупного рогатого скота. Другие рынки для проверки (на 360-минутных графиках):
LH – фьючерс на свиней
NE1 – новозеландский доллар
SI – серебро
AD – австралийский доллар
OJ – апельсиновый сок
Общий совет №2. Работает ли ваш паттерн на нескольких рынках?
Вы заметите, что примерно из 40 фьючерсных рынков я перечислил этот паттерн (и другие 14 паттернов) как хорошо работающий только на определённых рынках. Это связано с тем, что ни один ПАТТЕРН НЕ РАБОТАЕТ ХОРОШО ВЕЗДЕ. Вы, должно быть, видели людей, рекламирующих тот или иной индикатор/паттерн/стратегию, которые говорят, что «она работает на всех рынках, на всех таймфреймах, бла-бла-бла». Думаю, что это полная чушь, предназначенная для того, чтобы заставить людей верить, что они нашли Святой Грааль.
С какой стати паттерн, который работает на фьючерсах на кофе, должен с таким же успехом работать и на фьючерсах на золото? Рынки совершенно разные, и участники рынка абсолютно разные. Нет причин, по которым паттерны должны хорошо работать на каждом рынке.
Тем не менее хорошо, когда паттерн работает на нескольких рынках, но я не считаю это «обязательным условием».
Паттерн № 3. Торговля против импульса после серии последовательных растущих/понижающихся баров
Этот паттерн похож на первые два, но используется против недавнего движения. Он подсчитывает последовательные повышения или понижения цены закрытия. Когда серия достигает порога, а импульс подтверждает её направление, позиция открывается в противоположную сторону: после серии повышений — короткая, после серии понижений — длинная.
Если цена закрытия текущего бара выше цены закрытия предыдущего бара, увеличьте значение UCounter на 1, в противном случае установите UCounter на 0.
Если цена закрытия текущего бара ниже цены закрытия предыдущего бара, увеличьте значение DCounter на 1, в противном случае установите DCounter на 0.
Если UCounter не меньше BCount, а текущая цена закрытия выше цены закрытия PCount баров назад, открывайте короткую позицию на открытии следующего бара.
Для длинной позиции применяйте зеркальные условия: DCounter не меньше BCount и текущая цена закрытия ниже цены закрытия PCount баров назад.
Выходите через X баров после входа, если к этому времени не возникнет сигнал разворота.
inputs:
BCOunt(1), PCOunt(1), ExitBars(1);
variables:
UCounter(0),DCounter(0);
if close > close[1] then
UCounter = UCounter + 1
else
UCounter = 0;
if close < close[1] then
DCounter = DCounter + 1
else
DCounter = 0;
if UCounter>=BCount and close>close[Pcount] then sellshort next bar at market;
if DCounter>=BCount and close<close[Pcount] then buy next bar at market;
If Barssinceentry>=ExitBars then Begin
sell next bar at market;
buy to cover next bar at market;
end;Примечание TLAP. Для паттернов №3 и №4: в описании оригинала сказано «больше BCount», но код использует >=. Здесь правило согласовано с кодом: «не меньше BCount».

Этот паттерн довольно хорошо работает на 240-минутных графиках 5-летних казначейских облигаций. Другие рынки для проверки (на 240-минутных графиках):
ES – E-mini S&P 500
NE1 – новозеландский доллар
AD – австралийский доллар
NQ – E-mini Nasdaq
HG – медь
US – 30-летние казначейские облигации США
SM – соевый шрот
LC – живой крупный рогатый скот
FC – откормочный крупный рогатый скот
Общий совет №3. Протестируйте данный паттерн на различных таймфреймах
Точно так же, как не существует «универсального» паттерна, работающего на всех рынках, аналогичным образом паттерны не могут работать и на всех таймфреймах. Некоторые паттерны работают только на дневных таймфреймах, некоторые – на нескольких таймфреймах. Как и в случае с выбранным рынком, вы должны протестировать этот паттерн на разных таймфреймах и посмотреть на результаты.
Я бы с подозрением относился к паттерну, который бы отлично работал на 90-минутном таймфрейме, но не работал бы на 89-минутном и 91-минутном таймфреймах. Но при этом меня бы не слишком смущала хорошая производительность паттерна на 90-минутном таймфрейме и плохие результаты его работы на 30-минутном и 120-минутном таймфреймах.
Конечно, вы можете считать это действительно важным, и это нормально. Просто помните, что будет намного сложнее найти хороший паттерн, который работает на многих разных таймфреймах.
Паттерн №4. Торговля в направлении импульса после серии последовательных растущих/понижающихся баров
Паттерн использует те же счётчики последовательных повышений и понижений цены закрытия, что и №3, но открывает позицию в направлении движения. Серия повышений вместе с положительным импульсом даёт длинный вход; серия понижений вместе с отрицательным импульсом — короткий.
Если цена закрытия текущего бара выше цены закрытия предыдущего бара, увеличьте значение UCounter на 1, в противном случае установите UCounter на 0.
Если цена закрытия текущего бара ниже цены закрытия предыдущего бара, увеличьте значение DCounter на 1, в противном случае установите DCounter на 0.
Если UCounter не меньше BCount, а текущая цена закрытия выше цены закрытия PCount баров назад, открывайте длинную позицию на открытии следующего бара.
Для короткой позиции применяйте зеркальные условия: DCounter не меньше BCount и текущая цена закрытия ниже цены закрытия PCount баров назад.
Выходите через X баров после входа, если к этому времени не возникнет сигнал разворота.
inputs:
BCOunt(1), PCOunt(1),ExitBars(1);
variables:
UCounter(0),DCounter(0);
if close > close[1] then
UCounter = UCounter + 1
else
UCounter = 0;
if close < close[1] then
DCounter = DCounter + 1
else
DCounter = 0;
UCounter>=BCount and close>close[Pcount] then buy next bar at market;
if DCounter>=BCount and close<close[Pcount] then sellshort next bar at market;
If Barssinceentry>=ExitBars then Begin
sell next bar at market;
buy to cover next bar at market;
end;
Этот паттерн довольно хорошо работает на 240-минутных графиках сырой нефти. Другие рынки для проверки (на 240-минутных графиках):
KC – кофе
W – пшеница
RB – неэтилированный бензин
CC – какао
PL – платина
NG – природный газ
GC – золото
Общий совет №4. Учитывайте торговые издержки
С одной стороны, торговые шарлатаны пытаются обмануть людей, показывая кривые капитала без проскальзывания и комиссий. И смех, и грех! Они будут утверждать, что проскальзывание и комиссии у всех будут разными, поэтому уместно вообще их не показывать. Полная чушь!
Чтобы правильно оценить стратегию – как разрабатываемую вами самими, так и ту, которую вы покупаете или арендуете, – всегда НАСТАИВАЙТЕ на получении результатов с учётом проскальзываний и комиссий.
Размер проскальзывания часто недооценивают. Мне даже доводилось слышать, что при исполнении рыночных ордеров его якобы вообще не бывает. Это неверно.
В моем воркшопе и в нашем клубе Strategy Factory я рассказываю о правильном размере проскальзывания, который следует использовать для всех фьючерсных рынков. Эти цифры проскальзывания основаны как на реальных торговых результатах, так и на тщательном анализе данных (сотни тысяч точек данных).
Главный момент здесь в том, чтобы вы ВСЕГДА включали проскальзывание и комиссию!
Паттерн №5. Торговля на доджи в направлении импульса
К этому моменту вы, вероятно, заметили общую идею: импульс может помочь определить направление движения цены. Если вы находитесь в Небраске и хотите добраться поездом на восток до Нью-Йорка, не стоит садиться в поезд на запад, до Лос-Анджелеса, в надежде, что он развернётся. Аналогично: чтобы из Германии попасть на восток, в Россию, не нужно ехать на запад, во Францию.
Надеюсь, вы уловили суть. Обычно лучше открыть сделку, если рынок движется в вашем направлении.
Этот паттерн включает в себя бар доджи с импульсом. Бары доджи обычно указывают на нерешительность – следовательно, это может быть хорошим входом на паузе тренда перед его возобновлением.
Рассчитайте, является ли текущий бар баром доджи (порог BCount в процентах).
Если текущий бар — доджи, а его цена закрытия выше цены закрытия PCount баров назад, открывайте длинную позицию на следующем баре.
Если текущий бар — доджи, а его цена закрытия ниже цены закрытия PCount баров назад, открывайте короткую позицию на следующем баре.
Выходите через X баров после входа, если раньше не возникнет сигнал разворота.
inputs:
BCOunt(1),PCOunt(1),ExitBars(1);
if close>close[Pcount] and C_Doji(BCount)=1 then buy next bar at market;
if close<close[Pcount] and C_Doji(BCount)=1 then sellshort next bar at market;
If Barssinceentry>=ExitBars then Begin
sell next bar at market;
buy to cover next bar at market;
end;
Этот паттерн довольно хорошо работает на дневном графике фьючерса на свиней. Другие рынки для проверки (на дневных графиках):
CL – сырая нефть
HO – топочный мазут
HG – медь
YM – E-mini Dow
FC – откормочный крупный рогатый скот
Общий совет №5. Вы должны будете провести ещё больше тестов
Проверка входа — важный шаг, но лишь один из этапов разработки торговой стратегии. Мой процесс Strategy Factory включает 8 шагов, и каждый из них важен. Если пропустить один, шансы на успех снизятся.
Поэтому относитесь к этим паттернам, которые я здесь демонстрирую, как к начальным и требующим доработки, а не финальным стратегиям. Вам действительно нужно правильно протестировать и оценить каждый из них самостоятельно, прежде чем вкладывать в них реальные деньги.
Паттерн №6. Торговля на доджи против импульса
На некоторых рынках лучше торговать против тренда (поэтому забудьте на минуту то, что я сказал в паттерне №5!).
Рассчитайте, является ли текущий бар баром доджи (порог BCount в процентах).
Если текущий бар — доджи, а его цена закрытия выше цены закрытия PCount баров назад, открывайте короткую позицию на следующем баре.
Если текущий бар — доджи, а его цена закрытия ниже цены закрытия PCount баров назад, открывайте длинную позицию на следующем баре.
Выходите через X баров после входа, если к этому времени не возникнет сигнал разворота.
inputs:
BCOunt(1),PCOunt(1),ExitBars(1);
if close>close[Pcount] and C_Doji(BCount)=1 then sellshort next bar at market;
if close<close[Pcount] and C_Doji(BCount)=1 then buy next bar at market;
If Barssinceentry>=ExitBars then Begin
sell next bar at market;
buy to cover next bar at market;
end;
Этот паттерн довольно хорошо работает на дневном графике индекса Nikkei. Другие рынки для проверки (на дневных графиках):
SF – швейцарский франк
BP – британский фунт
CT – хлопок
ES – E-mini S&P 500
EMD – E-mini MidCap
KC – кофе
NG – природный газ
CC – какао
JY – японская иена
RTY – E-mini Russell
Общий совет №6. Отсутствие гарантий
Уверен, что некоторые из вас протестируют эти паттерны с некоторыми выходами и в конечном итоге НЕ получат НИЧЕГО сто́ящего! Иногда добавление стопов, тейков или любых других трейлинг-выходов, о которых вы можете подумать, полностью разрушит полезность данного паттерна. Или, быть может, вы используете для выхода уровни поддержки и сопротивления и обнаружите, что этот подход несовместим со многими стратегиями.
Хорошие паттерны — лишь часть торговой стратегии. Выбор выхода может существенно изменить результат одного и того же входа.
Не забывайте об этом.
Паттерн №7. Уровни поддержки и сопротивления
Этот паттерн основан на простых параметрах поддержки и сопротивления.
Примечание TLAP. В паттернах №7 и №8 уровни вычисляются по H/L/C каждого бара. Текущее закрытие сравнивается с уровнем предыдущего бара — R1[1], S1[1] и т. д. Это отличается от требования всегда брать предыдущую дневную сессию.
Рассчитайте центральную точку PP и три пары уровней поддержки и сопротивления:
PP = (High + Low + Close) / 3.;
R1 = (2 * PP)-Low;
S1 = (2 * PP)-High;
R2 = PP + (High-Low);
S2 = PP-(High-Low);
R3 = High + 2*(PP-Low);
S3 = Low-2*(High-PP);Если PCount=1:
Если цена закрытия больше, чем предыдущее значение R1, то покупайте на следующем баре по рыночной цене.
Если цена закрытия меньше, чем предыдущее значение S1, то продавайте на следующем баре по рыночной цене.
Если PCount=2:
Если цена закрытия больше, чем предыдущее значение R2, то покупайте на следующем баре по рыночной цене.
Если цена закрытия меньше, чем предыдущее значение S2, то продавайте на следующем баре по рыночной цене.
Если PCount=3:
Если цена закрытия больше, чем предыдущее значение R3, то покупайте на следующем баре по рыночной цене.
Если цена закрытия меньше, чем предыдущее значение S3, то продавайте на следующем баре по рыночной цене.
Выходите через X баров после входа, если к этому времени не возникнет сигнал разворота.
inputs:
BCOunt(1), PCOunt(1), ExitBars(1);
var: PP(0),R1(0),R2(0),R3(0),S1(0),S2(0),S3(0);
PP = (High + Low + Close) / 3.;
R1 = (2 * PP)-Low;
S1 = (2 * PP)-High;
R2 = PP + (High-Low);
S2 = PP-(High-Low);
R3 = High + 2*(PP-Low);
S3 = Low-2*(High-PP);
if PCount=1 Then Begin
if close>R1[1] then buy next bar at market;
if close<S1[1] then sellshort next bar at market;
//print(close," ",R1[1]," ",s1[1]);
end;
if PCount=2 Then Begin
if close>R2[1] then buy next bar at market;
if close<S2[1] then sellshort next bar at market;
end;
if PCount=3 Then Begin
if close>R3[1] then buy next bar at market;
if close<S3[1] then sellshort next bar at market;
end;
If Barssinceentry>=ExitBars then Begin
sell next bar at market;
buy to cover next bar at market;
end;
Этот паттерн довольно хорошо работает на дневном графике фьючерса E-mini Dow. Другие рынки для проверки (на дневных графиках):
CD – канадский доллар
RB – неэтилированный бензин
ES – E-mini S&P 500
NQ – E-mini Nasdaq
US – 30-летние казначейские облигации США
GC – золото
BO – соевое масло
JY – японская иена
KC – кофе
KW – пшеница Канзас-Сити
Общий совет №7. Не забывайте о риске
Бьюсь об заклад, 8 из 10 трейдеров-новичков думают только о прибыли. Я знаю, потому что в начале своей карьеры сам думал только о прибыли! Но прибыль – это только половина успеха в хорошей торговле. Также очень важен и риск. Обычно риск измеряется просадкой. Подумайте о сберегательном счете в банке. Счет медленно, но уверенно растет в цене с течением времени. Отсутствие просадок, и действительно отсутствие риска (если на минуту забыть о валютных рисках, рисках дефолта, инфляционных рисках и т.д.).
Если бы только все торговые стратегии были такими! К сожалению, просадка является основной частью торговли.
Таким образом, при оценке той или иной стратегии и торговле на ней не забудьте взглянуть на связанный с ней риск. Фокусировка на риске, а не на прибыли, является отличным шагом к тому, чтобы стать успешным трейдером.
Паттерн №8. Обратные сделки на уровнях поддержки и сопротивления
Этот паттерн основан на простых параметрах поддержки и сопротивления, но генерирует сигналы для сделок, противоположные паттерну №7.
Рассчитайте центральную точку PP и три пары уровней поддержки и сопротивления:
PP = (High + Low + Close) / 3.;
R1 = (2 * PP)-Low;
S1 = (2 * PP)-High;
R2 = PP + (High-Low);
S2 = PP-(High-Low);
R3 = High + 2*(PP-Low);
S3 = Low-2*(High-PP);Если PCount=1:
Если цена закрытия больше, чем предыдущее значение R1, то продавайте на следующем баре по рыночной цене.
Если цена закрытия меньше, чем предыдущее значение S1, то покупайте на следующем баре по рыночной цене.
Если PCount=2:
Если цена закрытия больше, чем предыдущее значение R2, то продавайте на следующем баре по рыночной цене.
Если цена закрытия меньше, чем предыдущее значение S2, то покупайте на следующем баре по рыночной цене.
Если PCount=3:
Если цена закрытия больше, чем предыдущее значение R3, то продавайте на следующем баре по рыночной цене.
Если цена закрытия меньше, чем предыдущее значение S3, то покупайте на следующем баре по рыночной цене.
Выходите через X баров после входа, если к этому времени не возникнет сигнал разворота.
inputs:
BCOunt(1), PCOunt(1), ExitBars(1);
var: PP(0),R1(0),R2(0),R3(0),S1(0),S2(0),S3(0);
PP = (High + Low + Close) / 3.;
R1 = (2 * PP)-Low;
S1 = (2 * PP)-High;
R2 = PP + (High-Low);
S2 = PP-(High-Low);
R3 = High + 2*(PP-Low);
S3 = Low-2*(High-PP);
if PCount=1 Then Begin
if close>R1[1] then sellshort next bar at market;
if close<S1[1] then buy next bar at market;
//print(close," ",R1[1]," ",s1[1]);
end;
if PCount=2 Then Begin
if close>R2[1] then sellshort next bar at market;
if close<S2[1] then buy next bar at market;
end;
if PCount=3 Then Begin
if close>R3[1] then sellshort next bar at market;
if close<S3[1] then buy next bar at market;
end;
If Barssinceentry>=ExitBars then Begin
sell next bar at market;
buy to cover next bar at market;
end;
Этот паттерн довольно хорошо работает на дневном графике природного газа. Другие рынки для проверки (на дневных графиках):
SI – серебро
NK – Nikkei
HG – медь
EC – евро
C – кукуруза
SM – соевый шрот
PL – платина
W – пшеница
Общий совет №8. Больше оптимизации – НЕ значит, что это ЛУЧШЕ
Многие трейдеры считают, что оптимизация – это «настройка». Используя подобные настройки, трейдеры ошибочно считают, что чем лучше стратегия соответствует текущим рыночным условиям, тем лучше она будет работать в будущем.
Не поддавайтесь этому заблуждению. Чем больше подгонки, тем хуже обычно получается результат. Старайтесь свести оптимизацию к необходимому минимуму.
Паттерн №9. Бычье и медвежье поглощение
Дискреционные технические трейдеры любят свечные паттерны, так как они являются простыми визуальными паттернами. Но самое приятное то, что алгоритмические трейдеры также могут использовать эти паттерны, если запрограммировать их. В этом входе также используются паттерны «бычье поглощение» и «медвежье поглощение».
Открывайте длинную позицию по цене открытия следующего бара при возникновении паттерна «бычье поглощение». В качестве периода ретроспективного анализа используйте параметр “BCount”.
Открывайте короткую позицию по цене открытия следующего бара при возникновении паттерна «медвежье поглощение». В качестве периода ретроспективного анализа используйте параметр “BCount”.
Выходите через X баров после входа, если к этому времени не возникнет сигнал разворота.
input:
BCOunt(1), PCOunt(1), ExitBars(1);
variables:
oBullishEngulfing(0), oBearishEngulfing(0);
Value1 = C_BullEng_BearEng(BCount, oBullishEngulfing, oBearishEngulfing);
if oBullishEngulfing = 1 then begin
Buy("BullEng") next bar at Market;
end
else if oBearishEngulfing = 1 then begin
Sell Short("BearEng") Next Bar at Market;
end;
If Barssinceentry>=ExitBars then Begin
sell next bar at market;
buy to cover next bar at market;
end;
Этот паттерн довольно хорошо работает на 480-минутных графиках меди. Другие рынки для проверки (на 480-минутных графиках):
KC – кофе
DX – индекс доллара
US – 30-летние казначейские облигации США
CD – канадские доллары
LC – живой крупный рогатый скот
NK – индекс Nikkei
Общий совет №9. Помните, что эти паттерны не являются полными стратегиями
Когда я показываю варианты входов или паттерны, всегда находятся люди, которые берут их и сразу начинают торговать. Это неразумно.
Помните: эти 15 паттернов — начало разработки алгоритмической стратегии, а не готовый продукт. Они могут задать направление работы, но до торговли реальными деньгами предстоит сделать ещё многое.
Я всегда представляю построение стратегии как фабрику. Идеи и паттерны – это сырье для питания фабрики. «Машины» на заводе – это просто тесты, которые вы проводите для разработки, улучшения и верификации своей стратегии. Таким образом, фабрика выпускает либо стратегии, либо мусор для свалки.
Чтобы фабрика продолжала работать, вам нужно много сырья. Этим сырьем как раз и являются данные 15 паттернов. Но именно от вас зависит, чтобы всё это заработало!
Паттерн №10. Бычий и медвежий харами
Ещё один хороший свечной паттерн – бычий и медвежий харами. В этом входе также используются паттерны «бычий харами» и «медвежий харами».
Открывайте длинную позицию по цене открытия следующего бара при возникновении паттерна «бычий харами». В качестве периода ретроспективного анализа используйте параметр “BCount”.
Открывайте короткую позицию по цене открытия следующего бара при возникновении паттерна «медвежий харами». В качестве периода ретроспективного анализа используйте параметр “BCount”.
Выходите через X баров после входа, если к этому времени не возникнет сигнал разворота.
input:
BCOunt(1), PCOunt(1), ExitBars(1);
variables:
oBullishHarami(0), oBearishHarami(0);
Value1 = C_BullHar_BearHar BCount, oBullishHarami, oBearishHarami);
if oBullishHarami = 1 then begin
Buy("BullHamari") next bar at Market;
end
else if oBearishHarami = 1 then
begin
Sell Short("BearHamari") next bar at Market;
end;
If Barssinceentry>=ExitBars then Begin
sell next bar at market;
buy to cover next bar at market;
end;
Этот паттерн довольно хорошо работает на 360-минутных графиках валюты евро. Другие рынки для проверки (на 360-минутных графиках):
ES – E-mini S&P 500
S – соевые бобы
FC – откормочный крупный рогатый скот
SM – соевый шрот
AD – австралийский доллар
LC – живой крупный рогатый скот
PL – платина
NQ – E-mini Nasdaq
Общий совет №10. Не забывайте о тестировании вне выборки
У меня есть собственный процесс разработки стратегий. Если вы выстраиваете свой, не забывайте о главном: обязательно проверяйте результаты вне выборки.
Я использую walk-forward-анализ (пошаговое тестирование вне выборки) и отслеживание результатов в реальном времени. Это работает для меня; вы можете выбрать другой подход, если он решает ту же задачу.
Главное – сделать нечто больше, чем просто оптимизированное тестирование.
Бонусный совет
Для поиска этих паттернов я использовал один из этапов процесса Strategy Factory и программу MultiOpt. На момент исходной публикации она была доступна участникам Strategy Factory и помогала автоматизировать этот процесс. Для её применения необходимо понимать основы метода.
Паттерн №11. Молот и повешенный
Продолжим список свечных моделей: «молот» и «повешенный». Здесь для длинного входа используется бычий «молот», а для короткого — медвежий «повешенный».
Найдите «молот» с параметром Length = BCount и коэффициентом размера тела Factor = PCount.
Найдите «повешенного» с параметром Length = BCount и коэффициентом размера тела Factor = PCount.
Открывайте длинные позиции на «молоте» и короткие на «повешенном».
Выходите через X баров после входа, если к этому времени не возникнет сигнал разворота.
inputs:
BCOunt(1), PCOunt(1), ExitBars(1);
variables:
oHammer(0), oHangingMan(0);
Value1 = C_Hammer_HangingMan(BCount, PCount, oHammer, oHangingMan);
if oHammer = 1 then
begin
Buy("Hammer") Next Bar at Market;
end
else if oHangingMan = 1 then
begin
Sell Short("HangingMan") Next Bar at Market;
end;
If Barssinceentry>=ExitBars then Begin
sell next bar at market;
buy to cover next bar at market;
end;
Этот паттерн довольно хорошо работает на 240-минутных графиках японской иены (хотя и не так хорошо в последнее время!). Другие рынки для проверки (на 240-минутных графиках):
NE1 – новозеландский доллар
LC – живой крупный рогатый скот
HG – медь
NQ – E-mini Nasdaq
KC – кофе
FC – откормочный крупный рогатый скот
RB – неэтилированный бензин
S – соевые бобы
Общий совет №11. Миллионы итераций – это нехорошо!
Многие люди ошибочно полагают, что чем больше у вас итераций, тем лучше это для стратегии. Отчасти это действительно так.
Бо́льшее количество итераций и больше оптимизации:
Улучшит видимые результаты бэктеста,
НО
Но может ухудшить результаты на новых данных.
Следовательно, если вы хотите получить красивые результаты бэктестирования, выполняйте как можно больше оптимизаций. Но если вам нужна стратегия, которая хорошо работает в режиме реального времени (в будущем), то будет ГОРАЗДО лучше, если вы будете оптимизировать её как можно меньше!
Паттерн №12. Торговля на комбинации «предыдущий внутренний бар + текущий внешний бар» в направлении импульса
Внешний бар имеет максимум выше и минимум ниже предыдущего бара. У внутреннего бара максимум ниже, а минимум выше предыдущего. Автор рассматривает такие бары как проявление неопределённости и использует их сочетания для поиска входов.
Проверьте, что текущий бар — внешний.
Проверьте, что предыдущий бар — внутренний относительно бара перед ним.
При исполнении условий №1 и №2, если импульс положительный, открывайте длинную позицию. Если импульс отрицательный, открывайте короткую позицию.
Выходите через X баров после входа, если к этому времени не возникнет сигнал разворота.
inputs:
BCOunt(1), ExitBars(1);
if (high[1]<high[2] and low[1]>low[2]) and (high>high[1] and low<low[1]) then Begin
if close>close[Bcount] then buy next bar at market;
if close<close[Bcount] then sellshort next bar at market;
end;
If Barssinceentry>=ExitBars then Begin
sell next bar at market;
buy to cover next bar at market;
end;
Этот паттерн довольно хорошо работает на дневном графике мексиканского песо. Другие рынки для проверки (на дневных графиках):
CL – сырая нефть
YM – E-mini Dow
ES – E-mini S&P 500
AD – австралийский доллар
EC – евро
EMD – E-mini MidCap
NG – природный газ
US – 30-летние казначейские облигации США
BO – соевое масло
Общий совет №12. Иногда хорошо работают как индикаторы, так и паттерны
Некоторые алготрейдеры думают, что с алгоритмическими стратегиями хорошо работают только индикаторы – скользящие средние, RSI, ADX, полосы Боллинджера и т. д. Это неправда.
Для алгоритмических стратегий так же хорошо могут работать и паттерны, и во многих случаях они работают даже лучше, чем индикаторы.
Ключ к успеху, как вы уже много раз слышали от меня, – это тестировать и наблюдать за результатами!
Паттерн №13. Торговля на комбинации «предыдущий внешний бар + текущий внутренний бар» в направлении импульса
В правилах и коде паттерна №12 сначала идёт внутренний бар, а за ним — внешний. Теперь рассмотрим обратный порядок. В вводной фразе оригинала к №13 порядок по ошибке описан наоборот; здесь он приведён в соответствие с правилами и кодом.
Проверьте, что текущий бар — внутренний.
Проверьте, что предыдущий бар — внешний относительно бара перед ним.
При исполнении условий №1 и №2, если недавний импульс положительный, открывайте длинную позицию. Если импульс отрицательный, открывайте короткую позицию.
Выходите через X баров после входа, если к этому времени не возникнет сигнал разворота.
inputs:
BCOunt(1), ExitBars(1);
if (high[0]<high[1] and low[0]>low[1]) and (high[1]>high[2] and low[1]<low[2]) then Begin
if close>close[Bcount] then buy next bar at market;
if close<close[Bcount] then sellshort next bar at market;
end;
If Barssinceentry>=ExitBars then Begin
sell next bar at market;
buy to cover next bar at market;
end;
Этот паттерн довольно хорошо работает на дневном графике топочного мазута. Другие рынки для проверки (на дневных графиках):
CD – канадский доллар
EC – евро
NK – Nikkei
US – 30-летние казначейские облигации США
C – кукуруза
RR – нешлифованный рис
OJ – апельсиновый сок
DX – индекс доллара
SI – серебро
Общий совет №13. Не забывайте о выходах!
Хотя все эти 15 паттернов являются входами, не пренебрегайте другой частью торгового уравнения – выходами. Выходы могут быть столь же важными, если не более важными, чем входы. Плохие выходы могут уничтожить хороший вход.
Кроме того, некоторые выходы лучше работают с определенными видами входов. Вам просто нужно протестировать и посмотреть, какие из них будут работать. Просто помните, что выходы могут оказывать существенное влияние на результаты стратегии. Не пренебрегайте ими.
Паттерн №14. Торговля на внутреннем или внешнем баре в направлении импульса
Вариации внутреннего/внешнего бара + торговля на импульсе.
Проверьте, что текущий бар — внутренний, ИЛИ
что предыдущий бар — внешний, ИЛИ
что бар два периода назад — внутренний относительно предшествовавшего ему бара.
При исполнении условий №1, №2 или №3, если недавний импульс положительный, открывайте длинную позицию. Если импульс отрицательный, открывайте короткую позицию.
Выходите через X баров после входа, если к этому времени не возникнет сигнал разворота.
inputs:
BCOunt(1), ExitBars(1);
if (high[2]<high[3] and low[2]>low[3]) or
(high[1]>high[2] and low[1]<low[2]) or
(high[0]<high[1] and low[0]>low[1]) then Begin
if close>close[Bcount] then buy next bar at market;
if close<close[Bcount] then sellshort next bar at market;
end;
If Barssinceentry>=ExitBars then Begin
sell next bar at market;
buy to cover next bar at market;
end;
Этот паттерн довольно хорошо работает на дневном графике сырой нефти. Другие рынки для проверки (на дневных графиках):
CD – канадский доллар
LH – фьючерс на свиней
AD – австралийский доллар
HO – топочный мазут
DX – индекс доллара
SM – соевый шрот
Общий совет №14. Психология также является важной
В алготрейдинге так много чисел, что легко забыть о человеческой стороне торговли. Каждая стратегия должна подходить вам психологически. В частности, нужно быть готовым к просадкам, которые вы видели в тестах, а не игнорировать их до появления на счёте.
Сколь бы прибыльной ни выглядела стратегия, пользоваться ею будет трудно, если вы не способны эмоционально выдерживать её торговлю.
Паттерн №15. Утренняя и вечерняя звезда доджи
Последний вариант входа основан на моделях «утренняя звезда доджи» и «вечерняя звезда доджи».
Ищите утреннюю или вечернюю звезду доджи.
При появлении любой из этих моделей, если текущая цена закрытия выше цены закрытия 10 баров назад, открывайте длинную позицию.
При появлении любой из этих моделей, если текущая цена закрытия ниже цены закрытия 10 баров назад, открывайте короткую позицию.
Выходите через X баров после входа, если к этому времени не возникнет сигнал разворота.
inputs:
BCOunt(1), PCOunt(1), ExitBars(1);
variables:
oMorningDojiStar(0), oEveningDojiStar(0);
Value1 = C_MornDoji_EveDoji(BCOunt, PCOunt, oMorningDojiStar, oEveningDojiStar);
if oMorningDojiStar = 1 or oEveningDojiStar = 1 and close>close[10] then
begin
Buy("MornDojiStar") Next Bar at Market;
end
else if oMorningDojiStar = 1 or oEveningDojiStar = 1 and close>close[10] then
begin
Sell Short("EveDojiStar") Next Bar at Market;
end;
If Barssinceentry>=ExitBars then Begin
sell next bar at market;
buy to cover next bar at market;
end;Примечание TLAP. В исходном коде №15 условие ветки Sell Short полностью повторяет условие Buy, поэтому после else if короткий вход недостижим. Кроме того, OR/AND записаны без группирующих скобок. Словесное правило требует объединить любую из двух моделей с направлением 10-барного импульса: Close > Close[10] для покупки и Close < Close[10] для продажи. Код сохранён как в источнике; перед применением эти условия нужно исправить и проверить заново.

В тесте автора паттерн неплохо работал на 90-минутных барах фьючерса E-mini S&P 500, хотя к концу показанного исторического периода результат ухудшился. Автор также отмечает следующие рынки на 90-минутных барах:
FC – откормочный крупный рогатый скот
YM – E-mini Dow
SB – сахар
RB – неэтилированный бензин
C – кукуруза
LC – живой крупный рогатый скот
HO – топочный мазут
Общий совет №15. В трейдинге нет никаких гарантий
Многие трейдеры имеют искаженное представление об алгоритмическом трейдинге:
Создаю прибыльный бэктест.
Решаю торговать на реальном рынке.
Откидываюсь на спинку кресла и расслабляюсь, пока деньги текут ко мне рекой.
Правда в том, что торговать сложно независимо от того, используете вы алгоритмический трейдинг, дискреционный трейдинг или же случайное угадывание.
И все тестирования в мире не гарантируют, что тот или иной алгоритм будет успешным в будущем. Безусловно, тестирование помогает, как и доказанный успешный процесс разработки стратегии.
Но просто помните, что даже правильно построенные стратегии могут и будут терпеть неудачу в режиме реального времени. Надеюсь, это никогда не случится, но хорошие трейдеры всегда готовы к тому, что что-то пойдет не так (именно поэтому правильный размер позиций, управление капиталом, резервные стратегии являются критическими элементами успеха в трейдинге).
Надеюсь, вам понравились эти 15 паттернов, и надеюсь, что с ними вы добьетесь успеха! Не стесняйтесь потом сообщить мне, как у вас всё прошло! Если вы ищете ещё больше входов и выходов, обязательно прочтите мои книги по алготрейдингу.
Если материал оказался полезным, поделитесь им с другими трейдерами.
Дополнительные материалы автора для TradeStation
В оригинальной публикации автор предлагал подписчикам рассылки скомпилированный код TradeStation и настроенные рабочие пространства для воспроизведения примеров. Это описание предложения на момент публикации, а не обещание его текущей доступности.
Автор объяснял свой выбор платформы следующими обстоятельствами:
TradeStation получала отраслевые награды.
Читатели автора часто выбирали эту платформу.
В материалах Strategy Factory использовалось много примеров и кода для TradeStation.
7 стратегий из авторской программы сопровождались кодом и рабочими пространствами TradeStation.
Клуб Strategy Factory работал на базе TradeStation.
В исходном предложении упоминалась программа возврата комиссий TradeStation Commission Rebate Program.
Как проверить идею на своих данных
Выберите один паттерн и заранее зафиксируйте его определение, рынок, таймфрейм и выход. Сначала сравните результат с простым выходом через заданное число баров, затем меняйте только одно условие за раз. Для визуальной проверки свечей пригодится материал TLAP о модели поглощения. Сопоставляя его с кодом, учитывайте: авторские свечные функции и визуальное определение Price Action могут различаться.
Хотите проверить, насколько последовательно вы распознаёте такие ситуации? Возьмите один вариант и разберите серию примеров в симуляторе рынка TLAP, фиксируя условия входа и выхода до просмотра следующих свечей. А для отдельной проверки выхода сравните подход с исследованием «Стоп и разворот против сложных выходов». Поделитесь в теме: какой паттерн, на каком рынке и после каких издержек сохранил результат вне выборки?
Кевин Дж. Дэйви
Переведено для TLAP
