Stratégie de trading à moyenne mobile dynamique


Date de création: 2023-12-21 11:33:50 Dernière modification: 2023-12-21 11:33:50
Copier: 1 Nombre de clics: 736
1
Suivre
1623
Abonnés

Stratégie de trading à moyenne mobile dynamique

Aperçu

Cette stratégie consiste à calculer des moyennes mobiles et à les utiliser comme signaux de trading, en ouvrant des positions plus élevées lorsque le cours des actions augmente et en plaçant des positions plus faibles lorsque le cours des actions diminue. La stratégie combine les avantages de l’indicateur de volume dynamique et des moyennes mobiles pour suivre les tendances à moyen terme des actions et réaliser des gains stables.

Le principe

La stratégie est principalement basée sur trois variantes de Hull Moving Average, comprenant la moyenne mobile ordinaire de Hull (HMA), la moyenne mobile pondérée de Hull (WHMA) et la moyenne mobile indicielle de Hull (EHMA). Selon le code, la stratégie permet à l’utilisateur de basculer entre les trois types de Hull MA.

La formule de calcul de l’HMA est:

HMA = WMA(2*WMA(close,n/2)-WMA(close,n),sqrt(n))

La WMA représente une moyenne mobile pondérée et n représente un paramètre cyclique. La HMA est plus rapide que la SMA (simple moyenne mobile) pour répondre aux variations de prix.

La formule de calcul de WHMA et EHMA est similaire à celle de HMA. La stratégie prend HMA comme option par défaut.

Après avoir calculé la HMA, la stratégie utilise la valeur de la ligne médiane de la HMA comme signal de transaction. Lorsque le prix est au-dessus de la ligne médiane de la HMA, il y a une entrée plus élevée; lorsque le prix est en dessous de la ligne médiane de la HMA, il y a une sortie à zéro. Ainsi, il utilise la ligne médiane de la HMA pour suivre la tendance à moyen terme des prix et réaliser un profit.

Les avantages

La stratégie présente les avantages suivants par rapport à la stratégie traditionnelle de la moyenne mobile:

  1. Plus de rapidité de réponse, plus de capacité de suivi des tendances, d’entrée en jeu en temps opportun et d’arrêt des pertes
  2. Réduire la fréquence des transactions inutiles et éviter les chutes et les chutes
  3. La configuration flexible des paramètres Hull MA permet de s’adapter à un plus large éventail de marchés
  4. Il est possible de basculer entre HMA, WHMA et EHMA pour élargir le champ d’application

Les risques

Cette stratégie comporte aussi des risques:

  1. Il est susceptible de générer plusieurs signaux inefficaces lors d’une correction, ce qui augmente la fréquence des transactions et le coût des points de glissement.
  2. Une mauvaise configuration des paramètres de Hull MA peut manquer le point de basculement de la tendance et augmenter le risque de pertes
  3. Les mauvais choix d’actions, les actions peu liquides, peuvent entraîner des points de glissement importants.

La réponse:

  1. Optimiser le paramètre Hull MA pour trouver la valeur optimale
  2. Le point de basculement de la tendance combiné à d’autres indicateurs
  3. Choisissez des actions qui ont une bonne liquidité et un volume de transactions élevé

Direction d’optimisation

La stratégie peut également être optimisée pour:

  1. Augmentation du volume de transactions ou filtrage d’autres indicateurs pour assurer la fiabilité des signaux de négociation
  2. Combiné à d’autres indicateurs tels que le MACD, le KDJ, etc., il permet de déterminer le moment de l’entrée et d’améliorer les chances de gagner.
  3. Adaptation des paramètres de la période Hull MA en fonction des données de rétro-mesure sur disque dur
  4. Passer à WHMA ou EHMA pour tester les variantes de Hull les plus performantes sur des actions spécifiques
  5. Augmentation de la stratégie de stop-loss pour contrôler les pertes individuelles

Résumer

Cette stratégie de négociation en moyenne mobile intègre les avantages de la réactivité rapide de Hull MA, permet de suivre efficacement les tendances à moyen terme des cours boursiers, d’ouvrir des positions supplémentaires et d’arrêter les pertes au moment opportun, et de bien faire le bilan historique. En optimisant davantage les paramètres de configuration et la gamme d’actions, la stratégie permet d’obtenir des gains supplémentaires plus stables.

Code source de la stratégie
/*backtest
start: 2022-12-14 00:00:00
end: 2023-12-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Position Investing by SirSeff', 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)
strat_dir_input = input.string(title='Strategy Direction', defval='long', options=['long', 'short', 'all'])
strat_dir_value = strat_dir_input == 'long' ? strategy.direction.long : strat_dir_input == 'short' ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)
//////////////////////////////////////////////////////////////////////
// Testing Start dates
testStartYear = input(2000, '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() => true
// Component Code Stop
//////////////////////////////////////////////////////////////////////
//INPUT
src = input(close, title='Source')
modeSwitch = input.string('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.int(40, title='Band Transparency', step=5)

//FUNCTIONS
//HMA
HMA(_src, _length) =>
    ta.wma(2 * ta.wma(_src, _length / 2) - ta.wma(_src, _length), math.round(math.sqrt(_length)))
//EHMA    
EHMA(_src, _length) =>
    ta.ema(2 * ta.ema(_src, _length / 2) - ta.ema(_src, _length), math.round(math.sqrt(_length)))
//THMA    
THMA(_src, _length) =>
    ta.wma(ta.wma(_src, _length / 3) * 3 - ta.wma(_src, _length / 2) - ta.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('Invest', strategy.long)
if HULL[0] < HULL[2] and testPeriod()
    strategy.entry('Pause', strategy.short)