정규화된 MACD에 기초한 양적 거래 전략

저자:차오장, 날짜: 2023-09-14 20:01:07
태그:

이 문서에서는 표준화 된 MACD 지표에 기반한 양적 거래 전략을 자세히 설명합니다. 신호 품질을 향상시키기 위해 고전적인 MACD 전략을 최적화합니다.

I. 전략 논리

이 전략의 핵심 아이디어는 오류율을 줄이기 위해 전통적인 MACD 지표를 정상화하는 것입니다. 구체적인 단계는 다음과 같습니다.

  1. 짧은 기간과 긴 기간 Hull 이동 평균을 계산하고 트렌드 방향에 대한 교차를 사용합니다.

  2. MACD 차이를 계산합니다.

  3. 특정 기간 동안 MACD를 정상화합니다.

  4. 정상화된 MACD의 이동 평균을 트리거로 계산합니다.

  5. 정상화된 MACD가 트리거를 넘어서면 길게, 그 아래로 넘어가면 짧게

  6. 트렌드 필터링을 추가하여 주요 움직임을 놓치지 않도록 합니다.

  7. 스톱 로스를 설정하고 수익을 취하여 거래 당 위험을 제어합니다.

정상화는 MACD 차이의 절대 크기를 줄여 더 높은 신호 품질을 위해 잡음을 낮추고 트렌드 필터링은 주요 트렌드에 대한 잘못된 반전을 피합니다. 손해를 멈추고 수익을 취하면 거래 당 손실을 제어합니다.

II. 전략의 장점

간단한 MACD 전략에 비해 가장 큰 장점은 정상화이며, 이는 MACD 오류를 효과적으로 줄이고 신호 정확도를 향상시킬 수 있습니다.

또 다른 장점은 트렌드 필터링을 추가하여 잘못된 반전을 방지하는 것입니다. 이것은 전략의 안정성을 향상시킵니다.

마지막으로, 스톱 로스 및 수익 취득 설정은 또한 신중한 돈 관리에 대한 거래 당 제어 가능한 리스크 보상도 보장합니다.

III. 잠재적인 약점

최적화에도 불구하고, 실제 거래에서 다음과 같은 위험을 주의해야 합니다.

첫째로, 큰 매개 변수 최적화 어려움이 부적절하게 설정되면 과장 조정으로 이어질 수 있습니다.

두 번째로, 너무 가까운 스톱 로스를 설정하면 조기 중단될 위험이 있습니다.

마지막으로, 신호는 트렌드 전환 중에 지연되어 시간에 반응하지 않을 수 있습니다.

IV. 요약

요약적으로,이 기사는 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)

더 많은