Pivot Point SuperTrend Strategi

Penulis:ChaoZhang, Tarikh: 2024-02-26 10:57:20
Tag:

img

Ringkasan

Strategi Pivot Point SuperTrend adalah strategi trend berikut yang inovatif yang menggabungkan dua penunjuk popular Pivot Points dan SuperTrend, sambil memperkenalkan penapis trend tambahan untuk ketepatan yang ditingkatkan.

Logika Strategi

Dasar strategi ini terletak pada penggabungan Pivot Points dan penunjuk SuperTrend, ditambah penapis trend yang kukuh. Ia bermula dengan mengira Pivot Highs dan Lows dalam tempoh tertentu, berfungsi sebagai titik rujukan penting untuk analisis trend. Melalui pengiraan purata bertimbang, Pivot Points ini mewujudkan garis pusat, menyempurnakan penunjuk keseluruhan.

Seterusnya, berdasarkan garis tengah dan Julat Benar Purata (ATR) dengan Faktor yang ditakrifkan oleh pengguna, jalur atas dan bawah dihasilkan. Band ini menyesuaikan diri dengan turun naik pasaran, menambah fleksibiliti kepada strategi.

Penapis trend tambahan yang diperkenalkan ke dalam strategi meningkatkan keupayaannya. Penapis ini berdasarkan purata bergerak, memberikan penilaian dinamik kekuatan dan arah trend. Dengan menggabungkan penapis trend ini dengan isyarat Pivot Point SuperTrend asal, strategi ini bertujuan untuk membuat keputusan perdagangan yang lebih tepat dan boleh dipercayai.

Analisis Kelebihan

  1. Kecekapan yang ditingkatkan: Penggabungan penapis trend meningkatkan ketepatan strategi dengan mengesahkan arah trend keseluruhan sebelum menghasilkan isyarat.

  2. Lanjutan Trend: Integrasi Titik Pivot dan SuperTrend, bersama-sama dengan penapis trend, bertujuan untuk memanjangkan perdagangan semasa trend pasaran yang kuat, berpotensi memaksimumkan peluang keuntungan.

  3. Pengurangan Whipsaws: Pengiraan purata tertimbang strategi, ditambah dengan penapis trend, membantu meminimumkan isyarat palsu dan mengurangkan whipsaws semasa keadaan pasaran yang tidak pasti atau sampingan.

  4. Wawasan Sokongan dan Rintangan: Strategi terus menyediakan tahap sokongan dan rintangan tambahan berdasarkan Titik Pivot, menawarkan maklumat konteks yang berharga kepada peniaga.

Analisis Risiko

  1. Pergantungan Parameter: Strategi ini sensitif kepada parameter seperti tempoh ATR dan pengganda. Tetapan yang tidak betul boleh menyebabkan overtrading atau peluang yang hilang.

  2. Pembalikan Trend: Berhampiran titik pembalikan trend, strategi boleh menghasilkan isyarat palsu yang mengakibatkan kerugian yang tidak perlu.

  3. Peningkatan berlebihan: Parameter boleh dioptimumkan untuk hasil terbaik tetapi tidak mempunyai daya maju. Kesan perbezaan pasaran dan instrumen pada pemilihan parameter harus dipertimbangkan.

  4. Risiko jurang: Apabila harga bergerak di luar jalur, strategi memasuki kedudukan rata. Ini boleh kehilangan peluang apabila trend dilanjutkan selepas jurang.

Arahan pengoptimuman

  1. Penapis Tambahan: Penapis jumlah, turun naik, dan lain-lain boleh ditambah untuk meningkatkan kekuatan strategi.

  2. Parameter Dinamik: Kaedah untuk pengoptimuman automatik atau pelarasan adaptif parameter berdasarkan keadaan pasaran yang berubah boleh menjadikan strategi lebih serba boleh.

  3. Hentikan Kerugian: Penyelidikan cara untuk merancang mekanisme berhenti kerugian sambil mengekalkan logik strategi untuk mengawal penurunan secara berkesan.

  4. Pengoptimuman Cross-Asset: Menilai parameter strategi di pasaran dan instrumen yang berbeza.

Ringkasan

Strategi Pivot Point SuperTrend menunjukkan kekuatan unik di seluruh dimensi seperti kesederhanaan dan keupayaan mengikuti trend. Pada masa yang sama, aspek seperti parameter, stop loss, pengoptimuman aset silang menawarkan ruang untuk memperbaikinya menjadi alat yang lebih universal dan boleh dipercayai. Secara keseluruhan, ia memberi kuasa kepada peniaga dengan cara yang cekap untuk menangkap trend pasaran.


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

// © Julien_Eche
// Strategy based on "Pivot Point Supertrend" Indicator by LonesomeTheBlue

