La idea central de esta estrategia es implementar un marco que pueda seleccionar de manera flexible el rango de fechas de backtest para satisfacer las diferentes necesidades de los usuarios, de modo que puedan establecer automáticamente o manualmente los horarios de inicio y finalización de backtest.
La estrategia proporciona cuatro opciones para la selección del rango de fechas a través de parámetros de entrada: utilizando todos los datos del historial, días especificados recientes, semanas especificadas recientes o especificando manualmente un rango de fechas.
La estrategia consta de dos módulos: selección del rango de fechas de backtest y estrategia de negociación de doble MA.
Como un marco flexible y personalizable para la selección del rango de fechas, las ventajas son satisfacer las diferentes necesidades de prueba de los usuarios. Combinado con una lógica de negociación de doble MA simple pero efectiva, puede verificar y comparar rápidamente las estrategias. Las optimizaciones de seguimiento como agregar filtros o lógica de stop loss pueden hacer que la estrategia sea más práctica para el comercio en vivo. En resumen, el marco de estrategia tiene una buena escalabilidad y valor de referencia.
/*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