켈트너 채널 철회 전략

저자:차오장, 날짜: 2023-12-27 14:49:39
태그:

img

전반적인 설명

이 전략은 켈트너 채널 지표에 기반한 리브랙 거래 전략을 설계합니다. 켈트너 채널의 상부와 하부 레일과 가격을 비교하여 잠재적 인 가격 반전의 시기를 판단하고 적절한 긴 및 짧은 포지션을 취합니다.

전략 원칙

이 전략은 가격 트렌드를 판단하기 위해 켈트너 채널 지표를 사용합니다. 켈트너 채널은 이동 평균과 평균 진정한 범위 (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")

더 많은