Strategi ini adalah sistem dagangan kuantitatif yang menggabungkan purata bergerak eksponen (EMA) berganda dengan osilator stokastik. Ia menggunakan EMA 20 tempoh dan 50 tempoh untuk menentukan trend pasaran sambil menggunakan osilator stokastik untuk mengenal pasti peluang dagangan di zon overbought dan oversold, mencapai gabungan trend dan momentum yang sempurna. Strategi melaksanakan langkah pengurusan risiko yang ketat, termasuk sasaran stop-loss dan keuntungan tetap.
Logik teras terdiri daripada tiga komponen: pengenalan trend, masa kemasukan, dan kawalan risiko. Pengenalan trend terutamanya bergantung pada kedudukan relatif EMA cepat (20-periode) dan EMA perlahan (50-periode), di mana trend menaik disahkan apabila garis pantas berada di atas garis perlahan, dan sebaliknya. Isyarat kemasukan disahkan oleh persilangan Osilator Stochastic, mencari perdagangan berkemungkinan tinggi di zon overbought dan oversold. Kawalan risiko menggunakan stop-loss peratusan tetap dan sasaran keuntungan 2: 1, memastikan nisbah risiko-balasan yang jelas untuk setiap perdagangan.
Strategi ini menubuhkan sistem perdagangan yang lengkap dengan menggabungkan penunjuk trend dan momentum. Kekuatannya terletak pada kerangka logik yang jelas dan kawalan risiko yang ketat, walaupun penerapan praktikal memerlukan pengoptimuman parameter berdasarkan keadaan pasaran tertentu. Melalui peningkatan dan pengoptimuman yang berterusan, strategi ini mempunyai potensi untuk mengekalkan prestasi yang stabil di pelbagai persekitaran pasaran.
/*backtest start: 2024-12-06 00:00:00 end: 2025-01-04 08:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=6 strategy("EMA + Stochastic Strategy", overlay=true) // Inputs for EMA emaShortLength = input.int(20, title="Short EMA Length") emaLongLength = input.int(50, title="Long EMA Length") // Inputs for Stochastic stochK = input.int(14, title="Stochastic %K Length") stochD = input.int(3, title="Stochastic %D Smoothing") stochOverbought = input.int(85, title="Stochastic Overbought Level") stochOversold = input.int(15, title="Stochastic Oversold Level") // Inputs for Risk Management riskRewardRatio = input.float(2.0, title="Risk-Reward Ratio") stopLossPercent = input.float(1.0, title="Stop Loss (%)") // EMA Calculation emaShort = ta.ema(close, emaShortLength) emaLong = ta.ema(close, emaLongLength) // Stochastic Calculation k = ta.stoch(high, low, close, stochK) d = ta.sma(k, stochD) // Trend Condition isUptrend = emaShort > emaLong isDowntrend = emaShort < emaLong // Stochastic Signals stochBuyCrossover = ta.crossover(k, d) stochBuySignal = k < stochOversold and stochBuyCrossover stochSellCrossunder = ta.crossunder(k, d) stochSellSignal = k > stochOverbought and stochSellCrossunder // Entry Signals buySignal = isUptrend and stochBuySignal sellSignal = isDowntrend and stochSellSignal // Strategy Execution if buySignal strategy.entry("Buy", strategy.long) stopLoss = close * (1 - stopLossPercent / 100) takeProfit = close * (1 + stopLossPercent * riskRewardRatio / 100) strategy.exit("Take Profit/Stop Loss", from_entry="Buy", stop=stopLoss, limit=takeProfit) if sellSignal strategy.entry("Sell", strategy.short) stopLoss = close * (1 + stopLossPercent / 100) takeProfit = close * (1 - stopLossPercent * riskRewardRatio / 100) strategy.exit("Take Profit/Stop Loss", from_entry="Sell", stop=stopLoss, limit=takeProfit) // Plotting plot(emaShort, color=color.blue, title="Short EMA") plot(emaLong, color=color.red, title="Long EMA")