
Strategi ini ialah sistem perdagangan kuantitatif yang menggabungkan purata bergerak eksponen berganda (EMA) dan pengayun stokastik. Gunakan EMA 20-tempoh dan 50-tempoh untuk menentukan arah aliran pasaran, dan gunakan pengayun stokastik untuk mencari peluang dagangan dalam kawasan terlebih beli dan terlebih jual, mencapai gabungan aliran dan momentum yang sempurna. Strategi ini menggunakan langkah pengurusan risiko yang ketat, termasuk tetapan henti rugi dan sasaran keuntungan tetap.
Logik teras strategi dibahagikan kepada tiga bahagian: pertimbangan arah aliran, masa kemasukan dan kawalan risiko. Pertimbangan arah aliran bergantung terutamanya pada kedudukan relatif EMA pantas (20 tempoh) dan EMA perlahan (50 tempoh) Apabila garisan pantas berada di atas garisan perlahan, ia dinilai sebagai aliran menaik, jika tidak, ia adalah aliran menurun). . Isyarat kemasukan disahkan oleh persilangan pengayun stokastik, mencari peluang dagangan berkemungkinan tinggi di kawasan terlebih beli dan terlebih jual. Kawalan risiko menggunakan peratusan tetap henti rugi dan tetapan nisbah ambil untung 2x untuk memastikan setiap transaksi mempunyai nisbah pulangan risiko yang jelas.
Strategi ini menggabungkan penunjuk arah aliran dan momentum untuk mencipta sistem perdagangan yang lengkap. Kelebihan teras strategi terletak pada rangka kerja logiknya yang jelas dan kawalan risiko yang ketat, tetapi dalam aplikasi sebenar, pengoptimuman parameter masih diperlukan berdasarkan keadaan pasaran tertentu. Melalui penambahbaikan dan pengoptimuman berterusan, strategi ini dijangka dapat mengekalkan prestasi yang stabil dalam 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")