신호 전략과 MACD 크로스오버

저자:차오장, 날짜: 2023-12-13 16:58:15
태그:

img

전반적인 설명

신호와 함께 MACD 크로스오버 전략은 MACD가 신호선을 넘거나 그 아래에 넘을 때 거래 신호를 생성합니다. 전략은 전형적인 트레일링 스톱 로스 전략에 속하는 주식 가격의 중장기 트렌드의 전환점을 포착하기 위해 이중 이동 평균의 아이디어를 결합합니다.

전략 원칙

이 전략은 먼저 빠른 이동 평균 라인 fastMA와 느린 이동 평균 라인 slowMA를 계산합니다. 빠른 이동 평균 매개 변수는 12 일이고 느린 이동 평균 매개 변수는 26 일입니다. 그 다음 MACD를 형성하기 위해 두 이동 평균 라인 사이의 차이를 계산합니다. 그 다음 신호 라인을 얻기 위해 MACD의 9 일 이동 평균을 계산합니다. 거래 신호는 MACD가 신호 라인 위에 또는 아래에 넘을 때 생성됩니다.

이 전략의 장점은 주식 가격의 중장기 트렌드의 전환점을 포착하는 것입니다. 빠르고 느린 이동 평균의 조합은 단기 가격 변동과 소음을 필터링하고 중장기 가격 추세를 포착 할 수 있습니다. 주식 가격이 중장기 역전을 겪을 때 MACD는 신호선을 뚫고 비교적 명확한 거래 신호를 생성합니다.

이점 분석

시그널 전략과 MACD 크로스오버는 단기적 소음을 필터링하고 장기 및 중장기적 트렌드의 전환점을만 포착하기 위해 이중 이동 평균의 아이디어를 결합합니다. 단일 가격 지표와 비교하면 잘못된 신호를 더 적게 생성 할 수 있습니다.

MACD 자체는 더 민감하며 가격 트렌드 변화에 민감하게 반응할 수 있습니다. 신호 라인의 추가로 더 많은 단기 잘못된 신호를 필터 할 수 있습니다. 중기 트렌드가 크게 변화 할 때만 MACD가 신호 라인을 위아래로 돌파하면 신호가 생성됩니다.

지속가능한 상승 추세에서 MACD는 대부분의 시간 동안 신호선 위에 유지되며, 그 과정에서 여러 기회를 포착 할 수 있습니다. 마찬가지로 지속 가능한 하락 추세에서 MACD는 또한 긴 / 짧은 패턴을 유지하며 짧은 신호를 적시에 줄 수 있습니다.

위험 분석

전략 구매 및 판매 신호는 이동 평균의 교차에 전적으로 의존하기 때문에 시장이 크게 변동하면 더 많은 잘못된 신호가 생성되어 빈번한 스톱 손실이 발생합니다. 전략의 실제 이익과 손실은 기대에 부응하지 않을 수 있습니다.

신호 라인을 뚫는 것은 중장기 트렌드가 바뀌었다는 것을 반드시 보장하지 않습니다. 구매 신호로 단일 기술 지표에만 의존하는 것은 특정 맹인이 있으며 타이밍이 충분히 정확하지 않을 수 있습니다.

끊임없이 변화하는 시장에서 두 개의 이동 평균의 크로스오버만을 기준으로 사용하면 더 많은 거래 기회를 놓칠 수 있습니다. 더 복잡한 강력한 추세에서는이 전략도 크게 뒤쳐질 것입니다.

최적화 방향

  1. 유동성 및 변동성 필터링 지표를 추가하여 개시 빈도를 줄이고 비효율적인 거래를 피합니다. 거래 부피를 추가하거나 이동 평균 매개 변수를 동적으로 조정하는 등.

  2. 신호 품질을 향상시키기 위해 여러 가지 다른 기술적 지표를 결합하여 지표 포트폴리오를 형성합니다. 단기 및 중장기 지표의 조합은 시장 구조를 보다 포괄적으로 판단 할 수 있습니다.

  3. 기계 학습 알고리즘을 추가하여 현재 시장 환경에 더 적합한 매개 변수와 주의 임계치를 훈련시켜 인간의 개입을 줄입니다.

  4. VIX와 다른 공포 지수를 결합하여 시장 추세와 변동성을 예측하고 MACD 기회를 더 잘 활용하기 위해 매개 변수를 동적으로 조정합니다.

