12. Füllen Sie Daten mithilfe von Datenerfassungskanälen automatisch aus.

Wir haben die grundlegenden Operationsmethoden des Objekts „DataSource“ eingeführt. Bei der tatsächlichen Verwendung müssen wir jedoch das Objekt „DataSource“ mit einer großen Datenmenge füllen. Wenn wir die Daten manuell mit der im vorherigen Kapitel eingeführten Methode „DataSource.update_table_data()“ füllen, ist der Arbeitsaufwand sehr groß.

Hier stellen wir vor, wie Datenerfassungskanäle zum automatischen Auffüllen von Daten verwendet werden.

12.1. QTEASY Datenabruffunktion

QTEASY Datenverwaltungsmodul: Struktur des Datenabrufmoduls

Wie im Diagramm oben gezeigt, ist die Datenfunktionalität von „qteasy“ in drei Schichten unterteilt. Die erste Schicht umfasst verschiedene Daten-Download-Schnittstellen zum Abrufen von Daten von Online-Datenanbietern; Dieser Vorgang wird „DataFetching“ genannt.

12.2. Die Datenabrufschnittstelle refill_data_source()

„qteasy“ bietet eine automatisierte Daten-Download-Schnittstelle „qteasy.refill_data_source()“, die verschiedene Finanzdaten von mehreren verschiedenen Online-Datenanbietern abrufen kann, um den Nutzungsgewohnheiten verschiedener Benutzer gerecht zu werden. Die von „qteasy“ bereitgestellte Daten-Pull-API bietet leistungsstarke parallele Multithread-Downloads, Daten-Chunking-Downloads, Download-Verkehrskontrolle und Fehlerverzögerungs-Wiederholungsfunktionen, um sich an die verschiedenen unvorhersehbaren Verkehrsgrenzen verschiedener Datenanbieter anzupassen. Gleichzeitig kann die Daten-Pull-API problemlos und automatisch regelmäßig Batch-Daten-Download-Aufgaben ausführen, sodass Sie sich keine Sorgen über fehlende Hochfrequenzdaten machen müssen.

Lassen Sie uns zunächst anhand eines Beispiels erklären, wie Daten mithilfe der Schnittstelle „qteasy.refill_data_source()“ automatisch aufgefüllt werden. Wir beginnen mit der Erstellung eines „DataSource“-Objekts, das keine Daten enthält, und füllen es dann mit den grundlegendsten Daten.

>>> 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 

Wie wir sehen können, enthält das Objekt „DataSource“ bereits einige Datentabellen. Um die folgenden Tests durchzuführen, löschen wir zunächst die Daten aus den Datentabellen „trade_calendar“ und „stock_daily“ und füllen sie dann mithilfe der Datenabrufschnittstelle automatisch auf.

Löschen Sie zunächst zwei Datentabellen. Um eine Datentabelle zu löschen, setzen Sie zunächst das Attribut „allow_drop_table“ der Datenquelle auf „True“ und löschen Sie dann die Datentabelle.

>>> 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   

Wie Sie sehen können, wurden die Daten in den Tabellen „trade_calendar“ und „stock_daily“ gelöscht.

Als Nächstes verwenden wir die Schnittstelle „qteasy.refill_data_source()“, um die Daten automatisch aufzufüllen. Der Code ist sehr einfach, mit nur einer Zeile, und „qteasy“ erledigt den Rest automatisch.

>>> 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)!

Nachdem Sie die Daten abgerufen und ausgefüllt haben, können Sie überprüfen, ob die Daten erfolgreich heruntergeladen wurden:

>>> 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. Funktionen der Data Retrieval API

