
Una serie temporal es una secuencia de datos obtenidos en períodos de tiempo consecutivos igualmente espaciados. En la inversión cuantitativa, estos datos se manifiestan principalmente como el movimiento de precios y puntos de datos de los objetivos de inversión que se siguen. Por ejemplo, los precios de las acciones, datos de series temporales registrados regularmente durante un período de tiempo específico, se pueden ver en la siguiente figura, que brindará a los lectores una comprensión más clara:

Como puede ver, la fecha está en el eje x y el precio en el eje y. En este caso, “intervalos consecutivos” significa que los días en el eje x están separados por 14 días: Nótese la diferencia entre el 7 de marzo de 2005 y el siguiente punto, el 31 de marzo de 2005 y el 5 y el 19 de abril de 2005.
Sin embargo, cuando trabajas con datos de series de tiempo, a menudo verás más que solo columnas de fecha y precio. La mayor parte del tiempo trabajará con datos que contienen cinco columnas: Período de datos, Apertura, Máximo, Mínimo y Cierre. Esto significa que si su período de datos se establece en el nivel diario, los cambios de precios máximos, de apertura, mínimos y de cierre del día se reflejarán en los datos de esta serie de tiempo.
Los datos de ticks son la estructura de datos de transacciones más detallada en el intercambio. También es una forma extendida de los datos de series de tiempo mencionados anteriormente, que incluye: precio de apertura, precio más alto, precio más bajo, último precio, volumen de operaciones y monto de la transacción. Si los datos comerciales se comparan con un río, los datos de ticks son los datos del río en una determinada sección transversal.

Como se muestra en la figura anterior, cada acción de las divisas se enviará al mercado en tiempo real. Las centrales nacionales verifican dos veces por segundo. Si hay alguna acción durante este período, se genera una instantánea y se envía. En comparación, el envío de datos solo puede considerarse, en el mejor de los casos, como OnTime, y no puede llamarse OnTick.
Todos los códigos y datos de series de tiempo para este tutorial se obtienen en la plataforma cuantitativa de Inventor.
Aunque los datos de ticks domésticos no son ticks verdaderos, usar estos datos para realizar pruebas retrospectivas puede al menos aproximarse infinitamente a la realidad y restaurarla. Cada tick muestra los principales parámetros del producto en el mercado en ese momento, y en el mercado real, nuestro código se calcula de acuerdo con la tasa de tick teórica de 2 veces por segundo.

No solo eso, en Inventor Quantification, incluso si carga datos con un período de 1 hora, aún puede ajustar la granularidad de los datos, como por ejemplo ajustar la granularidad de los datos a 1 minuto. En este momento, la línea K de 1 hora está compuesta por datos de 1 minuto. Por supuesto, cuanto menor sea el tamaño de las partículas, mayor será la precisión. Lo que es aún más poderoso es que si cambias los datos a ticks en tiempo real, puedes restaurar sin problemas el entorno en tiempo real. Es decir, los datos reales del intercambio se verifican dos veces por segundo.

