
La stratégie est un système de trading quantitatif basé sur les indicateurs WaveTrend, combiné à un mécanisme de gestion du risque dynamique. La stratégie permet une gestion complète des transactions en calculant l’intensité de la tendance des fluctuations des prix, en filtrant les signaux dans les zones de survente et de survente, tout en appliquant des moyens de contrôle du risque tels que les arrêts de perte, les arrêts de perte et le suivi des arrêts de perte.
Le cœur de la stratégie est de calculer l’indicateur WaveTrend à l’aide du prix HLC3. On calcule d’abord l’indice moyen mobile ((EMA) du cycle n1 comme ligne de référence, puis on calcule la divergence du prix par rapport à la ligne de référence, et on procède à la normalisation en utilisant 0.015 comme coefficient. On obtient finalement les deux lignes d’onde wt1 et wt2, représentant respectivement la ligne rapide et la ligne lente.
La stratégie, combinée à des indicateurs WaveTrend et à un système de gestion des risques, permet d’obtenir une stratégie de trading quantitative plus complète. Son avantage central réside dans son adaptabilité et sa maîtrise des risques, mais elle nécessite toujours des paramètres d’optimisation et des améliorations de la stratégie par les traders en fonction de la situation réelle du marché. Grâce à une optimisation et à une amélioration continues, la stratégie devrait générer des rendements stables dans les transactions réelles.
/*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))