Ini adalah strategi dagangan yang menggabungkan momentum dan trend, menggunakan pelbagai Exponential Moving Averages (EMA), Indeks Kekuatan Relatif (RSI), dan osilator Stochastic untuk mengenal pasti trend dan momentum pasaran.
Strategi ini menggunakan 5 EMA dengan tempoh yang berbeza (8, 13, 21, 34, 55) untuk menentukan arah trend. Trend menaik dikenal pasti apabila EMA tempoh pendek berada di atas EMA tempoh panjang, dan sebaliknya untuk trend penurunan. RSI mengesahkan momentum dengan ambang masuk dan keluar yang berbeza. Osilator Stochastic berfungsi sebagai penapis ketiga untuk mengelakkan keadaan overbought dan oversold. Sistem pengurusan risiko menggunakan ATR untuk menetapkan sasaran stop-loss dinamik (2x ATR) dan keuntungan (4x ATR), dengan stop trailing 1.5x ATR untuk melindungi keuntungan.
Strategi ini menyediakan penyelesaian perdagangan yang komprehensif dengan menggabungkan beberapa penunjuk teknikal dengan sistem pengurusan risiko yang kukuh. Kekuatannya utama terletak pada mekanisme penapisan pelbagai lapisan dan pengurusan risiko dinamik, tetapi ia masih memerlukan pengoptimuman berdasarkan ciri pasaran tertentu. Pelaksanaan yang berjaya memerlukan pemantauan dan penyesuaian berterusan, terutama kemampuan penyesuaian parameter dalam persekitaran pasaran yang berbeza. Melalui arah pengoptimuman yang dicadangkan, strategi ini berpotensi untuk meningkatkan lagi kestabilan dan keuntungan.
/*backtest start: 2024-11-04 00:00:00 end: 2024-12-04 00:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Combined Strategy (Modernized)", overlay = true) //----------// // MOMENTUM // //----------// ema8 = ta.ema(close, 8) ema13 = ta.ema(close, 13) ema21 = ta.ema(close, 21) ema34 = ta.ema(close, 34) ema55 = ta.ema(close, 55) // Plotting EMAs for visualization plot(ema8, color=color.red, title="EMA 8", linewidth=1) plot(ema13, color=color.orange, title="EMA 13", linewidth=1) plot(ema21, color=color.yellow, title="EMA 21", linewidth=1) plot(ema34, color=color.aqua, title="EMA 34", linewidth=1) plot(ema55, color=color.lime, title="EMA 55", linewidth=1) longEmaCondition = ema8 > ema13 and ema13 > ema21 and ema21 > ema34 and ema34 > ema55 exitLongEmaCondition = ema13 < ema55 shortEmaCondition = ema8 < ema13 and ema13 < ema21 and ema21 < ema34 and ema34 < ema55 exitShortEmaCondition = ema13 > ema55 // ---------- // // OSCILLATORS // // ----------- // rsi = ta.rsi(close, 14) longRsiCondition = rsi < 70 and rsi > 40 exitLongRsiCondition = rsi > 70 shortRsiCondition = rsi > 30 and rsi < 60 exitShortRsiCondition = rsi < 30 // Stochastic k = ta.stoch(close, high, low, 14) d = ta.sma(k, 3) longStochasticCondition = k < 80 exitLongStochasticCondition = k > 95 shortStochasticCondition = k > 20 exitShortStochasticCondition = k < 5 //----------// // STRATEGY // //----------// // ATR for dynamic stop loss and take profit atr = ta.atr(14) stopLossMultiplier = 2 takeProfitMultiplier = 4 stopLoss = atr * stopLossMultiplier takeProfit = atr * takeProfitMultiplier // Trailing stop settings trailStopMultiplier = 1.5 trailOffset = atr * trailStopMultiplier // Risk management: dynamic position sizing riskPerTrade = 0.01 // 1% risk per trade positionSize = strategy.equity * riskPerTrade / stopLoss longCondition = longEmaCondition and longRsiCondition and longStochasticCondition and strategy.position_size == 0 exitLongCondition = (exitLongEmaCondition or exitLongRsiCondition or exitLongStochasticCondition) and strategy.position_size > 0 if (longCondition) strategy.entry("LONG", strategy.long, qty=positionSize) strategy.exit("Take Profit Long", "LONG", stop=close - stopLoss, limit=close + takeProfit, trail_offset=trailOffset) if (exitLongCondition) strategy.close("LONG") shortCondition = shortEmaCondition and shortRsiCondition and shortStochasticCondition and strategy.position_size == 0 exitShortCondition = (exitShortEmaCondition or exitShortRsiCondition or exitShortStochasticCondition) and strategy.position_size < 0 if (shortCondition) strategy.entry("SHORT", strategy.short, qty=positionSize) strategy.exit("Take Profit Short", "SHORT", stop=close + stopLoss, limit=close - takeProfit, trail_offset=trailOffset) if (exitShortCondition) strategy.close("SHORT")