He escrito una estrategia comercial de muestra usando Machine Learning. Puede aprovechar esto para mejorarlo aún más. El código está en Python, por lo que si está familiarizado con el lenguaje, debería poder entenderlo fácilmente.
Le mostraré cómo implementar una estrategia comercial utilizando las predicciones de régimen realizadas en el blog anterior. Léalo, hay un descuento especial para usted al final de esto.
Sin embargo, hay una cosa que debe tener en cuenta antes de leer este blog: el algoritmo es solo para demostración y no debe utilizarse para el comercio real sin una optimización adecuada.
Permítanme comenzar explicando la agenda del blog:
- Cree un algoritmo de ML (aprendizaje automático) sin supervisión para predecir los regímenes.
- Trace estos regímenes para visualizarlos.
- Entrene un algoritmo de clasificador de vectores de soporte con el régimen como una de las características.
- Utilice este algoritmo de clasificador de vectores de soporte para predecir la tendencia del día actual en la apertura del mercado.
- Visualice el rendimiento de esta estrategia en los datos de prueba.
- Código descargable para su beneficio
Importar las bibliotecas y los datos:
Primero, importé las bibliotecas necesarias. Tenga en cuenta que he importado el paquete fix_yahoo_finance, por lo que puedo extraer datos de yahoo. Si no tiene este paquete, le sugiero que lo instale primero o cambie su fuente de datos a google.
Luego, extraje los datos de la misma cita, ‘SPY’, que usamos en el blog anterior y los guardé como un marco de datos df. Elegí el período de tiempo para que estos datos sean del año 2000.
Después de esto, creé indicadores que pueden usarse como características para entrenar el algoritmo.
Pero, antes de hacer eso, decidí el período de tiempo para estos indicadores. Elegí un período de retrospectiva de 10 días. Puede probar cualquier otro número que le convenga. Elegí 10 para verificar las últimas 2 semanas de datos comerciales y para evitar el ruido inherente a los períodos de retrospectiva más pequeños.
Además del período de retrospectiva, decidamos también la división del tren de pruebas de los datos. Prefiero dar el 80% de datos para capacitación y el 20% restante para pruebas. Puede cambiar esto según su necesidad.
Luego, cambié las columnas Alta, Baja y Cerrar por 1, para acceder solo a los datos pasados. Después de esto, creé varios indicadores técnicos como RSI, SMA, ADX, Correlación, SAR parabólico y el Retorno de los últimos 1 día en una base abierta.
A continuación, imprimí el marco de datos.
Y se veía así:
Como puede ver, hay muchos valores de NaN. Necesitamos imputarlos o dejarlos caer. Si eres nuevo en el aprendizaje automático y quieres aprender sobre la función de imputer, lee esto. Dejé caer los valores de NaN en este algoritmo.
En la siguiente parte del código, creé una instancia de la función StandardScaler y creé un algoritmo de aprendizaje no supervisado para hacer la predicción del régimen. He discutido esto en mi blog anterior, por lo que no volveré a entrar en estos detalles nuevamente.
Hacia el final del último blog, imprimí los valores de Media y Covarianza para todos los regímenes y tracé los regímenes. El nuevo resultado con indicadores como conjunto de características se vería así:
Luego, escalé el marco de datos de Regímenes, excluyendo las columnas Fecha y Regímenes, creadas en el código anterior y las guardé nuevamente en las mismas columnas. Al hacerlo, no perderé ninguna característica, pero los datos se escalarán y estarán listos para entrenar el algoritmo clasificador de vectores de soporte. Luego, creé una columna de señal que actuaría como los valores de predicción. El algoritmo se entrenaría en el conjunto de características para predecir esta señal.
A continuación, ejemplifiqué un clasificador de vectores de soporte. Para esto, utilicé el mismo modelo SVC utilizado en el ejemplo de sklearn. No he optimizado este clasificador de vectores de soporte para los mejores hiperparámetros. En el curso de aprendizaje automático sobre Quantra ™, hemos discutido ampliamente cómo utilizar hiperparámetros y optimizar el algoritmo para predecir los máximos y mínimos diarios, a su vez la volatilidad del día.
Volviendo al blog, el código para el clasificador de vectores de soporte es el siguiente:
A continuación, dividí los datos de prueba del algoritmo de régimen no supervisado en datos de prueba y de tren. Utilizamos estos nuevos datos de tren para entrenar nuestro algoritmo clasificador de vectores de soporte. Para crear los datos del tren, eliminé las columnas que no forman parte del conjunto de características:
‘Señal’, ‘Retorno’, ‘market_cu_return’, ‘Fecha’
Luego ajusto los conjuntos de datos X e y al algoritmo para entrenarlo.
Luego, calculé el tamaño del conjunto de prueba e indicé las predicciones de acuerdo con el marco de datos df.
La razón para hacer esto es que los valores de retorno originales de ‘SPY’ se almacenan en df, mientras que aquellos en Regímenes se escalan, por lo tanto, no serán útiles para tomar una suma acumulativa para verificar el rendimiento.
Luego, guardé las predicciones hechas por el SVC en una columna llamada Pred_Signal.
Luego, en base a estas señales, calculé los retornos de la estrategia multiplicando la señal al comienzo del día con el retorno en la apertura (porque nuestros retornos son de abierto a abierto) del día siguiente.
Finalmente, calculé los rendimientos acumulativos de la estrategia y los rendimientos acumulados del mercado y los guardé en df. Luego, calculé la relación de nitidez para medir el rendimiento. Para obtener una comprensión clara de esta métrica, tracé el rendimiento para medirlo.
El resultado final se ve así.
Después de tanto código y esfuerzo, si el resultado final se ve así, entonces alguien sin experiencia en aprendizaje automático diría que no vale la pena. Estaría de acuerdo por ahora. Pero mira esta línea de código:
Acabo de cambiar los datos de SPY a IBM. Entonces el resultado se ve así:
Sé lo que estás pensando: solo estoy ajustando los datos para obtener los resultados. Lo cual no está del todo mal. Te mostraré otra acción y luego tú decides.
Cambié el stock a Freeport-McMoRan Inc y el resultado se ve así:
Puede cambiarlo más a GE u otra cosa y verificarlo usted mismo. Esta estrategia funciona en algunas acciones pero no en otras, como es el caso de la mayoría de las estrategias cuantitativas. Hay algunas razones por las cuales el algoritmo funcionó de manera consistente y enumeraré algunas de ellas aquí.
- Sin autocorrelación de devoluciones
- Sin optimización de hiperparámetros de Vector de soporte
- Sin propagación de error
- Sin selección de funciones
No hemos verificado la autocorrelación de los retornos, lo que habría aumentado la previsibilidad del algoritmo. Intente eso por su cuenta desplazando la columna de devoluciones por 1 y pasándola como conjunto de características. El resultado se vería así:
Aunque la mejora de 3.4 a 3.49 no es mucha, sigue siendo una buena característica.
Tenga en cuenta que el código se ejecutará mejor con Python 2.7
Espero que haya entendido bien la máquina de vectores de soporte utilizada en el comercio. Hemos cubierto este tema ampliamente en nuestro último curso de aprendizaje automático ‘Trading with Machine Learning: Classification and SVM’, donde obtendrá una buena comprensión de las técnicas de clasificación utilizadas en Machine Learning. Este curso forma parte del paquete de 3 cursos ‘Trading With Machine Learning’. Este paquete cubre estrategias sobre regresión, clasificación y SVM. El paquete ofrece un descuento del 30%, haga clic aquí para saber más.
Este es solo un ejemplo de juguete, y no está destinado para el comercio real.