
La stratégie est basée sur le croisement des signaux des moyennes mobiles de Hull. Les moyennes mobiles de Hull sont un indicateur technique destiné à réduire le retard des moyennes mobiles, développé par Alan Hull. La stratégie utilise deux lignes de HMA de différentes périodes, produisant un signal d’achat lorsque les HMA de plus courte période traversent les HMA de plus longue période de bas en haut, et vice versa.
Le processus de calcul de l’HMA est le suivant:
Les moyennes mobiles de Hull ont moins de retard par rapport aux moyennes mobiles simples et aux moyennes mobiles pondérées, et peuvent donc réagir plus rapidement aux variations de prix, ce qui améliore la sensibilité de la stratégie.
Le signal est généré par le croisement de deux lignes HMA de différentes périodes, ce qui permet de filtrer efficacement certains bruits et faux signaux, améliorant ainsi la fiabilité du signal.
Les paramètres sont réglables et peuvent s’adapter à différents marchés et variétés de transactions en ajustant les paramètres cycliques des HMA.
La moyenne mobile de Hull est un indicateur en retard qui peut donner de faux signaux au début d’un renversement de tendance.
Une mauvaise sélection des paramètres peut entraîner une mauvaise performance de la stratégie. Une période trop longue peut ralentir la réponse de la stratégie et une période trop courte peut entraîner un trop grand nombre de faux signaux.
Comme toutes les stratégies basées sur un seul indicateur, cette stratégie peut mal fonctionner en cas de choc des marchés, produisant davantage de faux signaux et de pertes de transactions.
L’introduction d’autres indicateurs techniques ou fondamentaux comme conditions de filtrage, tels que le volume de transactions, les indicateurs de tendance, etc., peut être envisagée pour confirmer davantage l’efficacité du signal croisé HMA.
Pour l’optimisation des paramètres, des méthodes telles que l’algorithme génétique et la recherche de grille peuvent être utilisées pour optimiser les paramètres sur des données historiques afin de trouver la combinaison de paramètres la plus appropriée pour le marché actuel.
L’ajout de mécanismes de stop-loss et de stop-loss dans la stratégie permet de contrôler les risques et les gains d’une transaction unique.
En tenant compte de la tendance du marché, il est possible de juger l’indicateur en introduisant la tendance du marché, de négocier dans un marché tendance et d’éviter les marchés instables.
La stratégie de croisement des moyennes mobiles de Hull est une stratégie de négociation simple et facile à utiliser, qui permet de capturer les variations de prix en temps opportun grâce à la réactivité rapide de l’HMA. Cependant, comme toutes les stratégies, elle a ses limites. La performance est influencée par le type de marché et les choix de paramètres.
/*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)