Strategi perdagangan RSI dan moving average multi-timeframe

Penulis:ChaoZhang, Tanggal: 2024-01-22 11:00:20
Tag:

img

Gambaran umum

Strategi ini menggabungkan indikator RSI, rata-rata bergerak sederhana (SMA) dan rata-rata bergerak tertimbang (WMA) untuk mengidentifikasi sinyal perdagangan.

Logika Strategi

Strategi ini pertama-tama menghitung WMA 144 periode dan SMA 5 periode pada jangka waktu 1 jam dan 5 menit. Pasar bullish hanya diidentifikasi ketika SMA 5 menit berada di atas WMA. Strategi kemudian menghitung osilator RSI dan garis K dan D yang sesuai. Sinyal jual dihasilkan ketika garis K melintasi di bawah garis D dari area overbought. Sinyal beli dihasilkan ketika garis K melintasi garis D dari area oversold.

Analisis Keuntungan

Ini adalah strategi trend-following yang sangat efektif. Dengan menggabungkan dua timeframe untuk menentukan tren, ini secara signifikan mengurangi sinyal palsu. Selain itu, ini menggabungkan beberapa filter termasuk RSI, SMA dan WMA untuk membuat sinyal lebih dapat diandalkan. Dengan mendorong KDJ dengan RSI, ini juga menghindari beberapa sinyal palsu yang melekat pada strategi KDJ normal. Selain itu, pengaturan stop loss dan take profit yang tepat membantu mengunci keuntungan dan mengendalikan risiko.

Analisis Risiko

Risiko terbesar dari strategi ini terletak pada penilaian tren yang salah. Pada titik balik, rata-rata bergerak jangka pendek dan jangka panjang dapat berbalik ke atas atau ke bawah bersama-sama, menghasilkan sinyal yang salah. Juga, RSI dapat menghasilkan sinyal yang lebih bising selama pasar berkisar. Namun, risiko ini dapat dikurangi dengan menyesuaikan periode parameter SMA, WMA dan RSI dengan benar.

Arahan Optimasi

Strategi dapat ditingkatkan dari aspek berikut:

  1. Uji panjang SMA, WMA dan RSI yang berbeda untuk menemukan kombinasi optimal
  2. Menggabungkan indikator lain seperti MACD, Bollinger Bands untuk memverifikasi keandalan sinyal
  3. Mengoptimalkan mekanisme stop loss dan take profit dengan menguji stop rasio tetap, trailing stop dll.
  4. Tambahkan modul manajemen modal untuk mengontrol ukuran perdagangan dan eksposur risiko keseluruhan
  5. Memperkenalkan model pembelajaran mesin untuk menemukan parameter kinerja terbaik melalui backtesting skala besar

Ringkasan

Strategi ini sepenuhnya memanfaatkan kekuatan rata-rata bergerak dan osilator untuk membangun sistem trend berikut yang relatif solid. Dengan mengkonfirmasi sinyal di beberapa kerangka waktu dan indikator, dapat dengan lancar menangkap tren jangka menengah hingga jangka panjang. Pengaturan stop loss dan take profit juga membuatnya tahan fluktuasi pasar normal hingga tingkat tertentu. Namun, masih ada ruang untuk perbaikan, seperti menguji lebih banyak kombinasi indikator, memanfaatkan pembelajaran mesin untuk optimasi parameter. Secara keseluruhan, ini adalah strategi trading yang sangat menjanjikan.


