Strategi Indikator Bandpass Mean PB

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

img

Gambaran umum

Strategi ini menghitung rata-rata indikator PB dan Bollinger Bands untuk menentukan hubungan salib emas dan salib mati antara indikator PB dan rel atas dan bawah Bollinger Bands. Ini menghasilkan sinyal beli ketika indikator PB pecah di atas rel tengah atau rel bawah Bollinger Bands, dan menghasilkan sinyal jual ketika indikator PB pecah di bawah rel tengah atau rel atas Bollinger Bands.

Prinsip Strategi

Indikator inti dari strategi ini adalah indikator PB rata-rata. Indikator PB rata-rata menggabungkan stabilitas sistem rata-rata bergerak dan sensitivitas indikator PB. Ini menggunakan perbedaan antara rata-rata bergerak cepat dan lambat dari siklus yang berbeda untuk mengekspresikan tren perubahan harga untuk menentukan tren panjang dan pendek.

Strategi ini juga menggunakan indikator Bollinger Band untuk mengidentifikasi kondisi overbought dan oversold harga saham. Indikator Bollinger Band terdiri dari tiga kurva: rel tengah, rel atas dan rel bawah. rel tengah adalah rata-rata bergerak n hari; rel atas dan bawah dihitung berdasarkan rel tengah dan volatilitas historis. Ketika harga saham dekat dengan rel atas, itu berada di zona overbought; ketika dekat dengan rel bawah, itu berada di zona oversold, dan daerah di sekitar rel tengah adalah kisaran harga yang wajar untuk saham.

Singkatnya, strategi ini dengan cerdas menggunakan indikator PB rata-rata untuk menentukan tren naik atau turun harga saham, dan Bollinger Bands sebagai indikator tambahan untuk menentukan kondisi overbought dan oversold, untuk menemukan sinyal perdagangan dari hubungan antara kedua indikator.

Analisis Keuntungan

Keuntungan utama dari strategi ini adalah:

  1. Menggunakan indikator PB rata-rata untuk menentukan perubahan tren harga, sensitivitas tinggi
  2. Membantu dengan Bollinger Bands untuk mengidentifikasi zona overbought dan oversold untuk meningkatkan akurasi penentuan titik masuk dan keluar
  3. Logika strategi sederhana, mudah diterapkan
  4. Data backtest menunjukkan hasil yang relatif memuaskan

Analisis Risiko

Risiko utama dari strategi ini adalah:

  1. Baik indikator mean PB maupun Bollinger Bands bergantung pada data historis untuk perhitungan.
  2. Indikator PB dan Bollinger Bands cukup sensitif terhadap pengaturan parameter.
  3. Perubahan lingkungan makro selama periode implementasi strategi, seperti krisis ekonomi, perubahan kebijakan, dll, dapat menyebabkan kegagalan strategi.

Untuk mengatasi risiko di atas, metode seperti mengoptimalkan pengaturan parameter, stop loss yang ketat, mempertimbangkan faktor makro, pemantauan manual dapat digunakan untuk mitigasi risiko.

Arahan Optimasi

Arah optimasi untuk strategi ini meliputi:

  1. Mengoptimalkan parameter indikator PB rata-rata dan Bollinger Bands untuk menemukan kombinasi parameter terbaik
  2. Tambahkan indikator lain untuk penyaringan, seperti MACD, KDJ, dll untuk meningkatkan kinerja strategi
  3. Tambahkan mekanisme stop loss untuk mengontrol kerugian tunggal secara efektif
  4. Menggabungkan indikator jangka waktu yang lebih besar untuk menentukan tren utama untuk menghindari perdagangan melawan tren

Kesimpulan

Performa keseluruhan strategi ini cukup memuaskan. Dengan indikator PB rata-rata sebagai intinya dan Bollinger Bands untuk membantu menentukan sinyal perdagangan, ia memiliki logika sederhana, sensitivitas tinggi, dan hasil backtest yang layak. Dengan terus mengoptimalkan pengaturan parameter, menambahkan indikator pendukung lainnya, menerapkan stop loss yang ketat dll, profitabilitas dan stabilitas strategi dapat ditingkatkan lebih lanjut.


/*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 banyak