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


Дата создания: 2023-12-25 13:14:24 Последнее изменение: 2023-12-25 13:14:24
Копировать: 0 Количество просмотров: 729
1
Подписаться
1621
Подписчики

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

Обзор

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

Стратегический принцип

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

Верхняя полоса = SMA + ATR * коэффициент Нижняя линия = SMA - ATR * коэффициент

Когда цена выходит на траекторию, генерируется сигнал покупки; когда цена выходит на траекторию, генерируется сигнал продажи.

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

В частности, логика стратегии заключается в следующем:

  1. Построение динамических каналов с использованием SMA и ATR
  2. Когда цена поднимается вверх, устанавливайте цену открытия и заказывайте больше.
  3. Когда цена переходит вниз, выровняйте предыдущие перезаказы, чтобы позиция была свободной

Анализ преимуществ

Эта стратегия имеет следующие преимущества:

  1. Логика стратегии проста, ясна и понятна
  2. Интуитивно понятный и точный в оценке рыночных тенденций индикатор динамического канала
  3. Продолжайте торговать только с несколькими трейдерами и избегайте риска стоп-лосса
  4. Условия для более точных записей

Анализ рисков

Однако есть и другие риски:

  1. При рыночных колебаниях может возникать частое открытие позиций.
  2. Я не могу использовать свои свободные возможности.
  3. Нет механизмов выхода из системы, и выбор точки выхода должен быть сделан человеком.

Ответ:

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

Направление оптимизации

Эта стратегия может быть оптимизирована в следующих аспектах:

  1. Параметры оптимизации, корректировки циклов каналов, коэффициентов колебаний и т. Д.
  2. Добавление пустого модуля, который генерирует сигнал продажи в зависимости от цены.
  3. Присоединение к механизму остановки убытков в сочетании с остановкой последующих убытков ATR
  4. Подумайте о добавлении дополнительных фильтров, чтобы избежать ошибочных сигналов.
  5. Тестирование эффективности контрактов на разные сорта

Подвести итог

Эта стратегия основана на динамических канальных показателях, просто и эффективно улавливает рыночные тенденции. Логика стратегии ясна и понятна, она генерирует торговые сигналы путем прорыва цены в канале. Хотя только многоголовый и без механизма выхода недостаточны, но они могут быть улучшены с помощью оптимизации параметров, добавления пустых модулей, добавления стоп-стоп и т. Д. В целом, эта стратегия имеет очень большой простор для улучшения и заслуживает глубокого изучения и применения количественной стратегии.

Исходный код стратегии
/*backtest
start: 2023-11-24 00:00:00
end: 2023-12-24 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Keltner Channel Strategy", overlay=true)
source = close

useTrueRange = input(true)
length = input(20, minval=1)
mult = input(1.0)

ma = sma(source, length)
range = useTrueRange ? tr : high - low
rangema = sma(range, length)
upper = ma + rangema * mult
lower = ma - rangema * mult

crossUpper = crossover(source, upper)
crossLower = crossunder(source, lower)

bprice = 0.0
bprice := crossUpper ? high+syminfo.mintick : nz(bprice[1])

sprice = 0.0
sprice := crossLower ? low -syminfo.mintick : nz(sprice[1]) 

crossBcond = false
crossBcond := crossUpper ? true 
 : na(crossBcond[1]) ? false : crossBcond[1]

crossScond = false
crossScond := crossLower ? true 
 : na(crossScond[1]) ? false : crossScond[1]

cancelBcond = crossBcond and (source < ma or high >= bprice )
cancelScond = crossScond and (source > ma or low <= sprice )

if (cancelBcond)
    strategy.cancel("KltChLE")

if (crossUpper)
    strategy.entry("KltChLE", strategy.long, stop=bprice, comment="KltChLE")

if (cancelScond)
    strategy.cancel("KltChSE")

if (crossLower)
    strategy.entry("KltChSE", strategy.short, stop=sprice, comment="KltChSE")

//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)