
Strategi ini adalah sistem perdagangan yang didasarkan pada crossover dua rata-rata, yang melakukan perdagangan dengan memantau crossover 9 siklus dan 21 siklus indeks moving average (EMA). Strategi ini beroperasi dalam kerangka waktu 10 menit, menggunakan mode perdagangan satu kali, yaitu tidak membuka posisi lagi saat memegang posisi. Sistem ini menggunakan modal awal 100.000, dan setiap transaksi dilakukan dengan 10% dari ekuitas akun.
Prinsip inti dari strategi ini adalah memanfaatkan EMA periode pendek yang lebih sensitif terhadap perubahan harga pasar daripada EMA periode panjang. Ketika EMA periode pendek (siklus 9) naik melewati EMA periode panjang (siklus 21), menunjukkan peningkatan momentum naik jangka pendek, sistem mengeluarkan banyak sinyal; Ketika EMA periode pendek (siklus 9) turun melewati EMA periode panjang, menunjukkan peningkatan momentum turun jangka pendek, sistem mengeluarkan sinyal posisi datar. Strategi ini memastikan bahwa hanya ada satu transaksi yang dilakukan pada satu waktu, dengan parameter position_size, untuk mengendalikan risiko secara efektif.
Ini adalah strategi yang dirancang dengan logika yang jelas dan rasional. Strategi ini dirancang untuk menangkap tren pasar melalui EMA yang berlawanan, dengan mode perdagangan satu kali dan manajemen posisi persentase, untuk menyeimbangkan risiko dan keuntungan. Meskipun ada beberapa keterbatasan yang melekat, stabilitas dan fleksibilitas strategi dapat ditingkatkan lebih lanjut dengan arah optimasi yang direkomendasikan.
/*backtest
start: 2024-02-25 00:00:00
end: 2025-02-22 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/
//@version=6
strategy("EMA Crossover Labels (One Trade at a Time)", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// ==== User Inputs ====
// Set the testing timeframe (ensure the chart is on a 10-min timeframe)
testTimeFrame = input.timeframe("10", "Strategy Timeframe")
// EMA period inputs
emaPeriod9 = input.int(9, "EMA 9 Period", minval=1)
emaPeriod21 = input.int(21, "EMA 2q Period", minval=1)
// ==== Retrieve Price Data ====
// For simplicity, we use the chart's timeframe (should be 10-min)
price = close
// ==== Calculate EMAs ====
ema9 = ta.ema(price, emaPeriod9)
ema21 = ta.ema(price, emaPeriod21)
// ==== Define Crossover Conditions ====
// Buy signal: when EMA9 crosses above EMA21 AND no current position is open
buySignal = ta.crossover(ema9, ema21) and strategy.position_size == 0
// Sell signal: when EMA9 crosses below EMA21 AND a long position is active
sellSignal = ta.crossunder(ema9, ema21) and strategy.position_size > 0
// ==== Strategy Orders ====
// Enter a long position when a valid buy signal occurs
if buySignal
strategy.entry("Long", strategy.long)
alert("Long Signal: " + syminfo.tickerid + " - EMA9 crossed above EMA21", alert.freq_once_per_bar_close)
// Exit the long position when a valid sell signal occurs
if sellSignal
strategy.close("Long")
alert("Sell Long Signal: " + syminfo.tickerid + " - EMA9 crossed below EMA21", alert.freq_once_per_bar_close)
// ==== Plot Buy/Sell Labels ====
// Only plot a "Buy" label if there's no open position
plotshape(buySignal, title="Buy Label", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy", textcolor=color.white)
// Only plot a "Sell" label if a position is active
plotshape(sellSignal, title="Sell Label", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell", textcolor=color.white)
// ==== Plot EMAs for Visualization ====
plot(ema9, color=color.blue, title="EMA 21")
plot(ema21, color=color.orange, title="EMA 21")