Petunjuk teknikal berbilang mengikuti aliran dan momentum strategi perdagangan penapisan RSI

EMA RSI ATR SMA MACD
Tarikh penciptaan: 2024-12-20 14:10:43 Akhirnya diubah suai: 2024-12-20 14:10:43
Salin: 0 Bilangan klik: 410
1
fokus pada
1617
Pengikut

Petunjuk teknikal berbilang mengikuti aliran dan momentum strategi perdagangan penapisan RSI

Gambaran keseluruhan

Ini adalah strategi trend-following yang menggabungkan beberapa petunjuk teknikal, terutamanya menggunakan indeks bergerak yang cepat dan perlahan (EMA) bersilang, indikator trend Supertrend dan indikator RSI yang agak kuat untuk mengenal pasti peluang perdagangan. Strategi ini meningkatkan penapisan momentum berdasarkan trend-following melalui gabungan organik indikator, sambil menggunakan ATR untuk menyesuaikan kedudukan stop loss secara dinamik, mewujudkan sistem perdagangan yang lengkap.

Prinsip Strategi

Strategi ini menggunakan tiga mekanisme penapisan untuk mengenal pasti isyarat dagangan:

  1. Sistem EMA bersilang digunakan untuk menangkap perubahan trend jangka pendek, menghasilkan isyarat ganda apabila EMA cepat melintasi EMA perlahan, menghasilkan isyarat kosong apabila melintasi.
  2. Indikator Supertrend berdasarkan ATR mengira garis sokongan / rintangan dinamik untuk memastikan arah trend keseluruhan. Hanya boleh melakukan lebih banyak apabila harga berada di atas garis Supertrend, dan hanya boleh melakukan penyingkiran apabila berada di bawah garis.
  3. Penunjuk RSI digunakan untuk menyaring keadaan pasaran yang terlalu dibeli atau dijual. RSI dibenarkan untuk melakukan lebih banyak apabila tidak mencapai kawasan yang terlalu banyak dibeli, dan hanya dibenarkan untuk melakukan kosong apabila tidak mencapai kawasan yang terlalu banyak dijual.

Strategi ini juga merangkumi sistem stop loss yang dinamik berdasarkan ATR, yang dapat menyesuaikan parameter pengurusan risiko secara automatik mengikut turun naik pasaran. Ia juga mengehadkan tempoh perdagangan melalui penapis masa untuk mengelakkan perdagangan semasa turun naik.

Kelebihan Strategik

  1. Gabungan pelbagai petunjuk teknikal memberikan isyarat dagangan yang lebih dipercayai, mengelakkan isyarat palsu yang mungkin dibawa oleh satu petunjuk.
  2. Tetapan stop loss yang dinamik dapat menyesuaikan diri dengan keadaan turun naik pasaran yang berbeza, memberikan ruang pertaruhan yang lebih besar kepada perdagangan apabila turun naiknya lebih besar.
  3. Mekanisme penapisan RSI berkesan mengurangkan risiko masuk dalam keadaan pasaran yang melampau.
  4. Fungsi penapisan masa membolehkan peniaga menumpukan perhatian pada masa perdagangan tertentu dan mengelakkan perdagangan pada masa yang tidak cekap.

Risiko Strategik

  1. Keadaan penapisan berganda boleh menyebabkan beberapa peluang perdagangan yang berpotensi terlepas.
  2. Dalam pasaran yang bergolak, stop loss mungkin mudah disentuh.
  3. Optimasi parameter yang berlebihan boleh menyebabkan masalah overfitting.
  4. Perdagangan frekuensi tinggi mungkin membawa kos transaksi yang lebih tinggi.

Arah pengoptimuman strategi

  1. Penambahan penunjuk jumlah transaksi boleh dipertimbangkan sebagai pengesahan tambahan.
  2. Memperkenalkan mekanisme penyesuaian parameter yang bersesuaian untuk membolehkan strategi lebih sesuai dengan keadaan pasaran yang berbeza.
  3. Menambah penapis kekuatan trend untuk mengelakkan perdagangan berlebihan di pasaran yang lemah.
  4. Membangunkan sistem pengurusan kedudukan yang lebih pintar, menyesuaikan peratusan pegangan kedudukan mengikut keadaan pasaran yang dinamik.

ringkaskan

Strategi ini membina sistem perdagangan yang agak lengkap dengan menggabungkan beberapa petunjuk teknikal dan syarat penapisan. Kelebihan utamanya terletak pada mekanisme pengesahan berganda dan pengurusan risiko dinamik, tetapi juga memerlukan perhatian terhadap masalah seperti pengoptimuman parameter dan kos perdagangan. Dengan pengoptimuman dan penambahbaikan berterusan, strategi ini dijangka mengekalkan prestasi yang stabil dalam pelbagai keadaan pasaran.

