Стратегия отмены канала Келтнера

Автор:Чао Чжан, Дата: 2023-12-27 14:49:39
Тэги:

img

Обзор

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

Принцип стратегии

Эта стратегия использует индикатор Keltner Channel для оценки ценовых тенденций. Keltner Channel состоит из скользящей средней и среднего истинного диапазона (ATR). Верхняя рельса равна скользящей средней плюс N раз ATR; нижняя рельса равна скользящей средней минус N раз ATR. Когда цена проходит через нижнюю рельсу канала снизу вверх, считается, что бытовая сила усиливается и можно занять длинные позиции; когда цена проходит через верхнюю рельсу сверху вниз, считается, что медленная сила усиливается и можно занять короткие позиции.

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

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

Это торговая стратегия, которая использует характеристики снижения цен.

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

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

Основными рисками этой стратегии являются:

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

Контрмеры:

  1. Оптимизировать параметры для корректировки ширины канала для адаптации к рыночным условиям.
  2. Усилить управление позициями, чтобы уменьшить однократные потери.

Руководство по оптимизации

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

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

Резюме

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


/*backtest
start: 2023-11-26 00:00:00
end: 2023-12-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Keltner bounce from border. No repaint. (by Zelibobla)", shorttitle="Keltner border bounce", overlay=true)

price = close

// build Keltner
keltnerLength = input(defval=200, minval=1, title="Keltner EMA Period Length")
keltnerATRLength = input(defval=200, minval=1, title="Keltner ATR Period Length (the same as EMA length in classic Keltner Channels)")
keltnerDeviation = input(defval=8, minval=1, maxval=15, title="Keltner band width (in ATRs)")
closeOnEMATouch = input(type=bool, defval=false, title="Close trade on EMA touch? (less drawdown, but less profit and higher commissions impact)")
enterOnBorderTouchFromInside = input(type=bool, defval=false, title="Enter on border touch from inside? (by default from outside, which is less risky but less profitable)")
SL = input(defval=50, minval=0, maxval=10000, title="Stop loss in ticks (leave zero to skip)")
EMA = sma(price, keltnerLength)
ATR = atr(keltnerATRLength)
top = EMA + ATR * keltnerDeviation
bottom = EMA - ATR * keltnerDeviation

buyEntry = crossover(price, bottom)
sellEntry = crossunder(price, top)
plot(EMA, color=aqua,title="EMA")
p1 = plot(top, color=silver,title="Keltner top")
p2 = plot(bottom, color=silver,title="Keltner bottom")
fill(p1, p2)

tradeSize = input(defval=1, minval=1, title="Trade size")

if ( enterOnBorderTouchFromInside and crossunder(price, bottom) )
    strategy.entry("BUY", strategy.long, qty=tradeSize, comment="BUY")
else
    if( crossover(price, bottom) )
        strategy.entry("BUY", strategy.long, qty=tradeSize, comment="BUY")

if( crossover(price,EMA) and closeOnEMATouch )
    strategy.close("BUY")

if( 0 != SL )
    strategy.exit("EXIT BUY", "BUY", qty=tradeSize, loss=SL)
    strategy.exit("EXIT SELL", "SELL", qty=tradeSize, loss=SL)
   
if( enterOnBorderTouchFromInside and crossover(price, bottom) )
    strategy.entry("SELL", strategy.long, qty=tradeSize, comment="SELL")
else
    if ( crossunder(price, top) )
        strategy.entry("SELL", strategy.short, qty=tradeSize, comment="SELL")
    
    
if( crossunder(price, EMA) and closeOnEMATouch )
    strategy.close("SELL")

Больше