결론

시그널과 함께 MACD 크로스오버 전략은 트레이딩 신호를 생성하기 위해 이중 이동 평균 크로스오버의 원리를 사용합니다. 빠른 이동 평균과 느린 이동 평균의 차이에 따라 가격 그래프를 그리면 중장기 가격 트렌드 변화가 명백한 특징을 갖게됩니다. 신호 라인의 추가로 소음 신호도 효과적으로 필터링됩니다. 전략은 비교적 명확한 중장기 트렌드 반전을 포착하는 데 몇 가지 장점을 가지고 있습니다. 그러나 MACD와 신호 라인의 크로스오버는 시장 구조의 근본적인 변화를 완전히 결정할 수 없으며 거래 신호는 신중하게 처리해야합니다. 다른 기술적 지표와 함께 사용하는 것이 권장되며 기계 학습 최적화도 고려 할 수 있습니다.


/*backtest
start: 2022-12-06 00:00:00
end: 2023-12-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@author : SudeepBisht
//@version=2
strategy(title="MACD with Signal", shorttitle="MACD_with_Signal")
source = close
useCurrentRes = input(true, title="Use Current Chart Resolution?")
resCustom = input(title="Use Different Timeframe? Uncheck Box Above", defval="60")
smd = input(true, title="Show MacD & Signal Line? Also Turn Off Dots Below")
sd = input(true, title="Show Dots When MacD Crosses Signal Line?")
sh = input(true, title="Show Histogram?")
macd_colorChange = input(true,title="Change MacD Line Color-Signal Line Cross?")
hist_colorChange = input(true,title="MacD Histogram 4 Colors?")

res = useCurrentRes ? timeframe.period : resCustom

fastLength = input(12, minval=1), slowLength=input(26,minval=1)
signalLength=input(9,minval=1)

fastMA = ema(source, fastLength)
slowMA = ema(source, slowLength)

macd = fastMA - slowMA
signal = sma(macd, signalLength)
hist = macd - signal

outMacD = request.security(syminfo.tickerid, res, macd)
outSignal = request.security(syminfo.tickerid, res, signal)
outHist = request.security(syminfo.tickerid, res, hist)

histA_IsUp = outHist > outHist[1] and outHist > 0
histA_IsDown = outHist < outHist[1] and outHist > 0
histB_IsDown = outHist < outHist[1] and outHist <= 0
histB_IsUp = outHist > outHist[1] and outHist <= 0

//MacD Color Definitions
macd_IsAbove = outMacD >= outSignal
macd_IsBelow = outMacD < outSignal

plot_color = hist_colorChange ? histA_IsUp ? green : histA_IsDown ? lime : histB_IsDown ? red : histB_IsUp ? maroon :yellow :gray
macd_color = macd_colorChange ? macd_IsAbove ? green : red : red
signal_color = macd_colorChange ? macd_IsAbove ? yellow : yellow : lime

circleYPosition = outSignal
 
plot(smd and outMacD ? outMacD : na, title="MACD", color=macd_color, linewidth=3)
plot(smd and outSignal ? outSignal : na, title="Signal", color=blue, style=line ,linewidth=1)
plot(sh and outHist ? outHist : na, title="", color=plot_color, style=columns, linewidth=4)
//plot(sd and cross(outMacD, outSignal) ? circleYPosition : na, title="Cross", style=circles, linewidth=4, color=macd_color)
hline(0, '0 Line',  linewidth=2, color=white)

macd_chk=smd and outMacD ? outMacD : na
checker=smd and outSignal ? outSignal : na
if (crossover(macd_chk,checker))
    strategy.entry("BBandLE", strategy.long)

if (crossunder(macd_chk, checker))
    strategy.entry("BBandSE", strategy.short)


더 많은