
This strategy is a quantitative trading system based on the WaveTrend indicator, incorporating dynamic risk management mechanisms. The strategy calculates trend strength through price fluctuations, filters signals in overbought and oversold regions, and applies risk control measures including stop-loss, take-profit, and trailing stop mechanisms.
The core of the strategy lies in calculating the WaveTrend indicator using HLC3 prices. It first computes an n1-period exponential moving average (EMA) as a baseline, then calculates price deviations from this baseline, normalizing them with a 0.015 coefficient. This results in two wave lines, wt1 and wt2, representing fast and slow lines respectively. Trading signals are generated based on these lines crossing overbought and oversold levels, combined with a multi-layered risk control system.
This strategy achieves a comprehensive quantitative trading approach by combining the WaveTrend indicator with a robust risk management system. Its core strengths lie in its adaptability and controlled risk exposure, though traders need to optimize parameters and improve the strategy based on actual market conditions. Through continuous optimization and refinement, this strategy shows promise for achieving stable returns in real trading environments.
/*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))