Stratégie de filtrage de la moyenne mobile de Hall


Date de création: 2024-01-04 15:16:34 Dernière modification: 2024-01-04 15:16:34
Copier: 0 Nombre de clics: 623
1
Suivre
1621
Abonnés

Stratégie de filtrage de la moyenne mobile de Hall

Aperçu

La stratégie utilise deux moyennes mobiles de Hall, à court et à long terme, pour générer et filtrer les signaux de transaction. Les moyennes mobiles de Hall à court terme sont utilisées pour générer des signaux, tandis que les moyennes mobiles de Hall à long terme sont utilisées pour filtrer les signaux.

La stratégie utilise simultanément l’indicateur ATR pour définir les arrêts de perte et d’arrêt. Chaque fois que la position est ouverte, le stop-loss et l’arrêt de la position actuelle sont définis dynamiquement en fonction de la valeur de l’ATR.

Principe de stratégie

Les moyennes mobiles à court terme de Hall sont utilisées pour capturer les tendances à court terme et les points de basculement des prix. Lorsque la direction de la moyenne mobile à court terme de Hall change, cela indique que la tendance à court terme des prix a changé.

Les moyennes mobiles de Hall à long terme sont utilisées pour déterminer la tendance générale des prix. Par exemple, lorsque la direction des moyennes mobiles de Hall à long terme est à la hausse, cela indique que les prix sont dans une tendance générale à la hausse.

Un signal de négociation n’est généré que lorsque la moyenne mobile de Hall à court terme est inversée et que son orientation est conforme à la direction de la tendance générale de la moyenne mobile de Hall à long terme. C’est-à-dire que ce signal à court terme n’est négocié que lorsque la tendance générale des prix à court terme est inversée et dans la même direction. Cela permet de filtrer efficacement les signaux erronés causés par le bruit du marché à court terme.

Après avoir ouvert une position, le stop loss et le stop stop sont définis en fonction de la taille de l’indicateur ATR. L’indicateur ATR peut refléter la volatilité et le niveau de risque du marché. La position de stop loss est placée en dessous du point bas du prix, tandis que la position de stop stop est placée au-dessus du point haut du prix et est liée à la valeur de l’ATR.

Analyse des avantages

Cette stratégie, combinant des signaux à court terme et des filtres à long terme, permet d’identifier efficacement les tendances des prix à moyen terme et de capturer les points de basculement en temps opportun. Par rapport à des indicateurs tels que les moyennes mobiles simples, il est possible de réduire la possibilité d’être trompé par le bruit du marché.

La position de stop-loss peut être ajustée de manière dynamique, en fonction de la volatilité du marché, afin d’éviter une position de stop-loss trop radicale et de réduire le risque de perte tout en garantissant la rentabilité.

Grâce aux avantages de la moyenne mobile de Hall, les mouvements de prix peuvent être jugés avec plus de souplesse et de précision, avec une plus grande capacité de suivi que les moyennes mobiles ordinaires.

Analyse des risques

La stratégie repose sur le croisement de deux moyennes mobiles de Hall à court et à long terme comme signal, ce qui peut entraîner une entrée erronée si un faux croisement se produit entre les deux moyennes mobiles. Il faut alors décider de filtrer le signal en fonction de la structure du marché à long terme.

Dans une situation de choc, les prix peuvent basculer dans une plus petite fourchette de transactions, ce qui augmente le taux d’erreur du signal et augmente la probabilité de transactions non significatives. Il est alors possible d’éviter les transactions non significatives en élargissant les conditions de filtrage des signaux de transaction.

Le paramètre de l’arrêt de perte dépend de l’indicateur ATR. Si les fluctuations du marché reflétées par l’indicateur ATR ne sont pas exactes, la position de l’arrêt de perte est également invalidée. Dans ce cas, il peut être envisagé de corriger l’ATR en combinaison avec d’autres indicateurs de volatilité.

Direction d’optimisation

On peut envisager de combiner les signaux avec d’autres indicateurs à court terme, tels que le RSI et les indicateurs de survente et de survente, pour améliorer l’efficacité du filtrage.