Bei der Analyse des Datenabrufprozesses können wir sehen, dass „qteasy“ die folgenden Aufgaben automatisch erledigt hat:

  • Automatische Abhängigkeitstabellensuche – Obwohl wir nur die Tabelle „stock_daily“ angegeben haben, hat „qteasy“ automatisch erkannt, dass auch die Tabelle „trade_calendar“ leer war, und da die Tabelle „stock_daily“ von der Handelskalendertabelle abhängt, hat sie auch automatisch die Tabelle „trade_calendar“ gefüllt.

  • Visualisierung des Download-Fortschritts – „qteasy“ bietet eine Visualisierung des Download-Fortschritts, sodass Benutzer den Download-Fortschritt jedes Datenblocks sowie den gesamten Download-Fortschritt sehen können. Außerdem wird die verbleibende Zeit angezeigt, sodass Benutzer den Status des Datendownloads leicht überwachen können.

  • Automatische Datenaufteilung – Der obige Code hat die täglichen Candlestick-Chartdaten für alle Aktien im Jahr 2021 heruntergeladen, insgesamt 2,39 Millionen Zeilen. Unabhängig von der Datenquelle kann eine derart große Datenmenge nicht auf einmal heruntergeladen werden. Daher teilt „qteasy“ die Daten automatisch auf, wobei jeder Block nur die Daten eines Tages enthält. Wie Sie sehen, wurden die Daten des gesamten Jahres in 243 Blöcke unterteilt. Dieser geblockte Download reduziert die pro Netzwerkanforderung angeforderte Datenmenge erheblich, erhöht die Erfolgsquote und verringert das Risiko einer Blockierung.

  • Paralleler Download mit mehreren Threads – Nach der Implementierung von Daten-Chunking für den Download verwendet „qteasy“ automatisch den parallelen Download mit mehreren Threads, um den Daten-Download-Prozess zu beschleunigen. Die Gesamtzeit für den parallelen Download von 243 Datenblöcken betrug nur 16 Sekunden.

Mit diesen Funktionen kann die Datenabruffunktion von „qteasy“ die Datenerfassungsanforderungen fast aller Benutzer erfüllen. Unabhängig davon, ob große Datenmengen oder Hochfrequenzdaten heruntergeladen werden, kann „qteasy“ effiziente Daten-Download-Dienste bereitstellen.

Zusätzlich zu den oben genannten Funktionen bietet „qteasy“ natürlich noch viele weitere Funktionen, um verschiedene Situationen zu bewältigen, die während des Downloadvorgangs auftreten können. Wir werden diese Funktionen später im Detail vorstellen:

  • Mehrkanal-Download – „qteasy“ bietet mehrere Daten-Download-Kanäle. Viele Datentabellen können von mehreren verschiedenen Kanälen heruntergeladen werden, und die Anzahl der Datenabrufkanäle nimmt mit jedem Versionsupdate ständig zu.

  • Verkehrskontrolle – Für einige Datenkanäle gelten Verkehrsbeschränkungen für Datendownloads. „qteasy“ bietet eine Verkehrskontrollfunktion, die die Daten-Download-Geschwindigkeit begrenzen kann. Das heißt, Sie können nach dem Herunterladen einer bestimmten Anzahl von Datenblöcken eine Zeit lang pausieren. Halten Sie beispielsweise nach dem Herunterladen von 300 Datenblöcken eine Minute inne, um eine Blockierung durch den Datenkanal zu vermeiden.

  • Fehler beim erneuten Versuch – Beim Herunterladen von Daten aus einigen Datenquellen können Netzwerkfehler auftreten. „qteasy“ bietet eine Fehlerwiederholungsfunktion, die den Download nach einem Fehler automatisch wiederholen kann. Wenn der Wiederholungsversuch nicht erfolgreich ist, wird die Wartezeit für Wiederholungsversuche verlängert und es wird erneut versucht, bis der Download erfolgreich ist oder die Anzahl der Wiederholungsversuche überschritten wird und ein Fehler gemeldet wird.

  • Protokollaufzeichnung – „qteasy“ bietet eine Protokollaufzeichnungsfunktion für Datendownloads, die detaillierte Informationen zu jedem Datendownload aufzeichnen kann, einschließlich der heruntergeladenen Datenmenge, der Downloadzeit, der Downloadgeschwindigkeit usw., sodass Benutzer den Datendownloadstatus bequem anzeigen können.

