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 ejemploclose_E_d,total_mv_E_q. Las estrategias utilizan esta identificación al llamar aget_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.