MACD 기반 다중 시간대 거래 전략


생성 날짜: 2024-01-12 11:46:59 마지막으로 수정됨: 2024-01-12 11:46:59
복사: 0 클릭수: 1114
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

MACD 기반 다중 시간대 거래 전략

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

전략적 원칙: 이 전략은 MACD 지표의 격차선과 신호선의 교차를 사용하여 트렌드 방향을 판단한다. 구체적으로, 그것은 높은 주기적 시간 프레임 (기본 60 분) 에서 MACD 격차선과 신호선을 계산한다. 격차선 상의 신호선을 통과하면 구매 신호가 발생하고, 신호선을 통과하면 판매 신호가 발생하여 전반적인 트렌드 방향을 확인한다.

그러면 전략은 낮은 주기적 시간 프레임 ((현재의 주기) 에서 MACD를 계산하고, 오차 오프라인과 신호선이 교차할 때, 해당 포지션에 진입한다. 따라서 높은 주기는 트렌드 방향을 판단하는데, 낮은 주기는 구체적인 진입점을 찾는 데 사용된다.

이 전략은 또한 기둥 모양의 색상의 변화를 사용하여 트렌드를 판단하는데 도움을 줍니다. 녹색 기둥은 상승하고 붉은 기둥은 하락하고 있습니다.

우위 분석:

  1. 다시계 프레임 디자인, 높은 주기는 트렌드 방향을 결정하고, 낮은 주기는 진입 지점을 찾으며, 체계성이 좋다.

  2. MACD 지표의 교차를 사용하여 매매 시기를 판단하고, 지표 매개 변수가 최적화되어 신호가 신뢰성이 높습니다.

  3. 기둥형 도표의 색상은 현재 트렌드 상태를 판단하는데 도움을 주고, 여러 가지 검증을 형성하고, 의사결정의 정확성을 향상시킨다.

  4. 트렌드를 자동으로 추적하여 인간의 개입이 필요없고, 감정적 판단의 오류를 줄일 수 있습니다.

위험 분석:

  1. MACD는 중·장기 추세를 추적하는 지표로, 단기간에 잘못된 신호가 발생하여 불필요한 손실이 발생할 수 있습니다.

  2. 다시간 프레임워크 전략은 동시에 여러 주기들을 고려해야 하기 때문에, 매개 변수 최적화 및 테스트가 더 어렵다.

  3. 이 전략은 스톱로스가 설정되어 있지 않아 큰 손실을 초래할 수 있습니다.

최적화 방향:

  1. MACD의 매개 변수를 최적화하여 최적의 매개 변수 조합을 찾습니다.

  2. 최대 손실을 제한하기 위해 손해 방지 장치를 추가하십시오.

  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")