Cette stratégie utilise le croisement des moyennes mobiles exponentielles (EMA) de 20 jours et de 55 jours pour générer des signaux de trading. Un signal d'achat est déclenché lorsque l'EMA à court terme franchit le niveau supérieur de l'EMA à long terme, et un signal de vente est déclenché lorsque l'inverse se produit. La stratégie introduit également le trading à effet de levier, qui amplifie à la fois les rendements potentiels et les risques. En outre, la stratégie comprend une restriction conditionnelle qui ne permet d'entrer dans une position que lorsque le prix touche l'EMA à court terme après le croisement, afin de réduire le risque de faux signaux. Enfin, les utilisateurs ont la possibilité d'utiliser des moyennes mobiles simples (SMA) au lieu des EMA.
Cette stratégie combine les croisements moyens mobiles et le trading d'effet de levier pour capturer les tendances du marché tout en amplifiant les rendements. Cependant, l'effet de levier comporte également des risques élevés et doit être utilisé avec prudence. En outre, il existe une marge d'optimisation dans cette stratégie, qui peut être réalisée en introduisant plus d'indicateurs, en ajustant dynamiquement les paramètres, etc. Dans l'ensemble, cette stratégie convient aux traders qui recherchent des rendements élevés et peuvent supporter des risques élevés.
/*backtest start: 2024-03-01 00:00:00 end: 2024-03-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("EMA Crossover Strategy with Leverage, Conditional Entry, and MA Option", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // Inputs for backtesting period startDate = input(defval=timestamp("2023-01-01"), title="Start Date") endDate = input(defval=timestamp("2024-04-028"), title="End Date") // Input for leverage multiplier leverage = input.float(3.0, title="Leverage Multiplier", minval=1.0, maxval=10.0, step=0.1) // Input for choosing between EMA and MA useEMA = input.bool(true, title="Use EMA (true) or MA (false)?") // Input source and lengths for MAs src = close ema1_length = input.int(20, title='EMA/MA-1 Length') ema2_length = input.int(55, title='EMA/MA-2 Length') // Calculate the MAs based on user selection pema1 = useEMA ? ta.ema(src, ema1_length) : ta.sma(src, ema1_length) pema2 = useEMA ? ta.ema(src, ema2_length) : ta.sma(src, ema2_length) // Tracking the crossover condition for strategy entry crossedAbove = ta.crossover(pema1, pema2) // Define a variable to track if a valid entry condition has been met var bool readyToEnter = false // Check for MA crossover and update readyToEnter if (crossedAbove) readyToEnter := true // Entry condition: Enter when price touches MA-1 after the crossover // and (low <= pema1 and high >= pema1) entryCondition = readyToEnter // Reset readyToEnter after entry if (entryCondition) readyToEnter := false // Exit condition: Price crosses under MA-1 exitCondition = ta.crossunder(pema1, pema2) // Check if the current bar's time is within the specified period inBacktestPeriod = true // Execute trade logic only within the specified date range and apply leverage to position sizing if (inBacktestPeriod) if (entryCondition) strategy.entry("Long", strategy.long, qty=strategy.equity * leverage / close) if (exitCondition) strategy.close("Long") // Plotting the MAs for visual reference ema1_color = pema1 > pema2 ? color.red : color.green ema2_color = pema1 > pema2 ? color.red : color.green plot(pema1, color=ema1_color, style=plot.style_line, linewidth=1, title='EMA/MA-1') plot(pema2, color=ema2_color, style=plot.style_line, linewidth=1, title='EMA/MA-2')