Stratégie quantitative croisée de filtrage de tendance moyenne mobile

Auteur:ChaoZhang est là., Date: 2023-12-01 14:25:08 Je vous en prie.
Les étiquettes:

img

Résumé

La stratégie quantitative de croisement des moyennes mobiles est une stratégie de négociation quantitative à moyen et long terme. Elle détermine la direction de la tendance du marché par le croisement des moyennes mobiles rapides et lentes, et entre sur le marché sous le prémisse d'identifier une tendance efficace.

La logique de la stratégie

Cette stratégie est principalement basée sur le principe du croisement de la moyenne mobile. Plus précisément, deux moyennes mobiles avec des périodes différentes sont calculées, généralement définies à des lignes de 20 jours et de 50 jours. Un signal d'achat est généré lorsque la ligne de 20 jours dépasse la ligne de 50 jours de bas en haut, et un signal de vente est généré lorsque la ligne de 20 jours dépasse la ligne de 50 jours de haut en bas. Ces signaux de croisement simples sont considérés comme captant les ruptures à moyen et long terme.

En outre, la stratégie définit également une moyenne mobile de 200 jours comme référence globale de tendance. Ce n'est que lorsque le prix franchit la ligne de 200 jours que les signaux croisés simples susmentionnés sont considérés comme valides. Cela constitue un mécanisme de filtrage de tendance pour éviter de générer beaucoup de signaux invalides dans un marché à fourchette.

Analyse des avantages

  1. La fréquence de négociation à moyen et long terme permet d'éviter une négociation excessive, ce qui réduit les coûts de négociation et les risques de glissement.

  2. La détermination des moyennes mobiles croisées est claire, facile à comprendre et à mettre en œuvre.

  3. Le mécanisme de filtrage de tendance peut filtrer la plupart des signaux invalides et améliorer le taux de gain.

  4. L'ajustement flexible des paramètres des moyennes mobiles est applicable à différentes variétés et cycles de temps.

  5. Le stop loss et le take profit peuvent être réglés pour contrôler un seul profit et une seule perte.

Analyse des risques

  1. Lorsque le prix oscille autour des moyennes mobiles, plusieurs signaux invalides peuvent être générés, ce qui entraîne une survente.

  2. Les moyennes mobiles à long cycle peuvent être en retard par rapport au marché et manquer ainsi des points d'inversion de tendance.

  3. Des données historiques relativement longues sont nécessaires pour établir des moyennes mobiles de référence, ce qui rend inapplicables les nouvelles variétés ou les cycles courts.

  4. Les paramètres de stratégie nécessitent des tests et une optimisation répétés, des réglages incorrects peuvent entraîner l'échec de la stratégie.

Réduction des risques:

  1. Adopter des moyennes mobiles à cycle plus long ou augmenter les conditions de filtrage des tendances.

  2. Incorporer d'autres indicateurs pour déterminer la tendance majeure, tels que les indicateurs énergétiques, les indicateurs de volatilité, etc.

  3. Améliorer l'adaptabilité des paramètres des moyennes cycliques mobiles.

  4. Améliorer l'optimisation des paramètres et les mécanismes de rétroaction pour ajuster dynamiquement les paramètres de stratégie.

Optimisation de la stratégie

  1. Essayez différents types de moyennes mobiles, comme la moyenne mobile pondérée linéaire.

  2. Améliorer la fonctionnalité du cycle de la moyenne mobile adaptative.

  3. Incorporer des indicateurs de volatilité pour déterminer les étapes de tendance, améliorant ainsi la validité des croisements de moyennes mobiles.

  4. Introduire des algorithmes d'apprentissage automatique pour optimiser automatiquement les paramètres de stratégie.

  5. Explorez des stratégies de combinaison multi-actifs en utilisant des corrélations entre les actifs pour le profit.

Résumé

La stratégie de croisement des moyennes mobiles est généralement une stratégie quantitative à moyen et long terme simple et pratique. Elle détermine la tendance à moyen et long terme par croisement des moyennes mobiles, puis utilise le filtrage de tendance pour réduire les signaux invalides. Cette stratégie a l'avantage d'être facile à comprendre et à mettre en œuvre, adaptée aux débutants du trading quantitatif. Les domaines d'amélioration potentiels résident dans l'optimisation des moyennes mobiles, ainsi que l'intégration avec d'autres indicateurs et algorithmes d'apprentissage automatique.


/*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)

Plus de