Esta estratégia utiliza o cruzamento das médias móveis exponenciais (EMA) de 20 dias e 55 dias para gerar sinais de negociação. Um sinal de compra é acionado quando a EMA de curto prazo cruza acima da EMA de longo prazo, e um sinal de venda é acionado quando ocorre o oposto. A estratégia também introduz negociação de alavancagem, que amplifica retornos e riscos potenciais. Além disso, a estratégia inclui uma restrição condicional que só permite entrar em uma posição quando o preço toca a EMA de curto prazo após o cruzamento, para reduzir o risco de sinais falsos. Finalmente, os usuários têm a opção de usar médias móveis simples (SMAs) em vez de EMAs.
Esta estratégia combina crossovers de média móvel e negociação de alavancagem para capturar as tendências do mercado enquanto amplifica os retornos. No entanto, a alavancagem também traz altos riscos e precisa ser usada com cautela. Além disso, há espaço para otimização nesta estratégia, que pode ser alcançada através da introdução de mais indicadores, ajuste dinâmico de parâmetros, etc. No geral, esta estratégia é adequada para comerciantes que buscam altos retornos e podem assumir altos riscos.
/*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')