Cette stratégie est une stratégie de trading à court terme basée sur l'indicateur Hull Moving Average. La stratégie utilise la croix dorée et la croix morte des lignes de la Hull Moving Average pour générer des signaux de trading, appartenant à une stratégie de suivi de tendance.
Cette stratégie est principalement basée sur l'indicateur de moyenne mobile Hull. La ligne de moyenne mobile Hull se compose de deux moyennes mobiles. Elle calcule d'abord la ligne moyenne mobile médiane nma du prix, avec une période de hullperiod. Puis elle calcule la ligne moyenne mobile rapide n2ma, avec une période de la moitié des nma
Pour filtrer certains faux signaux, la stratégie introduit également la Hull Line (Hull_Line). La Hull Line est un résultat de régression linéaire de la différence entre nma et n2ma. Lorsqu'il y a divergence entre le prix et la Hull Line, la stratégie sautera le signal de trading.
Plus précisément, les règles stratégiques sont les suivantes:
Calculer le nma, avec la période de la coque
Calculer le n2ma, avec la période moitié de la période nma
Calculer la différence de différence entre n2ma et nma
Moving average the diff with period sqrt ((hullperiod), obtenir et obtenir la ligne de coque
Lorsque le prix dépasse la ligne Hull, un signal d'achat est généré.
Lorsque le prix dépasse la ligne Hull, un signal de vente est généré.
S'il y a une divergence entre le prix et Hull Line, sautez le signal
Entrez avec un certain pourcentage de la position, adoptez un stop loss de sortie
Les avantages de cette stratégie sont les suivants:
Basé sur la moyenne mobile de Hull, il peut rapidement capturer la tendance et suivre la tendance
Utilisez Hull Line pour filtrer les faux signaux et améliorer la qualité du signal
Bon ratio risque-rendement et utilisation appropriée pour les transactions à court terme
Adaptation flexible des paramètres, adaptée aux différents environnements du marché
Adopter l'inversion stop loss, peut arrêter la perte dans le temps et contrôler les risques
Combiner la saisonnalité pour éviter les risques systémiques dans des périodes spécifiques
Cette stratégie comporte également des risques:
Suivre la stratégie de tendance, ne peut pas négocier toute la journée
Perte plus importante en cas d'inversion de tendance
Retard des moyennes mobiles, incapacité de saisir les points tournants en temps opportun
Une fréquence de négociation élevée entraîne des coûts de négociation plus élevés
Des paramètres inappropriés peuvent entraîner une baisse de la rentabilité sur les marchés à fourchette
Pour contrôler ces risques, nous pouvons prendre les mesures suivantes:
Adopter une stratégie de stop loss martingale pour contrôler les pertes uniques
Optimiser les paramètres et tester la robustesse dans différents environnements de marché
Combiner les indicateurs de jugement des tendances afin d'éviter de poursuivre les tendances lors des renversements
Augmenter le temps de rétention pour réduire la fréquence de négociation
Cette stratégie peut également être optimisée dans les aspects suivants:
Combiner les indicateurs de dynamique pour localiser le point de départ des tendances pour une meilleure entrée
Ajouter des modèles d'apprentissage automatique pour aider à juger la direction et la force de la tendance
Adopter des paramètres adaptatifs pour ajuster les paramètres en fonction de la dynamique du marché en temps réel
Configurer des systèmes de coque multi-temporelle, avec différentes tailles de position pour différentes périodes
Combiner les indicateurs de volume pour éviter les fausses ruptures avec un élan insuffisant
Ajout d'un modèle de dimensionnement des positions basé sur la volatilité pour ajuster dynamiquement la taille des positions en fonction de la volatilité
La stratégie de trading de la moyenne mobile Hull est une stratégie de suivi de tendance à court terme efficace. Elle utilise le système de moyenne mobile Hull pour déterminer la direction de la tendance dans le but de suivre la tendance. Par rapport aux systèmes de moyenne mobile unique, elle a une qualité de signal plus élevée et une flexibilité de paramètres. L'avantage de cette stratégie réside dans la capture rapide des changements de tendance avec des retraits relativement faibles. La faiblesse est l'incapacité de faire face aux inversions de tendance.
/*backtest start: 2023-09-06 00:00:00 end: 2023-10-06 00:00:00 period: 6h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // Hull Moving Average Swing Trader by SEASIDE420 strategy("Hull Moving Average Swing Trader", shorttitle="HMA_Swing_Trader", default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_order_fills=true, calc_on_every_tick=true, pyramiding=0) hullperiod = input(title="HullMA Period", type=input.integer, defval=210, minval=1) price = input(open, type=input.source, title="Price data") FromMonth = input(defval=1, title="From Month", minval=1, maxval=12) FromDay = input(defval=1, title="From Day", minval=1, maxval=31) FromYear = input(defval=2020, title="From Year", minval=2017) ToMonth = input(defval=1, title="To Month", minval=1, maxval=12) ToDay = input(defval=1, title="To Day", minval=1, maxval=31) ToYear = input(defval=9999, title="To Year", minval=2017) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) window() => true n2ma = 2 * wma(price, round(hullperiod / 2)) nma = wma(price, hullperiod) diff = n2ma - nma sqn = round(sqrt(hullperiod)) n2ma1 = 2 * wma(price[1], round(hullperiod / 2)) nma1 = wma(price[1], hullperiod) diff1 = n2ma1 - nma1 n1 = wma(diff, sqn) n2 = wma(diff1, sqn) Hull_Line = n1 / n1 * n2 Hull_retracted = if n1 > n2 Hull_retracted = Hull_Line - 2 else Hull_retracted = Hull_Line + 2 c1 = Hull_retracted + n1 - price c2 = Hull_retracted - n2 + price c4 = n1 > n2 ? color.green : color.red c2p = plot(c2, color=color.black, linewidth=1) c3p = plot(price, color=color.black, linewidth=1) fill(c3p, c2p, color=c4, transp=75) //plot(cross(c1, c2) ? c1 : na, style=plot.style_circles, color=c4, linewidth=4) if price < c2 strategy.close("BUY", when=window()) if price > c2 strategy.close("SELL", when=window()) if price > c2 and price[1] > c1 strategy.entry("BUY", strategy.long, when=window()) if price < c1 and price[1] < c2 strategy.entry("SELL", strategy.short, when=window()) // /L'-, // ,'-. ` ```` / L '-, // . _,--dMMMM\ ` ` ` '`.. / '-, // : _,--, )MMMMMMMMM),. ` ,<> /_ '-,' // ; ___,--. \MM( `-' )M//MM\ ,',.; .-'* ; .' // | \MMMMMM) \MM\ ,dM//MMM/ ___ < ,; `. )`--' / // | \MM()M MMM)__ /MM(/MP' ___, \ \ ` `. `. /__, ,' // | MMMM/ MMMMMM( /MMMMP'__, \ | / `. `-,_\ / // | MM /MMM---' `--'_ \ |-' |/ `./ .\----.___ // | /MM' `--' __,- \"" |-' |_, `.__) . .F. )-. // | `--' \ \ |-' |_, _,-/ J . . . J-'-. `-., // | __ \`. | | | \ / _ |. . . . \ `-. F // | ___ / \ | `| ' __ \ | /-' F . . . . \ '` // | \ \ \ / | __ / \ | |,-' __,- J . . . . . \ // | | / |/ __,- \ ) \ / |_,- __,--' |. .__.----,' // | |/ ___ \ |'. |/ __,--' `.-;;;;;;;;;\ // | ___ \ \ | | ` __,--' /;;;;;;;;;;;;. // | \ \ |-'\ ' __,--' /;;;;;;;;;;;;;;\ // \ | | / | __,--' `--;;/ \;-'\ // \ | |/ __,--' / / \ \ // \ | __,--' / / \ \ // \|__,--' _,-;M-K, ,;-;\ // <;;;;;;;; '-;;;; // :D