켈트너 채널 추적 전략

저자:차오장, 날짜: 2023-12-25 13:14:24
태그:

img

전반적인 설명

이 전략은 켈트너 채널 지표에 기반하여 가격이 채널의 상위 및 하위 대역을 뚫을 때 거래 신호를 생성하도록 설계되었습니다. 전략은 길게만 진행되며 판매 신호가 나타나면 중성으로 위치를 평평화합니다.

전략 논리

전략은 SMA와 ATR를 사용하여 켈트너 채널을 구축합니다. 상부 및 하부 대역은 다음과 같이 계산됩니다.

상단 대역 = SMA + ATR * 증배자 하위 대역 = SMA - ATR * 증배자

가격이 상단 범위를 넘을 때 구매 신호가 생성됩니다. 가격이 하단 범위를 넘을 때 판매 신호가 생성됩니다.

단지 길게 갈 때만 판매 신호가 나타나면 이전 주문을 취소하고 포지션을 평평하게 합니다.

논리는 다음과 같습니다.

  1. SMA와 ATR로 켈트너 채널을 구축
  2. 가격이 상단 범위를 넘으면, 입시 가격을 설정하고 긴 이동
  3. 가격이 하위 범위를 넘으면 이전 긴 포지션을 평평하게

이점 분석

이 전략의 장점:

  1. 단순하고 명확한 논리, 이해하기 쉽고 실행하기 쉬운
  2. 켈트너 채널은 트렌드 식별을 위해 직관적입니다.
  3. 단 단장만 하면 스톱 로스 위험을 피합니다.
  4. 정확성 항목에 대한 조건부 명령

위험 분석

또한 몇 가지 위험이 있습니다.

  1. 시장 변동 중 빈번한 오픈/클로즈 거래
  2. 짧은 기회를 활용할 수 없습니다.
  3. 출구 메커니즘이 없어서 수동 개입이 필요합니다.

해결책:

  1. 잘못된 신호를 줄이기 위해 채널 매개 변수를 최적화
  2. 쌍방향 거래에 대한 짧은 모듈을 추가
  3. 이동 중지 손실, 후속 중지와 같은 출구 메커니즘을 추가

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 채널 기간, ATR 멀티플리커 등과 같은 매개 변수를 최적화
  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)

더 많은