Daten aus mehreren Kanälen

„qteasy“ bietet mehrere Daten-Download-Kanäle, sodass viele Datentabellen von verschiedenen Kanälen heruntergeladen werden können. Darüber hinaus nimmt mit jedem Versionsupdate die Anzahl der Datenabrufkanäle weiter zu.

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;以股票日线与分钟线为主,无周/月线等。

Der folgende Code versucht, tägliche Candlestick-Daten aus der Datentabelle „stock_daily“ für die ersten beiden Monate des Jahres 2025 aus dem Datenkanal „eastmoney“ herunterzuladen:

>>> 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)!

Überprüfen Sie, ob die Daten erfolgreich heruntergeladen wurden:

>>> 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  

Der Datendownload war eindeutig erfolgreich. Bei der Analyse des oben beschriebenen Download-Prozesses können mehrere Merkmale beobachtet werden:

  • Von verschiedenen Kanälen heruntergeladene Daten haben das gleiche Format. Dies ist ein Designprinzip von „qteasy“. Von verschiedenen Kanälen heruntergeladene Daten durchlaufen denselben Reinigungsprozess. Dadurch können Benutzer problemlos zwischen verschiedenen Daten-Download-Kanälen wechseln, ohne sich Gedanken über Datenverarbeitungsprobleme machen zu müssen, die durch unterschiedliche Datenformate verursacht werden.

  • Verschiedene Download-Kanäle verwenden unterschiedliche Chunking-Methoden, was zu unterschiedlichen Download-Geschwindigkeiten führt. Der Datenkanal „eastmoney“ ist langsamer und dauert etwa 17 Minuten. Dies liegt an den spezifischen Einschränkungen jedes Download-Kanals.

  • Verschiedene Download-Kanäle ermöglichen möglicherweise das Herunterladen unterschiedlicher Datentabellen. Einige Datentabellen können über bestimmte Kanäle möglicherweise nicht heruntergeladen werden, möglicherweise aufgrund von Berechtigungsbeschränkungen oder anderen Faktoren. Wenn eine Datentabelle nicht heruntergeladen werden kann, überspringt „qteasy“ diese Datentabelle automatisch, ohne dass der Download anderer Datentabellen beeinträchtigt wird.

Daher müssen Benutzer je nach ihren eigenen Umständen unterschiedliche Kanäle zum Abrufen von Daten wählen.

使用 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,与全局配置无关。

Implementieren Sie die Kontrolle des Download-Verkehrs

„refill_data_source“ von „qteasy“ bietet eine Flusskontrollfunktion, die die Daten-Download-Geschwindigkeit begrenzen kann. Das heißt, nach dem Herunterladen einer bestimmten Anzahl von Datenblöcken kann es für einen bestimmten Zeitraum pausieren. Es kann beispielsweise nach dem Herunterladen von 300 Datenblöcken eine Minute pausieren, um eine Blockierung durch den Datenkanal zu vermeiden.

Diese Funktionalität wird durch die Parameter „download_batch_size“ und „download_batch_interval“ der Schnittstelle „refill_data_source()“ erreicht:

  • Der Parameter „download_batch_size“ gibt die Anzahl der Datenblöcke an, die jedes Mal heruntergeladen werden. Wenn der Wert auf 300 eingestellt ist, wird der Download für einen bestimmten Zeitraum angehalten, nachdem 300 Datenblöcke heruntergeladen wurden.

  • Der Parameter „download_batch_interval“ gibt die Pausenzeit nach dem Herunterladen jedes Datenblocks an; Der Standardwert ist 0, was bedeutet, dass keine Pause erfolgt.

Der folgende Code zeigt, wie die Download-Verkehrskontrolle mithilfe der Parameter „download_batch_size“ und „download_batch_interval“ implementiert wird:

>>> 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秒
)

Bei Verwendung der Verkehrssteuerung verlängert sich natürlich die Downloadzeit, bei einigen Datenkanälen ist dies jedoch erforderlich; Andernfalls kann es sein, dass der Download blockiert wird oder Fehler auftreten, was zu einem Download-Fehler führt.