Ahora ya comprende los conceptos básicos que necesita saber para completar este tutorial. Volveremos a estos conceptos en breve y aprenderá más sobre ellos más adelante en este tutorial.
Para obtener más información sobre esta parte, visite: https://www.fmz.com/bbs-topic/1651
Para hacer bien el trabajo, primero hay que afinar las herramientas. Necesitamos implementar un custodio en la plataforma cuantitativa Inventor. En cuanto al concepto de custodio, los lectores con experiencia en programación pueden pensar en él como un sistema Docker empaquetado oficialmente. El sistema tiene encapsuló las interfaces API públicas de varios intercambios principales y los detalles técnicos para la redacción de estrategias y pruebas retrospectivas. La intención original de establecer este sistema es liberar a los operadores cuantitativos de la necesidad de centrarse en la redacción y el diseño de estrategias cuando utilizan la plataforma cuantitativa Inventor. Estos detalles técnicos se presentan a los autores de estrategias en un formato empaquetado para ahorrarles la molestia de una gran cantidad de Tiempo y energía.
Hay dos formas de implementar el host:
Método A: Los usuarios alquilan o compran servidores ellos mismos y los implementan en las principales 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. En el caso de la plataforma cuantitativa Inventor, se recomienda a los usuarios que utilicen este método. Esta implementación distribuida elimina el riesgo de ataques al servidor (ya sea para los clientes o para la propia plataforma).
Para esta parte, los lectores pueden consultar: https://www.fmz.com/bbs-topic/2848
Método B: Utilizar la implementación del servidor público de la plataforma cuantitativa Inventor. La plataforma ofrece implementación en Hong Kong, Londres y Hangzhou. Los usuarios pueden implementarla según el principio de proximidad en función de la ubicación de la bolsa en la que desean operar. La ventaja de este aspecto es que es simple y fácil, y se puede completar con un solo clic. Es especialmente adecuado para usuarios principiantes. No necesitan comprender muchos aspectos a la hora de comprar un servidor Linux, y además ahorran tiempo y energía. En el aprendizaje de los comandos de Linux, el precio también es relativamente barato, lo que resulta adecuado para usuarios con pocos recursos. La plataforma recomienda a los usuarios utilizar este método de implementación.

Para cuidar la comprensión de los principiantes, este artículo adoptará el método B.
Las operaciones específicas son: iniciar sesión en FMZ.COM, hacer clic en el centro de control, host y hacer clic en alquiler de host con un solo clic en la página de host.
Introduzca la contraseña. Después de la implementación exitosa, se muestra la siguiente figura:

Como se mencionó anteriormente, el host es como un sistema Docker, y un sistema Docker es como un conjunto de estándares. Después de implementar este conjunto de estándares, necesitamos generar una “instancia” para este estándar, y esta “instancia” es un robot.
Crear un robot es muy sencillo. Después de implementar el host, haga clic en la columna del robot a la izquierda, haga clic en Crear robot, complete un nombre en la etiqueta y seleccione el host que acaba de implementar en el host de alojamiento. La selección de parámetros y el período de la línea K en el cuadro de diálogo a continuación se pueden seleccionar de acuerdo con la situación específica, principalmente para cooperar con la selección de la estrategia comercial.

