12. Complete los datos automáticamente utilizando canales de adquisición de datos.

Hemos introducido los métodos de operación básicos del objeto DataSource. Sin embargo, en el uso real, necesitamos completar el objeto DataSource con una gran cantidad de datos. Si completamos manualmente los datos usando el método DataSource.update_table_data() introducido en el capítulo anterior, la carga de trabajo será muy grande.

Aquí presentamos cómo utilizar canales de adquisición de datos para completar datos automáticamente.

12.1. QTEASY función de recuperación de datos

QTEASY Módulo de gestión de datos: Estructura del módulo de obtención de datos

Como se muestra en el diagrama anterior, la funcionalidad de datos de qteasy se divide en tres capas. La primera capa incluye varias interfaces de descarga de datos para obtener datos de proveedores de datos en línea; este proceso se llama DataFetching.

12.2. La interfaz de recuperación de datos refill_data_source()

qteasy proporciona una interfaz de descarga de datos automatizada qteasy.refill_data_source(), que puede extraer varios datos financieros de múltiples proveedores de datos en línea diferentes para satisfacer los hábitos de uso de diferentes usuarios. La API de extracción de datos proporcionada por qteasy presenta potentes funciones de descarga paralela multiproceso, descarga de fragmentos de datos, control de tráfico de descarga y reintento de retardo de error para adaptarse a los diversos límites de tráfico impredecibles de diferentes proveedores de datos. Al mismo tiempo, la API de extracción de datos puede ejecutar fácil y automáticamente tareas de descarga de datos por lotes de forma regular, por lo que no tiene que preocuparse por perder datos de alta frecuencia.

Primero usemos un ejemplo para explicar cómo completar datos automáticamente usando la interfaz qteasy.refill_data_source(). Comenzaremos creando un objeto DataSource que no contenga ningún dato y luego lo rellenaremos con los datos más básicos.

