
Moving Average Relative Strength Index Strategy adalah strategi perdagangan kuantitatif yang menggunakan kedua indikator bergerak dan relatif kuat sebagai sinyal perdagangan. Strategi ini menghasilkan sinyal perdagangan dengan membandingkan harga rata-rata bergerak dan nilai indikator relatif kuat untuk menangkap peluang dalam tren pasar.
Strategi ini didasarkan pada dua indikator:
Strategi ini berbunyi:
Ketika garis indikator RSI di bawah rata-rata bergerak adalah daerah oversold, dianggap saham yang diremehkan, menghasilkan sinyal beli; Ketika garis indikator RSI di atas rata-rata bergerak adalah daerah oversold, dianggap saham yang diremehkan, menghasilkan sinyal jual.
Dengan kata lain, rata-rata bergerak mencerminkan nilai wajar saham sampai batas tertentu, dan RSI mewakili posisi kuat dan lemah saham saat ini. RSI lebih tinggi atau lebih rendah dari rata-rata bergerak berarti ada peluang untuk berbalik.
Secara khusus, strategi ini menghasilkan sinyal perdagangan melalui langkah-langkah berikut:
Strategi ini menggabungkan penilaian tren dari rata-rata bergerak dan penilaian overbought dan oversold dari indikator RSI, yang secara komprehensif memanfaatkan keunggulan dari berbagai indikator untuk secara efektif menilai titik balik pasar.
Keunggulan utama:
Strategi ini juga memiliki beberapa risiko:
Untuk mengontrol risiko, Anda dapat mengoptimalkannya dengan:
Strategi ini dapat dioptimalkan lebih lanjut dengan:
Strategi ini dapat terus meningkatkan stabilitas dan profitabilitas melalui optimasi parameter, optimasi indikator, dan optimasi manajemen risiko.
Strategi moving average dan indikator relatif kuat yang menggunakan penilaian tren harga dan penilaian overbought dan oversold secara bersamaan, dapat secara efektif menilai titik balik pasar dan menangkap peluang untuk berbalik. Strategi ini sederhana, praktis, dapat dikontrol risiko, dan merupakan strategi perdagangan kuantitatif yang praktis. Dengan pengoptimalan berkelanjutan, dapat diperoleh efek yang lebih baik.
/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-24 06:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(title = "RSI versus SMA", shorttitle = "RSI vs SMA", overlay = false, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, currency = currency.GBP)
// Revision: 1
// Author: @JayRogers
//
// *** USE AT YOUR OWN RISK ***
// - Nothing is perfect, and all decisions by you are on your own head. And stuff.
//
// Description:
// - It's RSI versus a Simple Moving Average.. Not sure it really needs much more description.
// - Should not repaint - Automatically offsets by 1 bar if anything other than "open" selected as RSI source.
// === INPUTS ===
// rsi
rsiSource = input(defval = open, title = "RSI Source")
rsiLength = input(defval = 8, title = "RSI Length", minval = 1)
// sma
maLength = input(defval = 34, title = "MA Period", minval = 1)
// invert trade direction
tradeInvert = input(defval = false, title = "Invert Trade Direction?")
// risk management
useStop = input(defval = false, title = "Use Initial Stop Loss?")
slPoints = input(defval = 25, title = "Initial Stop Loss Points", minval = 1)
useTS = input(defval = true, title = "Use Trailing Stop?")
tslPoints = input(defval = 120, title = "Trail Points", minval = 1)
useTSO = input(defval = false, title = "Use Offset For Trailing Stop?")
tslOffset = input(defval = 20, title = "Trail Offset Points", minval = 1)
// === /INPUTS ===
// === BASE FUNCTIONS ===
// delay for direction change actions
switchDelay(exp, len) =>
average = len >= 2 ? sum(exp, len) / len : exp[1]
up = exp > average
down = exp < average
state = up ? true : down ? false : up[1]
// === /BASE FUNCTIONS ===
// === SERIES and VAR ===
// rsi
shunt = rsiSource == open ? 0 : 1
rsiUp = rma(max(change(rsiSource[shunt]), 0), rsiLength)
rsiDown = rma(-min(change(rsiSource[shunt]), 0), rsiLength)
rsi = (rsiDown == 0 ? 100 : rsiUp == 0 ? 0 : 100 - (100 / (1 + rsiUp / rsiDown))) - 50 // shifted 50 points to make 0 median
// sma of rsi
rsiMa = sma(rsi, maLength)
// self explanatory..
tradeDirection = tradeInvert ? 0 <= rsiMa ? true : false : 0 >= rsiMa ? true : false
// === /SERIES ===
// === PLOTTING ===
barcolor(color = tradeDirection ? green : red, title = "Bar Colours")
// hlines
medianLine = hline(0, title = 'Median', color = #996600, linewidth = 1)
limitUp = hline(25, title = 'Limit Up', color = silver, linewidth = 1)
limitDown = hline(-25, title = 'Limit Down', color = silver, linewidth = 1)
// rsi and ma
rsiLine = plot(rsi, title = 'RSI', color = purple, linewidth = 2, style = line, transp = 50)
areaLine = plot(rsiMa, title = 'Area MA', color = silver, linewidth = 1, style = area, transp = 70)
// === /PLOTTING ===
goLong() => not tradeDirection[1] and tradeDirection
killLong() => tradeDirection[1] and not tradeDirection
strategy.entry(id = "Buy", long = true, when = goLong())
strategy.close(id = "Buy", when = killLong())
goShort() => tradeDirection[1] and not tradeDirection
killShort() => not tradeDirection[1] and tradeDirection
strategy.entry(id = "Sell", long = false, when = goShort())
strategy.close(id = "Sell", when = killShort())
if (useStop)
strategy.exit("XSL", from_entry = "Buy", loss = slPoints)
strategy.exit("XSS", from_entry = "Sell", loss = slPoints)
// if we're using the trailing stop
if (useTS and useTSO) // with offset
strategy.exit("XSL", from_entry = "Buy", trail_points = tslPoints, trail_offset = tslOffset)
strategy.exit("XSS", from_entry = "Sell", trail_points = tslPoints, trail_offset = tslOffset)
if (useTS and not useTSO) // without offset
strategy.exit("XSL", from_entry = "Buy", trail_points = tslPoints)
strategy.exit("XSS", from_entry = "Sell", trail_points = tslPoints)