Implementieren Sie Fehlerwiederholungen

Es ist zu beachten, dass „qteasy“ den Download automatisch erneut versucht, wenn während des Datendownloadvorgangs ein Fehler auftritt. Der Wiederholungsmechanismus ist wie folgt:

  • Nachdem der erste Download fehlgeschlagen ist, wird eine kurze Wartezeit vergehen, bevor ein erneuter Versuch unternommen wird. Die Standardwartezeit beträgt 1,0 Sekunden.

  • Jedes Mal, wenn ein Wiederholungsversuch fehlschlägt, erhöht sich die Wartezeit, wobei die Standardwartezeit auf das Doppelte des ursprünglichen Werts ansteigt. Das heißt, beim ersten Mal wird 1,0 Sekunden gewartet, beim zweiten Mal 2,0 Sekunden, beim dritten Mal 4,0 Sekunden und so weiter.

  • Die Wiederholungsversuche werden beendet und ein Fehler wird gemeldet, sobald die maximale Anzahl von Wiederholungsversuchen überschritten wird. Standardmäßig beträgt die maximale Anzahl an Wiederholungsversuchen 7.

Die oben genannten drei Fehlerwiederholungsparameter werden alle über die Konfigurationsdatei „qteasy“ festgelegt. Benutzer können diese Parameter über die Schnittstelle „qt.config()“ anzeigen oder ändern oder sie können diese Parameter in der anfänglichen Konfigurationsdatei von „qteasy“ ändern.

  • „hist_dnld_retry_cnt“ – Maximale Anzahl von Wiederholungsversuchen, standardmäßig 7.

  • „hist_dnld_retry_wait“ – Die Wartezeit für den ersten Wiederholungsversuch, der Standardwert beträgt 1,0 Sekunden.

  • „hist_dnld_backoff“ – Der Multiplikator zum Erhöhen der Wiederholungswartezeit; Der Standardwert ist 2.0.

Anweisungen zum Ändern der Konfigurationsdatei oder zur Verwendung der anfänglichen Konfigurationsdatei für „qteasy“ finden Sie im Abschnitt zur Konfigurationsdatei von „qteasy“ (…/api/api_reference.rst).

Protokollierung

„qteasy“ bietet eine Funktion zum Aufzeichnen von Daten-Download-Protokollen, mit der detaillierte Informationen zu jedem Daten-Download aufgezeichnet werden können, einschließlich der heruntergeladenen Datenmenge, der Download-Zeit, der Download-Geschwindigkeit usw., sodass Benutzer den Daten-Download-Status bequem überprüfen können.

Andere Funktionen

Die Schnittstelle „qteasy“ „refill_data_source()“ bietet auch andere Funktionalitäten, wie zum Beispiel:

  • Um den Bereich der heruntergeladenen Daten einzuschränken, können Sie die Parameter „start_date“ und „end_date“ verwenden, um den Zeitraum der heruntergeladenen Daten einzuschränken, und den Parameter „shares“, um den Bereich der herunterzuladenden Aktien einzuschränken.

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

  • Um zu konfigurieren, ob der Download parallel erfolgen soll, können Sie den Parameter „parallel“ verwenden. Wenn der Wert auf „Falsch“ gesetzt ist, werden Downloads seriell durchgeführt. andernfalls werden sie parallel durchgeführt.

  • Um zu konfigurieren, ob Abhängigkeitstabellen heruntergeladen werden sollen, können Sie den Parameter „download_dependent“ verwenden. Wenn es auf „Falsch“ gesetzt ist, werden Abhängigkeitstabellen nicht heruntergeladen; andernfalls werden sie heruntergeladen.

  • Konfigurieren Sie, ob eine Aktualisierung des Transaktionskalenders erzwungen werden soll.

Weitere Erläuterungen zu dieser Schnittstelle finden Sie in der API-Dokumentation „qteasy“ (…/api/history_data.rst).