이 전략은 시장 트렌드를 식별하고 브레이커 전략을 구현하기 위해 볼링거 밴드와 결합된 주요 기술 지표로 CBMA를 사용합니다. 가격이 상단 범위를 넘어서면 짧고 가격이 하단 범위를 넘어서면 길게됩니다.
CBMA를 계산하세요: 가격 변화를 효과적으로 추적할 수 있는 CBMA를 부드럽게 하기 위해 적응 EMA를 사용하세요.
볼링거 밴드 매개 변수를 설정: CBMA를 중간 밴드로 사용하고, 시장에 따라 조정할 수 있는 표준편차 곱셈을 사용하여 상부/하부 밴드를 설정합니다.
브레이크아웃 거래: 가격이 상단 범위를 넘어서면 판매하고, 가격이 하단 범위를 넘어서면 구매합니다. 브레이커 전략을 따라 트렌드를 사용합니다.
플래시 주문을 취소하고 한 번에 한 방향으로만 거래하세요.
고정된 주문 크기를 설정하고 자본에 따라 조정할 수 있습니다.
CBMA는 좋은 평창성을 가지고 있으며 가격을 효과적으로 추적할 수 있습니다.
적응 EMA는 이동 평균의 반응성을 최적화합니다.
상부/하부 밴드는
트렌드를 따라가는 모델은 윙사 트레이드를 피합니다.
고정된 주문 크기는 단일 거래 위험을 통제합니다.
볼링거 밴드 매개 변수는 최적화가 필요합니다 너무 넓거나 너무 좁으면 문제가 발생할 수 있습니다.
파기 신호는 거짓 파기 신호가 있을 수 있습니다.
손실을 통제하기 위해 손실을 멈춰야 합니다.
고정된 주문 크기는 시장에 따라 위치를 조정할 수 없습니다.
한 방향으로만 거래하면 더 많은 수익을 얻을 수 없습니다.
시장에 더 잘 맞게 볼링거 밴드 매개 변수를 동적으로 최적화합니다.
필터링을 위한 더 많은 지표들을 추가해 가짜 유출을 피하세요.
수익을 확보하기 위해 후속 스톱 손실을 추가합니다.
헤지 트레이딩은 더 큰 수익을 위해 길고 짧습니다.
위치 크기를 측정하는 시스템을 추가합니다.
이 전략은 명확한 브레이크아웃 신호를 위해 볼링거 밴드와 결합된 적응형 이동 평균 기술을 사용하는 브레이커 트렌드 다음 시스템입니다. 간단한 논리와 고정된 주문 크기가 위험을 제어하며 실질적인 가치를 가지고 있습니다. 그러나 가짜 브레이크아웃 및 매개 변수 최적화와 같은 문제가 남아 있습니다. 위험 통제를 통해 실제 거래 성능을 개선하고 향상시키기 위해 더 많은 지표가 필요합니다. 전반적으로 개선할 여지가 많은 괜찮은 시작 브레이크아웃 시스템입니다.
/*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")