MACD를 기반으로 한 다중 시간 프레임 거래 전략

저자:차오장, 날짜: 2024-01-12 11:46:59
태그:

img

개요: 이 전략은 MACD 지표를 사용하여 트렌드를 추적하기 위해 여러 시간 프레임에서 거래 신호를 생성합니다. 핵심 아이디어는 더 높은 시간 프레임에서 트렌드 방향을 확인하고 더 낮은 시간 프레임에서 특정 진입 기회를 찾는 것입니다.

전략 원칙: 이 전략은 트렌드 방향을 결정하기 위해 MACD 차이선과 신호선 사이의 교차점을 사용합니다. 구체적으로, 그것은 더 높은 시간 프레임 (예정 60 분) 에서 MACD 차이와 신호선을 계산합니다. 차이선이 신호선을 넘을 때 구매 신호가 생성됩니다. 아래를 넘을 때 전체 트렌드 방향을 확인하기 위해 판매 신호가 생성됩니다.

이 전략은 MACD를 낮은 시간 프레임 (현재 기간) 에서 계산하고 차이와 신호 라인 사이에 크로스오버가 발생하면 포지션을 입력합니다. 따라서 더 높은 시간 프레임은 트렌드 방향을 판단하고 더 낮은 것은 특정 엔트리 포인트를 찾기 위해 사용됩니다.

이 전략은 또한 트렌드를 판단하는 데 도움이되는 MACD 히스토그램의 색상의 변화를 사용합니다. 녹색 바는 상승 추세를 나타내고 빨간 바는 하락 추세를 나타냅니다.

이점 분석:

  1. 멀티 타임프레임 디자인은 높은 TF의 경향을 확인하고 낮은 TF의 항목을 발견하여 시스템성을 향상시킵니다.

  2. MACD 크로스오버를 사용하여 입력 및 출구를 결정합니다. 신뢰할 수있는 신호를 위해 최적화된 매개 변수입니다.

  3. 히스토그램 색상은 현재의 트렌드 상태를 결정하고 의사 결정의 정확성을 향상시키는 데 도움이됩니다.

  4. 트렌드를 자동으로 추적하고 감정적 오류를 줄여줍니다.

위험 분석:

  1. 중장기 트렌드를 추적하는 지표로서 MACD는 짧은 기간 동안 불필요한 손실로 이어지는 잘못된 신호를 생성할 수 있습니다.

  2. 다중 시간 프레임 전략은 여러 기간을 동시에 고려해야하기 때문에 최적화하고 테스트하는 것이 더 어렵습니다.

  3. 큰 손실의 위험을 초래하는 스톱 로스가 설정되지 않습니다.

최적화 방향:

  1. 최고의 조합을 찾기 위해 MACD 매개 변수를 최적화합니다.

  2. 최대 손실을 제한하기 위해 Stop Loss를 추가합니다.

  3. 신호 품질을 향상시키기 위해 다른 필터를 평가하십시오.

  4. 다양한 시간 프레임 조합을 테스트하여 최적의 일치점을 찾습니다.

요약: 이 전략은 체계적으로 잘 설계되어 있으며 중장기 트렌드를 효과적으로 추적하기 위해 MACD 지표의 여러 강점을 결합합니다. 그러나 스톱 로스 메커니즘의 부재는 단기 손실이 쉽게 확장 될 수 있음을 의미합니다. 이는 개선되어야합니다. 전반적으로 강력한 트렌드 추적 기능으로 전략은 양적 거래에서 주식 선택과 의사 결정에 대한 고품질의 틀을 제공합니다. 매개 변수 및 모델의 추가 최적화는 수익 잠재력을 확장하고 안정성을 향상시킬 수 있습니다.


/*backtest
start: 2023-12-12 00:00:00
end: 2024-01-11 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@author : SudeepBisht
//@version=2
strategy(title="SB_CM_MacD_Ult_MTF", shorttitle="SB_CM_Ult_MacD_MTF")
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 ? aqua : histA_IsDown ? blue : histB_IsDown ? red : histB_IsUp ? maroon :yellow :gray
macd_color = macd_colorChange ? macd_IsAbove ? lime : 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=4)
plot(smd and outSignal ? outSignal : na, title="Signal Line", color=signal_color, style=line ,linewidth=2)
plot(sh and outHist ? outHist : na, title="Histogram", color=plot_color, style=histogram, linewidth=4)
plot(sd and cross(outMacD, outSignal) ? circleYPosition : na, title="Cross", style=circles, linewidth=4, color=macd_color)
// hline(0, '0 Line', linestyle=solid, 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, comment="BBandLE")

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


더 많은