Ini adalah strategi perdagangan yang menggabungkan momentum dan tren, menggunakan beberapa Exponential Moving Averages (EMA), Relative Strength Index (RSI), dan Stochastic oscillator untuk mengidentifikasi tren pasar dan momentum. Strategi ini menggabungkan sistem manajemen risiko berdasarkan Average True Range (ATR), termasuk stop-loss dinamis, target keuntungan, dan trailing stop, bersama dengan ukuran posisi berbasis risiko.
Strategi ini menggunakan 5 EMA dengan periode yang berbeda (8, 13, 21, 34, 55) untuk menentukan arah tren. Tren naik diidentifikasi ketika EMA periode pendek berada di atas EMA periode panjang, dan sebaliknya untuk tren menurun. RSI mengkonfirmasi momentum dengan ambang masuk dan keluar yang berbeda. Osilator Stokastis berfungsi sebagai filter ketiga untuk menghindari kondisi overbought dan oversold. Sistem manajemen risiko menggunakan ATR untuk menetapkan target stop-loss dinamis (2x ATR) dan keuntungan (4x ATR), dengan stop trailing ATR 1,5x untuk melindungi keuntungan.
Strategi ini menyediakan solusi perdagangan yang komprehensif dengan menggabungkan beberapa indikator teknis dengan sistem manajemen risiko yang kuat. Kekuatan utamanya terletak pada mekanisme penyaringan multi-lapisan dan manajemen risiko dinamis, tetapi masih membutuhkan optimalisasi berdasarkan karakteristik pasar tertentu. Implementasi yang sukses membutuhkan pemantauan dan penyesuaian terus-menerus, terutama kemampuan adaptasi parameter di lingkungan pasar yang berbeda. Melalui arah optimasi yang diusulkan, strategi ini memiliki potensi untuk meningkatkan stabilitas dan profitabilitasnya.
/*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")