RSI pelbagai jangka masa dan strategi perdagangan purata bergerak

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

img

Ringkasan

Strategi ini menggabungkan penunjuk RSI, purata bergerak mudah (SMA) dan purata bergerak tertimbang (WMA) untuk mengenal pasti isyarat perdagangan. Ia menilai arah trend secara serentak pada jangka masa 5 minit dan 1 jam. Isyarat perdagangan dihasilkan apabila garis RSI cepat melintasi atau di bawah garis perlahan semasa trend yang stabil.

Logika Strategi

Strategi ini mula-mula mengira WMA 144 tempoh dan SMA 5 tempoh pada kedua-dua bingkai masa 1 jam dan 5 minit. Pasar bullish dikenal pasti hanya apabila SMA 5 minit berada di atas WMA. Strategi kemudian mengira osilator RSI dan garis K dan D yang sepadan. Isyarat jual dihasilkan apabila garis K melintasi di bawah garis D dari kawasan overbought. Isyarat beli dihasilkan apabila garis K melintasi garis D dari kawasan oversold.

Analisis Kelebihan

Ini adalah strategi trend yang sangat berkesan. Dengan menggabungkan dua bingkai masa untuk menentukan trend, ia mengurangkan isyarat palsu dengan ketara. Di samping itu, ia menggabungkan pelbagai penapis termasuk RSI, SMA dan WMA untuk menjadikan isyarat lebih boleh dipercayai. Dengan memandu KDJ dengan RSI, ia juga mengelakkan beberapa isyarat palsu yang melekat dalam strategi KDJ biasa. Selain itu, tetapan stop loss dan mengambil keuntungan yang betul membantu mengunci keuntungan dan mengawal risiko.

Analisis Risiko

Risiko terbesar strategi ini terletak pada penilaian trend yang salah. Pada titik perubahan, purata bergerak jangka pendek dan jangka panjang boleh berbalik ke atas atau ke bawah bersama-sama, mengakibatkan isyarat yang salah. Juga, RSI boleh menghasilkan isyarat yang lebih bising semasa pasaran berkisar. Walau bagaimanapun, risiko ini dapat dikurangkan dengan menyesuaikan dengan betul tempoh parameter SMA, WMA dan RSI.

Arahan pengoptimuman

Strategi ini boleh ditingkatkan dari aspek berikut:

  1. Uji panjang SMA, WMA dan RSI yang berbeza untuk mencari gabungan yang optimum
  2. Menggabungkan penunjuk lain seperti MACD, Bollinger Bands untuk mengesahkan kebolehpercayaan isyarat
  3. Mengoptimumkan mekanisme stop loss dan mengambil keuntungan dengan menguji berhenti nisbah tetap, berhenti pengangkut dan lain-lain.
  4. Tambah modul pengurusan modal untuk mengawal saiz perdagangan dan pendedahan risiko keseluruhan
  5. Memperkenalkan model pembelajaran mesin untuk mencari parameter prestasi terbaik melalui pengujian balik berskala besar

Ringkasan

Strategi ini sepenuhnya menggunakan kekuatan purata bergerak dan osilator untuk menubuhkan sistem trend yang agak kukuh. Dengan mengesahkan isyarat merentasi pelbagai bingkai masa dan penunjuk, ia dapat menangkap trend jangka menengah hingga panjang dengan lancar. Tetapan stop loss dan mengambil keuntungan juga menjadikannya tahan fluktuasi pasaran biasa hingga tahap tertentu. Walau bagaimanapun, masih ada ruang untuk peningkatan, seperti menguji lebih banyak kombinasi penunjuk, memanfaatkan pembelajaran mesin untuk pengoptimuman parameter. Secara keseluruhan, ini adalah strategi perdagangan 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 lanjut