
5 EMA Breakout Strategi dengan Sistem Optimisasi Filter Waktu adalah strategi perdagangan kuantitatif berbasis rata-rata bergerak indeks yang menggunakan indikator EMA 5 siklus untuk mengidentifikasi titik terobosan pasar potensial dan mengoptimalkan pelaksanaan perdagangan melalui verifikasi sinyal yang ketat dan penyaringan jendela waktu. Inti dari strategi ini adalah untuk menangkap perubahan dinamika saat sinyal harga terobosan mencapai titik tertinggi / terendah, sambil menerapkan parameter manajemen risiko yang independen dalam setiap perdagangan.
Strategi ini didasarkan pada prinsip-prinsip inti berikut:
Mekanisme Pembuatan Sinyal: Strategi menggunakan 5 siklus EMA sebagai indikator utama, dengan harga dan hubungan EMA untuk mengidentifikasi sinyal. Sinyal beli dihasilkan ketika harga penutupan dan harga tertinggi di bawah EMA; Sinyal jual dihasilkan ketika harga penutupan dan harga terendah di atas EMA.
Verifikasi Penembusan: Strategi hanya mencari penembusan yang efektif dalam 3 jam setelah sinyal dihasilkan. Perdagangan beli dipicu ketika harga menembus titik tertinggi sinyal, perdagangan jual dipicu ketika harga menembus titik terendah sinyal.
Kerangka pengelolaan risiko: Setiap transaksi memiliki stop loss dan target yang terpisah. Stop loss untuk transaksi beli ditetapkan pada titik terendah dari signal bar, dan stop loss untuk transaksi jual ditetapkan pada titik tertinggi dari signal bar. Target harga didasarkan pada rasio risiko / keuntungan yang ditentukan pengguna, dengan default 1: 3.
Sistem penyaringan waktu: Strategi ini menerapkan dua mekanisme manajemen waktu: a) mencegah perdagangan baru dalam jendela waktu tertentu, seperti saat pasar bergejolak besar; b) secara otomatis menghapus semua posisi yang dipegang pada waktu yang ditentukan, seperti sebelum akhir hari perdagangan.
Multiple trade handling: Strategi ini memungkinkan untuk melakukan beberapa transaksi dalam arah yang sama tanpa menutup posisi sebelumnya, dengan masing-masing transaksi memiliki ID, stop loss, dan target harga yang terpisah.
Dengan analisis mendalam, strategi ini menunjukkan keuntungan yang jelas sebagai berikut:
Filtrasi sinyal yang tepat: menghasilkan sinyal dengan meminta hubungan spesifik antara harga dan EMA, mengurangi terjadinya sinyal yang salah, meningkatkan kualitas perdagangan.
Opsi eksekusi yang fleksibel: menawarkan opsi “masuk hanya saat mendekati penutupan”, memungkinkan pedagang untuk menghindari false breakout dan meningkatkan stabilitas strategi.
Manajemen risiko independen: Setiap perdagangan memiliki stop loss dan target yang independen, yang memungkinkan pedagang untuk mengontrol eksposur risiko setiap perdagangan dengan tepat, menghindari risiko posisi penuh.
Kecerdasan waktu: Strategi dapat beradaptasi dengan karakteristik waktu pasar, menghindari periode perdagangan yang tidak efisien atau berisiko tinggi dengan filter jendela waktu khusus dan fungsi penutupan otomatis.
Skalabilitas: Strategi dirancang untuk menjadi modular, parameter dapat disesuaikan, dapat diterapkan di berbagai pasar dan periode waktu, dan dapat disesuaikan dengan gaya dan kebutuhan perdagangan yang berbeda.
Meskipun strategi ini dirancang dengan baik, masih ada risiko potensial sebagai berikut:
EMA keterlambatan: Sebagai indikator keterlambatan, 5 siklus EMA dapat menghasilkan sinyal keterlambatan di pasar yang berubah dengan cepat, yang menyebabkan titik masuk yang tidak diinginkan. Solusinya adalah dengan hati-hati digunakan di pasar yang sangat fluktuatif, atau dikonfirmasi dalam kombinasi dengan indikator lain.
Stop loss yang tetap: Menggunakan titik tinggi/rendah dari signal box sebagai titik stop loss dapat menyebabkan stop loss yang terlalu lebar, meningkatkan jumlah risiko per transaksi. Anda dapat mempertimbangkan untuk menggunakan ATR atau persentase stop loss untuk mengoptimalkan posisi stop loss.
Pembatasan jendela 3 frame: Mencari terobosan hanya dalam 3 frame dapat melewatkan peluang terobosan yang efektif tetapi tertunda. Pertimbangkan untuk menyesuaikan parameter ini sesuai dengan pasar dan periode waktu yang berbeda.
Ketergantungan zona waktu: Strategi menggunakan IST (waktu standar India) untuk penyaringan waktu, yang perlu disesuaikan oleh pedagang yang menggunakan zona waktu yang berbeda. Disarankan untuk mengubah kode untuk mendukung pengaturan zona waktu dinamis.
Akumulasi perdagangan ganda: Memungkinkan beberapa entri di arah yang sama dapat menyebabkan kelebihan leverage dan konsentrasi risiko. Disarankan untuk menerapkan mekanisme pengendalian risiko total, membatasi jumlah maksimum perdagangan arah yang sama atau total risiko.
Berdasarkan analisis strategi, berikut adalah beberapa kemungkinan arah optimasi:
Siklus EMA Dinamis: Menerapkan fungsi untuk menyesuaikan siklus EMA secara otomatis berdasarkan volatilitas pasar (seperti ATR), sehingga strategi dapat beradaptasi dengan berbagai kondisi pasar. Ini akan meningkatkan kemampuan strategi untuk beradaptasi dalam lingkungan yang berbeda.
Integrasi filter tingkat tinggi: pengenalan konfirmasi volume transaksi, penyaringan tingkat volatilitas pasar atau indikator kekuatan tren (seperti ADX), meningkatkan kualitas sinyal dan mengurangi kemungkinan terobosan palsu.
Manajemen risiko adaptif: Mempunyai fungsi untuk menyesuaikan tingkat risiko dan stop loss berdasarkan dinamika volatilitas pasar, membuat manajemen risiko lebih cerdas dan relevan dengan pasar.
Penetapan laba parsial: Tambahkan fitur untuk memindahkan stop loss atau batch profit ketika mencapai target laba parsial, melindungi margin yang menguntungkan dan memungkinkan sisa posisi untuk mengikuti tren yang lebih besar.
Optimasi Pembelajaran Mesin: Menggunakan algoritma pembelajaran mesin untuk menganalisis data historis, mengidentifikasi waktu masuk dan kombinasi parameter yang optimal, dan mengoptimalkan parameter strategi secara adaptif.
5 Sistem Optimisasi Strategi Penembusan EMA Dinamis dan Penyaringan Waktu adalah sistem perdagangan kuantitatif yang dirancang dengan baik, yang menyediakan pedagang dengan kerangka perdagangan yang komprehensif dan fleksibel dengan menggabungkan indikator EMA, verifikasi penembusan, manajemen risiko yang ketat, dan fungsi penyaringan waktu. Strategi ini sangat cocok untuk pedagang intraday dan jangka pendek, yang dapat secara efektif menangkap perubahan dinamika setelah harga terobosan.
/*backtest
start: 2025-01-01 00:00:00
end: 2025-07-04 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("5 EMA STRATEGY by Power of Stocks(StockYogi)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// === INPUTS ===
emaLen = input.int(5, title="EMA Length")
filterBuy = input.bool(true, title="Enable Buy Trades")
filterSell = input.bool(true, title="Enable Sell Trades")
targetRR = input.float(3.0, title="Target R:R (e.g. 3 = 1:3)")
entryOnCloseOnly = input.bool(false, title="Only Enter on Candle Close?")
// === TOGGLES ===
enableCustomExitTime = input.bool(true, title="Enable Custom Exit Time")
enableBlockTradeTime = input.bool(true, title="Enable Block Trade Time Window")
// === CUSTOM TIME SETTINGS ===
exitHour = input.int(15, title="Exit Hour (IST)", minval=0, maxval=23)
exitMinute = input.int(30, title="Exit Minute (IST)", minval=0, maxval=59)
blockStartHr = input.int(15, title="Block Start Hour (IST)", minval=0, maxval=23)
blockStartMn = input.int(0, title="Block Start Minute (IST)", minval=0, maxval=59)
blockEndHr = input.int(15, title="Block End Hour (IST)", minval=0, maxval=23)
blockEndMn = input.int(30, title="Block End Minute (IST)", minval=0, maxval=59)
// === TIME MANAGEMENT (IST) ===
ist = timestamp("Asia/Kolkata", year, month, dayofmonth, hour, minute)
istHour = hour(ist)
istMinute = minute(ist)
exitNow = enableCustomExitTime and (istHour == exitHour and istMinute == exitMinute)
// === ENTRY BLOCK ZONE LOGIC ===
afterBlockStart = istHour > blockStartHr or (istHour == blockStartHr and istMinute >= blockStartMn)
beforeBlockEnd = istHour < blockEndHr or (istHour == blockEndHr and istMinute < blockEndMn)
inBlockZone = enableBlockTradeTime and (afterBlockStart and beforeBlockEnd)
// === CALCULATE EMA ===
ema = ta.ema(close, emaLen)
plot(ema, color=color.orange, title="5 EMA")
// === SIGNAL CANDLE STORAGE ===
var float signalHigh = na
var float signalLow = na
var int signalIndex = na
var bool isBuySignal = false
var bool isSellSignal = false
// === SIGNAL CONDITIONS ===
newBuySignal = close < ema and high < ema
newSellSignal = close > ema and low > ema
if newBuySignal
signalHigh := high
signalLow := low
signalIndex := bar_index
isBuySignal := true
isSellSignal := false
if newSellSignal
signalHigh := high
signalLow := low
signalIndex := bar_index
isBuySignal := false
isSellSignal := true
// === HIGHLIGHT SIGNAL BAR ===
isSignalBar = bar_index == signalIndex
barcolor(isSignalBar ? color.blue : na)
// === TRIGGER CONDITIONS ===
withinWindow = bar_index > signalIndex and bar_index <= signalIndex + 3
buyTrigger = isBuySignal and withinWindow and high > signalHigh and not inBlockZone
sellTrigger = isSellSignal and withinWindow and low < signalLow and not inBlockZone
// === UNIQUE TRADE ID GENERATOR ===
getId(prefix) =>
var int counter = 0
counter += 1
prefix + "_" + str.tostring(counter)
// === BUY ENTRY ===
if buyTrigger and filterBuy
entry = signalHigh
sl = signalLow
risk = entry - sl
target = entry + risk * targetRR
tradeId = getId("Buy")
if entryOnCloseOnly
if close > signalHigh
strategy.entry(tradeId, strategy.long)
strategy.exit("TP_" + tradeId, from_entry=tradeId, limit=target, stop=sl)
else
strategy.entry(tradeId, strategy.long, stop=entry)
strategy.exit("TP_" + tradeId, from_entry=tradeId, limit=target, stop=sl)
// === SELL ENTRY ===
if sellTrigger and filterSell
entry = signalLow
sl = signalHigh
risk = sl - entry
target = entry - risk * targetRR
tradeId = getId("Sell")
if entryOnCloseOnly
if close < signalLow
strategy.entry(tradeId, strategy.short)
strategy.exit("TP_" + tradeId, from_entry=tradeId, limit=target, stop=sl)
else
strategy.entry(tradeId, strategy.short, stop=entry)
strategy.exit("TP_" + tradeId, from_entry=tradeId, limit=target, stop=sl)
// === TIME-BASED EXIT FOR ALL TRADES ===
if exitNow
strategy.close_all(comment="Exited at Custom Time")