Содержание статьи

Доказательства и область применения

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

Данные и рынкиИспользуйте определенный инструмент и торговую сессию. Для фьючерсов требуется четко определенный контракт и соглашение о переносе позиций; для акций требуется последовательная корректировка дробления по максимумам, минимумам и ценам исполнения.
Таймфреймы исследованияКонфигурация N=20 на H=1 или суточные данные являются экспериментальной, а не универсальной рекомендацией. Длительность сессии и стоимость выполнения изменяют ее значение.
Цена колеблется между 99 и 105, затем закрывается выше 105 с увеличением объема и продолжает расти в синтетическом примере.Открыть иллюстрацию в полном размере
Исходная синтетическая цена и объем. Два уровня представляют собой моментальный снимок до срабатывания триггера, а не скользящий канал, пересчитываемый в каждой точке графика.

Практическая последовательность действий

Порядок действий: Экстремумы Дончиана: уровни для пробоя и возврата за границу
Все шаги подробно описаны ниже. На каждом этапе нужно записывать причину отклонения при нехватке данных или невыполнении условий.
  1. Соберите N баровИспользуйте завершённые наблюдения до текущего бара.
  2. Заморозить U и DСохраните цены и возраст каждого экстремума.
  3. Классифицируйте событиеПробой по закрытию отличается от выноса и возврата за уровень.
  4. Примените фильтр объёмаТолько признаки, известные при отправке ордера.
  5. Имитация выполненияПримените заданные правила входа, стопа и срока действия.

Скользящая граница — не подтверждённый свинг

Дончиан берёт экстремумы N наблюдений; TradingView описывает верхнюю и нижнюю границы и их середину [1]. В отличие от пивота с подтверждением с двух сторон, последующий разворот не требуется. Завершённое предыдущее окно уже известно при начале следующего бара. В тренде верхняя граница может расти, не сдерживая цену как сопротивление.

Предлагаемое причинное определение – U[t]=max(H[t−N:t]), D[t]=min(L[t−N:t]), M[t]=(U[t]+D[t])/2, при этом верхняя граница среза исключена. Таким образом, окно заканчивается на t−1. Если H[t] включено в U[t], то условие H[t]>U[t] становится невозможным по построению.

Это различие влияет на весь эксперимент. Индикатор может для наглядности включать текущий бар в границу; стратегия всё равно должна задавать используемый исторический снимок. Сохраняйте время и цену исходного экстремума: так можно отличить свежую границу от старого экстремума, который скоро выйдет из окна.

Задайте опорный уровень до классификации события

В pandas сдвиг значений отделяет эталонное окно от оцениваемой строки [2]. Одна из реализаций — high.shift(1).rolling(N).max(). Сдвиг индекса с помощью freq не заменяет перемещение наблюдаемых значений относительно строки принятия решения. Необходимо требовать полного допустимого окна, а не молчаливо разрешать изменение количества наблюдений.

Базовый вариант классифицирует закрытие завершённого бара за границей с буфером b=max(2 ticks,0.1×ATR[t−1]); N=20 и 0.1 — исследовательские параметры. Для немедленной классификации одного бара каждый раз вычисляйте уровень по предыдущему окну. Для выноса и возврата за уровень на нескольких барах фиксируйте исходный уровень при создании кандидата.

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

U = max(H[t-N:t]); D = min(L[t-N:t])
b = max(2*tick, 0.1*ATR[t-1])
if no_active_setup and C[t] > U+b:
    emit('up_breakout', signal_at=t, frozen_level=U)
if no_active_setup and H[t] > U+b and C[t] < U:
    emit('upper_reclaim', signal_at=t, frozen_level=U)
# These labels represent different hypotheses.
# A close-confirmed order can be processed only after close t.

Одна и та же граница может привести к различным допустимым результатам.

Синтетический пример: у предыдущих 20 баров U=105, D=99 и ATR=1. При tick=0.01 буфер b=0.10. Текущий бар H=106, C=105.4 даёт пробой вверх по закрытию. Предлагаемая покупка на следующем открытии 105.5, стоп 103.9 и цель 108.7 дают начальный риск 1.6 пункта и цель 2R до издержек.

Неудачный путь: после открытия по 105.5 цена падает до 103.8. Стоп может сработать, хотя сигнальное закрытие выполнило все условия. Если бы исходный бар имел H=106 и C=104.7, это не был бы пробой по закрытию: он мог бы быть выносом вверх с возвратом ниже границы для отдельной стратегии коротких продаж. Не переименовывайте убыточный пробой в вынос после известного убытка.

Более тонкий случай возникает, когда старый максимум 105 выходит за пределы N-барного окна, а U падает до 104. Цена на уровне 104.5 теперь может превысить канал, не достигнув нового недавнего максимума. Это законное событие, связанное со скользящим окном. Исключение этого события требует дополнительного зарегистрированного условия относительно происхождения или движения опорного уровня.

