볼링거 밴드, 이동 평균 및 MACD 결합 거래 전략

저자:차오장, 날짜: 2024-02-04 15:42:23
태그:

img

전략 개요

이 전략은 볼링거 밴드, 이동 평균 및 MACD를 결합하여 비교적 완전한 거래 시스템을 형성합니다. 시장 트렌드를 판단하는 동안 일부 역전 기회를 포착 할 수도 있습니다.

전략 이름 및 근거

이 전략은 트라이앵글 앵커링 트렌드 추적 전략 (Triangle Anchoring Trend Tracking Strategy) 이라고 불립니다. 이 이름은 트렌드 방향과 앵커 입구 지점을 결정하기 위해 세 가지 기술적 지표를 사용하는 것을 강조합니다.

기본적인 거래 논리는 다음과 같습니다.

  1. 트렌드 방향을 판단합니다. 시장이 상승 추세 또는 하락 추세 단계인지 결정하기 위해 볼링거 미드 밴드, EMA 및 MACD 제로 라인을 비교하십시오.

  2. 진입 기회를 찾습니다. 트렌드가 확인된 후, 전략은 EMA가 BB 미드 밴드를 넘고 MACD 히스토그램이 신호선을 넘어서 진입을 결정하는지 확인합니다.

  3. 수익 목표 및 스톱 손실을 설정합니다. 입력 한 후 고정 목표 및 스톱 손실 수준은 미리 설정됩니다.

이점 분석

이 전략의 가장 큰 장점은 트렌드, 이동 평균 및 MACD 도구를 동시에 사용하여 결정을 내리는 것입니다. 이것은 시장 추진력에 대한 더 정확한 판단을 허용하고 또한 일부 반전을 파악하는 데 도움이됩니다.

첫째, BB Mid Band 는 현재 주요 트렌드 방향을 명확히 반영합니다. EMA의 역할은 트렌드의 진행을 추적하는 것입니다. 그들의 비교와 조합은 더 정확한 트렌드 식별을 가능하게합니다.

둘째, BB 자체는 강한 앙벨로프 특성을 가지고 있습니다. 중간 대역 주변의 영역은 또한 특정 지원/저항 수준을 나타냅니다. 따라서 EMA 크로스오버는 신호 값을 가지고 있습니다.

또한, MACD는 상승/하락 동력의 증가와 감소를 측정합니다. 그 절대 크기는 높은 또는 낮은 군중 감정을 나타냅니다. 또한 잠재적 인 반전을 암시합니다.

마지막으로, 미리 설정된 수익 목표와 스톱 로스는 개별 거래의 위험/이익을 통제하고 전반적인 안정성을 보장합니다.

위험 분석

여러 분석 도구가 사용되었음에도 불구하고 주요 위험은 다음과 같습니다.

  1. 부적절한 BB 매개 변수는 주요 추세를 명확히 반영하지 못합니다.

  2. EMA 시스템은 긴 신호를 주지만 MACD는 분명히 긍정적으로 변하지 않으며 하락세력이 확대될 수 있습니다.

  3. 이윤 목표/손실 중지 범위가 너무 넓고, 단일 거래 손실이 넓어집니다.

주요 해결책은 다음과 같습니다.

  1. BB 매개 변수를 조정하여 중부 대역이 주요 트렌드를 효과적으로 반영하도록 합니다.

  2. 더 많은 기술적 지표를 도입하여 황소/곰 동력을 판단합니다.

  3. 역사적인 거래를 평가하고 수익 목표 / 스톱 손실을 최적화하십시오.

최적화 방향

이 전략은 다음과 같은 측면에서 더 향상될 수 있습니다.

  1. KDJ, ATR 등과 같은 더 많은 지표를 도입하여 트렌드 판단을 돕고 정확도를 향상시킵니다.

  2. 더 정교한 스톱을 구현하십시오.

  3. 다양한 제품들의 성능을 평가하고, 다양한 시장 조건에 맞게 매개 변수를 조정합니다.

  4. 테스트 및 트위크 전략은 다양한 시간 프레임과 시장에서 백테스트 결과를 기반으로합니다.

  5. 자동 매개 변수 최적화 및 동적 전략 업데이트를 위한 기계 학습을 통합합니다.

