
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.
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.
La stratégie présente les avantages suivants par rapport à la stratégie traditionnelle de la moyenne mobile:
Cette stratégie comporte aussi des risques:
La réponse:
La stratégie peut également être optimisée pour:
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.
/*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)