이 전략은 MACD 지표와 가격-용량 관계에 기반한 거래 시스템으로, MACD 히스토그램 패턴의 변화를 관찰함으로써 시장 트렌드 반전 지점을 식별합니다. 이 전략은 시장 변동성에 적응하고 위험을 효과적으로 제어하기 위해 ATR 지표를 사용하여 동적 수익 및 스톱 로스 메커니즘을 사용합니다.
이 전략의 핵심 논리는 MACD 히스토그램의 색상 변화에 기반하고 있으며, 이중 EMA 및 SMA 이동 평균 시스템과 결합되어 있습니다. MACD 히스토그램이 어두운 색에서 밝은 색으로 전환하면 운동량 전환을 나타내고 시스템이 거래를 실행하도록 촉발합니다. 구체적으로: 1. 빠른 (12) 및 느린 (26) 이동 평균을 사용하여 MACD 값을 계산하십시오. 2. 9주기 신호선과 함께 매끄러운 MACD 3. MACD 히스토그램의 색 깊이 변화를 모니터링 4. 14 기간 ATR을 사용하여 동적인 수익 목표를 설정하고 손실을 중지하십시오.
이 전략은 고전적인 기술 분석 지표 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)