Kod sumber strategi
/*backtest
start: 2024-11-19 00:00:00
end: 2024-12-18 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Supertrend + EMA Crossover with RSI Filter", shorttitle="ST_EMA_RSI", overlay=true)

// Input parameters for EMA
fastEMA          = input.int(3,  title="Fast EMA Period", minval=1)
slowEMA          = input.int(6,  title="Slow EMA Period", minval=1)
atrLength        = input.int(3,  title="ATR Length", minval=1)

// Using a fixed multiplier for Supertrend calculation
stMultiplier = 1

// Stop loss and take profit multipliers
stopLossATR      = input.float(2.5, title="Stop Loss ATR Multiplier", minval=0.1, step=0.1)
takeProfitATR    = input.float(4,   title="Take Profit ATR Multiplier", minval=0.1, step=0.1)

// RSI inputs
rsiLength      = input.int(10, title="RSI Length", minval=1)
rsiOverbought  = input.float(65, title="RSI Overbought Level", minval=50.0, maxval=100.0)
rsiOversold    = input.float(30.0, title="RSI Oversold Level",   minval=0.0, maxval=50.0)

// Declare the RSI plot toggle input as a global variable
bool rsiPlotEnabled = input.bool(true, title="Show RSI in separate panel")

// Time filter inputs
i_startTime = input(title="Start Filter", defval=timestamp("01 Jan 2023 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime   = input(title="End Filter",   defval=timestamp("28 Apr 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")

// Date/time filtering logic
inDateRange = true

// Calculate EMAs
fastEMALine = ta.ema(close, fastEMA)
slowEMALine = ta.ema(close, slowEMA)

// Calculate ATR
atr = ta.atr(atrLength)

// Calculate Supertrend using fixed multiplier
up = high - (stMultiplier * atr)
dn = low +  (stMultiplier * atr)

var float trendUp = na
var float trendDown = na
var int trend = na

trendUp   := na(trendUp[1])   ? up : (close[1] > trendUp[1]   ? math.min(up, trendUp[1])   : up)
trendDown := na(trendDown[1]) ? dn : (close[1] < trendDown[1] ? math.max(dn, trendDown[1]) : dn)

trend := close > nz(trendUp[1]) ? 1 : close < nz(trendDown[1]) ? -1 : nz(trend[1], 1)
supertrend = trend == 1 ? trendUp : trendDown

// Calculate RSI
myRSI = ta.rsi(close, rsiLength)

// Entry conditions with RSI filter
longEntryCondition  = ta.crossover(fastEMALine, slowEMALine) and (trend == 1) and (myRSI < rsiOverbought)
shortEntryCondition = ta.crossunder(fastEMALine, slowEMALine) and (trend == -1) and (myRSI > rsiOversold)

// Strategy entries
if inDateRange and longEntryCondition and strategy.position_size <= 0
    strategy.entry("Long", strategy.long)

if inDateRange and shortEntryCondition and strategy.position_size >= 0
    strategy.entry("Short", strategy.short)

// Stops and targets
if strategy.position_size > 0
    longStopLoss   = strategy.position_avg_price - stopLossATR * atr
    longTakeProfit = strategy.position_avg_price + takeProfitATR * atr
    strategy.exit("Long SL/TP", "Long", stop=longStopLoss, limit=longTakeProfit)

if strategy.position_size < 0
    shortStopLoss   = strategy.position_avg_price + stopLossATR * atr
    shortTakeProfit = strategy.position_avg_price - takeProfitATR * atr
    strategy.exit("Short SL/TP", "Short", stop=shortStopLoss, limit=shortTakeProfit)

// Plot EMAs and Supertrend
plot(fastEMALine, title="Fast EMA", color=color.new(color.blue, 0))
plot(slowEMALine, title="Slow EMA", color=color.new(color.red, 0))
plot(trend == 1 ? supertrend : na, title="Supertrend Up", color=color.green, style=plot.style_linebr)
plot(trend == -1 ? supertrend : na, title="Supertrend Down", color=color.red, style=plot.style_linebr)

// Plot RSI and hlines
plot(rsiPlotEnabled ? myRSI : na, title="RSI", color=color.new(color.purple, 0))
hline(rsiOverbought, "Overbought", color=color.red, linestyle=hline.style_dotted)
hline(rsiOversold,   "Oversold",   color=color.green, linestyle=hline.style_dotted)

// Plot entry signals
plotshape(longEntryCondition, title="Long Entry Signal", style=shape.triangleup, location=location.belowbar, size=size.tiny, color=color.new(color.green, 0))
plotshape(shortEntryCondition, title="Short Entry Signal", style=shape.triangledown, location=location.abovebar, size=size.tiny, color=color.new(color.red, 0))