저자:차오장, 날짜: 2024-01-23 11:22:02
태그:

img

전반적인 설명

이 전략은 MACD 기술 지표의 이중 이동 평균 크로스오버를 기반으로 한 자동화 거래 전략입니다. 트렌드를 따르는 트렌드 방향을 결정하기 위해 MACD의 신호 라인 크로스오버를 사용합니다.

전략 논리

이 전략은 먼저 MACD 지표의 세 라인: 빠른 라인, 느린 라인 및 히스토그램을 계산합니다. 빠른 라인은 짧은 기간 동안 더 빠른 이동 평균이며 느린 라인은 더 긴 기간 동안 더 느린 이동 평균입니다. 히스토그램은 빠른 라인과 느린 라인의 차이입니다. 빠른 라인이 느린 라인을 넘을 때 구매 신호를 나타내는 황금 십자 신호입니다. 빠른 라인이 느린 라인을 넘을 때 판매 신호를 나타내는 죽음의 십자 신호입니다.

이 전략은 이 논리를 활용하여 금색 십자상과 죽음의 십자상에서의 긴 포지션을 취하거나, 자동으로 트렌드를 따르기 위해 죽음의 십자상과 금색 십자상에서의 긴 포지션을 취하거나, 동시에 절대 MACD 라인이 긍정적이거나 부정적인지 판단하여 잘못된 신호를 피하고 트렌드 반전 지점을 진정으로 포착하는 것을 보장합니다.

전략 의 장점

  • 트렌드 방향을 정확하게 결정하고 트렌드 반전을 캡처하기 위해 이중 이동 평균 크로스오버를 사용합니다.
  • MACD 기술 지표는 잘못된 신호를 줄이고 신호 품질을 향상시킵니다.
  • 길거나 짧거나 길거나 짧을 수 있는 유연성
  • 조정 가능한 매개 변수는 다른 시장 환경에 적합합니다.

전략 의 위험

  • 이중 이동 평균 크로스 오버는 후속 효과를 가지고, 반전 초기 부분 수익을 놓칠 수 있습니다.
  • 시장 통합 중 잘못된 신호에 취약한 MACD 지표
  • 파라미터 너무 민감하거나 무활성 방지하기 위해 적절한 조정이 필요합니다

위험 완화:

  • 신호를 필터링하기 위해 다른 지표와 결합
  • 트레이딩 빈도를 낮추는 매개 변수 조정
  • 트렌드가 분명할 때만 전략을 채택하십시오.

개선 영역

이 전략은 다음과 같은 측면에서 향상될 수 있습니다.

  1. KDJ, 볼링거 밴드 등과 같은 다른 지표를 포함 신호를 확인하고 거짓 신호를 필터

  2. 입력 메커니즘을 개선, 예를 들어 조기 또는 늦은 입력을 피하기 위해 브레이크아웃 필터를 추가

  3. 매개 변수 설정을 최적화하고, 다른 시간 프레임과 시장 체제에 따라 빠르고 느린 라인 기간을 조정합니다.

  4. 단일 거래 손실을 제어하기 위해 스톱 손실을 추가하십시오.

  5. 외환, 암호화폐 등과 같은 다른 제품으로 확장

요약

이중 이동 평균 크로스오버 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")


더 많은