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

Стратегия разрыва полос Боллинджера CBMA

Автор:Чао Чжан, Дата: 2023-11-06 16:25:01
Тэги:

img

Обзор

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

Логика стратегии

  1. Вычислить CBMA: Используйте адаптивную EMA для сглаживания CBMA, которая может эффективно отслеживать изменения цен.

  2. Установите параметры полос Боллинджера: используйте CBMA в качестве средней полосы и устанавливайте верхние/нижние полосы с использованием мультипликатора стандартного отклонения, который можно корректировать в зависимости от рынка.

  3. Торговля прорывом: продавать, когда цена переходит верхний диапазон, покупать, когда цена переходит ниже нижнего диапазона, используя стратегию следующего тренда.

  4. Используйте флеш-заказы отмены, торгуйте только в одном направлении.

  5. Установите фиксированный размер заказа, который можно регулировать в зависимости от капитала.

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

  1. CBMA обладает хорошей гибкостью и может эффективно отслеживать цены.

  2. Адаптивная EMA оптимизирует реакцию скользящей средней.

  3. Верхние/нижние полосы дают четкие направленные сигналы при прорыве.

  4. Модель, следующая за трендом, избегает торговли винтовой пилой.

  5. Фиксированный размер заказа контролирует риск одной сделки.

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

  1. Параметры Bollinger Bands нуждаются в оптимизации, слишком широкие или слишком узкие могут вызвать проблемы.

  2. Сигналы прорыва могут быть ложными.

  3. Нужно остановить потерю, чтобы контролировать потерю.

  4. Фиксированный размер заказа не может регулировать позицию на основе рынка.

  5. Торгуйте только в одном направлении, больше не можете заработать.

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

  1. Динамически оптимизировать параметры полос Боллинджера, чтобы лучше соответствовать рынку.

  2. Добавьте больше показателей для фильтрации, избегайте ложных прорывов.

  3. Добавьте стоп-лосс, чтобы закрепить прибыль.

  4. Хедж-трейдинг, длинная и короткая сделки для большей прибыли.

  5. Добавьте систему измерения положения.

Заключение

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


/*backtest
start: 2023-10-29 00:00:00
end: 2023-11-05 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="CBMA Bollinger Bands Strategy directed [ChuckBanger]", shorttitle="CBMA BB CB", 
   overlay=true )


length = input(title="Length", type=input.integer, defval=12, minval=1)
regular = input(title="Regular BB Or CBMA?", type=input.bool, defval=false)
src = input(title="Source", type=input.source, defval=close)
mult = input(title="Multipler", type=input.float, defval=2.3, minval=.001, maxval=50, step=.1)
emaLen = input(title="EMA Length", type=input.integer, defval=11, minval=1)
emaGL = input(title="EMA Gain Limit", type=input.integer, defval=50, minval=1)
highlight = input(title="Highlight On/Off", type=input.bool, defval=true)

direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1)

strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

//strategy.risk.max_drawdown(50, strategy.percent_of_equity)

calc_hma(src, length) =>
    hullma = wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))
    hullma

calc_cbma(price, length, emaLength, emaGainLimit) =>
    alpha = 2 / (emaLength + 1)
    ema = ema(price, emaLength)
    int leastError = 1000000
    
    float ec = 0
    float bestGain = 0
    
    for i = emaGainLimit to emaGainLimit
        gain = i / 10
        ec := alpha * ( ema + gain * (price - nz(ec[1])) ) + (1 - alpha) * nz(ec[1])
        error = price - ec
        if (abs(error) < leastError)
            leastError = abs(error)
            bestGain = gain
    
    ec := alpha * ( ema + bestGain * (price - nz(ec[1])) ) + (1 - alpha) * nz(ec[1])
    hull = calc_hma(price, length)
    
    cbma = (ec + hull) / 2
    cbma

cbma = calc_cbma(src, length, emaLen, emaGL)
basis = regular ? sma(src, length) : cbma
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
cbmaColor = fixnan(highlight and not regular ? cbma > high ? color.purple : cbma < low ? color.aqua : na : color.red)
plot(basis, color=cbmaColor)
p1 = plot(upper, color=color.blue)
p2 = plot(lower, color=color.blue)
fill(p1, p2)

if (crossover(src, lower))
    strategy.entry("CBMA_BBandLE", strategy.long, stop=lower, oca_name="BollingerBands", comment="CBMA_BBandLE")
else
    strategy.cancel(id="CBMA_BBandLE")

if (crossunder(src, upper))
    strategy.entry("CBMA_BBandSE", strategy.short, stop=upper, oca_name="BollingerBands", comment="CBMA_BBandSE")
else
    strategy.cancel(id="CBMA_BBandSE")


Больше