3. Adquisición de datos, almacenamiento y tipos de datos

3.1. 1. 数据层在整体中的位置

La capa de datos proporciona a la capa de estrategia y a la capa de tiempo de ejecución información histórica «por tipo, por ventana». Las estrategias no acceden directamente a las tablas de datos sin procesar; en su lugar, declaran qué DataType necesitan y cuánto tiempo debe tener window_length. Antes de la ejecución, el motor recupera los datos correspondientes de DataSource, los organiza en ventanas de datos y los inyecta en la estrategia. Esto garantiza que las pruebas retrospectivas y las operaciones en vivo utilicen la misma vista de datos y también evita que las estrategias utilicen «datos futuros» por diseño.

3.2. 2. 从原始数据到本地存储

2.1 Flujo de datos

Fuentes de datos externas (por ejemplo, Tushare, Eastmoney, etc.) → búsqueda y limpieza (unificación de formato, deduplicación, alineación) → DataSource (archivos o base de datos) → escritas en múltiples tablas de datos en una estructura unificada.

2.2 El papel de DataSource

  • Abstracción de almacenamiento unificado: independientemente de si la capa subyacente son archivos CSV/HDF/Feather o una base de datos como MySQL, en la capa superior siempre se lee y escribe “por nombre de tabla, por columna”.

  • Soporte multimotor: se puede configurar como archivo (csv/hdf/fth) o base de datos (MySQL, etc.) para satisfacer diferentes necesidades de implementación.

  • No extrae datos de forma proactiva: DataSource solo es responsable de leer y escribir datos que ya existen localmente; La búsqueda y actualización de la red la realiza el usuario o las tareas programadas que llaman a la interfaz de datos y luego escriben en DataSource.

Por lo tanto, el diseño de la capa de datos separa la «obtención» y el «almacenamiento»: los datos obtenidos de la recuperación se escriben en DataSource después de la limpieza, y las estrategias y pruebas retrospectivas solo consumen datos que ya existen en DataSource.

3.3. 3. 数据表

  • Partición de tablas incorporada: qteasy predefine múltiples tablas de datos, que incluyen aproximadamente datos de mercado (por ejemplo, barras diarias, barras de minutos), datos financieros (estado de resultados, balance general, etc.), macro e índices, etc. Cada tabla tiene un nombre de tabla fijo, una clave principal y un esquema de columnas.

  • Mapeo entre el esquema de la tabla y DataType: una parte de «información a la que una estrategia puede hacer referencia» a menudo corresponde a una columna de una tabla (o una o más columnas después del cálculo). La asignación del nombre de un DataType (y frecuencia, tipo_activo) a tablas/columnas de datos se mantiene dentro del sistema. Las estrategias solo necesitan declarar requisitos a través de DataType o dtype_id, sin preocuparse por nombres de tablas o columnas específicos.

3.4. 4. DataType:从“表里的数据”到“策略可引用的信息”

4.1 nombre, frecuencia, tipo_activo y dtype_id

  • nombre: el nombre del tipo de datos (por ejemplo, cerrar, abrir, total_mv, pe), correspondiente a un determinado tipo de información disponible.

  • freq: la frecuencia de los datos (p. ej., d/w/m/q), relacionada con la granularidad temporal de la tabla de datos o el método de remuestreo.

  • asset_type: el tipo de activo aplicable (por ejemplo, E, IDX, ANY), utilizado para distinguir acciones, índices, etc.

  • dtype_id: generado a partir de los tres elementos anteriores, con la regla name_assettype_freq, por ejemplo close_E_d, total_mv_E_q. Las estrategias utilizan esta identificación al llamar a get_data(dtype_id).

4.2 Mapeo entre tipos de datos integrados y tablas/columnas de datos

El sistema viene con un gran conjunto de tipos de datos integrados, cada uno de ellos asignado a columnas o columnas derivadas en diferentes tablas de datos. Para conocer nombres de tablas y columnas específicos y cómo obtenerlos, consulte Descargar y administrar datos históricos financieros y la documentación sobre “tipos de datos y tablas de datos” en los documentos de la API. Esta serie solo enfatiza: las estrategias hacen referencia a datos solo a través de DataType (dtype_id) y no dependen directamente del esquema de la tabla. De esta manera, cuando el esquema evolucione, solo necesitará ajustar el mapeo, sin cambiar el código de estrategia.

3.5. 5. 小结:为什么策略只接触 DataType 而不直接读表

  • Consistencia: Tanto las pruebas retrospectivas como las operaciones en vivo obtienen datos a través de la misma ruta: “declarar DataType + inyecciones de motor por ventana”, evitando dos conjuntos de lógica separados.

  • Sin sesgo de anticipación: el motor prepara estrictamente la ventana de datos históricos en función del paso de tiempo actual y la longitud de la ventana, por lo que la estrategia no puede acceder a datos futuros que no se hayan inyectado.

  • Interfaz unificada: todas las estrategias obtienen datos a través de get_data(dtype_id). Cada dtype_id se corresponde uno a uno con un DataType, lo que facilita el mantenimiento y la extensión.

Para obtener más información sobre la configuración de datos y el uso de API, consulte Descargar y administrar datos históricos financieros y la referencia de API.