/*backtest
start: 2023-12-22 00:00:00
end: 2024-01-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © bufirolas

// Works well with a wide stop with 20 bars lookback
// for the SL level and a 2:1 reward ratio Take Profit .
// These parameters can be modified in the Inputs section of the strategy panel.

// "an entry signal it's a cross down or up on
// the stochastics. if you're in a downtrend
// on the hourly time frame you
// must also be in a downtrend on the five
// minute so the five period has to be below the 144
// as long as the five period is still trading below
// the 144 period on both the hourly and the five minutes
// we are looking for these short signals crosses down
// in the overbought region of the stochastic. Viceversa for longs"

//@version=4
strategy("Stoch + WMA + SMA strat", overlay=true)

//SL & TP Inputs
i_SL=input(true, title="Use Swing Lo/Hi Stop Loss & Take Profit")
i_SwingLookback=input(20, title="Swing Lo/Hi Lookback")
i_SLExpander=input(defval=10, step=1, title="SL Expander")
i_TPExpander=input(defval=30, step=1, title="TP Expander")
i_reverse=input(false, title="Reverse Trades")
i_TStop =input(false, title="Use Trailing Stop")

//Strategy Inputs
src4 = input(close, title="RSI Source")
stochOS=input(defval=20, step=5, title="Stochastics Oversold Level")
stochOB=input(defval=80, step=5, title="Stochastics Overbought Level")

//Stoch rsi Calculations
smoothK = input(3, minval=1)
smoothD = input(3, minval=1)
lengthRSI = input(14, minval=1)
lengthStoch = input(14, minval=1)
rsi1 = rsi(src4, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)
h0 = hline(80, linestyle=hline.style_dotted)
h1 = hline(20, linestyle=hline.style_dotted)

//MA
wmalen=input(defval=144, title="WMA Length")
WMA = security(syminfo.tickerid, "60", wma(close, wmalen))
SMA = security(syminfo.tickerid, "60", sma(close, 5))
minWMA = wma(close, wmalen)
minSMA = sma(close, 5)

//Entry Logic
stobuy = crossover(k, d) and k < stochOS
stosell = crossunder(k, d) and k > stochOB
mabuy = minSMA > minWMA
daymabuy = SMA > WMA

//SL & TP Calculations
SwingLow=lowest(i_SwingLookback)
SwingHigh=highest(i_SwingLookback)
bought=strategy.position_size != strategy.position_size[1]
LSL=valuewhen(bought, SwingLow, 0)-((valuewhen(bought, atr(14), 0)/5)*i_SLExpander)
SSL=valuewhen(bought, SwingHigh, 0)+((valuewhen(bought, atr(14), 0)/5)*i_SLExpander)
lTP=(strategy.position_avg_price + (strategy.position_avg_price-(valuewhen(bought, SwingLow, 0)))+((valuewhen(bought, atr(14), 0)/5)*i_TPExpander))
sTP=(strategy.position_avg_price - (valuewhen(bought, SwingHigh, 0) - strategy.position_avg_price))-((valuewhen(bought, atr(14), 0)/5)*i_TPExpander)
islong=strategy.position_size > 0
isshort=strategy.position_size < 0

//TrailingStop
dif=(valuewhen(strategy.position_size>0 and strategy.position_size[1]<=0, high,0))
 -strategy.position_avg_price
trailOffset     = strategy.position_avg_price - LSL
var tstop = float(na)
if strategy.position_size > 0
    tstop := high- trailOffset - dif
    if tstop<tstop[1]
        tstop:=tstop[1]
else
    tstop := na
StrailOffset     = SSL - strategy.position_avg_price
var Ststop = float(na)
Sdif=strategy.position_avg_price-(valuewhen(strategy.position_size<0 
 and strategy.position_size[1]>=0, low,0))
if strategy.position_size < 0
    Ststop := low+ StrailOffset + Sdif
    if Ststop>Ststop[1]
        Ststop:=Ststop[1]
else
    Ststop := na
    
//Stop Selector
SL= islong ? LSL : isshort ? SSL : na
if i_TStop 
    SL:= islong ? tstop : isshort ? Ststop : na
TP= islong ? lTP : isshort ? sTP : na


//Entries
if stobuy and mabuy and daymabuy
    strategy.entry("long", long=not i_reverse?true:false)
if stosell and not mabuy and not daymabuy
    strategy.entry("short", long=not i_reverse?false:true)


//Exit
if i_SL
    strategy.exit("longexit", "long", stop=SL, limit=TP)
    strategy.exit("shortexit", "short", stop=SL, limit=TP)

//Plots
plot(i_SL ? SL : na, color=color.red, style=plot.style_cross)
plot(i_SL ? TP : na, color=color.green, style=plot.style_cross)
plot(minWMA)
plot(minSMA, color=color.green)




Lebih banyak