Stratégie quantitative de croisement de moyennes mobiles filtrées par tendance


Date de création: 2023-12-01 14:25:08 Dernière modification: 2023-12-01 14:25:08
Copier: 0 Nombre de clics: 619
1
Suivre
1619
Abonnés

Stratégie quantitative de croisement de moyennes mobiles filtrées par tendance

Aperçu

La stratégie de quantification de la courbe croisée des moyennes mobiles de filtrage de tendance est une stratégie de négociation de quantification de la courbe moyenne et longue. Cette stratégie permet de juger de la direction de la tendance du marché par la croisée des moyennes mobiles rapides et des moyennes mobiles lentes, et d’entrer dans le marché en supposant une tendance efficace.

Principe de stratégie

La stratégie est basée principalement sur le principe de la croisée des moyennes mobiles. Plus précisément, deux moyennes mobiles de différentes périodes sont calculées séparément, généralement configurées comme une ligne de 20 jours et une ligne de 50 jours. Un signal d’achat est généré lorsque la ligne de 20 jours franchit la ligne de 50 jours de bas en haut et un signal de vente lorsque la ligne de 20 jours franchit la ligne de 50 jours de haut en bas.

En outre, la stratégie définit une moyenne mobile de 200 jours comme indicateur de la tendance globale. Les signaux de croisement simples ci-dessus ne sont considérés comme valides que lorsque le prix franchit la ligne de 200 jours. Cela constitue un mécanisme de filtrage de tendance qui évite de générer une grande quantité de signaux invalides dans le marché composé.

Analyse des forces stratégiques

  1. Les opérateurs d’opérations à long et moyen terme évitent les transactions trop fréquentes, ce qui réduit les coûts de transaction et les risques de glissement.

  2. Le jugement de la transversalité mobile est clair et facile à comprendre.

  3. Le mécanisme de filtrage des tendances permet de filtrer la plupart des signaux inefficaces et d’améliorer le taux de réussite.

  4. Les paramètres de la moyenne mobile peuvent être ajustés de manière flexible pour différentes variétés et périodes de temps.

  5. Il est possible de régler le stop loss pour contrôler les pertes individuelles.

Analyse stratégique des risques

  1. Lorsque les prix oscillent près de la moyenne, il peut y avoir plusieurs signaux inefficaces qui conduisent à une sur-échange.

  2. La moyenne à long terme peut être en retard sur le marché et manquer le tournant de tendance.

  3. Les données historiques plus longues sont nécessaires pour établir des indices de moyennes mobiles, les nouvelles variétés ou les périodes courtes ne peuvent pas être appliquées.

  4. Les paramètres de la stratégie doivent être testés et optimisés à plusieurs reprises.

Les solutions pour faire face aux risques:

  1. Utilisez des moyennes périodiques plus longues ou des conditions de filtrage de tendance supplémentaires.

  2. Il peut être combiné avec d’autres indicateurs pour déterminer les grandes tendances, tels que l’indicateur d’énergie, l’indicateur de volatilité, etc.

  3. Amélioration de l’adaptabilité des paramètres de périodes moyennes mobiles.

  4. Ajout de paramètres d’optimisation et de mécanisme de rétroaction, adaptation dynamique des paramètres de stratégie.

Orientation de l’optimisation de la stratégie

  1. Essayez différents types de moyennes mobiles, comme les moyennes mobiles à poids linéaire.

  2. Ajout d’une fonctionnalité d’adaptation au cycle de la moyenne mobile.

  3. L’efficacité de la croisée des moyennes mobiles est améliorée en combinant les indicateurs de la classe des taux d’oscillation pour juger de la segmentation de la tendance.

  4. Ajout d’algorithmes d’apprentissage automatique pour optimiser automatiquement les paramètres de la stratégie.

  5. Il est possible d’explorer des stratégies de combinaisons multivariées et de tirer profit de la corrélation entre les variétés.

Résumer

