Cette stratégie calcule l'indicateur PB moyen et les bandes de Bollinger pour déterminer la relation de croix dorée et de croix morte entre l'indicateur PB et les rails supérieur et inférieur des bandes de Bollinger.
L'indicateur moyen PB combine la stabilité du système de moyenne mobile et la sensibilité de l'indicateur PB. Il utilise la différence entre les moyennes mobiles rapides et lentes de différents cycles pour exprimer les tendances de changement de prix afin de déterminer les tendances longues et courtes.
L'indicateur de bande de Bollinger se compose de trois courbes: le rail du milieu, le rail supérieur et le rail inférieur. Le rail du milieu est la moyenne mobile de n jours; les rails supérieurs et inférieurs sont calculés en fonction du rail du milieu et de la volatilité historique. Lorsque le prix de l'action est proche du rail supérieur, il est dans la zone de surachat; lorsqu'il est proche du rail inférieur, il est dans la zone de survente, et la zone autour du rail du milieu est une plage de prix raisonnable pour l'action.
En résumé, cette stratégie utilise habilement l'indicateur moyen PB pour déterminer la tendance haussière ou baissière des cours des actions, et les bandes de Bollinger comme indicateur auxiliaire pour déterminer les conditions de surachat et de survente, pour trouver des signaux de trading à partir de la relation entre les deux indicateurs.
Les principaux avantages de cette stratégie sont les suivants:
Les principaux risques de cette stratégie sont les suivants:
Pour lutter contre les risques susmentionnés, des méthodes telles que l'optimisation des paramètres, un stop loss strict, en tenant compte des facteurs macro, une surveillance manuelle peuvent être utilisées pour atténuer les risques.
Les orientations d'optimisation de cette stratégie comprennent:
La performance globale de cette stratégie est assez satisfaisante. Avec l'indicateur PB moyen comme noyau et les bandes de Bollinger pour aider à déterminer les signaux de trading, il a une logique simple, une sensibilité élevée et des résultats de backtest décents. En continuant à optimiser les paramètres, en ajoutant d'autres indicateurs d'assistance, en mettant en œuvre un stop loss strict, la rentabilité et la stabilité de la stratégie peuvent être encore améliorées.
/*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())