Эта стратегия использует CBMA в качестве основного технического индикатора в сочетании с полосами Боллинджера для выявления рыночных тенденций и реализации стратегии прерывания. Она становится короткой, когда цена превышает верхнюю полосу, и длинной, когда цена превышает нижнюю полосу.
Вычислить CBMA: Используйте адаптивную EMA для сглаживания CBMA, которая может эффективно отслеживать изменения цен.
Установите параметры полос Боллинджера: используйте CBMA в качестве средней полосы и устанавливайте верхние/нижние полосы с использованием мультипликатора стандартного отклонения, который можно корректировать в зависимости от рынка.
Торговля прорывом: продавать, когда цена переходит верхний диапазон, покупать, когда цена переходит ниже нижнего диапазона, используя стратегию следующего тренда.
Используйте флеш-заказы отмены, торгуйте только в одном направлении.
Установите фиксированный размер заказа, который можно регулировать в зависимости от капитала.
CBMA обладает хорошей гибкостью и может эффективно отслеживать цены.
Адаптивная EMA оптимизирует реакцию скользящей средней.
Верхние/нижние полосы дают четкие направленные сигналы при прорыве.
Модель, следующая за трендом, избегает торговли винтовой пилой.
Фиксированный размер заказа контролирует риск одной сделки.
Параметры Bollinger Bands нуждаются в оптимизации, слишком широкие или слишком узкие могут вызвать проблемы.
Сигналы прорыва могут быть ложными.
Нужно остановить потерю, чтобы контролировать потерю.
Фиксированный размер заказа не может регулировать позицию на основе рынка.
Торгуйте только в одном направлении, больше не можете заработать.
Динамически оптимизировать параметры полос Боллинджера, чтобы лучше соответствовать рынку.
Добавьте больше показателей для фильтрации, избегайте ложных прорывов.
Добавьте стоп-лосс, чтобы закрепить прибыль.
Хедж-трейдинг, длинная и короткая сделки для большей прибыли.
Добавьте систему измерения положения.
Эта стратегия является системой, следующей за трендом, использующей адаптивную технологию скользящих средних в сочетании с полосами Боллинджера для четких сигналов прорыва. Она имеет простую логику и фиксированный размер ордера, контролирующий риск, имея некоторую практическую ценность. Но остаются такие проблемы, как ложные прорывы и оптимизация параметров, которые нуждаются в большем количестве индикаторов для улучшения и повышения реальной торговой эффективности при одновременном контроле риска. В целом это приличная стартовая система прорыва с большим пространством для улучшения.
/*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")