Le filtrage de tendance est une stratégie de quantification de la moyenne longue ligne simple et pratique. Elle juge la tendance de la moyenne longue ligne par la croisée de la même ligne, puis la complète avec le filtrage de la tendance pour réduire les signaux inefficaces. La stratégie est facile à comprendre et à mettre en œuvre et convient aux débutants en trading quantifié.

Code source de la stratégie
/*backtest
start: 2023-11-23 00:00:00
end: 2023-11-30 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

////////////////////////////////////////////////////////////////////////////////
// Booz Strategy
// Developed for Godstime
// Version 1.1
// 11/28/2021
////////////////////////////////////////////////////////////////////////////////

//@version=4
strategy("Booz Strategy", "", true)

// ----------------------------- Inputs ------------------------------------- //
source_ma_type = input("EMA", "Source MA Type", options=["SMA", "EMA"])
source_ma_length = input(50, "Source MA Length")
fast_ma_length = input(20, "Fast MA Length")
slow_ma_length = input(50, "Slow MA Length")        
use_trend_filter = input(true, "Trend Filter")
trend_filter_ma_type = input("EMA", "Trend Filter MA Type", options=["SMA", "EMA"])
trend_filter_ma_length = input(200, "Trend Filter MA Period")
show_mas = input(true, "Show MAs")
swing_trading_mode = input(false, "Swing Trading")

// -------------------------- Calculations ---------------------------------- //
fast_ma = ema(close, fast_ma_length)
slow_ma = ema(close, slow_ma_length)
source_ma = source_ma_type == "EMA"? ema(close, source_ma_length): 
                                     sma(close, source_ma_length)
trend_filter_ma = trend_filter_ma_type == "EMA"? ema(close, trend_filter_ma_length): 
                                                 sma(close, trend_filter_ma_length)

// --------------------------- Conditions ----------------------------------- //
uptrend = not use_trend_filter or close > trend_filter_ma
buy_cond = crossover(fast_ma, slow_ma) and uptrend

downtrend = not use_trend_filter or close < trend_filter_ma
sell_cond = crossunder(fast_ma, slow_ma) and downtrend

// ---------------------------- Plotting ------------------------------------ //
bgcolor(use_trend_filter and downtrend? color.red: use_trend_filter? color.green: na)
plot(show_mas? fast_ma: na, "Fast MA", color.green)
plot(show_mas? slow_ma: na, "Slow MA", color.red)
plot(show_mas? source_ma: na, "Source MA", color.purple)
plot(show_mas? trend_filter_ma: na, "Trend Filter MA", color.blue)


// ---------------------------- Trading  ------------------------------------ //
// Inputs
sl_perc = input(1.0, "Stop Loss (in %)", group="Backtest Control")/100
tp_perc = input(1.0, "Take Profit (in %)", group="Backtest Control")/100
leverage = input(10, "Leverage", maxval=100, group="Backtest Control")
bt_start_time = input(timestamp("2021 01 01"), "Backtest Start Time", input.time, group="Backtest Control")
bt_end_time = input(timestamp("2021 12 31"), "Backtest End Time", input.time, group="Backtest Control")

// Trading Window
in_trading_window = true
trade_qty = 1

// Long Side
strategy.entry("Long Entry", strategy.long, trade_qty, when=buy_cond and in_trading_window)
long_tp = strategy.position_avg_price * (1 + tp_perc)
long_sl = strategy.position_avg_price * (1 - sl_perc)
if not swing_trading_mode
    strategy.exit("Long Exit", "Long Entry", limit=long_tp, stop=long_sl)

// Short Side
strategy.entry("Short Entry", strategy.short, trade_qty, when=sell_cond and in_trading_window)
short_tp = strategy.position_avg_price * (1 - tp_perc)
short_sl = strategy.position_avg_price * (1 + sl_perc)
if not swing_trading_mode
    strategy.exit("Short Exit", "Short Entry", limit=short_tp, stop=short_sl)

// End of trading window close
strategy.close_all(when=not in_trading_window)