
Strategi ini adalah sistem pelacakan tren yang didasarkan pada indeks moving averages (EMA) yang berpotongan, yang menggabungkan manajemen posisi dinamis dan pengendalian risiko. Strategi ini menggunakan sinyal silang dari EMA cepat dan lambat untuk mengidentifikasi tren pasar, sementara secara dinamis menyesuaikan skala perdagangan melalui perhitungan persentase risiko, dan menggunakan stop loss bergerak untuk melindungi keuntungan.
Logika inti dari strategi ini didasarkan pada rata-rata bergerak indeks dari dua periode yang berbeda (default 9 dan 21). Ketika EMA cepat naik melewati EMA lambat, sistem menghasilkan sinyal ganda; ketika EMA cepat turun melewati EMA lambat, sistem melanggar. Ukuran setiap transaksi didasarkan pada rasio risiko tetap terhadap total modal akun (default 1%).
Ini adalah sistem perdagangan lengkap yang menggabungkan metode analisis teknis klasik dengan konsep manajemen risiko modern. Strategi mengendalikan risiko dengan manajemen posisi dinamis dan stop loss bergerak, sambil memanfaatkan peluang tren yang menangkap EMA silang. Meskipun ada beberapa keterbatasan yang melekat, strategi dapat ditingkatkan lebih lanjut dengan stabilitas dan adaptasi melalui arah optimasi yang disarankan.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Bitcoin Exponential Profit Strategy", overlay=true)
// User settings
fastLength = input.int(9, title="Fast EMA Length", minval=1)
slowLength = input.int(21, title="Slow EMA Length", minval=1)
riskPercent = input.float(1, title="Risk % Per Trade", step=0.1) / 100
rewardMultiplier = input.float(2, title="Reward Multiplier (R:R)", step=0.1)
trailOffsetPercent = input.float(0.5, title="Trailing Stop Offset %", step=0.1) / 100
// Calculate EMAs
fastEMA = ta.ema(close, fastLength)
slowEMA = ta.ema(close, slowLength)
// Plot EMAs
plot(fastEMA, color=color.blue, title="Fast EMA")
plot(slowEMA, color=color.red, title="Slow EMA")
// Account balance and dynamic position sizing
capital = strategy.equity
riskAmount = capital * riskPercent
// Define Stop Loss and Take Profit Levels
stopLossLevel = close * (1 - riskPercent)
takeProfitLevel = close * (1 + rewardMultiplier * riskPercent)
// Trailing stop offset
trailOffset = close * trailOffsetPercent
// Entry Condition: Bullish Crossover
if ta.crossover(fastEMA, slowEMA)
positionSize = riskAmount / math.max(close - stopLossLevel, 0.01) // Prevent division by zero
strategy.entry("Long", strategy.long, qty=positionSize)
strategy.exit("TakeProfit", from_entry="Long", stop=stopLossLevel, limit=takeProfitLevel, trail_offset=trailOffset)
// Exit Condition: Bearish Crossunder
if ta.crossunder(fastEMA, slowEMA)
strategy.close("Long")
// Labels for Signals
if ta.crossover(fastEMA, slowEMA)
label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, style=label.style_label_up)
if ta.crossunder(fastEMA, slowEMA)
label.new(bar_index, high, "SELL", color=color.red, textcolor=color.white, style=label.style_label_down)