Bandpass Mean PB Indikator Strategi

Penulis:ChaoZhang, Tarikh: 2024-01-17 17:10:53
Tag:

img

Ringkasan

Strategi ini mengira indikator PB purata dan pita Bollinger untuk menentukan hubungan salib emas dan salib mati antara penunjuk PB dan rel atas dan bawah pita Bollinger. Ia menghasilkan isyarat beli apabila penunjuk PB memecahkan di atas rel tengah atau rel bawah pita Bollinger, dan menghasilkan isyarat jual apabila penunjuk PB memecahkan di bawah rel tengah atau rel atas pita Bollinger.

Prinsip Strategi

Penunjuk PB purata menggabungkan kestabilan sistem purata bergerak dan kepekaan penunjuk PB. Ia menggunakan perbezaan antara purata bergerak cepat dan perlahan kitaran yang berbeza untuk menyatakan trend perubahan harga untuk menentukan trend panjang dan pendek.

Strategi ini juga menggunakan penunjuk Bollinger Band untuk mengenal pasti keadaan overbought dan oversold harga saham. Penunjuk Bollinger Band terdiri daripada tiga lengkung: rel tengah, rel atas dan rel bawah. Rel tengah adalah purata bergerak n hari; rel atas dan bawah dikira berdasarkan rel tengah dan turun naik sejarah. Apabila harga saham berhampiran dengan rel atas, ia berada di zon overbought; apabila ia berhampiran dengan rel bawah, ia berada di zon oversold, dan kawasan di sekitar rel tengah adalah julat harga yang munasabah untuk saham.

Ringkasnya, strategi ini dengan bijak menggunakan penunjuk PB purata untuk menentukan trend kenaikan atau penurunan harga saham, dan pita Bollinger sebagai penunjuk tambahan untuk menentukan keadaan overbought dan oversold, untuk mencari isyarat perdagangan dari hubungan antara kedua-dua penunjuk.

Analisis Kelebihan

Kelebihan utama strategi ini ialah:

  1. Menggunakan penunjuk PB purata untuk menentukan perubahan trend harga, sensitiviti tinggi
  2. Membantu dengan Bollinger Bands untuk mengenal pasti zon overbought dan oversold untuk meningkatkan ketepatan menentukan titik masuk dan keluar
  3. Logik strategi yang mudah, mudah dilaksanakan
  4. Data backtest menunjukkan pulangan yang agak memuaskan

Analisis Risiko

Risiko utama strategi ini ialah:

  1. Kedua-dua penunjuk PB purata dan Bollinger Bands bergantung pada data sejarah untuk pengiraan. Mereka boleh menghasilkan isyarat yang salah apabila harga saham turun naik tajam.
  2. Indikator PB dan Bollinger Bands agak sensitif terhadap tetapan parameter. tetapan yang tidak sesuai boleh membawa kepada perdagangan yang tidak betul yang berlebihan.
  3. Perubahan persekitaran makro semasa tempoh pelaksanaan strategi, seperti krisis ekonomi, perubahan dasar, dan lain-lain, boleh menyebabkan kegagalan strategi.

Untuk menangani risiko di atas, kaedah seperti mengoptimumkan tetapan parameter, stop loss yang ketat, mempertimbangkan faktor makro, pemantauan manual boleh digunakan untuk mengurangkan risiko.

Arahan pengoptimuman

Arah pengoptimuman untuk strategi ini termasuk:

  1. Mengoptimumkan parameter indikator PB purata dan Bollinger Bands untuk mencari kombinasi parameter terbaik
  2. Tambah penunjuk lain untuk penapisan, seperti MACD, KDJ, dan lain-lain untuk meningkatkan prestasi strategi
  3. Tambah mekanisme stop loss untuk mengawal kerugian tunggal dengan berkesan
  4. Menggabungkan penunjuk jangka masa yang lebih besar untuk menentukan trend utama untuk mengelakkan perdagangan terhadap trend

Kesimpulan

Performa keseluruhan strategi ini cukup memuaskan. Dengan indikator PB purata sebagai terasnya dan Bollinger Bands untuk membantu menentukan isyarat perdagangan, ia mempunyai logika yang mudah, kepekaan yang tinggi, dan hasil backtest yang baik. Dengan terus mengoptimumkan tetapan parameter, menambah penunjuk yang membantu lain, melaksanakan stop loss yang ketat dan lain-lain, keuntungan dan kestabilan strategi dapat ditingkatkan lagi.


/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("BandPass EOS", overlay=false, initial_capital = 1000)

src = input(close, "Source", input.source)
Period1 = input(41, "Fast Period", input.integer)
Period2 = input(54, "Slow Period", input.integer)
showBG = input(false, "Show crosses on background?", input.bool)
UseReversalStop = input(true, "Use additional triggers?", input.bool)

//Super Passband Filter
a1 = 0.0
a2 = 0.0
PB = 0.0
RMS = 0.0
if bar_index > Period1
    a1 := 5 / Period1
    a2 := 5 / Period2
    PB := (a1 - a2) * src + (a2 * (1 - a1) - a1 * (1 - a2)) * src[1] + 
       (1 - a1 + 1 - a2) * nz(PB[1]) - (1 - a1) * (1 - a2) * nz(PB[2])
    for i = 0 to 49 by 1
        RMS := RMS + PB[i] * PB[i]
        RMS
    RMS := sqrt(RMS / 40)
    RMS
z = 0

buy = PB > PB [5] and crossover(PB, -RMS) or PB > PB [5] and crossover (PB, RMS) or PB > PB [5] and crossover (PB, z)
sell = PB < PB [5] and crossunder(PB, RMS) or PB < PB [5] and crossunder (PB, -RMS) or PB < PB [5] and crossunder (PB, z)
signal = buy ? 1 : sell ? -1 : 0
bg = buy ? color.green : sell ? color.red : color.white
bg := showBG ? bg : na
upperFill = PB>RMS ? color.lime : na
lowerFill = PB<-RMS ? color.red : na

p1 = plot(PB,"PB",color.red)
p2 = plot(RMS,"+RMS",color.blue)
p3 = plot(-RMS,"-RMS",color.blue)
bgcolor(bg)
fill(p1,p2,upperFill)
fill(p1,p3,lowerFill)
hline(0)



//PERIOD
testStartYear = input(2018, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true
    
lcolor = PB > PB [5] and crossover(PB, -RMS) or PB > PB [5] and crossover (PB, RMS) or PB > PB [5] and crossover (PB, z)
scolor = PB < PB [5] and crossunder(PB, RMS) or PB < PB [5] and crossunder (PB, -RMS) or PB < PB [5] and crossunder (PB, z)

c1 = (PB < PB [5] and crossunder(PB, RMS) or PB < PB [5] and crossunder (PB, -RMS) or PB < PB [5] and crossunder (PB, z))
c2 = (PB > PB [5] and crossover(PB, -RMS) or PB > PB [5] and crossover (PB, RMS) or PB > PB [5] and crossover (PB, z))

plot (c1 ? PB : na, style = plot.style_circles, color = color.red, linewidth = 3)
plot (c2 ? PB : na, style = plot.style_circles, color = color.green, linewidth = 3)

if (PB > PB [5] and crossover(PB, -RMS) or PB > PB [5] and crossover (PB, RMS) or PB > PB [5] and crossover (PB, z))
    strategy.entry("long", strategy.long, when = testPeriod())


if (PB < PB [5] and crossunder(PB, RMS) or PB < PB [5] and crossunder (PB, -RMS) or PB < PB [5] and crossunder (PB, z))
    strategy.entry("short", strategy.short, when = testPeriod())

    

Lebih lanjut