Явно тестируйте равенство. Закрытие точно на U+b не проходит строгое условие «больше». До отправки ордера округляйте цены к тику по фиксированному правилу; иначе ошибки чисел с плавающей точкой решат, лежит ли цена чуть выше границы или точно на ней.

Время ордеров, отмена и истечение срока

TradingView различает создание ордера после закрытия и исполнение на следующем доступном тике в эмуляторе [3]. Варианту с подтверждением закрытием нужны последующая исполнимая цена, спред и проскальзывание. Заранее выставленный buy-stop выше U — другая модель: вход может исполниться внутри бара, а цена развернуться до закрытия. Неблагоприятное закрытие не отменяет это исполнение задним числом.

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

Бар, коснувшийся стопа и цели, требует более детальных данных или заданного консервативного порядка событий. Тесты гэпов меняют фактическое исполнение и риск, но не исходное время сигнала и зафиксированный уровень. Отказ до отправки и убыточный исполненный ордер — разные исходы.

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

Объём может отбирать сильные движения и дорогие исполнения

Предлагаемый фильтр требует RVOL≥1.5 относительно сопоставимой истории времени сессии. При решении после завершённого закрытия полный объём сигнального бара известен. Для стоп-ордера на вход, отправленного раньше, разрешение выставить ордер определяется только уже известным объёмом. Полный объём, измеренный после исполнения, не может стать разрешением на вход задним числом.

Разделите варианты: только цена, минимально допустимая ликвидность, аномальный объём. Они проверяют разные вещи — возможность торговать и дополнительную информацию. Случаи с высоким RVOL могут двигаться дальше, но иметь большие гэпы и спреды; ценового движения до издержек недостаточно.

Сравните чистое математическое ожидание, экспозицию и число отброшенных возможностей. Используйте одинаковые бюджеты риска во всех вариантах; группируйте результаты по ликвидности или времени суток по определениям из прошлых данных. Рост доли выигрышей в малой подвыборке не гарантирует улучшение доходности или просадки портфеля.

Для возврата за уровень на нескольких барах отдельно сохраняйте объём выноса и объём возврата. Их отношение можно изучать с нормализацией разной длительности интервалов. Агрегированные OHLCV не показывают, прошла ли активность точно на уровне Дончиана или в другом месте широкого бара.

Перед применением стратегии проверьте расчет эталонного значения.

Зарегистрируйте небольшую сетку параметров разработки, например N=10,20,40. Для каждого сигнала сохраняйте цены границ, время экстремумов и возраст уровня, включая его изменение из-за выхода старого экстремума из окна. Это отделяет рыночное поведение от механики окна и облегчает анализ чувствительности.

Тест причинности меняет H[t], сохраняя всю предшествующую историю: U[t] не должен измениться. Изменение H[t−1] может изменить U[t]. Добавьте случаи пропущенных баров, праздников, гэпов открытия и устаревших данных. Сравните пакетный и потоковый расчёты, чтобы ошибка сдвига на один бар не скрылась за правдоподобным графиком.

Лишь затем оценивайте заранее отложенный период вне выборки: оборот, комиссии, экспозицию, просадку и чувствительность к исполнению. Специальный отбор новостей, открытия или закрытия сессии считайте отдельными исследовательскими пробами. Показывайте неудачных кандидатов и несостоявшиеся ретесты, а не только завершённые сделки от удобных границ.

Частые ошибки

Сдвигать уровень вслед за выносом

Возврат за обновлённую границу может отличаться от возврата за первоначально пробитый уровень.

Спутать касание с пересечением

Равенство U ещё не означает пробой; заранее задайте округление к тику и правила сравнения.

Короткие временные окна скрывают их издержки, связанные с оборотом.

Меньшее значение N может создавать частые сигналы, затраты на исполнение которых преобладают над их общей прибылью.

Список проверки перед использованием метода

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

0/8 пунктов

Частые вопросы

Нужно ли продавать при касании верхней границы?

Общего вывода нет. Продажа в расчёте на отбой от границы и покупка её пробоя — противоположные гипотезы с отдельными определениями и тестами.

Может ли Дончиан заменить пивоты?

Он даёт уровень для пробоя, но не подтверждение разворота барами справа и не последовательность свингов, как детектор пивотов.

Источники исследования

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

  1. Donchian ChannelsTradingView. Прочитаны формулы канала и описания применения. Проверено: .
  2. pandas.Series.shiftpandas. Прочитана документация API для проверки сдвига значений. Проверено: .
  3. Pine Script: StrategiesTradingView. Прочитано описание создания ордеров, следующего доступного тика и поведения стоп-ордеров. Проверено: .

Связанные методы

Примечание о рисках

Материал предназначен для обучения и планирования исследований, а не является финансовой рекомендацией. Backtest моделирует прошлые данные, не гарантирует будущую доходность и не совершает реальные сделки. Методы библиотеки не обязательно реализованы в приложении. См. методологию и учебный центр.

Проверьте правила, прежде чем рисковать реальным капиталом

Проверьте возможности приложения, данные и каждую смоделированную сделку; сложные детекторы могут потребовать отдельной реализации.

Скачать Backtest в App Store