
Strategi ini adalah sistem perdagangan kuantitatif yang menggabungkan beberapa indeks Moving Average (EMA), Relative Strength Index (RSI) dan Moving Average Trend Scatter Indicator (MACD). Strategi ini membentuk kerangka keputusan perdagangan yang lengkap melalui kolaborasi antara beberapa indikator teknis. Strategi ini menggunakan empat garis EMA 10, 20, 50 dan 100 hari sebagai alat penilaian tren utama, dan menggabungkan RSI dan MACD sebagai indikator konfirmasi tambahan, sambil mengatur stop loss dan stop loss untuk mengendalikan risiko.
Logika inti dari strategi ini didasarkan pada elemen-elemen kunci berikut:
Ini adalah strategi perdagangan kuantitatif yang dirancang secara rasional dan logis. Dengan penggunaan gabungan dari beberapa indikator teknis, strategi ini dapat menangkap tren pasar secara efektif dan memiliki mekanisme kontrol risiko yang lengkap. Strategi ini memiliki ruang yang luas untuk dioptimalkan, dan dengan terus-menerus memperbaiki dan menyesuaikan, diharapkan untuk mendapatkan efek perdagangan yang lebih baik.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-04 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("4 EMA Strategy with RSI & MACD", shorttitle="4 EMA + RSI + MACD", overlay=true)
// Input EMA periods
ema1 = input(10, title="EMA 1")
ema2 = input(20, title="EMA 2")
ema3 = input(50, title="EMA 3")
ema4 = input(100, title="EMA 4")
// Input RSI & MACD settings
rsiLength = input(14, title="RSI Length")
rsiOverbought = input(70, title="RSI Overbought")
rsiOversold = input(30, title="RSI Oversold")
macdFast = input(12, title="MACD Fast Length")
macdSlow = input(26, title="MACD Slow Length")
macdSignal = input(9, title="MACD Signal Length")
// Stop Loss and Take Profit Inputs
stopLossPct = input.float(1.5, title="Stop Loss %") / 100
takeProfitPct = input.float(3, title="Take Profit %") / 100
// Calculate EMAs
ema_1 = ta.ema(close, ema1)
ema_2 = ta.ema(close, ema2)
ema_3 = ta.ema(close, ema3)
ema_4 = ta.ema(close, ema4)
// Calculate RSI
rsi = ta.rsi(close, rsiLength)
// Calculate MACD
[macdLine, signalLine, _] = ta.macd(close, macdFast, macdSlow, macdSignal)
// Plot EMAs
plot(ema_1, color=color.blue, title="EMA 10")
plot(ema_2, color=color.green, title="EMA 20")
plot(ema_3, color=color.orange, title="EMA 50")
plot(ema_4, color=color.red, title="EMA 100")
// Entry Conditions
longCondition = ta.crossover(ema_1, ema_4) and ta.crossover(ema_2, ema_3) and rsi > 50 and macdLine > signalLine
shortCondition = ta.crossunder(ema_1, ema_4) and ta.crossunder(ema_2, ema_3) and rsi < 50 and macdLine < signalLine
// Declare Stop Loss and Take Profit Variables
var float stopLossPrice = na
var float takeProfitPrice = na
var line stopLossLine = na
var line takeProfitLine = na
// Long Trade
if (longCondition)
strategy.entry("Buy", strategy.long)
stopLossPrice := strategy.position_avg_price * (1 - stopLossPct)
takeProfitPrice := strategy.position_avg_price * (1 + takeProfitPct)
// stopLossLine := line.new(bar_index, stopLossPrice, bar_index + 1, stopLossPrice, color=color.red, width=2, style=line.style_dotted)
// takeProfitLine := line.new(bar_index, takeProfitPrice, bar_index + 1, takeProfitPrice, color=color.green, width=2, style=line.style_dotted)
// Short Trade
if (shortCondition)
strategy.entry("Sell", strategy.short)
stopLossPrice := strategy.position_avg_price * (1 + stopLossPct)
takeProfitPrice := strategy.position_avg_price * (1 - takeProfitPct)
// stopLossLine := line.new(bar_index, stopLossPrice, bar_index + 1, stopLossPrice, color=color.red, width=2, style=line.style_dotted)
// takeProfitLine := line.new(bar_index, takeProfitPrice, bar_index + 1, takeProfitPrice, color=color.green, width=2, style=line.style_dotted)
// Clear Lines on Trade Exit
// if (strategy.position_size == 0)
// line.delete(stopLossLine)
// line.delete(takeProfitLine)
// Exit Trades
if (strategy.position_size > 0)
strategy.exit("Sell", from_entry="Buy", stop=stopLossPrice, limit=takeProfitPrice)
if (strategy.position_size < 0)
strategy.exit("Cover", from_entry="Sell", stop=stopLossPrice, limit=takeProfitPrice)