
이 전략은 WaveTrend 지표에 기반한 정량 거래 시스템으로, 동적 위험 관리 메커니즘을 결합한다. 전략은 가격 변동의 경향 강도를 계산하여, 오버 바이 오버 셀 영역에서 신호 필터링을 수행하며, 동시에 스톱 로즈, 스톱 스톱 및 추적 스톱 로즈와 같은 위험 제어 수단을 적용하여, 전체적인 거래 관리를 구현한다.
전략의 핵심은 HLC3 가격으로 WaveTrend 지표를 계산하는 것이다. 우선 n1주기의 지수 이동 평균 ((EMA) 을 기준선으로 계산한 다음 가격과 기준선의 오차를 계산하고, 0.015을 계수로 통일 처리한다. 결국은 두 개의 파도선 wt1과 wt2을 얻는데, 이는 각각 빠른 선과 느린 선을 나타낸다. 거래 신호는 이 두 선과 과매도와 과매도 수준의 교차를 기반으로 생성되며, 동시에 다층의 위험 제어 시스템을 결합한다.
이 전략은 WaveTrend 지표와 완성된 위험 관리 시스템을 결합하여 보다 포괄적인 양적 거래 전략을 구현한다. 전략의 핵심 장점은 유연성이 강하고 위험이 통제 가능하다는 데 있다. 그러나 여전히 거래자가 실제 시장 상황에 따라 매개 변수를 최적화하고 전략을 개선해야 한다. 지속적인 최적화와 개선으로 이 전략은 실제 거래에서 안정적인 수익을 얻을 것으로 보인다.
/*backtest
start: 2024-11-12 00:00:00
end: 2024-12-11 08:00:00
period: 3h
basePeriod: 3h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title="WaveTrend [LazyBear] with Risk Management", shorttitle="WT_LB_RM", overlay=true)
// Input Parameters
n1 = input.int(10, "Channel Length")
n2 = input.int(21, "Average Length")
obLevel1 = input.int(60, "Over Bought Level 1")
obLevel2 = input.int(53, "Over Bought Level 2")
osLevel1 = input.int(-60, "Over Sold Level 1")
osLevel2 = input.int(-53, "Over Sold Level 2")
// Risk Management Inputs
stopLossPercent = input.float(50.0, "Stop Loss (%)", minval=0.1, maxval=100)
takeProfitPercent = input.float(5.0, "Take Profit (%)", minval=0.1, maxval=100)
trailingStopPercent = input.float(3.0, "Trailing Stop (%)", minval=0.1, maxval=100)
trailingStepPercent = input.float(2.0, "Trailing Stop Step (%)", minval=0.1, maxval=100)
// WaveTrend Calculation
ap = hlc3
esa = ta.ema(ap, n1)
d = ta.ema(math.abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
tci = ta.ema(ci, n2)
wt1 = tci
wt2 = ta.sma(wt1, 4)
// Plotting Original Indicators
plot(0, color=color.gray)
plot(obLevel1, color=color.red)
plot(osLevel1, color=color.green)
plot(obLevel2, color=color.red, style=plot.style_line)
plot(osLevel2, color=color.green, style=plot.style_line)
plot(wt1, color=color.green)
plot(wt2, color=color.red, style=plot.style_line)
plot(wt1-wt2, color=color.blue, style=plot.style_area, transp=80)
// Buy and Sell Signals with Risk Management
longCondition = ta.crossover(wt1, osLevel1) or ta.crossover(wt1, osLevel2)
shortCondition = ta.crossunder(wt1, obLevel1) or ta.crossunder(wt1, obLevel2)
// Strategy Entry with Risk Management
if (longCondition)
entryPrice = close
stopLossPrice = entryPrice * (1 - stopLossPercent/100)
takeProfitPrice = entryPrice * (1 + takeProfitPercent/100)
strategy.entry("Long", strategy.long)
strategy.exit("Long Exit", "Long",
stop=stopLossPrice,
limit=takeProfitPrice,
trail_price=close * (1 + trailingStopPercent/100),
trail_offset=close * (trailingStepPercent/100))
if (shortCondition)
entryPrice = close
stopLossPrice = entryPrice * (1 + stopLossPercent/100)
takeProfitPrice = entryPrice * (1 - takeProfitPercent/100)
strategy.entry("Short", strategy.short)
strategy.exit("Short Exit", "Short",
stop=stopLossPrice,
limit=takeProfitPrice,
trail_price=close * (1 - trailingStopPercent/100),
trail_offset=close * (trailingStepPercent/100))