
La idea central de esta estrategia es la implementación de un marco que permita la flexibilidad de elegir el rango de tiempo de respuesta, permitiendo al usuario configurar automáticamente o manualmente el tiempo de inicio de la respuesta en función de las diferentes necesidades.
La estrategia ofrece cuatro opciones de selección de rango de fecha a través de la entrada de parámetros: usar todos los datos históricos, los días más recientes especificados, las semanas más recientes especificadas o seleccionar manualmente el rango de fecha. La estrategia configura dinámicamente la ventana de retroalimentación según el rango de fecha seleccionado, mientras que la lógica de negociación se mantiene inalterada, para comparar las diferencias en el rendimiento de la estrategia en diferentes ventanas de tiempo.
La estrategia se compone de un módulo de selección del rango de fechas de retroceso y un módulo de estrategia de negociación de doble MA.
La estrategia, como un marco general para el rango de fechas de retroalimentación, tiene la ventaja de ser flexible y personalizable para satisfacer las diferentes necesidades de prueba de los usuarios. Con una lógica de transacción de doble MA simple y efectiva, la estrategia se puede verificar y comparar rápidamente.
/*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