Les relations logiques de filtrage entre les moyennes mobiles de Hall à long terme peuvent être ajoutées ou optimisées pour rendre les règles de filtrage plus strictes et éviter les signaux erronés.

Il est possible d’étudier l’impact de différents paramètres sur la stabilité et la rentabilité de la stratégie. Par exemple, différentes combinaisons de paramètres de moyenne mobile, de paramètres ATR, etc. peuvent produire des performances de trading différentes.

Résumer

Cette stratégie utilise la méthode de capture des signaux des moyennes mobiles de Hall à court terme, la méthode de filtrage des signaux des moyennes mobiles de Hall à long terme et l’indicateur ATR pour définir des arrêts de perte, pour former un système de stratégie de suivi de tendance à moyen terme relativement complet. Cette stratégie peut détecter efficacement les points de basculement des prix à mi-parcours et éviter d’être perturbée par le bruit du marché à court terme.

Code source de la stratégie
/*backtest
start: 2023-12-04 00:00:00
end: 2024-01-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Hull Filtered Strategy", overlay=true, pyramiding=0, default_qty_type= strategy.percent_of_equity, default_qty_value = 10, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0)

// Parameters for Hull Moving Averages
src = input(close, title="Source")
signal_period = input(50, title="Period of signal HMA")
filter_period = input(200, title="Period of filter HMA")

strat_dir_input = input(title="Strategy Direction", defval="all", options=["long", "short", "all"])

// Set allowed trading directions
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)

// stop loss and take profit
sl_factor = input(2,title="Stop Loss Factor")
tp_factor = input(3,title="Take Profit Factor")
atr_period = input(14, title="ATR Period (SL/TP)")

// Testing Start dates
testStartYear = input(2010, "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(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)


// -----------------------------------------------------------------------------
// Global variables
// -----------------------------------------------------------------------------
var float tp = na
var float sl = na
var float position = na


// -----------------------------------------------------------------------------
// Functions
// -----------------------------------------------------------------------------
testWindow() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false


// -----------------------------------------------------------------------------
// The engine
// -----------------------------------------------------------------------------
hma_signal = hma(src, signal_period)
hma_filter = hma(src, filter_period)

// Used to determine exits and stop losses
atr_e = atr(atr_period)

// if hma_filter increases hma_trend is set to 1, if it decreases hma_trend is set to -1. If no trend is available, hma_trend is set to ß0
trend = hma_filter > hma_filter[1]  ?  1 : hma_filter < hma_filter[1] ? -1 : 0
signal = hma_signal > hma_signal[1] ? 1 : hma_signal  < hma_signal[1] ? -1 : 0


// -----------------------------------------------------------------------------
// signals
// -----------------------------------------------------------------------------
if signal[0] == 1 and signal[1] != 1 and trend == 1 and testWindow()
    sl := close - sl_factor*atr_e
    tp := close + tp_factor*atr_e
    strategy.entry("HMA_LNG", strategy.long)
    strategy.exit("LE", "HMA_LNG", profit=100*tp_factor*atr_e, loss=100*sl_factor*atr_e)
    
if signal[0] == -1 and signal[1] != -1 and trend == -1 and testWindow()
    sl := close + sl_factor*atr_e
    tp := close - tp_factor*atr_e
    strategy.entry("HMA_SHRT", strategy.short)
    strategy.exit("SE", "HMA_SHRT", profit=100*tp_factor*atr_e, loss=100*sl_factor*atr_e)


if strategy.position_size != 0
    sl := sl[1]
    tp := tp[1]

// -----------------------------------------------------------------------------
// PLOT
// -----------------------------------------------------------------------------
hma_s = plot(hma_signal, title="SIGNAL", color = signal == 1 ? color.green : color.red)
hma_l = plot(hma_filter, title="TREND", color = trend == 1 ? color.green : color.red)

plot(tp, title="TAKE PROFIT", color= strategy.position_size != 0 ? color.blue: na, linewidth=1)  
plot(sl, title="STOP LOSS", color= strategy.position_size != 0 ? color.red: na, linewidth = 1)