Stratégie de croisement de la moyenne mobile de la coque

Auteur:ChaoZhang est là., Date: 2024-03-22 14:57:10 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie est basée sur les signaux croisés de la moyenne mobile de Hull (HMA). La moyenne mobile de Hull est un indicateur technique développé par Alan Hull, qui vise à réduire le décalage des moyennes mobiles traditionnelles.

Principe

  1. Calcul de la moyenne mobile de la coque

L'HMA est calculée comme suit:

  • Tout d'abord, calculer la moyenne mobile pondérée (WMA) du prix avec une période de la moitié du paramètre d'entrée longueur
  • Ensuite, calculer la WMA de la WMA précédente avec une période de longueur
  • Utilisez la formule suivante: HMA = 2 * WMA (longueur/2) - WMA (longueur)
  • Calculez à nouveau la WMA du résultat ci-dessus avec un point de la racine carrée de longueur pour obtenir la HMA finale
  1. Génération de signaux de négociation
  • Lorsque le prix de clôture dépasse le HMA, un signal d'achat est généré
  • Lorsque le prix de clôture dépasse le niveau HMA, un signal de vente est généré.
  1. Exécution de transactions basée sur des signaux
  • Signal d' achat: ouvrir une position longue
  • Signal de vente: ouvrir une position courte

Les avantages

  1. Comparé à la moyenne mobile simple et à la moyenne mobile pondérée, la moyenne mobile Hull a moins de décalage, elle peut donc réagir plus rapidement aux variations de prix, améliorant ainsi la réactivité de la stratégie.

  2. En utilisant le croisement de deux HMA avec des périodes différentes pour générer des signaux, beaucoup de bruit et de faux signaux peuvent être filtrés efficacement, ce qui améliore la fiabilité des signaux.

  3. Les paramètres sont réglables: en ajustant les paramètres périodiques des HMA, la stratégie peut être adaptée à différents marchés et instruments de négociation.

Les risques

  1. La moyenne mobile Hull est un indicateur à retardement, qui peut générer de faux signaux dans les premiers stades d'un renversement de tendance.

  2. Une sélection inappropriée des paramètres peut entraîner une mauvaise performance de la stratégie.

  3. Comme toutes les stratégies basées sur un seul indicateur, cette stratégie peut ne pas bien fonctionner sur les marchés latéraux, générant plus de faux signaux et des transactions perdantes.

Directions d'optimisation

  1. Il convient d'envisager d'introduire d'autres indicateurs techniques ou facteurs fondamentaux comme filtres, tels que le volume des transactions, les indicateurs de tendance, etc., afin de confirmer davantage la validité des signaux croisés HMA.

  2. Pour l'optimisation des paramètres, des méthodes telles que les algorithmes génétiques et la recherche par grille peuvent être utilisées pour trouver la combinaison optimale de paramètres sur les données historiques qui convient le mieux au marché actuel.

  3. Incorporer des mécanismes de stop-loss et de take-profit dans la stratégie pour contrôler le risque et le rendement de chaque transaction.

  4. En introduisant des indicateurs pour juger des tendances du marché, on peut négocier sur des marchés en tendance et éviter les marchés latéraux.

Résumé

La stratégie Hull Moving Average Crossover est une stratégie de trading simple et facile à utiliser. Avec la caractéristique de réponse rapide de HMA, elle peut capturer les changements de prix en temps opportun. Cependant, comme toutes les stratégies, elle a également ses limites et sa performance sera affectée par les types de marché et la sélection des paramètres. Dans l'application pratique, elle peut être combinée avec d'autres méthodes d'analyse pour confirmer davantage les signaux.


/*backtest
start: 2023-03-16 00:00:00
end: 2024-03-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//Basic Hull Ma Pack tinkered by InSilico 
strategy("RKTD BETA - Hull Suite by InSilico", overlay=true)

//INPUT
src = input(close, title="Source")
modeSwitch = input("Ehma", title="Hull Variation", options=["Hma", "Thma", "Ehma"])
length = input(200, title="Length(180-200 for floating S/R , 55 for swing entry)")
lengthMult = input(1.0, title="Length multiplier (Used to view higher timeframes with straight band)")

useHtf = input(false, title="Show Hull MA from X timeframe? (good for scalping)")
htf = input("240", title="Higher timeframe", type=input.resolution)

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)

// Alert Messages
longAlertMessage = '{"base": "BTC", "quote": "USDT", "price": ' + tostring(close) + ', "action": "long", "orderType": "market", "close":true}'
shortAlertMessage = '{"base": "BTC", "quote": "USDT", "price": ' + tostring(close) + ', "action": "short", "orderType": "market", "close":true}'

//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, int(length * lengthMult))
HULL = useHtf ? security(syminfo.ticker, htf, _hull) : _hull
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)
alertcondition(crossover(MHULL, SHULL), title="Hull trending up.", message="Hull trending up.")
alertcondition(crossover(SHULL, MHULL), title="Hull trending down.", message="Hull trending down.")
///< Ending Filler
fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch)
///BARCOLOR
barcolor(color = candleCol ? (switchColor ? hullColor : na) : na)

// Define Buy and Sell Conditions based on crossovers
buyCondition = crossover(MHULL, SHULL)
sellCondition = crossunder(MHULL, SHULL)

// Plotting the Hull Moving Average (HMA)
plot(MHULL, title="MHULL", color=hullColor, linewidth=thicknesSwitch)
plot(SHULL, title="SHULL", color=hullColor, linewidth=thicknesSwitch, transp=transpSwitch)
fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch)

// Execute Strategy based on Buy and Sell Conditions
strategy.entry("Buy", strategy.long, when=buyCondition, alert_message=longAlertMessage)
strategy.entry("Sell", strategy.short, when=sellCondition, alert_message=shortAlertMessage)

// Additional elements like bar coloring remain unchanged
barcolor(color = candleCol ? (switchColor ? hullColor : na) : na)


Plus de