Stratégie de sélection de la plage de dates adaptative des tests antérieurs basée sur la double MA

Auteur:ChaoZhang est là., Date: 2024-01-05 12h10
Les étiquettes:

img

Résumé

L'idée de base de cette stratégie est de mettre en œuvre un cadre permettant de sélectionner de manière flexible la plage de dates de backtest pour répondre aux différents besoins des utilisateurs, de sorte qu'ils puissent définir automatiquement ou manuellement les heures de début et de fin du backtest.

La stratégie fournit quatre options pour la sélection d'une plage de dates par le biais de paramètres d'entrée: en utilisant toutes les données de l'historique, les derniers jours spécifiés, les dernières semaines spécifiées ou en spécifiant manuellement une plage de dates.

Principe de stratégie

La stratégie est composée de deux modules: la sélection de la fourchette de dates de backtest et la stratégie de négociation de double MA.

Module de sélection de la plage de dates de test arrière

  1. Fournit quatre options pour la sélection de la plage de dates: toutes les données de l'historique (ALL), les derniers jours spécifiés (DAYS), les dernières semaines spécifiées (WEEKS), la plage de dates spécifiée manuellement (MANUAL).
  2. Définit dynamiquement l'heure de début et de fin du backtest en fonction de la conversion de l'horodatage de la plage sélectionnée.
  3. Utilise la fonction de fenêtre de condition de temps pour filtrer les bougies et effectue uniquement des backtests dans la plage de dates sélectionnée.

Module de stratégie de négociation en double MA

  1. La période de mise à jour rapide est la période de mise à jour rapide, par défaut 14; la période de mise à jour lente est la période de mise à jour lente, par défaut 28.
  2. Position longue lorsque la MA rapide traverse la MA lente; position proche lorsque la MA rapide traverse la MA lente.
  3. Il trace des courbes MA rapides et lentes.

Analyse des avantages

  1. Sélectionne de manière flexible différentes gammes de dates de backtest sans limitation pour répondre aux différents besoins expérimentaux.
  2. Peut tester les effets de différents paramètres de période dans le même laps de temps avec comparabilité des résultats.
  3. Facile à modifier la logique de trading pour servir de cadre à d'autres stratégies.
  4. Une stratégie simple à comprendre, facile pour les débutants.

Analyse des risques et solutions

  1. La stratégie Double MA est crue avec des problèmes d'achat/vente fréquents.
  2. Le réglage manuel de la plage de dates nécessite une attention particulière pour éviter les erreurs.
  3. L'expérience de test de retour prolongée augmente le cycle de test.

Directions pour l'optimisation de la stratégie

  1. Ajoutez une logique de stop loss pour réduire le risque de perte.
  2. Filtrez les stocks avec des stocks groupés par forte pertinence pour une plus grande stabilité.
  3. Ajouter des filtres pour éliminer les signaux instables dans certaines périodes afin de réduire les transactions inutiles.
  4. Test des performances des indices des stocks pour trouver les meilleures variétés.

Conclusion

En tant que cadre flexible et personnalisable pour la sélection de la plage de dates, les avantages sont de répondre aux différents besoins de test des utilisateurs. Combiné avec une logique de trading double MA simple mais efficace, il peut rapidement vérifier et comparer les stratégies. Des optimisations de suivi telles que l'ajout de filtres ou une logique de stop loss peuvent rendre la stratégie plus pratique pour le trading en direct. En résumé, le cadre de stratégie a une bonne évolutivité et une bonne valeur de référence.


/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title = "How To Auto Set Date Range", shorttitle = " ", overlay = true)

// Revision:        1
// Author:          @allanster 

// === INPUT MA ===
fastMA = input(defval = 14, title = "FastMA", type = input.integer, minval = 1, step = 1)
slowMA = input(defval = 28, title = "SlowMA", type = input.integer, minval = 1, step = 1)

// === INPUT BACKTEST RANGE ===
useRange     = input(defval = "WEEKS", title = "Date Range", type = input.string, confirm = false, options = ["ALL", "DAYS", "WEEKS", "MANUAL"])
nDaysOrWeeks = input(defval = 52, title = "# Days or Weeks", type = input.integer, minval = 1)
FromMonth    = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay      = input(defval = 15, title = "From Day", minval = 1, maxval = 31)
FromYear     = input(defval = 2019, title = "From Year", minval = 2014)
ToMonth      = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay        = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
ToYear       = input(defval = 9999, title = "To Year", minval = 2014)

// === FUNCTION EXAMPLE ===
window() => true

// === LOGIC ===
buy  = crossover(sma(close, fastMA), sma(close, slowMA))         // buy when fastMA crosses over slowMA
sell = crossunder(sma(close, fastMA), sma(close, slowMA))        // sell when fastMA crosses under slowMA

// === EXECUTION ===
strategy.entry("L", strategy.long, when=window() and buy)        // buy long when "within window of time" AND crossover
strategy.close("L", when=window() and sell)                      // sell long when "within window of time" AND crossunder         

// === PLOTTING ===
plot(sma(close, fastMA), title = 'FastMA', color = color.aqua, linewidth = 2, style = plot.style_line)    // plot FastMA
plot(sma(close, slowMA), title = 'SlowMA', color = color.yellow, linewidth = 2, style = plot.style_line)  // plot SlowMA


Plus de