강화된 볼륨 및 가격 추세 판단 모멘텀 전략

MACD ATR MA EMA SMA
생성 날짜: 2025-01-10 15:40:37 마지막으로 수정됨: 2025-01-10 15:40:37
복사: 0 클릭수: 346
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

강화된 볼륨 및 가격 추세 판단 모멘텀 전략

개요

이 전략은 MACD 지표와 거래량과 가격의 관계를 기반으로 하는 거래 시스템입니다. MACD 히스토그램 모양의 변화를 관찰하여 시장 추세의 전환점을 결정합니다. 이 전략은 역동적인 손절매 및 손절매 메커니즘을 채택하고, ATR 지표를 사용하여 시장 변동에 적응하고 효과적으로 위험을 통제합니다.

전략 원칙

이 전략의 핵심 논리는 MACD 지표의 깊고 얕은 열 형태 변화와 EMA 및 SMA 이중 이동 평균 시스템을 결합한 것입니다. MACD 히스토그램이 진한색에서 밝은색으로 바뀌면 모멘텀의 변화를 나타내며 이때 시스템이 거래됩니다. 구체적으로:

  1. 빠른(12) 이동평균선과 느린(26) 이동평균선을 이용하여 MACD 값을 계산합니다.
  2. MACD는 9주기 신호선으로 평활화됨
  3. MACD 히스토그램의 색상 변화를 관찰하세요
  4. 14기간 ATR 지표를 결합하여 동적 이익실현 및 손절매를 설정합니다.

전략적 이점

  1. 지표 조합은 과학적이고 합리적이며, MACD는 추세를 효과적으로 포착할 수 있고 ATR은 변동에 적응할 수 있습니다.
  2. 손절매 및 손절매 설정은 유연하며 다양한 매개변수를 통해 다양한 시장 특성에 맞게 조정할 수 있습니다.
  3. 거래신호가 명확하며, 막대형 차트의 색상변화를 통해 진입시점을 직관적으로 판단 가능
  4. 장기 및 단기 양방향 거래를 모두 고려하여 전략 및 수익 기회의 적용성을 높입니다.

전략적 위험

  1. 지연 지표로서의 MACD는 빠른 시장 움직임에 대한 최적의 진입점을 놓칠 수 있습니다.
  2. 변동성이 큰 시장에서는 잘못된 신호가 생성되어 잦은 거래가 발생할 수 있습니다.
  3. 부적절한 ATR 다중 설정으로 인해 손절매가 너무 느슨하거나 너무 좁아질 수 있습니다.
  4. 과도한 단일손실을 피하기 위해 합리적인 자금운용이 필요합니다.

전략 최적화 방향

  1. 신호 안정성을 향상시키기 위해 볼륨 확인 신호 도입
  2. 변동성이 큰 시장에서 잘못된 신호를 줄이기 위해 트렌드 필터 추가
  3. 다양한 기간에 따라 동적으로 조정 가능한 이익 실현 및 손실 정지 배수를 최적화합니다.
  4. 변동성이 높은 기간 동안 거래 빈도를 줄이기 위해 변동성 필터링 추가
  5. 불리한 기간 동안 거래를 피하기 위해 시간 필터 도입을 고려하세요.

요약하다

이는 고전적인 기술적 분석 지표인 MACD와 현대적인 위험 관리 방법을 결합한 포괄적인 전략입니다. MACD 히스토그램 모양의 변화를 관찰하여 시장 모멘텀의 변화를 포착하고 동적 위험 제어에 ATR을 사용합니다. 전략은 합리적으로 설계되었고, 운영 논리는 명확하며, 실용적 가치가 좋습니다. 이 전략은 지속적인 최적화와 개선을 통해 실제 전투에서 더 나은 성과를 거둘 수 있을 것으로 기대됩니다.

전략 소스 코드
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=5
strategy(title="軒割MACD 空心量能不足策略", shorttitle="軒割MACD 空心量能不足策略", overlay=true)

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

// 啟用多單 / 空單
useLong       = input.bool(title="啟用多單?(底部紅色)", defval=true)
useShort      = input.bool(title="啟用空單?(頂部綠色)", defval=true)

// 止盈倍數 (1~10倍 ATR)
tpATRmult     = input.int(title="止盈 ATR 倍數 (1~10)", defval=10, minval=1, maxval=500)
// 止損倍數 (1~10倍 ATR)
slATRmult     = input.int(title="止損 ATR 倍數 (1~10)", defval=3, minval=1, maxval=500)

//=== 2) MACD 計算 ===//
fast_ma  = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma  = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd     = fast_ma - slow_ma
signal   = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist     = macd - signal

//=== 3) 判斷深色/淺色(用於變化訊號)===//
darkGreen  = hist >= 0 and hist <= hist[1]   // 上方,柱子縮小或持平
lightGreen = hist >= 0 and hist >  hist[1]   // 上方,柱子變大
darkRed    = hist <  0 and hist <= hist[1]   // 下方,柱子(絕對值)變大或持平
lightRed   = hist <  0 and hist >  hist[1]   // 下方,柱子(絕對值)變小

// 由「深 → 淺」是否發生在上一根
colorChangeToLightGreen = darkGreen[1] and lightGreen
colorChangeToLightRed   = darkRed[1]   and lightRed

//=== 4) ATR 計算 (用於止盈止損) ===//
atrPeriod  = 14
atrValue   = ta.atr(atrPeriod)

//=== 5) 多單策略:深紅 → 淺紅 (底部紅色) ===//
if useLong and colorChangeToLightRed
    // 以當前 K 線 low - ATR倍數 作為多單止損
    longStopLoss   = low - (slATRmult * atrValue)
    // 以當前 close + ATR倍數 作為多單止盈
    longTakeProfit = close + (tpATRmult * atrValue)

    // 進多單
    strategy.entry("Long Entry", strategy.long, comment="多", qty=1)
    strategy.exit("平多", "Long Entry", stop=longStopLoss, limit=longTakeProfit)

//=== 6) 空單策略:深綠 → 淺綠 (頂部綠色) ===//
if useShort and colorChangeToLightGreen
    // 以當前 K 線 high + ATR倍數 作為空單止損
    shortStopLoss   = high + (slATRmult * atrValue)
    // 以當前 close - ATR倍數 作為空單止盈
    shortTakeProfit = close - (tpATRmult * atrValue)

    // 進空單
    strategy.entry("Short Entry", strategy.short, comment="空", qty=1)
    strategy.exit("平空", "Short Entry", stop=shortStopLoss, limit=shortTakeProfit)

//=== 7) 繪製 MACD 與直方圖 ===//
hline(0, "Zero Line", color=color.new(#787B86, 50))

// 長條圖顏色:
//   - 上方 (hist >= 0) 時:hist 比前一根大 (淺綠) 或小 (深綠)
//   - 下方 (hist < 0)  時:hist 比前一根大 (淺紅) 或小 (深紅)
plot(hist,title="Histogram",style=plot.style_columns,color = hist >= 0? (hist > hist[1]  ? #26A69A : #B2DFDB)   : (hist > hist[1]  ? #FFCDD2 : #FF5252)  )

// 繪製 MACD 與 Signal
plot(macd,   title="MACD",   color=#2962FF)
plot(signal, title="Signal", color=#FF6D00)