Strategi ini menghasilkan isyarat beli dan jual berdasarkan persilangan purata bergerak eksponen 20 hari dan 200 hari (EMA), yang disahkan oleh Indeks Kekuatan Relatif (RSI) dan penunjuk Perbezaan Convergensi Purata Bergerak (MACD). Strategi ini menggunakan kaedah stop-loss dinamik dan sasaran keuntungan tetap untuk menguruskan risiko perdagangan dan mengunci keuntungan.
Dengan menggabungkan isyarat silang EMA dengan pengesahan RSI dan MACD, bersama-sama dengan kaedah pengurusan risiko stop-loss dinamik dan sasaran keuntungan tetap, strategi ini bertujuan untuk mencapai keuntungan yang stabil di pasaran trend. Walau bagaimanapun, di pasaran yang bergolak, strategi ini mungkin menghadapi risiko perdagangan yang kerap dan kerugian berturut-turut. Oleh itu, pengoptimuman dan penambahbaikan lanjut diperlukan untuk meningkatkan kemampuan menyesuaikan diri dan ketahanan strategi.
/*backtest start: 2023-06-11 00:00:00 end: 2024-06-16 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("EMA Crossover Strategy with RSI and MACD Confirmation and Dynamic Trailing Stop Loss", overlay=true) // Calculate EMAs ema20 = ta.ema(close, 20) ema200 = ta.ema(close, 200) // Calculate RSI rsi = ta.rsi(close, 14) // Calculate MACD [macdLine, signalLine, _] = ta.macd(close, 12, 26, 9) // Plot EMAs, RSI, and MACD on the chart plot(ema20, color=color.blue, title="EMA 20") plot(ema200, color=color.red, title="EMA 200") hline(70, "Overbought", color=color.red) hline(30, "Oversold", color=color.green) plot(rsi, title="RSI", color=color.orange) hline(0, "Zero Line", color=color.gray) plot(macdLine, title="MACD Line", color=color.aqua) plot(signalLine, title="Signal Line", color=color.fuchsia) // Strategy parameters targetProfitPercent = 20 trailingStopIncrement = 10 // Strategy variables var float initialStopLevel = na var float trailingStopLevel = na // Strategy rules with RSI and MACD confirmation longCondition = ta.crossover(ema20, ema200) and rsi > 50 and macdLine > signalLine shortCondition = ta.crossunder(ema20, ema200) and rsi < 50 and macdLine < signalLine // Execute trades if (longCondition) strategy.entry("Buy Call", strategy.long) initialStopLevel := strategy.position_avg_price * (1 - 0.10) // Initial stop-loss at 10% below entry price if (shortCondition) strategy.entry("Buy Put", strategy.short) // Calculate profit and loss targets takeProfit = strategy.position_avg_price * (1 + targetProfitPercent / 100) // 20% profit target // Update trailing stop loss if (strategy.opentrades > 0) if (strategy.position_size > 0) // Long position if (strategy.netprofit >= takeProfit) // Update stop-loss based on profit increments if (trailingStopLevel == na) trailingStopLevel := strategy.position_avg_price * (1 - 0.10) // Initial trailing stop at 10% below entry price else if (strategy.position_avg_price * (1 - 0.10) > trailingStopLevel) trailingStopLevel := strategy.position_avg_price * (1 - 0.10) // Increase stop-loss to 10% below current price // Apply trailing stop loss strategy.exit("Take Profit", "Buy Call", stop=trailingStopLevel) // Plot buy and sell signals on the chart plotshape(series=longCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(series=shortCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")