
Strategi ini berdagang berdasarkan sinyal silang EMA23 dan EMA50. Strategi ini menghasilkan sinyal beli saat EMA23 melewati EMA50, dan menghasilkan sinyal jual saat melewati EMA50. Strategi ini juga menghentikan posisi overhead saat harga turun di bawah EMA50, dan sebaliknya menghentikan posisi overhead. Selain itu, strategi ini juga masuk kembali saat harga kembali ke EMA50. Strategi ini berlaku untuk jangka waktu 30 menit.
Strategi ini adalah strategi perdagangan kuantitatif yang didasarkan pada crossover dua garis sejajar, menangkap tren melalui sinyal silang EMA23 dan EMA50, dan menyiapkan mekanisme stop loss dan re-entry untuk mengendalikan risiko dan meningkatkan potensi keuntungan. Strategi ini sederhana dan mudah dimengerti, cocok untuk perdagangan jangka pendek menengah seperti 30 menit. Namun, strategi ini juga memiliki beberapa keterbatasan, seperti penilaian tren yang terlambat, kurangnya optimasi stop loss, kurangnya kinerja pasar goyangan dan sebagainya.
/*backtest
start: 2023-04-20 00:00:00
end: 2024-04-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA Crossover Strategy", overlay=true)
// EMA 23 ve EMA 50'nin hesaplanması
ema23 = ta.ema(close, 23)
ema50 = ta.ema(close, 50)
// Ana alım kuralı: EMA 23 ve EMA 50'nin yukarı kesilmesi
buySignal = ta.crossover(ema23, ema50)
// Ana satış kuralı: EMA 23 ve EMA 50'nin aşağı kesilmesi
sellSignal = ta.crossunder(ema23, ema50)
// Long pozisyon stop seviyesi
longStopLoss = low < ema50 and close < ema50[1]
// Short pozisyon stop seviyesi
shortStopLoss = high > ema50 and close > ema50[1]
// Long pozisyon için tekrar giriş kuralı
longReEntry = high > ema50 and close > ema50 and close > ema50 and ema23 > ema50
// Short pozisyon için tekrar giriş kuralı
shortReEntry = low < ema50 and close < ema50 and close < ema50 and ema23 < ema50
// Long işlemde kar alma seviyesi (%60)
longTakeProfit = strategy.position_avg_price * 1.60
// Short işlemde kar alma seviyesi (%25)
shortTakeProfit = strategy.position_avg_price * 0.75
// Long işlem için yeniden giriş koşulu
longReEntryCondition = strategy.position_size <= 0 and longReEntry
// Short işlem için yeniden giriş koşulu
shortReEntryCondition = strategy.position_size >= 0 and shortReEntry
// Geriye dönük test için başlangıç tarihi (01.01.2022)
startDate = timestamp(2022, 01, 01, 00, 00)
if (time >= startDate)
if (buySignal)
strategy.entry("Buy", strategy.long)
if (sellSignal)
strategy.entry("Sell", strategy.short)
if (strategy.position_size > 0 and (longStopLoss or close >= longTakeProfit))
strategy.close("Buy")
if (strategy.position_size < 0 and (shortStopLoss or close <= shortTakeProfit))
strategy.close("Sell")
if (longReEntryCondition)
strategy.entry("Buy", strategy.long)
if (shortReEntryCondition)
strategy.entry("Sell", strategy.short)