2 votos

El "backtesting" de las señales de trading y de los precios históricos no funciona correctamente

¿Cómo se puede hacer un backtesting adecuado y visualizar su estrategia utilizando sus señales de trading y los precios históricos donde las señales de trading son 1 para largo, 0 para sin posición -1 para corto?

Obviamente, el resultado final debe ser algo así, este visual se origina a partir de una simple estrategia de media móvil de "Python for Finance" enter image description here

Mi estrategia no es la misma, sin embargo, ya que las señales de comercio son sólo 1s y -1s esperaría ser capaz de obtener un resultado similar, sin embargo, cuando trato de usar el siguiente código, obtengo el siguiente gráfico, y no tengo absolutamente ninguna idea de por qué.

data['XONRETURNS'] = np.log(data['XON'] / data['XON'].shift(1))  
data['XONSTRATEGY'] = (data['POSITIONXON'].shift(1)) * (data['XONRETURNS'])
ax = data[['XONRETURNS', 'XONSTRATEGY']].cumsum().apply(np.exp).plot(figsize=(10, 6))

XON es simplemente los datos de precios en bruto y la estrategia XON está utilizando las señales de negociación, es decir, POSITIONXON. enter image description here

Mi sospecha es que los retornos o algo relacionado con la toma del registro (o no) está causando este problema?

Las respuestas generales sobre el backtesting de las señales de trading también serán muy útiles para poder empezar desde cero si es necesario.

Muchas gracias.

1voto

smiley Puntos 26

Hay un montón de código abierto por ahí que puede apuntar en la dirección correcta.

  • Moonshot es un backtester vectorizado desarrollado por QuantRocket que utiliza 1, -1 y 0 para las señales. La página web base.py tiene funciones que convierten los DataFrames de señales en posiciones y las posiciones en retornos.
  • Carta de la Luna es una biblioteca de visualización adjunta. Consulte la utilidades.py para ver un ejemplo de cómo convertir una Serie o DataFrame de rendimientos en rendimientos acumulados.
  • Empírico es otra biblioteca con funciones de utilidad similares a las de Moonchart para calcular los rendimientos acumulados, el ratio de Sharpe, la CAGR, etc. Fue desarrollada por la ya desaparecida empresa Quantopian. Consulte el stats.py para la mayoría de las funciones básicas.
  • Empyrical es utilizado como una biblioteca de ayuda por Pyfolio una biblioteca de visualización que también fue desarrollada por Quantopian.

Todos estos paquetes se basan en las bibliotecas estándar de ciencia de datos de Python (pandas, numpy, matplotlib, etc). Probablemente no sea necesario instalar los paquetes en sí, sino que basta con extraer fragmentos de código relevantes que muestren cómo calcular las distintas métricas de rendimiento.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X