В процессе загрузки ресурсов... загрузка...

Стратегия индикатора PB среднего пропускания полосы

Автор:Чао Чжан, Дата: 2024-01-17 17:10:53
Тэги:

img

Обзор

Эта стратегия рассчитывает средний показатель PB и полосы Боллинджера, чтобы определить золотой крест и мертвый крест между индикатором PB и верхними и нижними рельсами полос Боллинджера.

Принцип стратегии

Основным показателем стратегии является средний индикатор PB. Средний индикатор PB сочетает в себе стабильность системы скользящей средней и чувствительность индикатора PB. Он использует разницу между быстрыми и медленными скользящими средними различных циклов для выражения тенденций изменения цен для определения длинных и коротких тенденций.

Стратегия также использует индикатор полосы Боллинджера для выявления условий перекупа и перепродажи цены акций. Индикатор полосы Боллинджера состоит из трех кривых: средней рельсы, верхней рельсы и нижней рельсы. Средняя рельса представляет собой движущуюся среднюю за n дней; верхние и нижние рельсы рассчитываются на основе средней рельсы и исторической волатильности. Когда цена акции близка к верхней рельсе, она находится в зоне перекупки; когда она близка к нижней рельсе, она находится в зоне перепродажи, а область вокруг средней рельсы является разумным ценовым диапазоном для акций.

Подводя итог, эта стратегия умело использует средний индикатор PB для определения восходящего или нисходящего тренда цен на акции, а полосы Боллинджера в качестве вспомогательного индикатора для определения условий перекупа и перепродажи, для поиска торговых сигналов от взаимосвязи между двумя индикаторами.

Анализ преимуществ

Основными преимуществами этой стратегии являются:

  1. Использование среднего показателя PB для определения изменений ценовых тенденций, высокая чувствительность
  2. Помощь с использованием полос Боллинджера в выявлении зон перекупа и перепродажи для повышения точности определения точек входа и выхода
  3. Простая логика стратегии, легкая в реализации
  4. Данные о прохождении обратных испытаний показывают относительно удовлетворительные результаты

Анализ рисков

Основными рисками этой стратегии являются:

  1. И средний показатель PB, и полосы Боллинджера для расчета основаны на исторических данных. Они могут генерировать неверные сигналы, когда цены на акции резко колеблются.
  2. Индикатор PB и полосы Боллинджера достаточно чувствительны к параметрам. Неправильные настройки могут привести к чрезмерным неправильным сделкам.
  3. Изменения макросреды в период реализации стратегии, такие как экономический кризис, изменения политики и т. д., могут привести к неудаче стратегии.

Для устранения вышеуказанных рисков для снижения риска можно использовать такие методы, как оптимизация параметров, строгая остановка потерь, учет макрофакторов, ручное наблюдение.

Руководство по оптимизации

Направления оптимизации этой стратегии включают:

  1. Оптимизировать параметры среднего показателя PB и полосы Боллинджера для поиска наилучшей комбинации параметров
  2. Добавить другие индикаторы для фильтрации, такие как MACD, KDJ и т. д., чтобы улучшить эффективность стратегии
  3. Добавить механизмы остановки потерь для эффективного контроля одиночных потерь
  4. Включить более крупные индикаторы временных рамок для определения основной тенденции, чтобы избежать торговли против тенденции

Заключение

Общая производительность этой стратегии довольно удовлетворительна. При наличии среднего индикатора 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())

    

Больше