Análisis de datos de series temporales y pruebas de retroceso de datos de tick

El autor:- ¿ Por qué?, Creado: 2023-01-06 15:27:16, Actualizado: 2023-09-20 10:12:15

img

Análisis de datos de series temporales y pruebas de retroceso de datos de tick

Datos de las series temporales

Las series temporales se refieren a las series de datos obtenidas en un intervalo continuo de tiempo igual. En la inversión cuantitativa, estos datos se reflejan principalmente en el precio y el movimiento de los puntos de datos del objeto de inversión rastreado. Por ejemplo, para los precios de las acciones, los datos de las series temporales registrados regularmente dentro de un período de tiempo especificado pueden referirse al siguiente gráfico, que dará a los lectores una comprensión más clara:

img

Como se puede ver, la fecha está en el eje x y el precio se muestra en el eje y. En este caso, intervalo de tiempo continuo significa que los días en el eje x están separados por 14 días: note la diferencia entre el 7 de marzo de 2005 y el siguiente punto, 31 de marzo de 2005, 5 de abril de 2005, y 19 de abril de 2005.

Sin embargo, cuando usa datos de series temporales, a menudo verá más que solo este tipo de datos que solo contienen dos columnas: fecha y precio. En la mayoría de los casos, usará cinco columnas de datos: período de datos, precio de apertura, precio más alto, precio más bajo y precio de cierre. Esto significa que si su período de datos está configurado en el nivel diario, los cambios de precios altos, abiertos, bajos y cerrados del día se reflejarán en los datos de esta serie temporal.

¿Qué son los datos de Tick?

Los datos de tick son la estructura de datos de comercio más detallada en el intercambio. También es una forma extendida de los datos de series temporales mencionados anteriormente, que incluyen: precio de apertura, precio más alto, precio más bajo, último precio, cantidad de operaciones y facturación. Si los datos de transacción se comparan con un río, los datos de tick son los datos del río en una determinada sección transversal.

Cada acción de las bolsas extranjeras se empujará al mercado en tiempo real, mientras que el cambio doméstico comprueba dos veces por segundo. Si hay acciones en este período, se generará una instantánea y se empujará. En comparación, el empuje de datos solo se puede considerar como OnTime en el mejor de los casos, no OnTick.

Todos los códigos y la adquisición de datos de series temporales en este tutorial se completarán en la plataforma FMZ Quant.

Marque los datos de la cantidad de FMZ

Aunque los datos de Tick domésticos no son un Tick real, puede ser infinitamente cercano y restaurar la realidad al menos mediante el uso de estos datos para backtesting.

img

No solo eso, en el FMZ Quant, incluso si los datos con un período de 1 hora se cargan, la granularidad de los datos aún se puede ajustar, como ajustar la granularidad de los datos a 1 minuto. En este momento, la línea K de 1 hora se compone de datos de 1 minuto. Por supuesto, cuanto menor sea la granularidad, mayor será la precisión. Lo que es más poderoso es que si cambia los datos a un bot real Tick, puede restaurar el entorno real del bot sin problemas. Es decir, los datos reales del Tick Exchange de dos veces por segundo.

img

Ahora que has aprendido los conceptos básicos que necesitas entender para completar este tutorial.

Establecer el entorno de trabajo

Las mejores herramientas hacen un buen trabajo. Necesitamos implementar primero un docker en la plataforma FMZ Quant. En cuanto al concepto de un docker, los lectores con experiencia en programación pueden imaginarlo como un sistema Docker oficialmente empaquetado, que ha encapsulado las interfaces API públicas de varios intercambios convencionales y los detalles técnicos de la redacción de estrategias y backtesting. La intención original de establecer este sistema es hacer que los operadores cuantitativos se centren en la redacción y diseño de estrategias al usar la plataforma FMZ Quant. Estos detalles técnicos se presentan a los escritores de estrategias en una fórmula encapsulada para ahorrarles mucho tiempo y esfuerzo.

  • Implementación del sistema de docking de la plataforma FMZ Quant Hay dos métodos para implementar un docker:

