
Strategi ini adalah berdasarkan kepada prinsip dua kali simpangan daripada purata bergerak indeks ((EMA) yang digabungkan dengan rekaan mekanisme berhenti dinamik. Strategi ini menggunakan EMA 10 hari dan EMA 20 hari sebagai isyarat perdagangan utama, dan menggunakan 50 hari EMA sebagai penapis trend, sambil menggunakan EMA 10 hari sebagai garis berhenti dinamik. Ia menghasilkan isyarat beli apabila harga berada di atas EMA 50 hari dan melalui EMA 10 hari pada EMA 20 hari; ia menghasilkan isyarat jual apabila harga berada di bawah EMA 50 hari dan melalui EMA 20 hari pada EMA 10 hari.
Strategi ini menggabungkan EMA dua kali ganda dengan stop loss dinamik, untuk mencapai keseimbangan antara trend dan kawalan risiko. Kelebihan utamanya adalah struktur logik yang jelas dan reka bentuk visual yang intuitif, sesuai untuk senario perdagangan frekuensi rendah dan sederhana. Kestabilan dapat ditingkatkan lagi dengan memperkenalkan lebih banyak dimensi data pasaran (seperti kadar turun naik, jumlah transaksi) pada masa akan datang.
/*backtest
start: 2024-04-24 00:00:00
end: 2025-04-23 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"DOGE_USDT"}]
*/
//@version=5
//@description Ovtlyer EMA Crossover price over 50 Indicator
//@author YourName
strategy("EMA Crossover Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// Input EMA lengths
length10 = input.int(10, minval=1, title="10 EMA Length")
length20 = input.int(20, minval=1, title="20 EMA Length")
length50 = input.int(50, minval=1, title="50 EMA Length")
// Calculate EMAs
ema10 = ta.ema(close, length10)
ema20 = ta.ema(close, length20)
ema50 = ta.ema(close, length50)
// Bullish Condition: 10 EMA crosses above 20 EMA AND price is above 50 EMA
bullishCondition = ta.crossover(ema10, ema20) and close > ema50
// Bearish Condition: 10 EMA crosses below 20 EMA AND price is below 50 EMA
bearishCondition = ta.crossunder(ema10, ema20) and close < ema50
// Track the current market state
var isBullish = false
var isBearish = false
if (bullishCondition)
isBullish := true
isBearish := false
if (bearishCondition)
isBearish := true
isBullish := false
// Exit conditions
bullishExit = isBullish and close < ema10
bearishExit = isBearish and close > ema10
// Plot EMAs
plot(ema10, title="10 EMA", color=color.rgb(0, 255, 0), linewidth=3) // Thick green line for 10 EMA
plot(ema20, title="20 EMA", color=color.rgb(0, 150, 255), linewidth=2) // Medium blue line for 20 EMA
plot(ema50, title="50 EMA", color=color.rgb(255, 165, 0), linewidth=1) // Thin orange line for 50 EMA
// Strategy Entry and Exit
if (bullishCondition)
strategy.entry("Long", strategy.long)
if (bearishCondition)
strategy.entry("Short", strategy.short)
if (bullishExit)
strategy.close("Long")
if (bearishExit)
strategy.close("Short")
// Plot Entry Signals (for visualization)
plotshape(bullishCondition, title="Bullish Signal",
location=location.belowbar, style=shape.triangleup,
size=size.small, color=color.green)
plotshape(bearishCondition, title="Bearish Signal",
location=location.abovebar, style=shape.triangledown,
size=size.small, color=color.red)
// Plot Exit Signals (for visualization)
plotshape(bullishExit, title="Bullish Exit",
location=location.abovebar, style=shape.xcross,
size=size.small, color=color.orange)
plotshape(bearishExit, title="Bearish Exit",
location=location.belowbar, style=shape.xcross,
size=size.small, color=color.purple)