>>> import qteasy as qt
>>> ds = qt.DataSource()
# 检查数据源中是否有数据
>>> ds.overview()
Analyzing local data source tables... depending on size of tables, it may take a few minutes
[########################################]104/104-100.0%  A...zing completed!
Finished analyzing datasource: 
file://csv@qt_root/data/
3 table(s) out of 104 contain local data as summary below, to view complete list, print returned DataFrame
===============================tables with local data===============================
               Has_data Size_on_disk Record_count Record_start Record_end
table                                                                    
trade_calendar   True       1.8MB         70K          CFFEX        SZSE 
stock_basic      True       852KB          5K           None        None 
stock_daily      True      98.8MB        1.3M       20211112    20241231 

Como podemos ver, el objeto DataSource ya contiene algunas tablas de datos. Para realizar las siguientes pruebas, primero eliminaremos los datos de las tablas de datos trade_calendar y stock_daily y luego usaremos la interfaz de recuperación de datos para completarlos automáticamente.

Primero, elimine dos tablas de datos. Para eliminar una tabla de datos, primero establezca el atributo allow_drop_table de la fuente de datos en True y luego elimine la tabla de datos.

>>> ds.allow_drop_table = True
>>> ds.drop_table_data('trade_calendar')
>>> ds.drop_table_data('stock_daily')
>>> ds.allow_drop_table = False
>>> overview = ds.overview()
Analyzing local data source tables... depending on size of tables, it may take a few minutes
[########################################]104/104-100.0%  A...zing completed!
Finished analyzing datasource: 
file://csv@qt_root/data/
1 table(s) out of 104 contain local data as summary below, to view complete list, print returned DataFrame
===============================tables with local data===============================
            Has_data Size_on_disk Record_count Record_start Record_end
table                                                                 
stock_basic   True       852KB         5K          None        None   

Como puede ver, los datos de las tablas trade_calendar y stock_daily se han eliminado.

A continuación, usaremos la interfaz qteasy.refill_data_source() para completar automáticamente los datos. El código es muy sencillo, con una sola línea, y qteasy hará el resto automáticamente.

>>> qt.refill_data_source(
        tables='stock_daily',  # 指定要填充的数据表:股票日K线数据
        channel='tushare',  # 指定数据下载渠道
        data_source=ds,  # 指定需要填充的数据源对象
        start_date='20210101',  # 指定数据下载的起始日期
        end_date='20211231',  # 指定数据下载的结束日期
)

Filling data source file://csv@qt_root/data/ ...
into 2 table(s) (parallely): {'stock_daily', 'trade_calendar'}
[########################################]243/243-100.0%  <stock_daily> 2398764 wrtn in about 16 sec                 
[########################################]7/7-100.0%  <trade_calendar> 70054 wrtn in about 1 sec                     
                    
Data refill completed! 2468818 rows written into 2/2 table(s)!

Después de extraer y completar los datos, puede verificar que los datos se hayan descargado correctamente:

>>> ds.read_table_data('stock_daily', shares='000001.SZ, 000002.SZ', start='20211111', end='20211131')

                       open   high    low  close  pre_close  change  pct_chg  \
ts_code   trade_date                                                           
000001.SZ 2021-11-11  17.35  18.43  17.32  18.35      17.40    0.95   5.4598   
          2021-11-12  18.31  18.63  18.11  18.27      18.35   -0.08  -0.4360   
          2021-11-15  18.35  18.63  18.20  18.43      18.27    0.16   0.8758   
          2021-11-16  18.36  18.54  18.17  18.22      18.43   -0.21  -1.1394   
          2021-11-17  18.15  18.30  17.98  18.11      18.22   -0.11  -0.6037   
          2021-11-18  18.09  18.12  17.73  17.80      18.11   -0.31  -1.7118   
          2021-11-19  17.80  18.24  17.70  18.15      17.80    0.35   1.9663   
          2021-11-22  18.03  18.25  17.90  18.12      18.15   -0.03  -0.1653   
          2021-11-23  18.11  18.35  17.68  17.88      18.12   -0.24  -1.3245   
          2021-11-24  17.77  17.95  17.66  17.87      17.88   -0.01  -0.0559   
          2021-11-25  17.74  17.79  17.63  17.68      17.87   -0.19  -1.0632   
          2021-11-26  17.62  17.67  17.52  17.58      17.68   -0.10  -0.5656   
          2021-11-29  17.41  17.57  17.36  17.51      17.58   -0.07  -0.3982   
          2021-11-30  17.54  17.68  17.35  17.44      17.51   -0.07  -0.3998   
000002.SZ 2021-11-11  18.95  20.84  18.89  20.79      18.98    1.81   9.5364   
          2021-11-12  20.50  20.50  19.41  19.76      20.79   -1.03  -4.9543   
          2021-11-15  19.56  19.59  19.12  19.40      19.76   -0.36  -1.8219   
          2021-11-16  19.29  19.57  19.21  19.24      19.40   -0.16  -0.8247   
          2021-11-17  19.23  19.53  19.09  19.46      19.24    0.22   1.1435   
          2021-11-18  19.35  19.40  18.98  19.09      19.46   -0.37  -1.9013   
          2021-11-19  19.01  20.28  18.92  19.90      19.09    0.81   4.2431   
          2021-11-22  19.90  19.95  19.19  19.22      19.90   -0.68  -3.4171   
          2021-11-23  19.19  19.44  19.10  19.24      19.22    0.02   0.1041   
          2021-11-24  19.12  19.38  19.00  19.30      19.24    0.06   0.3119   
          2021-11-25  19.22  19.35  19.07  19.22      19.30   -0.08  -0.4145   
          2021-11-26  19.15  19.15  18.95  18.99      19.22   -0.23  -1.1967   
          2021-11-29  18.75  18.87  18.35  18.46      18.99   -0.53  -2.7909   
          2021-11-30  18.44  18.66  18.16  18.26      18.46   -0.20  -1.0834   

                             vol       amount  
ts_code   trade_date                           
000001.SZ 2021-11-11  2084729.00  3752413.858  
          2021-11-12   957546.46  1753072.716  
          2021-11-15   655089.99  1203764.095  
          2021-11-16   601110.48  1099113.409  
          2021-11-17   664640.38  1203859.180  
          2021-11-18   799843.77  1430058.311  
          2021-11-19   786371.56  1414506.380  
          2021-11-22   738617.80  1337768.172  
          2021-11-23  1235977.96  2213817.590  
          2021-11-24   741310.84  1316774.397  
          2021-11-25   603532.70  1068221.304  
          2021-11-26   694499.88  1219937.312  
          2021-11-29   512594.71   895105.981  
          2021-11-30   733616.06  1280384.552  
000002.SZ 2021-11-11  3151015.76  6352746.112  
          2021-11-12  2065924.12  4100076.111  
          2021-11-15   959331.52  1852352.374  
          2021-11-16   593989.40  1149085.955  
          2021-11-17   623749.71  1205064.294  
          2021-11-18   609995.75  1168010.581  
          2021-11-19  1308293.09  2570652.947  
          2021-11-22   877584.30  1697701.639  
          2021-11-23   563435.65  1083646.252  
          2021-11-24   827366.98  1587246.249  
          2021-11-25   518123.06   995473.890  
          2021-11-26   504023.33   959331.064  
          2021-11-29   718595.81  1334479.867  
          2021-11-30   713092.22  1305310.857

12.3. Características de la API de recuperación de datos

Al analizar el proceso de recuperación de datos, podemos ver que qteasy completó automáticamente las siguientes tareas:

  • Búsqueda automática de tablas de dependencia: aunque solo especificamos la tabla stock_daily, qteasy detectó automáticamente que la tabla trade_calendar también estaba vacía y, dado que la tabla stock_daily depende de la tabla del calendario comercial, también completó automáticamente la tabla trade_calendar.

  • Visualización del progreso de la descarga: qteasy proporciona visualización del progreso de la descarga, lo que permite a los usuarios ver el progreso de la descarga de cada bloque de datos, así como el progreso general de la descarga. También muestra el tiempo restante, lo que facilita a los usuarios monitorear el estado de descarga de datos.

  • ** Fragmentación automática de datos **: el código anterior descargó datos de gráficos de velas diarios para todas las acciones a lo largo de 2021, con un total de 2,39 millones de filas. Independientemente de la fuente de datos, una cantidad tan enorme de datos no se puede descargar de una sola vez. Por lo tanto, qteasy fragmenta automáticamente los datos, y cada fragmento contiene solo los datos de un día. Como puede ver, los datos de todo el año se dividieron en 243 partes. Esta descarga fragmentada reduce significativamente la cantidad de datos solicitados por solicitud de red, lo que aumenta la tasa de éxito y reduce el riesgo de ser bloqueado.

  • Descarga paralela de subprocesos múltiples: después de implementar la fragmentación de datos para la descarga, qteasy utiliza automáticamente la descarga paralela de subprocesos múltiples para acelerar el proceso de descarga de datos. El tiempo total para descargar 243 fragmentos de datos en paralelo fue de sólo 16 segundos.

Con estas características, la función de recuperación de datos de qteasy puede satisfacer las necesidades de adquisición de datos de casi todos los usuarios. Ya sea que descargue grandes cantidades de datos o datos de alta frecuencia, qteasy puede proporcionar servicios de descarga de datos eficientes.

Por supuesto, además de las funciones mencionadas anteriormente, qteasy ofrece muchas más funciones para abordar diversas situaciones que puedan surgir durante el proceso de descarga. Presentaremos estas características en detalle más adelante:

  • Descarga multicanal: qteasy proporciona múltiples canales de descarga de datos. Se pueden descargar muchas tablas de datos desde múltiples canales diferentes, y la cantidad de canales de recuperación de datos aumenta constantemente con cada actualización de versión.

  • Control de tráfico: algunos canales de datos tienen límites de tráfico en las descargas de datos. qteasy proporciona una función de control de tráfico que puede limitar la velocidad de descarga de datos. Es decir, después de descargar una cierta cantidad de fragmentos de datos, puede hacer una pausa por un período de tiempo. Por ejemplo, haga una pausa de un minuto después de descargar 300 fragmentos de datos para evitar que el canal de datos lo bloquee.

  • Reintento de error: al descargar datos de algunas fuentes de datos, pueden ocurrir errores de red. qteasy proporciona una función de reintento de error, que puede reintentar automáticamente la descarga después de un error. Si el reintento no tiene éxito, ampliará el tiempo de espera del reintento y volverá a intentarlo hasta que la descarga se realice correctamente o se exceda el número de reintentos y se informe un error.

  • Grabación de registros: qteasy proporciona una función de grabación de registros de descarga de datos, que puede registrar información detallada para cada descarga de datos, incluida la cantidad de datos descargados, el tiempo de descarga, la velocidad de descarga, etc., lo que hace que sea conveniente para los usuarios ver el estado de la descarga de datos.

Datos extraídos de múltiples canales

qteasy ofrece múltiples canales de descarga de datos, lo que permite descargar muchas tablas de datos desde varios canales. Además, con cada actualización de versión, la cantidad de canales de recuperación de datos continúa aumentando.

refill_data_source()接口的channel参数可以指定数据下载渠道,如果不指定,qteasy会使用默认渠道tushare(见qteasy/core.pyrefill_data_source的默认逻辑)。用户也可以手动指定数据下载渠道。

当前内置四通道为:tushareakshareeastmoney(别名 emoney)、sina

四通道能力对照(常用表)

下表概括常用数据表在各通道下的支持情况(「支持」表示当前版本已实现映射并可走 refill 链路;「不支持」表示该通道无映射,refill 会跳过并提示)。AKShare 完整 108 表状态见仓库内维护清单 tests/akshare_data_test_checklist.md

数据表

tushare

akshare

eastmoney

sina

trade_calendar

支持(需 token/积分)

支持

暂不支持

暂不支持

stock_basic

支持(行业/上市日等完整)

支持(代码+简称索引;行业/地域等常为空)

部分场景不支持

暂不支持

index_basic / fund_basic

支持

支持(字段少于 Tushare 的项可能为空)

部分

暂不支持

stock_daily / weekly / monthly

支持

支持

支持(日/部分分)

支持(日/分)

stock_5/15/30min、hourly

支持

支持

支持

支持

stock_adj_factor

支持

支持(新浪因子源)

暂不支持

暂不支持

index_daily / weekly / monthly

支持

支持

支持(日)

暂不支持

fund_daily / weekly / monthly / 1min

支持

支持

部分

暂不支持

stock_suspend / money_flow / dividend

支持

支持

暂不支持

暂不支持

new_share / stock_company

支持

支持(字段可能少于 Tushare)

暂不支持

暂不支持

realtime_bars / realtime_quotes

支持

支持

支持

支持

index_1min 等指数分钟

支持

暂不支持(待 spike)

支持

暂不支持

说明:

  • basics 表与 merge_type='update':对 table_usage=='basics' 的表(如 stock_basicindex_basicfund_basic 等),主键冲突时仅用下载侧非空字段覆盖对应列,下载值为空字符串或 NULL 时保留本地已有值。因此可用 AKShare 补全代码列表拉分钟线依赖表,而不会冲掉此前用 Tushare 写入的 industrylist_date 等。按行业/地域筛选股票(filter_stocks / filter_stock_codes)仍建议以 Tushare 的 stock_basic 为准或先确认本地行业列非空。

  • tushare:覆盖最全,多数表需配置 tushare_token 及相应积分/权限。

  • akshare:无需 token;当前 25 张历史/基础/事件表已实现(见 tests/akshare_data_test_checklist.md),其余表仍为 blockednot_supportedstock_basic 等 basics 表仅保证 代码与名称索引,不替代 Tushare 完整基本面。

  • eastmoney:无需 token;分钟线覆盖较全,部分基础表(如 stock_basic)可能无法从此通道拉取。

  • sina:无需 token;以股票日线与分钟线为主,无周/月线等。

El siguiente código intenta descargar datos de velas diarias de la tabla de datos stock_daily para los dos primeros meses de 2025 desde el canal de datos eastmoney:

>>> qt.refill_data_source(
        tables='stock_daily', 
        channel='eastmoney',   # 指定数据下载渠道为东方财经
        data_source=ds, 
        start_date='20250101', 
        end_date='20250301',
)

Filling data source file://csv@qt_root/data/ ...
into 2 table(s) (parallely): {'stock_daily', 'stock_basic'}
[########################################]11078/11078-100.0%  <stock_daily> 131264304 wrtn in about 17 min           
[----------------------------------------]0/1-0.0%  <stock_basic> can't be fetched from channel:eastmoney!
          
Data refill completed! 131264304 rows written into 1/2 table(s)!

Verifique que los datos se descargaron exitosamente:

>>> ds.read_table_data('stock_daily', shares='000001.SZ, 000002.SZ', start='20250101', end='20250103')

                       open   high    low  close  pre_close  change  pct_chg  \
ts_code   trade_date                                                           
000001.SZ 2025-01-13  11.25  11.26  11.08  11.20      11.30   -0.10  -0.8850   
          2025-01-14  11.20  11.40  11.19  11.38      11.20    0.18   1.6071   
          2025-01-15  11.38  11.58  11.36  11.48      11.38    0.10   0.8787   
          2025-01-16  11.55  11.59  11.47  11.57      11.48    0.09   0.7840   
          2025-01-17  11.53  11.55  11.42  11.45      11.57   -0.12  -1.0372   
          2025-01-20  11.50  11.52  11.40  11.42      11.45   -0.03  -0.2620   
          2025-01-21  11.45  11.45  11.32  11.33      11.42   -0.09  -0.7881   
          2025-01-22  11.32  11.33  11.08  11.09      11.33   -0.24  -2.1183   
          2025-01-23  11.17  11.40  11.17  11.32      11.09    0.23   2.0739   
          2025-01-24  11.32  11.39  11.22  11.34      11.32    0.02   0.1767   
          2025-01-27  11.38  11.55  11.38  11.47      11.34    0.13   1.1464   
000002.SZ 2025-01-13   6.60   6.77   6.55   6.76       6.69    0.07   1.0463   
          2025-01-14   6.76   6.93   6.75   6.91       6.76    0.15   2.2189   
          2025-01-15   6.88   6.96   6.79   6.86       6.91   -0.05  -0.7236   
          2025-01-16   6.90   7.07   6.84   6.88       6.86    0.02   0.2915   
          2025-01-17   6.58   6.65   6.45   6.63       6.88   -0.25  -3.6337   
          2025-01-20   6.60   6.94   6.48   6.85       6.63    0.22   3.3183   
          2025-01-21   6.84   7.54   6.82   7.36       6.85    0.51   7.4453   
          2025-01-22   7.27   7.36   6.98   7.02       7.36   -0.34  -4.6196   
          2025-01-23   7.15   7.70   7.08   7.36       7.02    0.34   4.8433   
          2025-01-24   7.33   7.54   7.21   7.39       7.36    0.03   0.4076   
          2025-01-27   7.38   7.56   7.22   7.27       7.39   -0.12  -1.6238   

                            vol       amount  
ts_code   trade_date                          
000001.SZ 2025-01-13   934966.0  1044904.416  
          2025-01-14   824629.0   934467.766  
          2025-01-15  1031631.0  1185403.653  
          2025-01-16   872964.0  1007689.274  
          2025-01-17   689765.0   791230.419  
          2025-01-20   832029.0   953092.179  
          2025-01-21   902069.0  1024879.174  
          2025-01-22  1347129.0  1504818.607  
          2025-01-23  1514920.0  1715172.472  
          2025-01-24   944944.0  1069899.088  
          2025-01-27  1151935.0  1324270.607  
000002.SZ 2025-01-13   911147.0   611005.036  
          2025-01-14  1116454.0   765177.082  
          2025-01-15   887294.0   608363.557  
          2025-01-16  1110545.0   771648.218  
          2025-01-17  3620283.0  2369977.993  
          2025-01-20  2988167.0  2009728.944  
          2025-01-21  5849397.0  4290640.172  
          2025-01-22  3448728.0  2457396.391  
          2025-01-23  4416581.0  3245710.622  
          2025-01-24  2555024.0  1885566.128  
          2025-01-27  2151753.0  1580357.769  

La descarga de datos fue claramente exitosa. Analizando el proceso de descarga anterior, se pueden observar varias características:

  • Los datos descargados de diferentes canales están en el mismo formato. Este es un principio de diseño de qteasy. Los datos descargados de diferentes canales se someterán al mismo proceso de limpieza. Esto permite a los usuarios cambiar fácilmente entre diferentes canales de descarga de datos sin preocuparse por los problemas de procesamiento de datos causados ​​por diferentes formatos de datos.

  • Los diferentes canales de descarga utilizan diferentes métodos de fragmentación, lo que da lugar a diferentes velocidades de descarga. El canal de datos eastmoney es más lento y tarda aproximadamente 17 minutos en completarse. Esto se debe a las limitaciones específicas de cada canal de descarga.

  • Diferentes canales de descarga pueden permitir descargar diferentes tablas de datos. Es posible que algunas tablas de datos no se puedan descargar a través de ciertos canales, posiblemente debido a restricciones de permisos u otros factores. Si no se puede descargar una tabla de datos, qteasy omitirá automáticamente esa tabla de datos sin afectar la descarga de otras tablas de datos.

Por lo tanto, los usuarios deben elegir diferentes canales para recuperar datos según sus propias circunstancias.

使用 AKShare 通道

AKShare 适合无 Tushare token、仅需 P0 行情表的场景。使用前请安装依赖:

pip install akshare

最小 refill 示例(短日期窗、指定 channel='akshare'):

>>> qt.refill_data_source(
        tables='stock_daily',
        channel='akshare',
        data_source=ds,
        shares='000001.SZ,600000.SH',
        start_date='20240101',
        end_date='20240110',
)

完整可运行脚本见仓库 examples/akshare_refill_minimal.py(需联网)。

限制与注意

  • AKShare 接口由第三方维护,稳定性与速率不可控;失败时会按 hist_dnld_retry_* 配置重试。

  • 当前版本承诺 108 张内置表均可从 AKShare 下载;扩表属于 S3.2 后续批次,详见 tests/akshare_data_test_checklist.md

  • 拉取分钟线时若自动补 stock_basic,AKShare 会更新代码/名称,但不会用空值覆盖已有 industry 等列;若库中从未写入过 Tushare 基本面,按行业选股前仍需 refill_data_source(tables='stock_basic', channel='tushare')

通道切换与配置

一次性下载(脚本 / 交互):在 refill_data_source(..., channel='...') 中显式传入通道名即可,例如 Tushare 与 AKShare 对比如下:

>>> qt.refill_data_source(tables='stock_daily', channel='tushare', start_date='20240101', end_date='20240131')
>>> qt.refill_data_source(tables='stock_daily', channel='akshare', start_date='20240101', end_date='20240131')

实盘默认渠道(写入 qteasy.cfg 或通过 qt.configure() 修改):

配置键

含义

默认值

live_trade_data_refill_channel

Trader 日更自动 refill 使用的通道

eastmoney

live_price_acquire_channel

实盘获取实时价格的通道

eastmoney

示例:

>>> qt.configure(live_trade_data_refill_channel='akshare')
>>> qt.configure(live_price_acquire_channel='akshare')

修改后,实盘任务会使用新通道执行 refill / 取价;历史脚本仍可在每次 refill_data_source 调用中单独指定 channel,与全局配置无关。

Implementar control de tráfico de descarga

El refill_data_source de qteasy proporciona una función de control de flujo que puede limitar la velocidad de descarga de datos. Es decir, después de descargar una cierta cantidad de fragmentos de datos, puede pausarse por un período de tiempo. Por ejemplo, puede hacer una pausa de un minuto después de descargar 300 fragmentos de datos para evitar que el canal de datos lo bloquee.

Esta funcionalidad se logra a través de los parámetros download_batch_size y download_batch_interval de la interfaz refill_data_source():

  • El parámetro download_batch_size especifica la cantidad de fragmentos de datos descargados cada vez. Si se establece en 300, la descarga se detendrá durante un período de tiempo después de descargar 300 fragmentos de datos.

  • El parámetro download_batch_interval especifica el tiempo de pausa después de descargar cada fragmento de datos; el valor predeterminado es 0, lo que significa que no hay pausa.

El siguiente código demuestra cómo implementar el control del tráfico de descarga utilizando los parámetros download_batch_size y download_batch_interval:

>>> qt.refill_data_source(
        tables='stock_daily',
        channel='tushare',
        data_source=ds, 
        start_date='20250101', 
        end_date='20250301', 
        download_batch_size=300,  # 每次下载300个数据分块
        download_batch_interval=60,  # 每次下载300个数据分块后暂停60秒
)

Si se utiliza control de tráfico, el tiempo de descarga naturalmente será mayor, pero para algunos canales de datos esto es necesario; de lo contrario, la descarga puede bloquearse o encontrar errores, lo que provocará un error en la descarga.

Implementar reintentos de error

Cabe señalar que si ocurre un error durante el proceso de descarga de datos, qteasy volverá a intentar la descarga automáticamente. El mecanismo de reintento es el siguiente:

  • Después de que falle la primera descarga, se producirá una breve espera antes de volver a intentarlo; el tiempo de espera predeterminado es 1,0 segundo.

  • Cada vez que falla un reintento, el tiempo de espera aumentará y el tiempo de espera predeterminado aumentará al doble del valor original. Es decir, la primera vez espera 1,0 segundo, la segunda vez espera 2,0 segundos, la tercera vez espera 4,0 segundos, y así sucesivamente.

  • Los reintentos se detendrán y se informará un error después de que se exceda el número máximo de reintentos. De forma predeterminada, el número máximo de reintentos es 7.

Los tres parámetros de reintento de error anteriores se configuran a través del archivo de configuración qteasy. Los usuarios pueden ver o modificar estos parámetros a través de la interfaz qt.config(), o pueden modificar estos parámetros en el archivo de configuración inicial de qteasy.

  • hist_dnld_retry_cnt: número máximo de reintentos, el valor predeterminado es 7.

  • hist_dnld_retry_wait: el tiempo de espera para el primer reintento; el valor predeterminado es 1,0 segundo.

  • hist_dnld_backoff: el multiplicador para aumentar el tiempo de espera de reintento; el valor predeterminado es 2.0.

Para obtener instrucciones sobre cómo modificar el archivo de configuración o utilizar el archivo de configuración inicial para qteasy, consulte la sección del archivo de configuración de qteasy (…/api/api_reference.rst).

Explotación florestal

qteasy proporciona una función de registro de descarga de datos, que puede registrar información detallada para cada descarga de datos, incluida la cantidad de datos descargados, el tiempo de descarga, la velocidad de descarga, etc., lo que hace que sea conveniente para los usuarios verificar el estado de la descarga de datos.

Otras funciones

La interfaz qteasy refill_data_source() también proporciona otras funcionalidades, como:

  • Para limitar el rango de datos descargados, puede usar los parámetros start_date y end_date para restringir el rango de tiempo de los datos descargados, y el parámetro shares para restringir el rango de acciones que se descargarán.

  • 未传 start_date / end_date 时的默认行为:内部将 start_date 视为该表映射中的最早可用日(如 new_share19700101),end_date 视为当天。因此 tables='basics' 会包含需按日期分块下载的 new_share(IPO 新股);若不传日期,会从 1970-01-01 分块拉至今日,耗时较长。若只需代码/行业类 basics、不要 IPO 表,请显式指定表名或传入较窄的日期窗。

  • Para configurar si descargar en paralelo, puede usar el parámetro parallel. Si se establece en False, las descargas se realizarán en serie; en caso contrario, se realizarán en paralelo.

  • Para configurar si desea descargar tablas de dependencia, puede usar el parámetro download_dependent. Si se establece en False, las tablas de dependencia no se descargarán; de lo contrario, se descargarán.

  • Configure si desea forzar una actualización del calendario de transacciones.

Para obtener más explicaciones sobre esta interfaz, consulte la documentación de la API qteasy (…/api/history_data.rst).