Método A: Los usuarios pueden alquilar o comprar servidores ellos mismos y implementarlos en varias plataformas de computación en la nube, como AWS, Alibaba Cloud, Digital Ocean y Google Cloud. La ventaja es que se garantiza tanto la seguridad de la estrategia como la seguridad del sistema. Para la plataforma FMZ Quant, se alienta a los usuarios a utilizar este método. La implementación distribuida elimina el peligro oculto de ataques de servidores (ya sea el cliente o la propia plataforma).

Método B: Utilice el servidor público de la plataforma FMZ Quant para la implementación, la plataforma proporciona cuatro ubicaciones para la implementación en Hong Kong, Singapur, Japón y el este de los Estados Unidos. Los usuarios pueden implementar de acuerdo con la ubicación del intercambio que desean operar y el principio de proximidad. La ventaja de este aspecto es que es simple y fácil de completar con un solo clic, lo que es especialmente adecuado para usuarios principiantes. No necesita saber muchas cosas sobre la compra de servidores Linux, y también ahorra tiempo y energía al aprender comandos de Linux. El precio es relativamente barato. Para los usuarios con fondos pequeños, la plataforma recomienda usar este método de implementación.

img

Para que los principiantes lo entiendan, este artículo adoptará el método B.

Las operaciones específicas son:FMZ.COM, haga clic en Tablero de control, Docker, y haga clic en Alquilar un VPS docker con un solo clic para alquilar el docker.

Introduzca la contraseña, como se muestra a continuación después de la implementación exitosa:

img

  • La relación entre el concepto de sistema robótico y el docker Como se mencionó anteriormente, el docker es como un sistema docker, y un sistema docker es como un conjunto de estándares. Hemos implementado este conjunto de estándares. A continuación, necesitamos generar una instancia para este estándar, que es un robot.

Crear un robot es muy simple. Después de implementar el docker, haga clic en la columna Bot a la izquierda, haga clic en Agregar bot, complete un nombre en el nombre de la etiqueta y seleccione el docker recién implementado. Los parámetros y el período de línea K a continuación se pueden establecer de acuerdo con la situación específica, principalmente en coordinación con la estrategia comercial.

img

Hasta ahora, nuestro entorno de trabajo se ha construido. Se puede ver que es muy simple y eficaz, y cada función realiza sus propias funciones. A continuación, comenzaremos a escribir una estrategia cuantitativa.

Implementar una estrategia EMA simple en Python

Hemos mencionado los conceptos de datos de series temporales y datos Tick arriba. A continuación, utilizamos una estrategia EMA simple para vincular los dos conceptos.

  • Principio básico de la estrategia de la EMA

A través de una EMA de período lento, como la EMA de 7 días, y una EMA de período rápido, como la EMA de 3 días. Se aplican al mismo gráfico de línea K. Cuando la EMA de período rápido cruza la EMA de período lento, la llamamos Cruz de Oro; Cuando la EMA de período lento baja a través de la EMA de período rápido, la llamamos Cruce bajista.

La base para abrir una posición es abrir posiciones largas con una Cruz Dorada, y abrir posiciones cortas con un Cruce bajista.

Vamos a abrir.FMZ.COM, inicie sesión en la cuenta, panel de control, biblioteca de estrategias, y cree una nueva estrategia. Seleccione Python en el lenguaje de escritura de estrategias en la esquina superior izquierda. A continuación se muestra el código de esta estrategia. Cada línea tiene comentarios detallados. Tome su tiempo para entender. Esta estrategia no es una estrategia de bot real. No experimente con dinero real. El propósito principal es darle una idea general de la escritura de estrategias y una plantilla para aprender.

import types # Import the Types module library, which is designed to handle the various data types that will be used in the code.

