MACD 및 볼링거 밴드 기반의 모멘텀 트렌드 전략

저자:차오장, 날짜: 2024-02-29 13:49:03
태그:

img

전반적인 설명

이 전략은 모멘텀 트렌드 (Momentum Trend) 라고 불린다. 이 전략은 트렌드 추적 전략을 구현하기 위해 MACD 지표와 볼링거 밴드의 장점을 결합한다. 이 전략은 MACD 빠른 라인과 느린 라인을 사용하여 볼링거 밴드를 구축한다. 볼링거 밴드의 중간 라인은 MACD 신호 라인이다. 가격이 볼링거 밴드의 상부 레일을 통과할 때 짧고 가격이 볼링거 밴드의 하부 레일을 통과할 때 길어진다. 중장기 트렌드를 추적하기 위해 시장에 진입하기 전에 볼링거 밴드의 중간 라인을 테스트하기 위해 인기를 기다린다.

전략 원칙

이 전략의 핵심 지표는 MACD와 볼링거 밴드이다. MACD 지표는 빠른 라인, 느린 라인 및 MACD 히스토그램으로 구성된다. 빠른 라인은 일반적으로 12 일 EMA이며 느린 라인은 26 일 EMA이다. 그 사이의 차이는 MACD 히스토그램이다. 이 전략은 빠른 라인과 느린 라인의 차이를 볼링거 밴드의 기본 중간 라인으로 사용합니다. 상부 및 하부 레일은 중간 라인을 중심으로 설정되어 볼링거 밴드를 구성합니다.

구매 신호는 가격이 볼링거 밴드의 하부 레일을 상향으로 돌파할 때 생성된다. 판매 신호는 가격이 볼링거 밴드의 상부 레일을 상향으로 돌파할 때 생성된다. 포착되고 역전 기회를 놓치는 위험을 줄이기 위해, 이 전략은 브레이크 이후 즉시 시장에 진입하지 않는다. 대신 진입하기 전에 볼링거 밴드의 중간선을 테스트하기 위해 인기를 끌기를 기다린다.

또한, 상부 레일과 하부 레일은 각각 저항과 지원으로 사용될 수 있다. 가격이 상승하면 상부 레일은 저항이고 하부 레일은 지원이다. 가격이 하락하면 상부 레일은 지원이 되고 하부 레일은 저항이 된다.

이점 분석

이 전략은 트렌드 추적을 달성하기 위해 MACD와 볼린거 밴드의 장점을 결합하고 다음과 같은 강점을 가지고 있습니다.

  1. MACD는 강한 트렌드 판단 능력을 가지고 있습니다. 볼링거 밴드는 적응적으로 조정 할 수 있습니다. 조합은 트렌드 반전 지점을 효과적으로 결정할 수 있습니다.

  2. 풀백 엔트리는 스톱 로스 위험을 효과적으로 피하고 중장기 트렌드를 추적할 수 있습니다.

  3. 볼링거 밴드에서의 저항과 지원을 이용하면 더 많은 수익을 얻을 수 있습니다.

  4. MACD 및 볼링거 밴드 매개 변수는 다양한 시장 환경에 맞게 유연하게 조정할 수 있습니다.

위험 분석

이 전략에는 몇 가지 위험 요소가 있습니다.

  1. 변동 트렌드에서 MACD와 볼링거 밴드는 여러 가지 유효하지 않은 신호를 생성 할 수 있습니다. 큰 손실을 피하기 위해 포지션 크기가 줄어들 필요가 있습니다.

  2. 너무 깊은 리드백으로 손실이 커지는 것을 피하기 위해 리드백 입시에 스톱 로스를 설정해야 합니다.

  3. 볼링거 밴드 매개 변수는 시장의 변동성에 따라 조정되어야 합니다. 매개 변수 설정이 잘못되면 잘못된 브레이크의 확률이 증가합니다.

  4. 좋은 위험 관리와 포지션 크기는 이 전략의 수익을 유지하는 열쇠입니다. 전략 신호에만 의존하는 것은 전반적인 위험을 무시하는 경향이 있습니다.

최적화 방향

이 전략은 다음 측면에서도 최적화 될 수 있습니다.

  1. MACD 매개 변수를 8일 빠른 라인 및 20일 느린 라인으로 최적화합니다. 지표의 감수성을 향상시키기 위해 다른 제품 및 시간 프레임에 따라 조정합니다.

  2. 올림 및 하림 추세 판단을 추가하여 볼링거 밴드 매개 변수를 최적화하여 변동 시장에서 잘못된 신호를 줄입니다.

  3. 스톱 로스 전략을 추가합니다. 위험을 제어하기 위해 볼링거 밴드 상부 및 하부 레일로 스톱 로스 라인을 설정합니다.

  4. 전략의 안정성을 높이기 위해 확인을 위한 다른 지표를 포함합니다.

결론

모멘텀 트렌드 전략은 MACD와 볼링거 밴드를 기반으로 지표 조합을 통해 중장기 트렌드를 추적하고 위험을 줄이기 위해 인기를 끌고 있습니다. 매개 변수 설정을 최적화하고 위험을 제어합니다. 트렌딩 제품에 잘 수행합니다. 그러나 어떤 전략도 완벽하지 않습니다. 끊임없이 변화하는 시장 환경에 적응하기 위해 여러 관점에서 최적화하고 개선해야합니다.


/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//Simple strategy based on MACD and Bollinger Bands, where BBs are calculatend from macd signal.
strategy("Strategy MACD vs BB", overlay=false)

fast_length = input(title="Fast MA period", type=input.integer, defval=8)
slow_length = input(title="Slow MA period", type=input.integer, defval=21)
src = input(close,"Source")


// ----------MA calculation - ChartArt-------------
smoothinput = input(1, minval=1, maxval=4, title='Moving Average Calculation: (1 = SMA), (2 = EMA), (3 = WMA), (4 = Linear)')

fast_ma = smoothinput == 1 ? sma(src, fast_length):smoothinput == 2 ? ema(src, fast_length):smoothinput == 3 ? wma(src, fast_length):smoothinput == 4 ? linreg(src, fast_length,0):na
slow_ma = smoothinput == 1 ? sma(src, slow_length):smoothinput == 2 ? ema(src, slow_length):smoothinput == 3 ? wma(src, slow_length):smoothinput == 4 ? linreg(src, slow_length,0):na
//----------------------------------------------
macd = fast_ma - slow_ma
p1=plot(macd,"macd signal",color=color.blue)
length = input(40, minval=1)
mult = input(2.0,"BB multiplier")

basis = sma(macd, length)
dev = mult * stdev(macd, length)
plot(basis,"BB basis",color=color.orange)
upper = basis + dev
lower = basis - dev
p2=plot(upper,"BB upper",color=color.red)
p3=plot(lower,"BB basis",color=color.green)

longCondition = crossover(macd, lower)
shortCondition = crossunder(macd, upper)

plotshape(longCondition?lower:na, title="Long", style=shape.xcross, location=location.absolute, text="Long", color=color.green, transp=0, size=size.tiny)
plotshape(shortCondition?upper:na, title="Short", style=shape.xcross, location=location.absolute, text="Short", color=color.red, transp=0, size=size.tiny)
fill(p1,p3,color=macd<lower?color.green:na,transp=90,title="support")
fill(p1,p2,color=macd>upper?color.red:na,transp=90,title="resistance")

if longCondition
    strategy.entry("Long",strategy.long)
if shortCondition
    strategy.entry("Short",strategy.short)


더 많은