이 전략은 켈트너 채널 지표에 기반하여 가격이 채널의 상위 및 하위 대역을 뚫을 때 거래 신호를 생성하도록 설계되었습니다. 전략은 길게만 진행되며 판매 신호가 나타나면 중성으로 위치를 평평화합니다.
전략은 SMA와 ATR를 사용하여 켈트너 채널을 구축합니다. 상부 및 하부 대역은 다음과 같이 계산됩니다.
상단 대역 = SMA + ATR * 증배자 하위 대역 = SMA - ATR * 증배자
가격이 상단 범위를 넘을 때 구매 신호가 생성됩니다. 가격이 하단 범위를 넘을 때 판매 신호가 생성됩니다.
단지 길게 갈 때만 판매 신호가 나타나면 이전 주문을 취소하고 포지션을 평평하게 합니다.
논리는 다음과 같습니다.
이 전략의 장점:
또한 몇 가지 위험이 있습니다.
해결책:
이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.
이 전략은 간단한 켈트너 채널 규칙으로 효과적으로 시장 트렌드를 잡습니다. 논리는 명확하고 이해하기 쉽습니다. 출구와 짧은 모듈이 부족하지만 매개 변수 조정, 스톱 추가, 짧은 이동 등과 같은 개선에 큰 잠재력을 가지고 있습니다. 전반적으로 깊이 있는 연구와 응용 가치가있는 귀중한 양 전략입니다.
/*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)