def main(): # The main function, where the strategy logic begins.
    STATE_IDLE = -1 # Mark position status variables
    state = STATE_IDLE # Mark the current position status
    initAccount = ext.GetAccount() # The spot digital currency trading class library (python version) is used here. Remember to check it when writing the strategy to obtain the initial account information.
    while True: # Enter the loop
        if state == STATE_IDLE : # Here begins the logic of opening positions.
            n = ext.Cross(FastPeriod,SlowPeriod) # The indicator crossover function is used here, for details please see: https://www.fmz.com/strategy/21104.
            if abs(n) >= EnterPeriod : # If n is greater than or equal to the market entry observation period, the market entry observation period here is to prevent positions from being opened indiscriminately as soon as the market opens.
                opAmount = _N(initAccount.Stocks * PositionRatio,3) # Opening position quantity, for the usage of _N, please check the official API documentation.
                Dict = ext.Buy(opAmount) if n > 0 else ext.Sell(opAmount) # Create a variable to store the open position status and execute the open position operation.
                if Dict :  # Check the dict variable and prepare for the following log output.
                    opAmount = Dict['amount']
                    state = PD_LONG if n > 0 else PD_SHORT # Both PD_LONG and PD_SHORT are global constants used to represent long and short positions, respectively.
                    Log("Details of opening positions",Dict,"Cross-period",n) # Log information
        else: # Here begins the logic of closing positions.
            n = ext.Cross(ExitFastPeriod,ExitSlowPeriod) # The indicator crossover function.
            if abs(n) >= ExitPeriod and ((state == PD_LONG and n < 0) or (state == PD_SHORT and n > 0)) : # If the market exit observation period has passed and the current account status is in the position status, then you can determine the Golden Cross or Bearish Crossover.
                nowAccount = ext.GetAccount() # Refresh and get account information again.
                Dict2 = ext.Sell(nowAccount.Stocks - initAccount.Stocks) if state == PD_LONG else ext.Buy(initAccount.Stocks - nowAccount.Stocks) # The logic of closing a position is to close the long position if it is a long position and close the short position if it is a short position.
                state = STATE_IDLE # Mark the position status after closing positions.
                nowAccount = ext.GetAccount() # Refresh and get account information again.
                LogProfit(nowAccount.Balance - initAccount.Balance,'money:',nowAccount.Balance,'currency:',nowAccount.Stocks,'The details of closing positions',Dict2,'Cross-over period:',n) # Log information
        Sleep(Interval * 1000) # Pause the loop for one second to prevent the account from being restricted due to too fast API access frequency.
  • Pruebas de retroceso de la estrategia de la EMA En la página de edición de la estrategia, hemos terminado de escribir la estrategia. A continuación, necesitamos hacer pruebas de retroceso de la estrategia para ver cómo se desempeña en el mercado histórico. Las pruebas de retroceso desempeñan un papel importante en cualquier desarrollo de estrategia cuantitativa, pero solo pueden usarse como una referencia importante. Las pruebas de retroceso no son iguales a la garantía de ganancias, porque el mercado está cambiando constantemente, y las pruebas de retroceso son solo un acto de retrospectiva, que todavía pertenece a la categoría de inducción, el mercado es deductivo.

Si hace clic en backtest, puede ver que hay muchos parámetros ajustables, que se pueden modificar directamente. Para el futuro, la estrategia es cada vez más compleja, y los parámetros son cada vez más. Este método de modificación puede ayudar a los usuarios a evitar la molestia de modificar el código uno por uno, que es conveniente, rápido y claro.

img

Las siguientes opciones de optimización pueden optimizar los parámetros establecidos automáticamente. El sistema probará varios parámetros óptimos para ayudar a los desarrolladores de estrategias a encontrar la opción óptima.

A partir de los ejemplos anteriores, podemos ver que la base del comercio cuantitativo es a través del análisis de datos de series temporales y la interacción de backtesting de datos de tick. No importa cuán compleja sea la lógica, no se puede separar de estos dos elementos básicos. La diferencia es solo la diferencia de dimensiones. Por ejemplo, las transacciones de alta frecuencia requieren aspectos de datos más detallados y más datos de series temporales. Otro ejemplo es el comercio de arbitraje, que requiere muchos datos de la muestra de backtest. Puede requerir datos continuos y profundos de dos objetos comerciales durante más de diez años para averiguar los resultados estadísticos de su expansión y reducción del margen de interés. En futuros artículos, introduciré estrategias de comercio de alta frecuencia y de arbitraje una tras otra. Por favor, espere con interés.


Relacionados

Más.