Стратегии полос Боллинджера с несколькими скользящими средними


Дата создания: 2024-02-06 15:08:26 Последнее изменение: 2024-02-06 15:08:26
Копировать: 4 Количество просмотров: 632
1
Подписаться
1617
Подписчики

Стратегии полос Боллинджера с несколькими скользящими средними

Обзор

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

Стратегический принцип

В основе этой стратегии лежит использование вводимых пользователями 12 типов движущихся средних, включая SMA, EMA, WMA, DEMA, TMA, VAR, WWMA, ZLEMA, TSF, HULL, TILL и т. д., в сочетании с индикаторами Брин-Бенда для формирования торговых сигналов. Средняя полоса Брин-Бенда использует выбранную движущуюся среднюю, верхняя и нижняя полосы которой составляют положительное и одно стандартное расстояние.

Код состоит из следующих частей:

  1. Функции для определения 12 типов скользящих средних, включая SMA, EMA, WMA и т.д.
  2. Функция getMA, возвращающая соответствующую скользящую среднюю величину в соответствии с входными параметрами mav.
  3. Вычислить среднюю орбиту, верхнюю орбиту и нижнюю орбиту по Бринской полосе. Средняя орбита получена с помощью функции getMA.
  4. Нарисуй ленту Брин.
  5. Сигналы роста и пустые сигналы. Цена прорывает верхнюю полосу, когда она пустая, и верхнюю полосу, когда она низкая.

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

Наибольшее преимущество этой стратегии заключается в том, что она предлагает несколько типов движущихся средних. В различных рыночных условиях движущиеся средние реагируют по-разному быстро и медленно. Использование нескольких типов движущихся средних может значительно повысить адаптивность стратегии. Кроме того, стратегия может оптимизировать параметры длины движущихся средних для поиска оптимальных комбинаций, что позволяет получить более точные торговые сигналы.

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

Основной риск этой стратегии заключается в том, что движущаяся средняя сама по себе сигнализирует о путанице и может иметь несколько ложных прорывов. Кроме того, индикатор буринского пояса чувствителен к резким изменениям цен, и средняя орбитальная линия не может эффективно отслеживать цены. Это требует использования более стабильных типов движущихся средних и соответствующей корректировки параметров.

Направление оптимизации

Эта стратегия может быть оптимизирована в следующих аспектах:

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

Подвести итог

Эта стратегия в целом очень новаторская, поскольку дает более богатые сегментальные приложения для индикатора буринской полосы. С помощью корректировки портфельной движущейся средней можно получить более точный и стабильный сигнал. Кроме того, она дает новые идеи для оптимизации стратегии буринской полосы.

Исходный код стратегии
/*backtest
start: 2023-01-30 00:00:00
end: 2023-10-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Bollinger Bands Strategy (MA type)", overlay=true)
src = input(close, title="Source")
length = input(20,step=10, minval=1)
mult = input(1,type=input.float, minval=0.001, maxval=50, title="StdDev")

length1=input(26, "Long Moving Average Length", minval=1)
length2=input(9, "Trigger Length", minval=1)
T3a1 = input(0.7, "TILLSON T3 Volume Factor", step=0.1)
////////////
mav = input(title="Moving Average Type", defval="VAR", options=["SMA", "EMA", "WMA", "DEMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF", "HULL", "TILL"])
Var_Func(src,length)=>
    valpha=2/(length+1)
    vud1=src>src[1] ? src-src[1] : 0
    vdd1=src<src[1] ? src[1]-src : 0
    vUD=sum(vud1,9)
    vDD=sum(vdd1,9)
    vCMO=nz((vUD-vDD)/(vUD+vDD))
    VAR=0.0
    VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1])
VAR=Var_Func(src,length)
DEMA = ( 2 * ema(src,length)) - (ema(ema(src,length),length) )
Wwma_Func(src,length)=>
    wwalpha = 1/ length
    WWMA = 0.0
    WWMA := wwalpha*src + (1-wwalpha)*nz(WWMA[1])
WWMA=Wwma_Func(src,length)
Zlema_Func(src,length)=>
    zxLag = length/2==round(length/2) ? length/2 : (length - 1) / 2
    zxEMAData = (src + (src - src[zxLag]))
    ZLEMA = ema(zxEMAData, length)
ZLEMA=Zlema_Func(src,length)
Tsf_Func(src,length)=>
    lrc = linreg(src, length, 0)
    lrc1 = linreg(src,length,1)
    lrs = (lrc-lrc1)
    TSF = linreg(src, length, 0)+lrs
TSF=Tsf_Func(src,length)
HMA = wma(2 * wma(src, length / 2) - wma(src, length), round(sqrt(length)))
T3e1=ema(src, length)
T3e2=ema(T3e1,length)
T3e3=ema(T3e2,length)
T3e4=ema(T3e3,length)
T3e5=ema(T3e4,length)
T3e6=ema(T3e5,length)
T3c1=-T3a1*T3a1*T3a1
T3c2=3*T3a1*T3a1+3*T3a1*T3a1*T3a1
T3c3=-6*T3a1*T3a1-3*T3a1-3*T3a1*T3a1*T3a1
T3c4=1+3*T3a1+T3a1*T3a1*T3a1+3*T3a1*T3a1
T3=T3c1*T3e6+T3c2*T3e5+T3c3*T3e4+T3c4*T3e3


getMA(src, length) =>
    ma = 0.0
    if mav == "SMA"
        ma := sma(src, length)
        ma

    if mav == "EMA"
        ma := ema(src, length)
        ma

    if mav == "WMA"
        ma := wma(src, length)
        ma

    if mav == "DEMA"
        ma := DEMA
        ma

    if mav == "TMA"
        ma := sma(sma(src, ceil(length / 2)), floor(length / 2) + 1)
        ma

    if mav == "VAR"
        ma := VAR
        ma

    if mav == "WWMA"
        ma := WWMA
        ma

    if mav == "ZLEMA"
        ma := ZLEMA
        ma

    if mav == "TSF"
        ma := TSF
        ma

    if mav == "HULL"
        ma := HMA
        ma

    if mav == "TILL"
        ma := T3
        ma
    ma
    
//////////
basis = getMA(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input(0, "Offset",minval = -500, maxval = 500)
plot(basis, "Basis",color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))
/////////
buyEntry = crossover(src, lower)
sellEntry = crossunder(src, upper)
if (crossover(src, lower))
	strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands",  comment="BBandLE")
else
	strategy.cancel(id="BBandLE")
if (crossunder(src, upper))
	strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands",  comment="BBandSE")
else
	strategy.cancel(id="BBandSE")
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)