결론

이 전략은 BB, MA 및 MACD를 함께 활용합니다. 명확한 트렌드 판단, 특정 봉투 특성을 가지고 있으며 몇 가지 반전을 포착합니다. 입출입을 판단하는 더 많은 보조 도구로 더 신뢰할 수있는 성능을 달성 할 수 있습니다. 이 전략의 추가 평가와 향상은 보장되며 강력한 수치 도구를 생산 할 것으로 예상됩니다.


/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Combined Strategy", overlay=true, shorttitle="Comb Strat", default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// Precio de beneficio y Stop Loss
takeProfitTicks = 87636
stopLossTicks = 53350

// Bollinger Bands + EMA
length_bb = input(150, title="BB Length")
src_bb = input(close, title="BB Source")
mult = input(2.0, title="BB StdDev")
basis = ta.sma(src_bb, length_bb)
dev = mult * ta.stdev(src_bb, length_bb)
upper = basis + dev
lower = basis - dev

len_ema = input(34, title="EMA Length")
src_ema = input(close, title="EMA Source")
out_ema = ta.ema(src_ema, len_ema)

typeMA = input("SMA", title="Method")
smoothingLength = input(5, title="Length")

var float smoothingLine = na
if (typeMA == "SMA")
    smoothingLine := ta.sma(out_ema, smoothingLength)
else if (typeMA == "EMA")
    smoothingLine := ta.ema(out_ema, smoothingLength)

// MACD
fast_length = input(title="Fast Length", defval=9)
slow_length = input(title="Slow Length", defval=17)
src_macd = input(title="Source", defval=close)
signal_length = input.int(title="Signal Smoothing", minval=1, maxval=50, defval=9)
sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])

fast_ma = sma_source == "SMA" ? ta.sma(src_macd, fast_length) : ta.ema(src_macd, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src_macd, slow_length) : ta.ema(src_macd, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal

// Condiciones de compra y venta
longCondition = (out_ema > basis) and (macd > signal) and (signal > 0)
shortCondition = (out_ema < basis) and (macd < signal) and (signal < 0)

// Variables de estado
var bool longExecuted = na
var bool shortExecuted = na

// Estrategia
if (longCondition and not longExecuted)
    strategy.entry("Long", strategy.long)
    longExecuted := true
    shortExecuted := na
if (shortCondition and not shortExecuted)
    strategy.entry("Short", strategy.short)
    shortExecuted := true
    longExecuted := na

// Take Profit y Stop Loss para Compras y Ventas Cortas
strategy.exit("Take Profit/Close Long", from_entry="Long", profit=takeProfitTicks, loss=stopLossTicks)
strategy.exit("Take Profit/Close Short", from_entry="Short", profit=takeProfitTicks, loss=stopLossTicks)

// Cierre de posiciones cuando la dirección cambia
if ((out_ema < basis) and (macd < signal))
    strategy.close("Long")
    longExecuted := na
if ((out_ema > basis) and (macd > signal))
    strategy.close("Short")
    shortExecuted := na

// Plots
plot(basis, "BB Basis", color=#FF6D00)
plot(upper, "BB Upper", color=color.new(#2962FF, 0.5))
plot(lower, "BB Lower", color=color.new(#2962FF, 0.5))

plot(smoothingLine, title="Smoothing Line", color=#f37f20, linewidth=2)

hline(0, "Zero Line", color=color.new(#787B86, 50))
plot(hist, title="Histogram", style=plot.style_columns, color=(hist >= 0 ? (hist[1] < hist ? color.green : color.red) : (hist[1] < hist ? color.red : color.green)))
plot(macd, title="MACD", color=color.blue)
plot(signal, title="Signal", color=color.orange)


더 많은