Llegados a este punto, ya tenemos configurado nuestro entorno de trabajo. Como podéis observar, es muy sencillo y eficaz, y cada función cumple con sus respectivas funciones. A continuación, comenzaremos a escribir estrategias cuantitativas.
Anteriormente mencionamos los conceptos de datos de series temporales y datos de ticks. A continuación, utilizaremos una estrategia de promedio móvil simple para vincular estos dos conceptos.
A través de un promedio móvil de período lento, como el promedio móvil de 7 días, y un promedio móvil de período rápido, como el promedio móvil de 3 días. Aplicándolos al mismo gráfico de línea K, cuando el promedio de movimiento rápido cruza el promedio de movimiento lento, lo llamamos cruz dorada; cuando el promedio de movimiento lento cruza el promedio de movimiento rápido, lo llamamos cruz de la muerte.
La base para abrir una posición es abrir una orden larga cuando aparece la cruz dorada y abrir una orden corta cuando aparece la cruz dorada. El mismo principio se aplica para cerrar una posición.
Abramos FMZ.COM, iniciemos sesión en la cuenta, centro de control, biblioteca de estrategias, creemos una nueva estrategia y seleccionemos 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 muy detallados. Tómese su tiempo para apreciarlo. Esta estrategia no es una estrategia en vivo, por lo que no debe experimentar con dinero real. Su objetivo principal es brindarles a todos una idea general sobre cómo escribir estrategias y una plantilla de aprendizaje.
import types # 导入Types模块库,这是为了应对代码中将要用到的各种数据类型
def main(): # 主函数,策略逻辑从这里开始
STATE_IDLE = -1 # 标记持仓状态变量
state = STATE_IDLE # 标记当前持仓状态
initAccount = ext.GetAccount() #这里用到了现货数字货币交易类库(python版),编写策略时记得勾选上,作用是获得账户初始信息
while True: # 进入循环
if state == STATE_IDLE : # 这里开始开仓逻辑
n = ext.Cross(FastPeriod,SlowPeriod) # 这里用到了指标交叉函数,详情请查看https://www.fmz.com/strategy/21104
if abs(n) >= EnterPeriod : # 如果n大于等于入市观察期,这里的入市观察期是为了防止一开盘就胡乱开仓。
opAmount = _N(initAccount.Stocks * PositionRatio,3) # 开仓量,关于_N的用法,请查看官方API文档
Dict = ext.Buy(opAmount) if n > 0 else ext.Sell(opAmount) # 建立一个变量,用于存储开仓状态,并执行开仓操作
if Dict : # 查看dict变量的情况,为下面的日志输出做准备
opAmount = Dict['amount']
state = PD_LONG if n > 0 else PD_SHORT # PD_LONG和PD_SHORT均为全局常量,分别用来表示多头和空头仓位。
Log("开仓详情",Dict,"交叉周期",n) # 日志信息
else: # 这里开始平仓逻辑
n = ext.Cross(ExitFastPeriod,ExitSlowPeriod) # 指标交叉函数,
if abs(n) >= ExitPeriod and ((state == PD_LONG and n < 0) or (state == PD_SHORT and n > 0)) : # 如果经过了离市观察期且当前账户状态为持仓状态,进而判断金叉或者死叉
nowAccount = ext.GetAccount() # 再次刷新和获取账户信息
Dict2 = ext.Sell(nowAccount.Stocks - initAccount.Stocks) if state == PD_LONG else ext.Buy(initAccount.Stocks - nowAccount.Stocks) # 平仓逻辑,是多头就平多头,是空头就平空头。
state = STATE_IDLE # 标记平仓后持仓状态。
nowAccount = ext.GetAccount() # 再次刷新和获取账户信息
LogProfit(nowAccount.Balance - initAccount.Balance,'钱:',nowAccount.Balance,'币:',nowAccount.Stocks,'平仓详情:',Dict2,'交叉周期:',n) # 日志信息
Sleep(Interval * 1000) # 循环暂停一秒,防止API访问频率过快导致账户被限制。
En la página de edición de la estrategia, hemos completado la redacción de la estrategia. A continuación, debemos realizar pruebas retrospectivas de esta estrategia para ver cómo funciona en condiciones históricas del mercado. Las pruebas retrospectivas desempeñan un papel importante en el desarrollo de cualquier estrategia cuantitativa, pero también son solo una parte de la estrategia. Puede servir como una referencia importante. El backtesting no significa garantía de ganancias, porque el mercado está en constante cambio. El backtesting es solo un acto de retrospección y todavía pertenece a la categoría de inducción. El mercado es deductivo.
Haga clic en el backtest simulado y podrá ver que hay muchos parámetros ajustables que se pueden modificar directamente en él. A medida que la estrategia se vuelve cada vez más compleja y aumenta la cantidad de parámetros, este método de modificación puede ayudar a los usuarios a evitar tener que Modifíquelos uno por uno en el código. El proceso de modificación es sencillo, rápido y claro, y está claramente organizado.

Las opciones de ajuste posteriores pueden optimizar automáticamente los parámetros establecidos. El sistema probará varios parámetros óptimos para ayudar a los desarrolladores de estrategias a encontrar la mejor opción.
De los ejemplos anteriores se desprende que la base del trading cuantitativo es la interacción entre el análisis de datos de series temporales y el backtesting de datos de ticks. Por compleja que sea la lógica, es inseparable de estos dos elementos básicos. La diferencia es solo la dimensión. Por ejemplo, el trading de alta frecuencia requiere secciones de datos más detalladas y datos de series temporales más completos. Por ejemplo, las operaciones de arbitraje requieren una cantidad relativamente grande de datos para las muestras de backtest. Puede que sean necesarios más de diez años de datos continuos y detallados sobre dos objetivos de operaciones para encontrar los resultados estadísticos de la expansión y contracción de sus diferenciales de tipos de interés. En futuros artículos, presentaré estrategias de trading de alta frecuencia y de arbitraje, así que permanezca atento.