
L’idée centrale de cette stratégie est de mettre en place un cadre permettant une sélection flexible des plages de temps de retour, permettant aux utilisateurs de définir automatiquement ou manuellement les heures de début de retour en fonction de leurs besoins.
La stratégie offre quatre options de sélection de la plage de dates via des paramètres d’entrée: utilisation de l’historique complet, des jours les plus récents, des semaines les plus récentes ou des plages de dates manuelles. La stratégie définit dynamiquement la fenêtre de rétroaction en fonction de la plage de dates sélectionnée, tandis que la logique de transaction reste inchangée, ce qui permet de comparer les différences de performances de la stratégie dans différentes fenêtres de temps.
La stratégie est composée d’un module de sélection de la plage de dates de retracement et d’un module de stratégie de négociation de double MA.
La stratégie est un cadre de date de retour générique, flexible et personnalisable pour répondre aux différents besoins de test des utilisateurs. La stratégie peut être rapidement vérifiée et comparée avec une logique de transaction simple et efficace de double MA.
/*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