Estrategia de selección del rango de fechas de ensayo posterior adaptativo basada en el doble MA

El autor:¿ Qué pasa?, Fecha: 2024-01-05 12:12:10
Las etiquetas:

img

Resumen general

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.

Principio de la estrategia

La estrategia consta de dos módulos: selección del rango de fechas de backtest y estrategia de negociación de doble MA.

Modulo de selección de rango de fecha de prueba posterior

  1. Proporciona cuatro opciones para la selección del rango de fechas: todos los datos de historial (ALL), días especificados recientes (DAYS), semanas especificadas recientes (WEEKS), rango de fechas especificado manualmente (MANUAL).
  2. Establece dinámicamente la hora de inicio y finalización de la prueba posterior basada en la conversión de la marca de tiempo del rango seleccionado.
  3. Utiliza la función de la ventana de condiciones de tiempo para filtrar las velas y solo realizar pruebas de retroceso dentro del rango de fechas seleccionado.

Modulo de estrategia de negociación de doble MA

  1. El período de MA rápido es fastMA, por defecto 14; el período de MA lento es slowMA, por defecto 28.
  2. Posición larga cuando el MA rápido cruza el MA lento; posición cerrada cuando el MA rápido cruza el MA lento.
  3. Traza curvas de MA rápidas y lentas.

Análisis de las ventajas

  1. Selecciona de manera flexible diferentes rangos de fechas de backtest sin limitación para satisfacer diferentes necesidades experimentales.
  2. Puede probar los efectos de diferentes parámetros de período dentro del mismo período de tiempo con comparabilidad de resultados.
  3. Fácil de modificar la lógica de negociación para servir como marco para otras estrategias.
  4. Sencilla de entender estrategia de doble MA, fácil para los principiantes.

Análisis de riesgos y soluciones

  1. La estrategia de doble MA es cruda con problemas frecuentes de compra / venta. Considere agregar stop loss, etc. para la optimización.
  2. La configuración manual del rango de fechas requiere precaución para evitar errores.
  3. Los retrospectivos de larga historia aumentan el ciclo de prueba.

Direcciones para la optimización de la estrategia

  1. Agregue la lógica de stop loss para reducir el riesgo de pérdida.
  2. Las existencias de filtro se agrupan por fuerte relevancia del índice para una mayor estabilidad.
  3. Añadir filtros para eliminar señales inestables dentro de ciertos períodos para reducir las operaciones innecesarias.
  4. Prueba de los índices de las existencias para encontrar las mejores variedades.

Conclusión

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


Más.