Эта стратегия рассчитывает средний показатель PB и полосы Боллинджера, чтобы определить золотой крест и мертвый крест между индикатором PB и верхними и нижними рельсами полос Боллинджера.
Основным показателем стратегии является средний индикатор PB. Средний индикатор PB сочетает в себе стабильность системы скользящей средней и чувствительность индикатора PB. Он использует разницу между быстрыми и медленными скользящими средними различных циклов для выражения тенденций изменения цен для определения длинных и коротких тенденций.
Стратегия также использует индикатор полосы Боллинджера для выявления условий перекупа и перепродажи цены акций. Индикатор полосы Боллинджера состоит из трех кривых: средней рельсы, верхней рельсы и нижней рельсы. Средняя рельса представляет собой движущуюся среднюю за n дней; верхние и нижние рельсы рассчитываются на основе средней рельсы и исторической волатильности. Когда цена акции близка к верхней рельсе, она находится в зоне перекупки; когда она близка к нижней рельсе, она находится в зоне перепродажи, а область вокруг средней рельсы является разумным ценовым диапазоном для акций.
Подводя итог, эта стратегия умело использует средний индикатор PB для определения восходящего или нисходящего тренда цен на акции, а полосы Боллинджера в качестве вспомогательного индикатора для определения условий перекупа и перепродажи, для поиска торговых сигналов от взаимосвязи между двумя индикаторами.
Основными преимуществами этой стратегии являются:
Основными рисками этой стратегии являются:
Для устранения вышеуказанных рисков для снижения риска можно использовать такие методы, как оптимизация параметров, строгая остановка потерь, учет макрофакторов, ручное наблюдение.
Направления оптимизации этой стратегии включают:
Общая производительность этой стратегии довольно удовлетворительна. При наличии среднего индикатора PB в качестве основы и полос Боллинджера для помощи в определении торговых сигналов, она имеет простую логику, высокую чувствительность и приличные результаты бэкстеста. Продолжая оптимизировать настройки параметров, добавляя другие вспомогательные индикаторы, внедряя строгие стоп-лосс и т. Д., Можно еще больше улучшить рентабельность и стабильность стратегии.
/*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())