Идея коротко
Brent Penfold двенадцать лет торговал по волнам Эллиотта и дважды терял счёт. Перелом случился после разговора с брокером Jeff Morgan. Тот спокойно сказал, что фьючерс на австралийский индекс SPI только что сделал своё медианное движение, три закрытия подряд выше, поэтому он ждёт отката и ищет место для продажи. На следующий день рынок упал. После этого Penfold начал искать статистику вместо мнений и стал механическим трейдером.
Позже он посчитал длину серий закрытий в одну сторону на своих 30 рынках. По его данным, одно стандартное отклонение длины серии около 2.4 дня, два около 5 дней, и цифра почти не меняется между рынками, секторами и десятилетиями. Отсюда простая гипотеза: серия из трёх закрытий выше уже длиннее типичной, и следующий день чаще идёт против неё.
От автора в карточке сетап (три закрытия выше, ждать отката) и статистика серий. Вход, стоп, выход и зеркальная сторона наши.
Почему это может работать
Penfold объясняет так. Если снять с рынков названия и смотреть только на ряд цен, они одинаковы: все трейдеры по сути торгуют волатильность, а у неё устойчивый ритм. Он вспоминает Джорджа Тейлора, торговца зерном 1930–40-х годов. Тейлор делил рынок на трёхдневный цикл: день покупки, день продажи, день шорта. Иногда цикл растягивался до четвёртого или пятого дня. Penfold считает, что его 2.4 дня описывают то же явление.
Оговорка Finetiq. Статистика серий сама по себе разворота не доказывает. Пусть дни роста и падения равновероятны и не зависят друг от друга. Тогда половина серий длиной 1 день, четверть длиной 2, ещё четверть 3 и больше. В такой модели 75% серий не длиннее двух дней и около 97% не длиннее пяти. Это близко к числам автора, если читать их как долю серий. Одинаковые цифры на разных рынках могут означать лишь, что дневные изменения похожи на подбрасывание монеты.
Эдж есть, только если после трёх закрытий выше закрытие ниже на следующий день встречается заметно чаще обычного. Это проверяется за вечер без всякой торговой системы, см. «Что проверить».
Правила
Серии закрытий
// дневные бары
IF Close > Close[1] THEN UpStreak = UpStreak[1] + 1; DnStreak = 0
ELSE IF Close < Close[1] THEN DnStreak = DnStreak[1] + 1; UpStreak = 0
ELSE UpStreak = 0; DnStreak = 0
// Finetiq: закрытие, равное предыдущему, обрывает обе серии
Вход
Setup = UpStreak == 3 // автор: три закрытия подряд выше, ждём отката
// Finetiq: ровно 3, а не «3 и больше», чтобы на одну серию был один сигнал
// Вариант A: вход сразу
IF Setup AND MarketPosition == 0
SELL SHORT AT NEXT BAR OPEN // Finetiq
// Вариант B: вход, только если откат начался
IF Setup AND MarketPosition == 0
SELL SHORT STOP at Low - 1 tick // Finetiq: пробой минимума третьего бара
// ордер живёт один следующий бар, затем CANCEL
Стоп и выход (Finetiq)
StopLoss = Highest(High, 3) + 0.5 * ATR(14) // над максимумом серии
EXIT STOP at StopLoss
IF UpStreak >= 5 THEN EXIT AT NEXT BAR OPEN // серия дошла до двух отклонений автора
IF Close < Close[1] THEN EXIT AT NEXT BAR OPEN // откат случился: первое закрытие ниже
IF BarsSinceEntry >= 3 THEN EXIT AT NEXT BAR OPEN // по трёхдневному циклу из рассказа автора
Зеркальная сторона (Finetiq)
// автор говорит только о продаже после роста. Покупка после падения это наша симметрия
IF DnStreak == 3 AND MarketPosition == 0
BUY AT NEXT BAR OPEN
// стоп под минимумом серии, выходы зеркально
Пересчёт статистики серий (Finetiq)
// когда серия оборвалась, записываем её длину
IF UpStreak[1] > 0 AND UpStreak == 0 THEN Add(UpLengths, UpStreak[1])
IF DnStreak[1] > 0 AND DnStreak == 0 THEN Add(DnLengths, DnStreak[1])
MeanLen = Average(UpLengths)
StdLen = StdDev(UpLengths)
Share2 = доля серий длиной 1–2 дня
Share5 = доля серий длиной 1–5 дней
// вопрос, от которого зависит вся идея
P_all = доля дней, где Close < Close[1]
P_after3 = доля дней, где Close < Close[1], среди дней с UpStreak[1] == 3
// контроль: те же дневные изменения в случайном порядке, 100 перестановок
// для каждой перестановки пересчитать StdLen, Share2, Share5 и P_after3
Параметры
| Параметр | Значение | Откуда |
|---|---|---|
| Таймфрейм | дневные бары | автор |
| Длина серии для сигнала | 3 закрытия подряд выше | автор |
| Направление | продажа после роста | автор |
| Покупка после трёх закрытий ниже | зеркально | Finetiq |
| Равное закрытие | обрывает серию | Finetiq |
| Вход | открытие следующего бара или стоп под минимумом третьего бара | Finetiq |
| Стоп | максимум трёх баров + 0.5 × ATR(14) | Finetiq |
| Выход по длине серии | 5 закрытий подряд выше | Finetiq (число автора: два отклонения) |
| Выход по откату | первое закрытие ниже предыдущего | Finetiq |
| Выход по времени | 3 бара | Finetiq |
Что проверить
- Пересчитать статистику автора на своих данных. По блоку выше соберите длины всех серий, среднее, стандартное отклонение, доли серий до 2 и до 5 дней. Затем перемешайте порядок дневных изменений (сами изменения не трогайте) и посчитайте то же 100 раз. Если реальные цифры лежат внутри диапазона перемешанных, серии на вашем рынке ведут себя как случайные, и 2.4 дня ничего не говорят о развороте.
- Условная вероятность без торговли. Сравните
P_after3сP_allи с тем же значением на перемешанных рядах. Повторите для серий длиной 2, 4 и 5. Если после трёх закрытий выше падение не чаще обычного, правила входа и выхода эджа не создадут. - Окрестность длины серии. Прогоните вход после 2, 3, 4 и 5 закрытий. Автор выделяет 3. Если результат есть только на 3, это похоже на случайность выборки.
- Вход сразу или по пробою минимума. Вариант A против варианта B. Второй пропускает сделки, где откат так и не начался, но входит ниже и платит пропущенными движениями.
- Стороны и режим отдельно. Считайте продажи после роста и покупки после падения раздельно, и отдельно выше и ниже SMA(200). У индексов акций долгий восходящий дрейф, шорт против него может проигрывать даже при реальном краткосрочном откате.
- Издержки. При случайных днях серия из трёх и больше закрытий выше случается примерно 15 раз в год на рынок, столько же вниз. Сделка длится 1–3 дня. Добавьте спред, комиссию и своп CFD и посмотрите, остаётся ли средняя сделка положительной.
- Однородность рынков. Автор утверждает, что рынки одинаковы. Прогоните одни и те же правила без подстройки на индексах, ставках, валютах и сырье. Смотрите на медиану по секторам, а не на лучший рынок.
Особенности платформ
TradingView (Pine Script)
- Серия считается счётчиком:
var int up = 0иup := close > close[1] ? up + 1 : 0. На инструментах с крупным шагом цены равные закрытия встречаются часто, проверьте, что обнуление совпадает с вашим определением. - Вариант A совпадает с исполнением по умолчанию: сигнал на закрытии, вход на открытии следующего бара (
process_orders_on_close = false). Цена входа включает ночной гэп. - Стоп-ордер варианта B через
strategy.entry(..., stop = low)висит, пока его не отменят. По правилу он живёт один бар, поэтому на следующем баре нуженstrategy.cancel. - Сделок много и они короткие. Задайте
commission_valueиslippageвstrategy(), иначе тест покажет результат без издержек.
MultiCharts и TradeStation (EasyLanguage)
- У фьючерсов в TradeStation закрытие дневного бара это settlement, а у 1440-минутного бара последняя сделка. Серии закрытий на двух видах бара получаются разными, и сигналы расходятся. Тестируйте и торгуйте на одном виде бара.
Sell Short next bar at Low stopживёт ровно один бар. Это совпадает с вариантом B без отдельной отмены.- Стоп ставьте ценой:
Buy to Cover next bar at StopLoss stop.SetStopLossзадаётся в деньгах и может дать другой уровень. - Выход по времени:
If BarsSinceEntry >= 3 then Buy to Cover next bar at market.
MetaTrader 5 (MQL5)
- Дневной бар строится по времени сервера брокера. У серверов не в GMT+2/+3 бывают короткие воскресные бары. Они добавляют лишние закрытия и сдвигают подсчёт серий. Сравните дневные закрытия брокера с биржевыми.
- Цена CFD на индекс отличается от закрытия фьючерса. Серии на CFD могут не совпасть с сериями в данных автора.
- Сигнал считайте по закрытому бару (индекс 1) и один раз на новом дневном баре.
- За перенос позиции через ночь по CFD начисляется своп. При удержании 1–3 дня он заметно режет небольшую среднюю сделку.
Где идея может сломаться
- Теста этих правил у автора нет. Есть один эпизод с SPI и статистика длины серий. Торговые правила целиком наша формализация.
- Совпадение 2.4 дня на всех рынках может быть свойством случайного ряда, а не разворота. Проверка 1 это покажет.
- Автор говорит о медианном движении, стандартном отклонении и 68% серий как об одном и том же. Как он считал, в интервью не сказано. Ваши цифры могут не совпасть с его даже на тех же рынках.
- Шорт после роста на индексах акций идёт против многолетнего дрейфа. Общий результат для двух сторон может скрыть, что работает только одна.
- Средняя сделка короткая и небольшая. Проскальзывание на открытии, спред и своп CFD съедают её быстрее, чем у трендовых систем.
- Данные автора: 30 фьючерсных рынков с 1980 года. На короткой истории CFD доли серий и условные вероятности нестабильны.