리소스 로딩... 로딩...

증강된 가격-용량 트렌드 동력 전략

저자:차오장, 날짜: 2025-01-10 15:40:37
태그:MACDATRMAEMASMA

 Enhanced Price-Volume Trend Momentum Strategy

전반적인 설명

이 전략은 MACD 지표와 가격-용량 관계에 기반한 거래 시스템으로, MACD 히스토그램 패턴의 변화를 관찰함으로써 시장 트렌드 반전 지점을 식별합니다. 이 전략은 시장 변동성에 적응하고 위험을 효과적으로 제어하기 위해 ATR 지표를 사용하여 동적 수익 및 스톱 로스 메커니즘을 사용합니다.

전략 원칙

이 전략의 핵심 논리는 MACD 히스토그램의 색상 변화에 기반하고 있으며, 이중 EMA 및 SMA 이동 평균 시스템과 결합되어 있습니다. MACD 히스토그램이 어두운 색에서 밝은 색으로 전환하면 운동량 전환을 나타내고 시스템이 거래를 실행하도록 촉발합니다. 구체적으로: 1. 빠른 (12) 및 느린 (26) 이동 평균을 사용하여 MACD 값을 계산하십시오. 2. 9주기 신호선과 함께 매끄러운 MACD 3. MACD 히스토그램의 색 깊이 변화를 모니터링 4. 14 기간 ATR을 사용하여 동적인 수익 목표를 설정하고 손실을 중지하십시오.

전략적 장점

  1. 과학적으로 결합된 지표, MACD가 트렌드를 효과적으로 포착하고 ATR가 변동성에 적응합니다.
  2. 다양한 시장 특성에 대한 곱셈 매개 변수를 통해 조정할 수 있는 유연한 수익 및 스톱 로스 설정
  3. 히스토그램 색상 변경에 기초한 직관적인 입력 시기를 가진 명확한 거래 신호
  4. 길고 짧은 거래를 수용하고 전략의 다양성 및 수익 기회를 증가

전략 위험

  1. 뒤떨어진 지표로서 MACD는 빠른 시장 움직임에서 최적의 입구 지점을 놓칠 수 있습니다.
  2. 다양한 시장에서 잘못된 신호를 생성하여 빈번한 거래로 이어질 수 있습니다.
  3. 부적절한 ATR 곱기 설정으로 인해 스톱이 너무 느슨하거나 너무 단단해질 수 있습니다.
  4. 과도한 단일 거래 손실을 피하기 위해 적절한 자금 관리가 필요합니다.

전략 최적화 방향

  1. 신호 신뢰성을 향상시키기 위해 부피 확인 신호를 통합합니다.
  2. 트렌드 필터를 추가하여 다양한 시장에서 잘못된 신호를 줄이십시오.
  3. 서로 다른 시간 프레임에 기반한 동적 조정으로 이익 취득 및 중지 손실 곱셈을 최적화
  4. 매우 변동적인 기간 동안 거래 빈도를 줄이기 위해 변동성 필터링을 포함합니다.
  5. 불리한 기간 동안 거래를 피하기 위해 시간 필터를 구현하는 것을 고려하십시오.

요약

이 전략은 고전적인 기술 분석 지표 MACD와 현대적인 위험 통제 방법을 결합한 포괄적인 전략이다. 이 전략은 동적 위험 통제를 위해 ATR을 사용하면서 MACD 히스토그램 패턴 변화를 관찰함으로써 시장 추진력 변화를 포착한다. 이 전략은 명확한 운영 논리와 실용적 가치로 잘 설계되었다. 지속적인 최적화와 개선을 통해 이 전략은 실제 거래 조건에서 더 나은 성과를 낼 수 있다는 것을 보여준다.


/*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)


관련

더 많은