
Strategi ini ialah sistem perdagangan kuantitatif berdasarkan persilangan purata bergerak dan penunjuk RSI, terutamanya digunakan untuk dagangan dalam pasaran pilihan. Strategi ini menggunakan isyarat silang bagi purata bergerak pantas dan perlahan, digabungkan dengan tahap terlebih beli dan terlebih jual RSI untuk menentukan masa transaksi, sambil menetapkan ambil untung dan henti rugi untuk mengawal risiko. Strategi ini sesuai untuk berdagang dalam jangka masa 5 minit.
Strategi ini menggunakan dua petunjuk teknikal utama: Moving Average (MA) dan Relative Strength Index (RSI). Secara khusus:
Strategi ini membina sistem perdagangan yang agak lengkap dengan menggabungkan purata bergerak silang dan penunjuk RSI. Kelebihan strategi terletak pada pengesahan isyarat berganda dan pengurusan risiko yang sempurna, tetapi ia juga perlu memberi perhatian kepada kesan persekitaran pasaran terhadap prestasi strategi. Melalui pengoptimuman dan penambahbaikan berterusan, strategi ini dijangka mencapai prestasi yang stabil dalam pasaran pilihan. Adalah disyorkan bahawa pedagang menjalankan ujian belakang dan pengoptimuman parameter yang mencukupi sebelum penggunaan masa nyata.
/*backtest
start: 2024-12-06 00:00:00
end: 2025-01-04 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("MA Crossover with RSI Debugging", overlay=true)
// Inputs
fastLength = input.int(7, title="Fast MA Length", minval=1)
slowLength = input.int(13, title="Slow MA Length", minval=1)
rsiLength = input.int(17, title="RSI Length", minval=1)
rsiOverbought = input.int(64, title="RSI Overbought Level", minval=50, maxval=100)
rsiOversold = input.int(43, title="RSI Oversold Level", minval=0, maxval=50)
takeProfitPerc = input.float(4, title="Take Profit (%)", minval=0.1)
stopLossPerc = input.float(0.5, title="Stop Loss (%)", minval=0.1)
// Moving Averages
fastMA = ta.sma(close, fastLength)
slowMA = ta.sma(close, slowLength)
// RSI
rsi = ta.rsi(close, rsiLength)
// Entry Conditions
longCondition = ta.crossover(fastMA, slowMA) and rsi < rsiOversold
shortCondition = ta.crossunder(fastMA, slowMA) and rsi > rsiOverbought
// Plot Debugging Shapes
plotshape(ta.crossover(fastMA, slowMA), color=color.green, style=shape.circle, location=location.belowbar, title="Fast MA Crossover")
plotshape(ta.crossunder(fastMA, slowMA), color=color.red, style=shape.circle, location=location.abovebar, title="Fast MA Crossunder")
plotshape(rsi < rsiOversold, color=color.blue, style=shape.triangleup, location=location.belowbar, title="RSI Oversold")
plotshape(rsi > rsiOverbought, color=color.orange, style=shape.triangledown, location=location.abovebar, title="RSI Overbought")
// Entry and Exit Execution
if (longCondition)
strategy.entry("Buy", strategy.long)
if (shortCondition)
strategy.entry("Sell", strategy.short)
takeProfitPrice = strategy.position_avg_price * (1 + takeProfitPerc / 100)
stopLossPrice = strategy.position_avg_price * (1 - stopLossPerc / 100)
if (strategy.position_size > 0)
strategy.exit("Exit Buy", from_entry="Buy", limit=takeProfitPrice, stop=stopLossPrice)
if (strategy.position_size < 0)
strategy.exit("Exit Sell", from_entry="Sell", limit=takeProfitPrice, stop=stopLossPrice)
// Plot Moving Averages
plot(fastMA, color=color.blue, title="Fast MA")
plot(slowMA, color=color.red, title="Slow MA")
// RSI Levels
hline(rsiOverbought, "RSI Overbought", color=color.red)
hline(rsiOversold, "RSI Oversold", color=color.green)