이 문서에서는 표준화 MACD 지표에 기반한 양적 거래 전략에 대해 자세히 설명합니다. 이 전략은 고전적인 MACD 전략을 최적화하여 신호 품질을 향상시킵니다.
1 전략
이 전략의 핵심 아이디어는 기존의 MACD 지표들을 통일적으로 처리하여 오류율을 낮추는 것이다. 구체적인 단계는 다음과 같다:
단기 및 장기 헐 이동 평균을 계산하여 대동향을 크로스 관계로 판단합니다.
MACD의 차이를 계산합니다.
MACD 지표에 대해 일정한 주기 내의 통일화 처리를 한다.
통일 MACD의 평균선을 계산하여 거래 트리거를 형성합니다.
통일 MACD 상단 트리거 일률화 할 때 더, 하단 트리거 공백;
그리고, 이러한 추세들을 필터링하여 큰 추세들을 놓치지 않도록 합니다.
단편 거래의 위험을 통제하기 위해 Stop Loss을 설정합니다.
통일화 처리는 MACD 차이의 절대적 폭을 축소하여 노이즈를 줄이고 신호 품질을 향상시킵니다. 추세 필터링은 또한 지역 조정으로 인해 역 동작을 방지합니다. 손실 차단기는 단일 손실을 제어합니다.
2 전략적 장점
이 전략은 간단한 MACD 전략에 비해, 통일 처리, MACD의 오류율을 효과적으로 줄이고 신호의 정확도를 향상시키는 것이 가장 큰 장점이다.
또 다른 장점은 트렌드를 판단하는 필터를 추가하여 트렌드에서 역으로 작동하는 것을 피하는 것입니다. 이것은 전략의 안정성을 강화합니다.
마지막으로, 스톱로스 스톱 조건을 설정하는 것은 각 거래의 리스크/이익을 통제할 수 있도록 하며, 적극적인 자금 관리를 가능하게 한다.
이 전략은 최적화되었지만 실제 사용에서는 다음과 같은 위험도 주의해야 합니다.
우선, 파라미터를 최적화하는 데 어려움이 많고, 부적절한 설정으로 인해 과도한 적합성이 발생할 수 있습니다.
두 번째, 스톱 손실 설정이 너무 가까워지면 손실이 커질 수 있습니다.
마지막으로, 트렌드 변동이 있을 때, 신호는 지연되어서, 적시에 반응할 수 없습니다.
네 가지 내용
이 글은 MACD 지표를 통일적으로 처리하는 한 가지 양적 거래 전략에 대해 자세히 소개한다. 이 전략은 고전적인 MACD 전략을 개선하여 신호 품질을 효과적으로 향상시키고 위험 관리 장치에 가입 할 수 있다. 그러나 여전히 매개 변수 최적화 난이도 및 중지 손실 설정과 같은 문제에 주의해야 한다.
/*backtest
start: 2023-08-14 00:00:00
end: 2023-09-13 00:00:00
period: 6h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
// Normalized MACD but heavily modified by SeaSide420. Normalized MACD v420
strategy("Normalized MACD (v420)",shorttitle="NmacD(v420)",overlay=true, default_qty_type=strategy.percent_of_equity, max_bars_back=1440, default_qty_value=100, calc_on_order_fills= true, calc_on_every_tick=true, pyramiding=0)
p=input(ohlc4)
jah=input(title="HullMA cross",defval=21)
tsp = input(34,title='Trigger')
np = input(50,title='Normalize')
SL = input(defval=-420.00, title="Stop Loss in $", step=1)
TP = input(defval=31.00, title="Target Point in $", step=1)
ot=1
n2ma=2*wma(p,round(jah/2))
nma=wma(p,jah)
diff=n2ma-nma
sqn=round(sqrt(jah))
n2ma1=2*wma(p[2],round(jah/2))
nma1=wma(p[2],jah)
diff1=n2ma1-nma1
sqn1=round(sqrt(jah))
n1=wma(diff,sqn)
n2=wma(diff1,sqn)
sh=n1
lon=n2
ratio = min(sh,lon)/max(sh,lon)
Mac = (iff(sh>lon,2-ratio,ratio)-1)
MacNorm = ((Mac-lowest(Mac, np)) /(highest(Mac, np)-lowest(Mac, np)+.000001)*2)- 1
MacNorm2 = iff(np<2,Mac,MacNorm)
Trigger = wma(MacNorm2, tsp)
Hist =(MacNorm2-Trigger)
Hist2= Hist>1?1:Hist<-1?-1:Hist
teh=MacNorm2+MacNorm2[2]-MacNorm2[1]
closelong = strategy.openprofit<SL or strategy.openprofit>TP or teh[1]<Trigger[1] and n1<n2[1]
if (closelong)
strategy.close("Long")
closeshort = strategy.openprofit<SL or strategy.openprofit>TP or teh[1]>Trigger[1] and n1>n2[1]
if (closeshort)
strategy.close("Short")
longCondition = Trigger<0 and teh>Trigger and MacNorm>Trigger and strategy.opentrades<ot
if (longCondition)
strategy.entry("Long",strategy.long)
shortCondition = Trigger>0 and teh<Trigger and MacNorm<Trigger and strategy.opentrades<ot
if (shortCondition)
strategy.entry("Short",strategy.short)