RafaelZioni Trend Momentum Mengikut Strategi

Penulis:ChaoZhang, Tarikh: 2023-12-13 14:59:34
Tag:

img

Ringkasan

Strategi ini berdasarkan penunjuk SuperB yang dicipta oleh RafaelZioni. Ia mengenal pasti trend melalui penunjuk momentum dan secara automatik mengesan trend menaik dan menurun, yang tergolong dalam strategi trend berikut.

Logika Strategi

Strategi ini menggunakan penunjuk SuperB yang dicipta oleh RafaelZioni untuk mengenal pasti trend harga. Penunjuk SuperB berdasarkan julat turun naik harga, jumlah dagangan dan perbezaan harga antara harga terbuka dan ditutup untuk mengira penunjuk SpreadVol. Penunjuk SpreadVol mencerminkan ciri momentum harga. Strategi ini menggunakan purata bergerak dan penyimpangan standard penunjuk SpreadVol untuk menentukan ambang. Apabila SpreadVol di atas rel atas, ia adalah trend menaik. Apabila di bawah rel bawah, ia adalah trend menurun.

Strategi ini menilai pembalikan trend dalam masa nyata dengan mengesan harga tinggi dan rendah. Dalam trend menaik, tahap tertinggi baru terus dibuat, menunjukkan kenaikan yang berterusan. Apabila harga memecahkan di bawah harga maksimum dengan peratusan tertentu, ia berubah menjadi trend menurun. Kaedah penghakiman sama dalam trend menurun. Ini membolehkan penghakiman tepat pada masanya titik pembalikan trend.

Kelebihan

Strategi ini menggabungkan penunjuk momentum untuk menentukan arah trend, dan kemudian mengesan harga tertinggi dan terendah dalam masa nyata, yang dapat dengan cepat mengenal pasti arah trend baru dan secara automatik mengesan trend menaik dan menurun, mengelakkan risiko kehilangan titik beli dan titik overbuy.

Indikator RafaelZioni's SuperB mencerminkan kekuatan dan kelajuan perubahan harga dan dapat menentukan trend sebenar dengan tepat, dengan berkesan menapis pecah palsu.

Ia hanya melakukan kedudukan panjang untuk mengurangkan kos dagangan dan kerugian yang disebabkan oleh operasi yang kerap.

Risiko

Strategi ini terdedah kepada pelbagai perdagangan palsu di kawasan penyatuan sebelum pecah. Parameter boleh dioptimumkan untuk mengurangkan kepekaan terhadap kawasan penyatuan.

Baris stop loss cenderung dicetuskan semasa kejutan trend. Julat stop loss boleh santai dengan sewajarnya untuk tempoh tahan yang lebih lama.

Apabila beralih antara panjang dan pendek, kedudukan perlu ditukar dengan tepat pada masanya. Jika beralih tidak tepat pada masanya, ia boleh membawa kepada kerugian yang lebih besar.

Cadangan Pengoptimuman

Mengoptimumkan parameter penunjuk SuperB untuk mencari kombinasi parameter yang lebih baik dan meningkatkan kestabilan penunjuk.

Mengoptimumkan faktor nisbah penjejakan harga tertinggi dan terendah untuk mengurangkan kepekaan terhadap kawasan penyatuan.

Meningkatkan kriteria masa tahan untuk mengelakkan berhenti semasa kejutan trend.

Ringkasan

Strategi ini menggunakan penunjuk SuperB yang dibangunkan oleh RafaelZioni untuk menentukan arah trend harga, dan menilai pembalikan trend dengan mengesan harga tinggi dan rendah dalam masa nyata, merealisasikan pengesanan automatik trend menaik dan menurun, mengelakkan kehilangan titik beli dan risiko overbuy. Ia tergolong dalam strategi momentum dengan ciri trend berikut. Strategi ini menggabungkan penunjuk momentum untuk menentukan trend sebenar dengan peraturan yang mudah dan jelas. Ia boleh ditingkatkan dan dioptimumkan lagi mengikut cadangan pengoptimuman dan bernilai penyelidikan dan penerapan.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-08-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(shorttitle='SuperB', title='SuperB By RafaelZioni', overlay=true)
long_only = input(title="Only Long?", defval=true)

hilow = ((high - low)*100)
openclose = ((close - open)*100)
vol = (volume / hilow)
spreadvol = (openclose * vol)
VPT = spreadvol + cum(spreadvol)
window_len = 28

v_len = 14
price_spread = stdev(high-low, window_len)

vp =  spreadvol + cum(spreadvol)
smooth = sma(vp, v_len)
v_spread = stdev(vp - smooth, window_len)
shadow = (vp - smooth) / v_spread * price_spread

out = shadow > 0 ? high + shadow : low + shadow
//

len = input(10)



vpt=ema(out,len)

// INPUTS //
st_mult   = input(1,   title = ' Multiplier', minval = 0, maxval = 100, step = 0.01)
st_period = input(10, title = ' Period',     minval = 1)

// CALCULATIONS //
up= vpt - (st_mult * atr(st_period))
dn = vpt + (st_mult * atr(st_period))
c5=close
//

factor = input(title="Factor", defval=0.05, minval=0.01, maxval=5, step=0.01, type=input.float)

hb = 0.00 ,hb := nz(hb[1])
hl = 0.000, hl := nz(hl[1])

lb = 0.00 ,lb := nz(lb[1])
l1 = 0.000,l1 := nz(l1[1])

c = 0
c := nz(c[1]) + 1

trend = 0,trend := nz(trend[1]),n = dn,x =up


if barstate.isfirst
    c := 0
    lb := n
    hb := x                      
    l1 := c5  
    hl := c5
    hl
if c == 1
    if x >= hb[1]
        hb := x
        hl := c5
        trend := 1  
        trend
    else
        lb := n
        l1 := c5 
        trend := -1 
        trend

if c > 1

    if trend[1] > 0  
        hl := max(hl[1], c5)
        if x >= hb[1] 
            hb := x
            hb
        else

            
            if n < hb[1] - hb[1] * factor 
                lb := n
                l1 := c5

                trend := -1  
                trend
    else

       
        l1 := min(l1[1], c5 )

        if n <= lb[1] 
            lb := n 
            lb
        else

           
            if x > lb[1] + lb[1] * factor
                hb := x 
                hl := c5

                trend := 1  
                trend



v = trend == 1 ? hb : trend == -1 ? lb : na
plot(v, color=trend == 1 ? color.blue : color.yellow, style=plot.style_circles, linewidth=1, title="trend", transp=0, join=true)

//

long = trend == 1 and trend[1] == -1 
short = trend == -1 and trend[1] == 1 
//
last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

buy = crossover(last_long, last_short)
sell = crossover(last_short, last_long)

/////////////// Positions ////////////// 
if long
    strategy.entry("Buy", long=true)
    if long_only == false
        strategy.close("Sell")

if short
    if long_only == false
        strategy.entry("Sell", long=false)
    strategy.close("Buy")

/////////////// Plotting /////////////// 
plotshape(buy, title="buy", text="Buy", color=color.green, style=shape.labelup, location=location.belowbar, size=size.small, textcolor=color.white, transp=0)  //plot for buy icon
plotshape(sell, title="sell", text="Sell", color=color.red, style=shape.labeldown, location=location.abovebar, size=size.small, textcolor=color.white, transp=0)


/////////////// Alerts /////////////// 
alertcondition(buy, title='buy', message='Buy')
alertcondition(sell, title='sell', message='Sell')

Lebih lanjut