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.
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.
Keuntungan utama dari strategi ini adalah:
Risiko utama dari strategi ini adalah:
Untuk mengatasi risiko di atas, metode seperti mengoptimalkan pengaturan parameter, stop loss yang ketat, mempertimbangkan faktor makro, pemantauan manual dapat digunakan untuk mitigasi risiko.
Arah optimasi untuk strategi ini meliputi:
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())