//@version=4

strategy("PPS", overlay=true, initial_capital=500000, currency=currency.USD, default_qty_type=strategy.cash, default_qty_value=50000)

prd = input(defval = 2, title="Pivot Point Period", minval = 1, maxval = 50)
Factor=input(defval = 3, title = "ATR Factor", minval = 1, step = 0.1)
Pd=input(defval = 10, title = "ATR Period", minval=1)
showpivot = input(defval = false, title="Show Pivot Points")
showlabel = input(defval = true, title="Show Buy/Sell Labels")
showcl = input(defval = false, title="Show PP Center Line")
showsr = input(defval = false, title="Show Support/Resistance")

// get Pivot High/Low
float ph = pivothigh(prd, prd)
float pl = pivotlow(prd, prd)

// drawl Pivot Points if "showpivot" is enabled
plotshape(ph and showpivot, text="H",  style=shape.labeldown, color=na, textcolor=color.red, location=location.abovebar, transp=0, offset = -prd)
plotshape(pl and showpivot, text="L",  style=shape.labeldown, color=na, textcolor=color.lime, location=location.belowbar, transp=0, offset = -prd)

// calculate the Center line using pivot points
var float center = na
float lastpp = ph ? ph : pl ? pl : na
if lastpp
    if na(center)
        center := lastpp
    else
        //weighted calculation
        center := (center * 2 + lastpp) / 3

// upper/lower bands calculation
Up = center - (Factor * atr(Pd))
Dn = center + (Factor * atr(Pd))

// get the trend
float TUp = na
float TDown = na
Trend = 0
TUp := close[1] > TUp[1] ? max(Up, TUp[1]) : Up
TDown := close[1] < TDown[1] ? min(Dn, TDown[1]) : Dn
Trend := close > TDown[1] ? 1: close < TUp[1]? -1: nz(Trend[1], 1)
Trailingsl = Trend == 1 ? TUp : TDown

// plot the trend
linecolor = Trend == 1 and nz(Trend[1]) == 1 ? color.lime : Trend == -1 and nz(Trend[1]) == -1 ? color.red : na
plot(Trailingsl, color = linecolor ,  linewidth = 2, title = "PP SuperTrend")
 
plot(showcl ? center : na, color = showcl ? center < hl2 ? color.blue : color.red : na)

// check and plot the signals
bsignal = Trend == 1 and Trend[1] == -1
ssignal = Trend == -1 and Trend[1] == 1
plotshape(bsignal and showlabel ? Trailingsl : na, title="Buy", text="Buy", location = location.absolute, style = shape.labelup, size = size.tiny, color = color.lime, textcolor = color.black, transp = 0)
plotshape(ssignal and showlabel ? Trailingsl : na, title="Sell", text="Sell", location = location.absolute, style = shape.labeldown, size = size.tiny, color = color.red, textcolor = color.white, transp = 0)

//get S/R levels using Pivot Points
float resistance = na
float support = na
support := pl ? pl : support[1]
resistance := ph ? ph : resistance[1]

// if enabled then show S/R levels
plot(showsr and support ? support : na, color = showsr and support ? color.lime : na, style = plot.style_circles, offset = -prd)
plot(showsr and resistance ? resistance : na, color = showsr and resistance ? color.red : na, style = plot.style_circles, offset = -prd)

// Trend Filter from SuperTrend Long Strategy
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR = input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)

// Combine the SuperTrend calculations
atr2 = sma(tr, Periods)
atr = changeATR ? atr(Periods) : atr2

up = src - (Multiplier * atr)
up1 = nz(up[1], up)
up := close[1] > up1 ? max(up, up1) : up

dn = src + (Multiplier * atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn

trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

// Moving Average as Trend Filter
periodes_ma = input(title="Moving Average Period", type=input.integer, defval=20)
src_ma = input(title="Moving Average Source", type=input.source, defval=close)
ma = sma(src_ma, periodes_ma)

// Strategy Entry Conditions
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 999)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 999)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       

window()  => time >= start and time <= finish ? true : false

// Combined entry conditions
longCondition = (trend == 1 and trend[1] == -1 and close > ma) or (bsignal and window())
shortCondition = (trend == -1 and trend[1] == 1 and close < ma) or (ssignal and window())

if (longCondition)
    strategy.entry("BUY", strategy.long)

if (shortCondition)
    strategy.close("BUY")
    strategy.entry("SELL", strategy.short)

buy1 = barssince((trend == 1 and trend[1] == -1 and close > ma) or (bsignal and window()))
sell1 = barssince((trend == -1 and trend[1] == 1 and close < ma) or (ssignal and window()))
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(color1)

Lebih lanjut