Strategi ini menggunakan crossover dari 20 hari dan 55 hari eksponensial bergerak rata-rata (EMA) untuk menghasilkan sinyal perdagangan. sinyal beli dipicu ketika EMA jangka pendek melintasi di atas EMA jangka panjang, dan sinyal jual dipicu ketika sebaliknya terjadi. Strategi ini juga memperkenalkan perdagangan leverage, yang memperkuat kedua potensi pengembalian dan risiko. Selain itu, strategi ini mencakup pembatasan bersyarat yang hanya memungkinkan memasuki posisi ketika harga menyentuh EMA jangka pendek setelah crossover, untuk mengurangi risiko sinyal palsu.
Strategi ini menggabungkan crossover rata-rata bergerak dan perdagangan leverage untuk menangkap tren pasar sambil memperkuat pengembalian. Namun, leverage juga membawa risiko tinggi dan perlu digunakan dengan hati-hati. Selain itu, ada ruang untuk optimasi dalam strategi ini, yang dapat dicapai dengan memperkenalkan lebih banyak indikator, menyesuaikan parameter secara dinamis, dll. Secara keseluruhan, strategi ini cocok untuk pedagang yang mengejar pengembalian tinggi dan dapat menanggung risiko tinggi.
/*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')