La stratégie de négociation de la moyenne mobile à double coque est une stratégie de négociation quantitative qui utilise la moyenne mobile à double coque comme signaux de négociation.
Au cœur de la stratégie de négociation de la moyenne mobile à double coque se trouve la moyenne mobile à double coque (DHMA). La DHMA se compose de trois lignes: rails intermédiaires, supérieurs et inférieurs, représentant différentes valeurs de prix moyens. Les formules sont:
Le train moyen: mode ((modeSwitch, src, len)
Relèche supérieure: HULP[0]
Chemin de fer inférieur: HULL [2]
Ici, la fonction Mode peut choisir entre différentes variantes de Hull MA comme HMA, EHMA ou THMA. Src signifie la source de prix et len est le paramètre de la période.
La stratégie utilise le rail du milieu de la DHMA comme référence pour déterminer la relation de prix et générer des signaux de négociation:
En d'autres termes, si le prix de clôture de la barre actuelle est supérieur à la valeur du rail du milieu, passez long sur la barre suivante; si le prix de clôture est inférieur, fermez la position longue sur la barre suivante.
La stratégie de négociation des moyennes mobiles à double coque présente les avantages suivants:
Utilise un mécanisme à bandes triples au lieu d'une seule ligne de moyenne mobile pour de meilleurs effets de support/résistance et de suivi de tendance.
Comparativement aux moyennes mobiles classiques, les moyennes mobiles de Hull ont moins de décalage et répondent mieux aux variations de prix.
Adopte les techniques d'analyse technique traditionnelles pour une compréhension facile, adaptée au trading d'algo.
La logique est simple et claire, facile à mettre en œuvre, adaptée au trading algorithmique à haute fréquence.
Des types et paramètres de MA de coque personnalisables pour une optimisation sur différents produits et délais.
Bien qu'elle présente de nombreux avantages, la stratégie comporte également des risques:
Plus de coups de fouet peuvent se produire pendant les marchés latéraux agités.
La stratégie suit principalement les tendances, mais elle est moins efficace pendant les périodes de stagnation.
L'optimisation des paramètres et les indicateurs combinés pourraient atténuer ce retard.
Les signaux fréquents peuvent entraîner un sur-échange.
Voici quelques aspects principaux à optimiser pour la stratégie:
Optimiser les types et les paramètres de MA de coque pour affiner la sensibilité du rail central pour différents produits.
Ajouter des mécanismes d'arrêt des pertes tels que l'arrêt ultérieur ou l'arrêt progressif des pertes pour contrôler le montant des pertes d'une seule transaction.
Combiner avec d'autres indicateurs pour déterminer la direction et la force de la tendance, en évitant les pièges, par exemple MACD, KD, etc.
Ajouter des conditions d'activation de la stratégie basées sur le nombre de transactions ou le taux de profit pour contrôler le nombre de fermetures de cycle, réduisant les sorties.
Utilisez des TF plus élevés pour déterminer la tendance globale afin d'éviter le bruit.
Confirmez les entrées avec des modèles de bougies pour améliorer la certitude d'entrée.
En résumé, la stratégie de trading de moyenne mobile double coque est une approche quantitative utilisant la réponse rapide, la tendance suivant les moyennes mobiles coque pour construire des signaux de trading. Par rapport aux moyennes mobiles traditionnelles, elle a une réponse plus rapide et de meilleures capacités de suivi. La logique de stratégie est simple et claire, facile à automatiser pour le trading algorithmique. Il y a encore des risques de bruits et de tendance suivant les limitations.
/*backtest start: 2022-12-04 00:00:00 end: 2023-12-10 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //Basic Hull Ma Pack tinkered by InSilico //Converted to Strategy by DashTrader strategy("Hull Suite Strategy", overlay=true, pyramiding=1, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0) ////////////////////////////////////////////////////////////////////// // Testing Start dates testStartYear = input(2016, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) //Stop date if you want to use a specific range of dates testStopYear = input(2030, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(30, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false // Component Code Stop ////////////////////////////////////////////////////////////////////// //INPUT HAClose = security(heikinashi(syminfo.tickerid), timeframe.period, close) src = input(close, title="Source") modeSwitch = input("Hma", title="Hull Variation", options=["Hma", "Thma", "Ehma"]) length = input(55, title="Length(180-200 for floating S/R , 55 for swing entry)") switchColor = input(true, "Color Hull according to trend?") candleCol = input(false,title="Color candles based on Hull's Trend?") visualSwitch = input(true, title="Show as a Band?") thicknesSwitch = input(1, title="Line Thickness") transpSwitch = input(40, title="Band Transparency",step=5) //FUNCTIONS //HMA HMA(_src, _length) => wma(2 * wma(_src, _length / 2) - wma(_src, _length), round(sqrt(_length))) //EHMA EHMA(_src, _length) => ema(2 * ema(_src, _length / 2) - ema(_src, _length), round(sqrt(_length))) //THMA THMA(_src, _length) => wma(wma(_src,_length / 3) * 3 - wma(_src, _length / 2) - wma(_src, _length), _length) //SWITCH Mode(modeSwitch, src, len) => modeSwitch == "Hma" ? HMA(src, len) : modeSwitch == "Ehma" ? EHMA(src, len) : modeSwitch == "Thma" ? THMA(src, len/2) : na //OUT HULL = Mode(modeSwitch, src, length) MHULL = HULL[0] SHULL = HULL[2] //COLOR hullColor = switchColor ? (HULL > HULL[2] ? #00ff00 : #ff0000) : #ff9800 //PLOT ///< Frame Fi1 = plot(MHULL, title="MHULL", color=hullColor, linewidth=thicknesSwitch, transp=50) Fi2 = plot(visualSwitch ? SHULL : na, title="SHULL", color=hullColor, linewidth=thicknesSwitch, transp=50) ///< Ending Filler fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch) ///BARCOLOR barcolor(color = candleCol ? (switchColor ? hullColor : na) : na) if HULL[0] > HULL[2] and testPeriod() strategy.entry("long", strategy.long) if HULL[0] < HULL[2] and testPeriod() strategy.close("long")