Esta estrategia utiliza el cruce de los promedios móviles exponenciales (EMA) de 20 días y 55 días para generar señales de negociación. Una señal de compra se activa cuando la EMA a corto plazo cruza por encima de la EMA a largo plazo, y una señal de venta se activa cuando ocurre lo contrario. La estrategia también introduce la negociación de apalancamiento, que amplifica tanto los rendimientos potenciales como los riesgos. Además, la estrategia incluye una restricción condicional que solo permite ingresar a una posición cuando el precio toca la EMA a corto plazo después del cruce, para reducir el riesgo de señales falsas.
Esta estrategia combina los cruces de promedio móvil y el comercio de apalancamiento para capturar las tendencias del mercado mientras se amplifican los rendimientos. Sin embargo, el apalancamiento también conlleva altos riesgos y debe utilizarse con precaución. Además, hay espacio para la optimización en esta estrategia, que se puede lograr introduciendo más indicadores, ajustando dinámicamente los parámetros, etc. En general, esta estrategia es adecuada para los operadores que persiguen altos rendimientos y pueden asumir altos riesgos.
/*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')