
Strategi ini adalah sistem perdagangan kuantitatif yang menggabungkan rata-rata pergerakan eksponensial ganda (EMA) dan osilator stokastik. Gunakan EMA periode 20 dan periode 50 untuk menentukan tren pasar, dan gunakan osilator stokastik untuk menemukan peluang perdagangan di area jenuh beli dan jenuh jual, mencapai kombinasi tren dan momentum yang sempurna. Strategi ini menggunakan langkah-langkah manajemen risiko yang ketat, termasuk pengaturan stop-loss dan target keuntungan yang tetap.
Logika inti strategi dibagi menjadi tiga bagian: penilaian tren, waktu masuk dan pengendalian risiko. Penilaian tren terutama bergantung pada posisi relatif EMA cepat (20 periode) dan EMA lambat (50 periode). Ketika garis cepat berada di atas garis lambat, maka tren tersebut dinilai sebagai tren naik, jika tidak maka tren tersebut adalah tren turun. . Sinyal masuk dikonfirmasi oleh persilangan osilator stokastik, mencari peluang perdagangan berpeluang tinggi di area jenuh beli dan jenuh jual. Pengendalian risiko menggunakan stop loss dengan persentase tetap dan pengaturan rasio take profit 2x untuk memastikan bahwa setiap transaksi memiliki rasio risiko-imbal hasil yang jelas.
Strategi ini menggabungkan indikator tren dan momentum untuk menciptakan sistem perdagangan yang lengkap. Keuntungan inti dari strategi ini terletak pada kerangka logis yang jelas dan pengendalian risiko yang ketat, tetapi dalam penerapan aktual, optimalisasi parameter masih diperlukan berdasarkan kondisi pasar tertentu. Melalui perbaikan dan pengoptimalan yang berkelanjutan, strategi ini diharapkan dapat mempertahankan kinerja yang stabil di berbagai lingkungan pasar.
/*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")