
이 전략은 동력 채널 지표에 기반하여 거래 신호를 설계하고, 가격 돌파 채널의 오르락 내리락에 따라 구매 및 판매 신호를 생성한다. 이 전략은 단지 다단 거래만 하고, 판매 신호가 발생하면 평점 상태에서 빈 위치 상태이다.
이 전략은 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)