Идея коротко
Джон Боллинджер, автор полос Боллинджера, в интервью объяснил, как его команда проверяет новые системы. Пример он взял нарочно простой: покупать акцию на закрытии выше 20-дневной скользящей средней, продавать и открывать шорт на закрытии ниже. Позиция есть всегда.
Дальше идёт не оптимизация, а проверка соседей. Прогоняются длины средней 16, 17, 18, 19, 21, 22, 23 и 24. Если они дают примерно похожие результаты, система проходит. Если нет, её выбрасывают целиком. Подбирать лучшую длину или менять правила, пока окрестность не сойдётся, нельзя.
Карточка описывает одновременно систему и протокол. Систему можно заменить любой своей с одним-двумя параметрами, протокол от этого не меняется. Для большинства читателей ценен именно он.
Почему это может работать
Логика Боллинджера: правило, которое опирается на базовое свойство рынка (тренд, возврат к среднему, волатильность), не должно зависеть от точного числа. Если 20 дней работает, а 18 и 22 нет, результат дало не свойство рынка, а удачное совпадение с конкретной историей. Такая система развалится при первом небольшом изменении рынка.
От оптимизации он отказывается принципиально. Вместе с отказом от плеча он называет это тем, что отличает его команду от большинства. Walk-forward он признаёт рабочим методом, но не для себя: постоянная переоптимизация по окнам даёт системы, у которых параметры меняются каждые несколько недель. Ему нужны правила, которые годами работают так, как были записаны.
Вторая эвристика из того же интервью касается длины описания. Систему, которую можно изложить в две-три строки, стоит проверять. Систему на 150 строк почти наверняка не стоит. Эта система укладывается в одну строку.
Оговорка: протокол отвечает на вопрос, подогнана ли система. Он не отвечает, прибыльна ли она. Одинаково убыточные результаты на всех девяти длинах тоже формально «похожи». Поэтому к проверке окрестности нужен отдельный критерий качества.
Правила
Система (автор)
MA = SMA(Close, 20) // Finetiq: тип средней в интервью не назван, берём простую
IF Close > MA THEN BUY AT NEXT BAR OPEN // автор: закрытие выше средней
IF Close < MA THEN SELL SHORT AT NEXT BAR OPEN // автор: закрытие ниже, продать и открыть шорт
// Finetiq: исполнение на открытии следующего дня, момент входа автор не уточнил
// всегда в рынке: покупка закрывает шорт, продажа закрывает лонг
// стопа, цели и выхода по времени в описании нет
// размер: Finetiq, фиксированная доля капитала без плеча (автор против любого плеча)
Протокол окрестности (автор)
Center = 20
Neighbors = [16, 17, 18, 19, 21, 22, 23, 24] // автор
FOR N IN [Center] + Neighbors:
backtest(MA = SMA(Close, N)) // те же данные, период, издержки и размер позиции
save metrics(N)
IF results(Neighbors) примерно похожи на results(Center)
PASS
ELSE
DISCARD system // автор: без оптимизации и без подстройки
// Finetiq: числовой критерий «примерно похожи» автор не назвал. Стартовое правило для проверки:
// все 9 прогонов прибыльны после издержек
// AND худший CAGR среди соседей >= 0.5 * CAGR(Center)
// AND худшая MaxDD среди соседей <= 1.5 * MaxDD(Center)
// Finetiq: после провала нельзя объявить новым центром лучшего соседа и запустить проверку заново
Срезы времени (автор, без чисел)
// автор: результаты на отдельных отрезках истории тоже должны быть похожими
Slices = разделить историю на K равных отрезков // Finetiq: K = 4
FOR each Slice: metrics(Slice) при N = 20
IF хотя бы один отрезок убыточен
OR CAGR худшего отрезка < 0.25 * CAGR всей истории // Finetiq: стартовый порог
DISCARD system
// автор: walk-forward и переоптимизация по окнам не используются
Дополнение: старые системы как готовый out-of-sample (автор)
Боллинджер советует искать идеи в старых книгах. Если правила опубликованы 20 лет назад, всё время после публикации это честный out-of-sample, который можно проверить сразу. Протокол тот же: система в том виде, как записана, окрестность каждого параметра, срезы времени. В качестве источников он называет книги Garfield Drew, Welles Wilder («New Concepts in Technical Trading Systems»), Charles Patel и Norman Fosback («Stock Market Logic»).
Параметры
| Параметр | Значение | Откуда |
|---|---|---|
| Длина средней | 20 дней | автор |
| Тип средней | простая | Finetiq |
| Сигнал | закрытие дневного бара выше или ниже средней | автор |
| Исполнение | открытие следующего дня | Finetiq |
| Направление | лонг и шорт, всегда в рынке | автор |
| Окрестность | 16–19 и 21–24 | автор |
| Критерий «похоже» | все прибыльны, худший CAGR не ниже половины центра, худшая просадка не больше 1.5 центра | Finetiq |
| Срезы времени | 4 равных отрезка | Finetiq |
| Порог по срезу | CAGR не ниже четверти от всей истории | Finetiq |
| Плечо | нет | автор |
| Оптимизация и walk-forward | не используются | автор |
| Рынок в примере | акции США, дневные бары | автор |
Что проверить
- Сама окрестность. Девять прогонов 16–24 на одном инструменте. Нарисуйте метрику как функцию длины средней. Ровная полка и острый пик на 20 дают противоположные выводы.
- Окрестность на корзине. Те же девять длин на 20–50 акциях или фьючерсах. Для каждой длины смотрите медиану по инструментам. Одна бумага проходит проверку случайно гораздо легче, чем корзина.
- Какая метрика решает. Проверьте протокол на итоговой прибыли, на Sharpe и на максимальной просадке. Система бывает похожей по прибыли и сильно разной по просадке. Решите заранее, какая метрика даёт вердикт, иначе выбор метрики станет новой подгонкой.
- Протокол против оптимизации. Возьмите первую половину истории, найдите лучшую длину из 5–100 и проверьте её окрестность. Затем на второй половине сравните системы, прошедшие и не прошедшие проверку. Если прошедшие не лучше, критерий «похоже» слишком мягкий.
- Издержки. Переворот на пересечении цены и 20-дневной средней на боковике случается часто. Прогоните все девять длин с комиссией и проскальзыванием. Короткие средние переворачиваются чаще, и издержки бьют по окрестности неравномерно.
- Срезы времени. Разбейте историю на четыре отрезка. Проверьте, не держится ли весь результат на одном годе с сильным трендом (например, 2008 или 2020).
- Шортовая половина. Боллинджер торгует акции США и сам говорит об их долгосрочном росте. Сравните всю систему, только лонги и вариант «лонг выше средней, вне рынка ниже».
Особенности платформ
TradingView (Pine Script)
- В тестере стратегий TradingView нет встроенного перебора параметров. Девять прогонов придётся делать вручную, меняя input. Альтернатива: посчитать девять виртуальных систем в одном индикаторе и вывести их итоги в таблицу.
- При ручных прогонах легко незаметно поменять период истории или издержки между запусками. Зафиксируйте диапазон дат, комиссию и
slippageвstrategy(). - По умолчанию
process_orders_on_close = false: сигнал на закрытии дня, исполнение на открытии следующего, как в правилах. strategy.entryв противоположную сторону переворачивает позицию, отдельный выход не нужен.- Длина истории ограничена тарифом. Для четырёх срезов времени нужна длинная дневная история на всех девяти прогонах.
MultiCharts и TradeStation (EasyLanguage)
- Окрестность 16–24 проходится стандартным оптимизатором: input длины средней, шаг 1. Смотрите таблицу всех прогонов, а не лучшую строку.
Buy next bar at marketиSellShort next bar at marketсами переворачивают позицию.- Для корзины акций: Portfolio Maestro в TradeStation, Portfolio Trader в MultiCharts. Протокол тогда применяется к медиане по корзине.
- Для фьючерсов в TradeStation дневной бар закрывается по settlement, а 1440-минутный по последней сделке (Kevin Davey, The Algorithmic Advantage #036). Сигнал «закрытие выше средней» на двух видах бара будет разным. Для акций это не важно.
MetaTrader 5 (MQL5)
- В тестере есть медленный полный перебор. Для девяти значений выбирайте его, а не генетический алгоритм, чтобы получить все прогоны.
- Средняя:
iMA(..., MODE_SMA, ...). Сигнал берите с закрытого бара (индекс 1) и проверяйте появление нового дневного бара. - Дневной бар строится по времени сервера брокера. Короткие воскресные бары у брокеров с сервером не в GMT+2/+3 добавляют лишний «день» в 20-дневную среднюю.
- Акции и индексы в MT5 чаще всего CFD. За каждую ночь в позиции начисляется плата за перенос, а система всегда в рынке. Включите её в тест, иначе результат завышен.
Где идея может сломаться
- Боллинджер описал пример процедуры, а не свою торговую систему. Цифр по ней в интервью нет, и нет утверждения, что она прибыльна.
- Критерий «примерно похожих результатов» не назван. Все пороги в карточке наши. Слишком мягкий критерий пропустит подгонку, слишком жёсткий выбросит всё подряд.
- Окрестность в четыре дня в каждую сторону узкая. Все девять длин могут одинаково выиграть от особенностей периода. От этого защищают срезы времени и корзина рынков, а не сама окрестность.
- Проверка окрестности не спасает от отбора идей. Если перебрать двадцать разных систем и оставить ту, чья окрестность сошлась, подгонка всё равно произошла, только на уровень выше.
- Всегда-в-рынке по 20-дневной средней часто переворачивается на боковике. На бумагах с широким спредом и на CFD с платой за перенос издержки могут съесть весь результат.
- Автор торгует акции США на длинном растущем рынке. Шортовая половина системы на этом рынке идёт против долгосрочного роста.