Stratégie de trading bidirectionnelle à moyenne mobile Hall


Date de création: 2023-12-11 11:30:15 Dernière modification: 2023-12-11 11:30:15
Copier: 0 Nombre de clics: 826
1
Suivre
1621
Abonnés

Stratégie de trading bidirectionnelle à moyenne mobile Hall

Aperçu

La stratégie de négociation en moyenne mobile bi-directionnelle de Hall est une stratégie de négociation quantitative qui utilise la moyenne mobile bi-directionnelle de Hall comme signal de négociation. Cette stratégie s’inspire de la méthode de l’analyse technique traditionnelle qui utilise une seule moyenne mobile. Elle utilise la moyenne mobile bi-directionnelle de Hall pour acheter et vendre aux points de rupture.

Principe de stratégie

Le cœur de la stratégie de négociation des moyennes mobiles à double coque est la moyenne mobile à double coque. La moyenne mobile à double coque est composée de trois lignes de milieu, haut et bas, représentant des moyennes de prix différentes.

La ligne médiane:Mode{modeSwitch, src, len) Nom de fichier: HULL[0] Nom de fichier HULL[2]

La fonction Mode permet de sélectionner différentes variantes de la moyenne mobile de Hull, y compris HMA, EHMA et THMA. La source de prix est représentée par src et la longueur de cycle par len.

La stratégie se base sur la trajectoire médiane d’une moyenne mobile bi-directionnelle de Hall pour déterminer la relation entre les prix et la trajectoire médiane et pour établir des signaux de négociation:

  • Faites plus quand les prix sont à la hausse
  • Le prix de l’or est le prix de l’or, le prix de l’or est le prix de l’or.

C’est-à-dire que si le prix de clôture de la ligne K actuelle est supérieur à la valeur du milieu de la trajectoire, il y a plus à faire lors de l’ouverture de la ligne K suivante; si le prix de clôture de la ligne K actuelle est inférieur à la valeur du milieu de la trajectoire, il y a moins à faire lors de l’ouverture de la ligne K suivante.

Analyse des avantages

Les avantages de la stratégie de négociation en moyenne mobile bidirectionnelle Hall sont les suivants:

  1. L’utilisation d’une zone bidirectionnelle en forme de bande plutôt qu’une seule ligne uniforme a un meilleur effet de support et de résistance et est plus propice au suivi des tendances.

  2. La moyenne mobile de Hull a une latence inférieure à celle des moyennes mobiles générales et réagit plus rapidement aux variations de prix.

  3. Il s’appuie sur des méthodes d’analyse techniques traditionnelles, faciles à comprendre et adaptées à l’automatisation des transactions.

  4. La logique de la stratégie est simple et claire, facile à mettre en œuvre, adaptée aux transactions par algorithmes à haute fréquence.

  5. Les types et paramètres de Hull Mobile Average sont personnalisables et peuvent être optimisés pour différentes variétés et périodes de négociation.

Analyse des risques

Bien qu’il y ait de nombreux avantages à une stratégie de négociation d’une moyenne mobile bidirectionnelle, il y a aussi des risques à prendre en compte:

  1. Il est possible d’avoir plus de stop loss lorsque le prix fluctue. Les paramètres peuvent être ajustés de manière appropriée pour filtrer une partie du bruit de la transaction.

  2. Cette stratégie est basée sur le suivi de tendances et n’est pas efficace lorsque le prix est horizontal. D’autres indicateurs ou mécanismes peuvent être ajoutés pour juger de la tendance.

  3. Les moyennes mobiles de Hull sont elles-mêmes en retard, en particulier à court terme. L’optimisation des paramètres et l’indicateur combiné peuvent être partiellement résolus.

  4. Les signaux de négociation sont fréquents et il est facile d’en faire trop. La gestion des positions et la fréquence des transactions doivent être correctement contrôlées.

Direction d’optimisation

Les principales améliorations apportées à la stratégie de négociation de la moyenne mobile bidirectionnelle Hall sont les suivantes:

  1. Optimiser le type et les paramètres des moyennes mobiles de Hull, en ajustant la sensibilité de la voie médiane pour s’adapter aux différentes variétés de transactions.

  2. Adhésion à un mécanisme de stop-loss. Trailing stop ou stop-loss incrémentiel, pour contrôler efficacement les pertes individuelles.

  3. Combinez avec d’autres indicateurs pour déterminer la direction et la force de la tendance et évitez de vous faire piéger.

  4. Ajouter des conditions d’activation de la stratégie basées sur le nombre de transactions ou le taux de rendement. Contrôler le nombre de cycles de fermeture et réduire les positions nettes.

  5. Combinaison de plusieurs fuseaux horaires. Utilisez des fuseaux horaires plus élevés pour déterminer la direction des tendances et éviter d’être induit en erreur par le bruit.

  6. Optimisation de la logique d’entrée. Basée sur la forme de la bougie, augmentation de la certitude d’entrée.

Résumer

La stratégie de négociation de la moyenne mobile bidirectionnelle de Hall est une stratégie quantitative qui utilise des moyennes mobiles indexées sur la tendance pour construire des signaux de négociation. Comparée aux moyennes mobiles traditionnelles, elle répond plus rapidement et offre un meilleur suivi. La logique de la stratégie est simple et claire, facile à mettre en œuvre et adaptée à la négociation automatisée.

Code source de la stratégie
/*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")