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.
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.
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