Estrategia de selección de rango temporal de backtesting adaptativo basada en superposición de doble media móvil


Fecha de creación: 2024-01-05 12:12:10 Última modificación: 2024-01-05 12:12:10
Copiar: 0 Número de Visitas: 589
1
Seguir
1621
Seguidores

Estrategia de selección de rango temporal de backtesting adaptativo basada en superposición de doble media móvil

Descripción general

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.

Principio de estrategia

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.

Módulo de selección del rango de fecha de detección

  1. Se ofrecen cuatro opciones de rango de fechas: todos los datos históricos (ALL), días recientes (DAYS), semanas recientes (WEEKS) y rango de fechas manual (MANUAL).
  2. Dependiendo del rango seleccionado, el tiempo de inicio y finalización se mide a través de la configuración dinámica de la conversión de la barra de tiempo.
  3. Utiliza la función de condiciones de tiempo window() para filtrar las líneas K, sólo en el rango de fechas seleccionadas.

Módulo de estrategia de comercio de doble MA

  1. El MA rápido es fastMA, por defecto 14; el MA lento es slowMA, por defecto 28.
  2. Cuando el MA rápido atraviesa el MA lento, haga más; cuando el MA rápido atraviesa el MA lento, ponga en pie.
  3. Dibujar la curva de MA rápidamente.

Análisis de las ventajas estratégicas

  1. Se puede elegir con flexibilidad diferentes intervalos de tiempo de respuesta, sin restricciones, para satisfacer diferentes necesidades experimentales.
  2. Se puede probar el efecto de diferentes parámetros de ciclo en el mismo período de tiempo, con resultados comparables.
  3. La modificación de la lógica de las transacciones es simple y se puede usar como un marco para otras estrategias.
  4. Las estrategias de doble MA son sencillas y fáciles de entender.

Análisis de riesgos y soluciones

  1. Las estrategias de doble MA son más ásperas y hay problemas de compra y venta frecuentes. Se puede considerar la inclusión de optimizaciones como el mecanismo de detención de pérdidas.
  2. Se debe tener cuidado al configurar manualmente el rango de fechas para evitar el uso de fechas incorrectas.
  3. El exceso de tiempo de retrospectiva de todo el historial aumenta el período de prueba. Se puede considerar aumentar el punto de deslizamiento o reducir las comisiones para las transacciones frecuentes.

Dirección de optimización de la estrategia

  1. Aumentar el juicio lógico de stop loss y reducir el riesgo de pérdidas.
  2. Se incluye un filtro de bolsa de acciones, preferencia por acciones con una alta correlación con el índice, y mejora la estabilidad.
  3. Aumentar los filtros de las señales de transacción, filtrando las señales que no son estables en un determinado período, reduciendo las transacciones innecesarias.
  4. Prueba el rendimiento de las acciones relacionadas con los diferentes índices de clasificación para encontrar la mejor variedad.

Resumir

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.

Código Fuente de la Estrategia
/*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