이 전략은 MACD 기술 지표의 이중 이동 평균 크로스오버를 기반으로 한 자동화 거래 전략입니다. 트렌드를 따르는 트렌드 방향을 결정하기 위해 MACD의 신호 라인 크로스오버를 사용합니다.
이 전략은 먼저 MACD 지표의 세 라인: 빠른 라인, 느린 라인 및 히스토그램을 계산합니다. 빠른 라인은 짧은 기간 동안 더 빠른 이동 평균이며 느린 라인은 더 긴 기간 동안 더 느린 이동 평균입니다. 히스토그램은 빠른 라인과 느린 라인의 차이입니다. 빠른 라인이 느린 라인을 넘을 때 구매 신호를 나타내는 황금 십자 신호입니다. 빠른 라인이 느린 라인을 넘을 때 판매 신호를 나타내는 죽음의 십자 신호입니다.
이 전략은 이 논리를 활용하여 금색 십자상과 죽음의 십자상에서의 긴 포지션을 취하거나, 자동으로 트렌드를 따르기 위해 죽음의 십자상과 금색 십자상에서의 긴 포지션을 취하거나, 동시에 절대 MACD 라인이 긍정적이거나 부정적인지 판단하여 잘못된 신호를 피하고 트렌드 반전 지점을 진정으로 포착하는 것을 보장합니다.
위험 완화:
이 전략은 다음과 같은 측면에서 향상될 수 있습니다.
KDJ, 볼링거 밴드 등과 같은 다른 지표를 포함 신호를 확인하고 거짓 신호를 필터
입력 메커니즘을 개선, 예를 들어 조기 또는 늦은 입력을 피하기 위해 브레이크아웃 필터를 추가
매개 변수 설정을 최적화하고, 다른 시간 프레임과 시장 체제에 따라 빠르고 느린 라인 기간을 조정합니다.
단일 거래 손실을 제어하기 위해 스톱 손실을 추가하십시오.
외환, 암호화폐 등과 같은 다른 제품으로 확장
이중 이동 평균 크로스오버 MACD 트렌드 추적 전략은 신호 라인 크로스오버와 결합하여 트렌드 방향을 결정하고 자동 트렌드 추적을 위해 신호를 효과적으로 필터하고 트렌드 반전을 캡처하기 위해 MACD 지표를 사용합니다. 장점은 정확한 트렌드 판단, 시장 환경에 맞춰 유연한 매개 변수 조정입니다. 잘못된 신호를 피하기 위해 위험 관리는 중요합니다. 추가 기술 지표와 매개 변수 조정으로 추가 최적화는 전략 성능을 향상시킬 수 있습니다.
/*backtest start: 2023-01-16 00:00:00 end: 2024-01-22 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © DeMindSET //@version=4 strategy("MACD Trend Follow Strategy", overlay=false) // Getting inputs LSB = input(title="Long/Short", defval="Long only", options=["Long only", "Short only" , "Both"]) fast_length = input(title="Fast Length", type=input.integer, defval=12) slow_length = input(title="Slow Length", type=input.integer, defval=26) src = input(title="Source", type=input.source, defval=close) signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9) sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false) sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false) // Plot colors col_grow_above = #26A69A col_grow_below = #FFCDD2 col_fall_above = #B2DFDB col_fall_below = #EF5350 col_macd = #0094ff col_signal = #ff6a00 // Calculating fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length) slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length) macd = fast_ma - slow_ma signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length) hist = macd - signal plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 ) plot(macd, title="MACD", color=col_macd, transp=0) plot(signal, title="Signal", color=col_signal, transp=0) // Bull= macd > signal Bear= macd < signal ConBull=macd>0 ConBear=macd<0 // Green= Bull and ConBull Red= Bear and ConBear Yellow= Bull and ConBear Blue= Bear and ConBull // bcolor = Green ? color.green : Red ? color.red : Yellow ? color.yellow : Blue ? color.blue : na barcolor(color=bcolor) // === INPUT BACKTEST RANGE === FromYear = input(defval = 2019, title = "From Year", minval = 1920) FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2009) ToMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true // create function "within window of time" if LSB == "Long only" and Green strategy.entry("L",true) if LSB == "Long only" and Red strategy.close("L",qty_percent=100,comment="TP Long") if LSB == "Both" and Green strategy.entry("L",true) if LSB == "Both" and Red strategy.entry("S",false) if LSB == "Short only" and Red strategy.entry("S",false) if LSB == "Short only" and Green strategy.close("S",qty_percent=100,comment="TP Short")