이 전략은 거래 신호를 생성하기 위해 20일 및 55일 기하급수적 이동 평균 (EMA) 의 크로스오버를 사용합니다. 단기 EMA가 장기 EMA를 넘을 때 구매 신호가 트리거되고 반대로 발생하면 판매 신호가 트리거됩니다. 이 전략은 또한 잠재적인 수익과 위험을 증폭시키는 레버리지 거래를 도입합니다. 또한, 이 전략에는 잘못된 신호의 위험을 줄이기 위해 크로스오버 후에 가격이 단기 EMA에 닿을 때만 입장을 허용하는 조건 제한이 포함되어 있습니다. 마지막으로 사용자는 EMA 대신 간단한 이동 평균 (SMA) 을 사용할 수 있습니다.
이 전략은 이동 평균 크로스오버와 레버리지 거래를 결합하여 수익을 증폭시키는 동시에 시장 추세를 파악합니다. 그러나 레버리지는 또한 높은 위험을 초래하고 신중하게 사용해야합니다. 또한 더 많은 지표, 역동적으로 매개 변수를 조정하는 등으로 달성 할 수있는 이 전략의 최적화에 여지가 있습니다. 전반적으로이 전략은 높은 수익을 추구하고 높은 위험을 감수 할 수있는 거래자에게 적합합니다.
/*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')