Stratégie de négociation quantitative basée sur le MACD normalisé

Auteur:ChaoZhang est là., Date: le 14 septembre 2023
Les étiquettes:

Cet article explique en détail une stratégie de trading quantitative basée sur l'indicateur MACD normalisé.

I. Logique stratégique

L'idée de base de cette stratégie est de normaliser l'indicateur MACD traditionnel afin de réduire les taux d'erreur.

  1. Calculer les moyennes mobiles à court et à long terme de Hull et utiliser leur croisement pour déterminer la direction de la tendance.

  2. Calculer la différence MACD.

  3. Normaliser le MACD sur une certaine période.

  4. Calculer la moyenne mobile du MACD normalisé comme déclencheur.

  5. Allez long lorsque le MACD normalisé dépasse le déclencheur, et allez court lorsqu'il dépasse le déclencheur.

  6. Ajoutez le filtrage de tendance pour éviter de manquer les mouvements majeurs.

  7. Définir un stop loss et un profit pour contrôler le risque par transaction.

La normalisation réduit l'ampleur absolue des différences MACD, réduisant le bruit pour une meilleure qualité du signal.

II. Avantages de la stratégie

Comparé aux stratégies MACD simples, le plus grand avantage est la normalisation, qui peut réduire efficacement les erreurs MACD et améliorer la précision du signal.

Un autre avantage est l'ajout de filtrage de tendance pour éviter les faux retours, ce qui améliore la stabilité de la stratégie.

Enfin, les paramètres stop loss et take profit assurent également un risque-rendement contrôlable par transaction pour une gestion prudente de l'argent.

III. Les faiblesses potentielles

Malgré les optimisations, les risques suivants doivent être pris en compte lors de la négociation dans la pratique:

Tout d'abord, la grande difficulté d'optimisation des paramètres peut entraîner un surajustement si elle est réglée de manière inappropriée.

Deuxièmement, le risque d'arrêter prématurément un stop-loss trop proche.

Enfin, les signaux peuvent être retardés lors des transitions de tendance et ne pas réagir à temps.

IV. Résumé

En résumé, cet article a expliqué une stratégie de trading quantitative qui normalise l'indicateur MACD. Il améliore la stratégie classique MACD pour améliorer efficacement la qualité du signal et intègre des mécanismes de gestion des risques. Mais la difficulté d'optimisation des paramètres et le réglage du stop loss doivent encore être gérés avec prudence. Dans l'ensemble, il fournit une approche viable pour optimiser les stratégies 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)

Plus de