Herunterladen und Verwalten von Finanzdaten

Dieses Beispiel zeigt, wie das qteasy-Modul zum Herunterladen, Verwalten und Extrahieren lokal gespeicherter Finanzdaten verwendet werden kann. QTEASY bietet ein relativ komplettes Set von Tools zum Herunterladen und Verwalten von Finanzdaten, mit denen eine breite Palette von Finanzdaten über den tushare-Server heruntergeladen, die Daten lokal gespeichert und bei Bedarf automatisch aus dem lokalen Bereich zum Backtesting der Strategie oder der Strategieläufe extrahiert werden können.

Lokales Datenquellenobjekt DataSource

In qteasy ist ein DataSource-Objekt definiert, das eine lokale Finanzdatenquelle definiert und eine Reihe von eingebauten lokalen Finanzdatentabellen und Datentypen bereitstellt, die es dem Benutzer ermöglichen, die entsprechenden Finanzdaten direkt über die IDs der verschiedenen Datentypen zu lesen (vorausgesetzt, die Finanzdaten wurden aus dem Internet heruntergeladen und in der lokalen Datenquelle gespeichert).

Eine große Anzahl häufig verwendeter Finanzdaten wie z.B. „close“ „pe“ ist vordefiniert und in „qteasy“ integriert, das eine ziemlich breite Palette von Themen abdeckt, einschließlich:

  • Volumen- und Kursdaten, wie z. B. Eröffnungskurs, Schlusskurs, Höchstkurs, Handelsvolumen, usw.

  • Finanzielle Indikatoren, wie Kurs-Gewinn-Verhältnis pe, Kurs-Buchwert-Verhältnis pb

  • Jahresabschlussdaten wie ebidta, ebit, etc.

  • Grundlegende Unternehmensdaten, wie Name der Geschäftsführung, Informationen zur Branche des Unternehmens

Die oben genannten Daten sind in das System integriert und als „Datenblätter“ definiert. Wenn Sie diese Daten verwenden möchten, müssen Sie sie zunächst lokal herunterladen. Das DataSource-Objekt definiert, wie und wo die Daten gespeichert werden. qteasy definiert ein Standard-Datenquellen-Objekt QT_DATA_SOURCE, das die Quelle der Daten ist, mit denen qteasy arbeitet und die es verwendet, sofern nicht anders angegeben.

Das DataSource-Objekt kann Daten im Dateiformat (csv, fth, etc.) oder in einer mysql-Datenbank speichern, was angesichts des Umfangs der Finanzdaten empfohlen wird. Die Methode der Datenspeicherung und der Speicherort können in der Konfiguration von qteasy festgelegt werden.

Zwei Arten von DataSource

qt.DataSource(source_type, file_type='fth', file_loc='qteasy/data/', host='localhost', port=3306, user=None, password=None, db='qt_db')

Für ein DataSource-Objekt hat der Benutzer die Möglichkeit, Daten in verschiedenen Formen, auch Datenquellen genannt, zu speichern. Die DataSource unterstützt derzeit zwei verschiedene Datenquellen:

  • db: Datenbank, die Daten werden in einer mysql/Maria DB-Datenbank gespeichert und der Zugriff erfolgt durch Herstellen einer Verbindung zur Datenbank

  • file: Datei, Daten in Form von Dateien, die im angegebenen Ordner gespeichert sind, unterstützt die Dateiformate csv, hdf5 und feather three

In Anbetracht der großen Menge an Finanzdaten (z. B. umfasst die tägliche K-Linie aller Aktien mehr als 10 Millionen Datenzeilen, und die K-Linie auf Minutenebene hat ein noch größeres Datenvolumen) wird empfohlen, eine `mysql‘-Datenbank zur Speicherung der Daten zu verwenden, und der Datenaustausch ist ineffizient, wenn die Daten in lokalen Dateien gespeichert werden.

Verwenden Sie die folgenden Parameter, um ein DataSource-Objekt zu erstellen, das eine Verbindung zur lokalen Datenbank herstellt:

import qteasy as qt
ds_db = qt.DataSource(source_type='db', host='localhost', port=3306, user='user', password='password', db='qt_db')

Sie können die Art der Verbindung eines DataSource-Objekts über die Eigenschaft connection_type erfahren

print(ds_db.connection_type)
ds_db
db:mysql://localhost@3306/qt_db

DataSource('db', 'localhost', 3306)

Ein „DataSource“-Objekt, das einen lokalen Ordner verwendet, kann mit den folgenden Parametern erstellt werden

import qteasy as qt
ds_csv = qt.DataSource(source_type='file', file_loc='src/data', file_type='csv')

print(ds_csv.connection_type)
ds_csv
file://csv@qt_root/qteasy/data

DataSource('file', 'qteasy/data', 'csv')

Verwenden Sie qt.configuration, um die aktuellen Konfigurationsvariablen anzuzeigen, und qt.QT_DATA_SOURCE, um den aktuellen Datenquellentyp und die Parameter anzuzeigen

qt.configuration(config_key='local_data_source, local_data_file_type, local_data_file_path', default=False)
qt.QT_DATA_SOURCE
No. Config-Key            Cur Val        
-----------------------------------------
1   local_data_source     database
2   local_data_file_type  csv
3   local_data_file_path  qteasy/data/

DataSource('db', 'localhost', 3306)

Historische Datentypen

qteasy kann eine Reihe verschiedener Datentypen verwalten, die automatisch heruntergeladen und lokal gespeichert werden, damit Handelsstrategien sie abrufen können. Jeder Datentyp hat eine eingebaute Daten-ID (data_id), anhand derer der Benutzer die entsprechenden Daten ansehen, lesen und herunterladen kann.

qt.find_history_data(s, match_description=False, fuzzy=False, freq=None, asset_type=None, match_threshold=0.85,)

qt.find_history_data()sucht nach allen in qteasy eingebauten Datentypen und listet die Daten-ID, den Asset-Typ und die Häufigkeit sowie eine detaillierte Beschreibung der Daten auf. Wenn Sieqt.get_history_data()` verwenden und die ID der gefundenen Daten als Argument übergeben, können Sie die heruntergeladenen historischen Daten direkt einsehen.

import qteasy as qt
qt.find_history_data('pe')

Die Ausgabe sieht folgendermaßen aus

matched following history data, 
use "qt.get_history_data()" to load these historical data by its data_id:
------------------------------------------------------------------------
           freq asset             table                            desc
data_id                                                                
initial_pe    d     E         new_share                  新股上市信息 - 发行市盈率
pe            d   IDX   index_indicator                    指数技术指标 - 市盈率
pe            d     E   stock_indicator  股票技术指标 - 市盈率(总市值/净利润, 亏损的PE为空)
pe_2          d     E  stock_indicator2                  股票技术指标 - 动态市盈率
========================================================================
import qteasy as qt
qt.get_history_data('pe', '000001.SZ', start="20220101", end="20220201")
Out[16]: 
{'000001.SZ':
                  pe
 2022-01-04  11.1761
 2022-01-05  11.5048
 2022-01-06  11.4847
 2022-01-07  11.5384
 2022-01-10  11.5317
 2022-01-11  11.6792
 2022-01-12  11.4042
 2022-01-13  11.3908
 2022-01-14  10.9547
 2022-01-17  10.8809
 2022-01-18  11.0822
 2022-01-19  11.0688
 2022-01-20  11.6256
 2022-01-21  11.6390
 2022-01-24  11.5384
 2022-01-25  11.3036
 2022-01-26  11.1694
 2022-01-27  10.9346
 2022-01-28  10.6193
 2022-01-31  10.6193
 2022-02-01  10.6193}

Überprüfung von Daten aus lokalen Datenquellen

Verwenden Sie qt.get_table_overview(), um die Datenmenge zu sehen, die von der aktuellen Datenquelle heruntergeladen wurde. Wenn die Datenmenge groß ist, dauert es ein paar Minuten, um alle Daten zu analysieren und die Datenmenge, den belegten Speicherplatz und den Datenbereich für die Tabellen in der lokalen Datenquelle zu drucken

Lokale Daten werden in einer Reihe von Datentabellen gespeichert, Sie können auch qt.get_table_info() verwenden, um die Details einer Datentabelle zu erhalten. Dazu gehören der Primärschlüsseltyp und der Wertebereich der Datentabelle, aber auch der Name jeder Datenspalte, die Bedeutung und die Datentypen

qt.get_table_info(table_name, data_source=None, verbose=True)

Abrufen von Informationen über eine Datentabelle, einschließlich der Datenmenge (Anzahl der Zeilen), des belegten Speicherplatzes, des Namens des Primärschlüssels der Daten und des Datenbereichs Wenn Sie „verbose=True“ einstellen, können Sie auch vollständige Informationen über die Datenspalten in der Datentabelle anzeigen, einschließlich der Spaltennamen, Datentypen und Beschreibungen

qt.get_table_overview(data_source=None)

Zählt das Datenvolumen aller Datentabellen in der Datenquelle und gibt eine Übersicht aus.

Verwenden Sie qt.get_table_info(), um Informationen über eine Tabelle zu erhalten:

qt.get_table_info('stock_15min', verbose=True)
<stock_15min>, 15.85GB/100.9M records on disc
primary keys: 
-----------------------------------
1:  ts_code:       *<CRITICAL>*
    <unknown> entries
    starts: 000001.SZ, end: 689009.SH
2:  trade_time:
    <unknown> entries
    starts: 20090105, end: 20220323

columns of table:
------------------------------------
      columns       dtypes remarks
0     ts_code  varchar(20)    证券代码
1  trade_time     datetime  交易日期时间
2        open        float     开盘价
3        high        float     最高价
4         low        float     最低价
5       close        float     收盘价
6         vol       double  成交量(股)
7      amount       double  成交额(元)

Verwenden Sie qt.get_table_overview(), um einen Überblick über alle lokalen Daten in der DataSource zu erhalten.

qt.get_table_overview()
Analyzing local data source tables... depending on size of tables, it may take a few minutes
[########################################]62/62-100.0%  Analyzing completed!or>>>>>ht>or>>
db:mysql://localhost@3306/ts_db
Following tables contain local data, to view complete list, print returned DataFrame
                 Has_data Size_on_disk Record_count Record_start  Record_end
table                                                                       
trade_calendar     True        2.5MB         76K     1990-10-12   2022-12-31
stock_basic        True        1.5MB          5K           None         None
stock_names        True        2.4MB         13K     1990-12-10   2022-03-21
index_basic        True        4.5MB         11K           None         None
fund_basic         True        8.3MB         17K           None         None
future_basic       True        2.5MB          7K           None         None
opt_basic          True        4.5MB         10K           None         None
stock_15min        True      15.85GB      100.9M       20090105     20220323
stock_30min        True       6.66GB       38.9M       20090105     20220321
stock_hourly       True       3.41GB       38.3M       20090105     20220318
stock_daily        True       1.57GB       12.1M     1990-12-19   2022-03-22
stock_weekly       True      217.9MB        2.4M     1990-12-21   2022-03-18
stock_monthly      True       87.7MB        638K     1990-12-31   2022-02-28
index_15min        True       2.07GB       17.6M       20090105     20220323
index_30min        True       1.12GB        7.6M       20090105     20220318
index_hourly       True      602.0MB        7.1M       20090105     20220113
index_daily        True      357.0MB        2.2M     1990-12-19   2022-03-23
index_weekly       True       56.6MB        611K     1991-07-05   2022-03-18
index_monthly      True       22.5MB        139K     1991-07-31   2022-02-28
fund_hourly        True         16KB           0           None         None
fund_daily         True      165.3MB        1.6M     1998-04-07   2022-03-22
fund_nav           True      973.0MB       15.0M     2000-01-07   2022-03-22
fund_share         True       69.7MB        1.1M     1998-03-27   2022-03-18
fund_manager       True       84.7MB         40K     2000-02-22   2022-03-18
future_daily       True      384.0MB        2.0M     1995-04-17   2022-03-23
options_daily      True      753.0MB        5.3M     2015-02-09   2022-03-23
stock_adj_factor   True      688.0MB       11.0M     1990-12-19   2022-03-23
fund_adj_factor    True      112.7MB        1.9M     1998-04-07   2022-03-23
stock_indicator    True       2.31GB       11.6M     1999-01-01   2022-03-23
stock_indicator2   True      988.0MB        4.8M     2017-06-14   2022-03-23
index_indicator    True        5.5MB         45K     2004-01-02   2022-03-23
index_weight       True      841.9MB       10.5M     2005-04-08   2022-03-17
income             True       94.8MB        189K     1990-12-31   2021-12-31
balance            True      130.0MB        172K     1989-12-31   2021-12-31
cashflow           True      111.9MB        186K     1998-12-31   2021-12-31
financial          True      373.0MB        152K     1989-12-31   2021-12-31
forecast           True       50.6MB         86K     1998-12-31   2022-12-31
express            True        4.5MB         23K     2004-12-31   2021-12-31

HistoryPanel und get_history_data

In qteasy 2.x wird qt.get_history_data() empfohlen, um ein HistoryPanel direkt zurückzugeben:

import qteasy as qt

hp = qt.get_history_data(
    htypes='open, high, low, close, vol',
    shares='000300.SH,000905.SH',
    start='20230101',
    end='20231231',
)
print(hp)

HistoryPanel ist ein 3D-Container mit Achsen:

  • Achse 0 (Aktien): Instrumentenliste, z.B. Aktien- oder Indexcodes

  • Achse 1 (hdates): Zeitachse – eine Zeile pro Zeitstempel

  • Achse 2 (htypes): Verlaufsdatentypen wie „open“, „high“, „low“, „close“, „vol“.

Das Schneiden mit „hp[…]“ gibt ein sub-HistoryPanel mit korrekten Achsenbeschriftungen zurück, kein rohes „ndarray“. Verwenden Sie hp['close'].values oder hp['close'].to_numpy(copy=True) für Arrays; Informationen zu benannten Slices und zum Kopierverhalten finden Sie unter „hp.subpanel(…, copy=True)“.

Verwenden Sie für Forschungsmasken und APIs mit „mask=“ „hp.where(condition)“ – ein Bool-Array, das mit „hp.values“ übereinstimmt, ohne „hp“ zu mutieren. Siehe HistoryPanel API und HistoryPanel Tutorial.

Seit 2.2.8: schreibgeschützte Spaltenattribute (hp.closehp['close']); Vergleiche („hp.close > 100“) ergeben Numpy-Bool-Arrays für „hp.where(…)“; Zeitfilterung über hp.loc[key] (≡ hp[:, :, key]). Siehe API „Spaltenzugriff, Vergleiche und Loc“ und Tutorial §6.1.

Strategien und Visualisierung teilen sich ein strukturiertes Objekt ohne wiederholte Konvertierungen.

Passen Sie vorhandene „DataFrame“ an oder diktieren Sie Daten mit „qt.dataframe_to_hp()“ und verwenden Sie dieselbe API wieder.

Von HistoryPanel zur Visualisierung

„HistoryPanel.plot()“ wählt Diagrammtypen (Kerze, Volumen, MACD, Linie) aus vorhandenen H-Typen aus und unterstützt den Vergleich mehrerer Instrumente:

import qteasy as qt

hp = qt.get_history_data(
    htypes='open, high, low, close, vol',
    shares='000300.SH',
    start='20230101',
    end='20231231',
)

# 静态 K 线 + 成交量
hp.plot(interactive=False)

# 交互式 K 线(在 Jupyter 中体验更好)
hp.plot(interactive=True)

HistoryPanel.plot Interaktive Visualisierung (Plotly)

„hp.plot(interactive=True)“ verwendet Plotly mit Zoom, Schwenken und Hover. In Notizbüchern wird FigureWidget (benötigt „ipywidgets“ und „anywidget“) bevorzugt; andernfalls HTML-Fallback. Legen Sie „plotly_backend_app=‘auto‘|‘FigureWidget‘|‘html‘ bei Bedarf explizit fest.

Abhängigkeiten und Installation

  • Grundlegende Interaktivität (Plotly Abbildung):

pip install plotly
  • Vollständige Notebook-Interaktivität (FigureWidget + Rückrufe):

pip install ipywidgets anywidget

Wenn Plotly fehlt, löst „interactive=True“ einen englischen Fehler aus (z. B. „requires plotly“), sodass fehlende Abhängigkeiten frühzeitig fehlschlagen, anstatt ein nicht interaktives leeres Diagramm zu erzeugen.

plotly_backend_app: Ausgabemodus und Fallback

plotly_backend_app gilt nur, wenn interactive=True:

  • plotly_backend_app='auto': FigureWidget in Notizbüchern bevorzugen; sonst HTML-Wrapper; kann in Skripten eine rohe Plotly-Zahl zurückgeben.

  • plotly_backend_app='FigureWidget': Force FigureWidget; Fehler, wenn nicht im Notebook oder Deps fehlen.

  • plotly_backend_app='html': HTML-Wrapper erzwingen; Fehler, wenn nicht im Notizbuch.

Wichtige interaktive Funktionen (Benutzeransicht)

  • Zoom-/Schwenkkonsistenz: HTML und FigureWidget haben dieselben X-Achsen-Einschränkungen – minimale sichtbare Balken, Zurückschwenken in den Datenbereich, wenn diese außerhalb der Grenzen liegen.

  • Top-OHLC-Zusammenfassung: wird angezeigt, wenn das vollständige OHLC-Candlestick-Hauptdiagramm vorhanden ist; Beginnt beim letzten Balken und wird beim Klicken aktualisiert. Ausgeblendet für reine Liniendiagramme (z. B. nur Schließen).

  • layout='overlay' für zwei Instrumente: Klicken auf einen Balken schaltet primär/sekundär um; Aktualisierung der Deckkraft und Linienbreite; „highlight“ folgt dem Hauptinstrument.

  • Auswahl-Fadenkreuz: wird nach dem Klicken im Hauptpreisdiagramm angezeigt; synchronisiert sich beim Zoomen/Schwenken; ausgeblendet, wenn die ausgewählte Leiste nicht mehr sichtbar ist.

Beispiele: Zwei häufige interaktive Anrufe

Beispiel 1: Interaktiver Candlestick für ein einzelnes Instrument

hp.plot(interactive=True, plotly_backend_app='auto')

Beispiel 2: Zwei-Instrumenten-Overlay + Hervorhebung

hp2 = qt.get_history_data(
    htypes='open, high, low, close, vol',
    shares='000300.SH,000905.SH',
    start='20230101',
    end='20231231',
)
hp2.plot(
    interactive=True,
    layout='overlay',
    highlight='max',
    plotly_backend_app='html',
)

Die Visualisierung folgt „plotieren, was existiert“:

  • Nur Spalten, die bereits im HistoryPanel enthalten sind – keine neuen Indikatoren, die im Plot-Layer berechnet wurden

  • Candlestick, Volumen oder MACD hängen ausschließlich von den entsprechenden vorhandenen H-Typen ab

Typische Htype-zu-Diagramm-Zuordnung:

Diagrammtyp

Beispiel-htypes erforderlich

Leuchter

open, high, low, close

Volumen

vol oder volume

MACD

macd_*, macd_signal_*, macd_hist_*

Liniendiagramm

Jede 1-D-Reihe (z. B. „close“, „pe“)

Berechnen Sie für MA/Bollinger/MACD auf HistoryPanel (hp.kline.ma(), hp.kline.bbands(), hp.kline.macd()), hängen Sie Spalten an und dann hp.plot().

Beziehung zwischen qt.candle und HistoryPanel

„qt.candle()“ ist eine allgemeine Abkürzung, um die Kerze eines Instruments in einer Zeile darzustellen:

  1. stock, start, end analysieren, von lokal DataSource abrufen

  2. Preise an ein einzelnes Instrument anpassen HistoryPanel

  3. Angeforderte Indikatoren (MA, Bollinger, MACD) an HistoryPanel anhängen

  4. Rufen Sie zum Rendern hp.plot(...) auf

Behalten Sie vorhandene „qt.candle“-Aufrufe bei oder steuern Sie das Plotten direkt auf HistoryPanel.

Beispiel für blender

import qteasy as qt

# 快速绘制日 K 线(内部走 HistoryPanel 可视化)
df = qt.candle(
    stock='000300.SH',
    start='2023-06-01',
    end='2023-12-01',
    asset_type='IDX',
    plot_type='candle',
    interactive=True,
)

print(df.head())  # df 为用于绘图的价格数据

plot_type-Werte:

  • 'candle' / 'c': OHLC-Kerze

  • 'ohlc' / 'o': Lightweight-Alias ​​in der Nähe von 'candle'

  • 'line' / 'l': 1-D-Preislinie (normalerweise close)

  • „none“ / „n“: Nur Daten, „DataFrame“ für externes Plotten zurückgeben

Renko („renko“ / „r“) ist nicht mehr eingebaut; Verwenden Sie eine spezielle TA-/Charting-Bibliothek.

Abrufen historischer Daten und Speichern der Daten in DataSource

Wenn keine Daten in der DataSource vorhanden sind, kann qteasy nicht das tun, was es am besten kann. Das erste, was Sie tun müssen, ist, die Daten in der DataSource zu speichern. Die Klasse DataSource bietet die Funktion _fetch_table_data_from_tushare(), um die historischen Daten in die DataSource zu holen und zu speichern. In den Parametern dieser Funktion können Sie direkt einen DataFrame, einen csv-Dateinamen oder einen Excel-Dateinamen angeben. Sie können sich auch mit der API des Netzwerkdatenanbieters verbinden, um die Daten zu erhalten. Die Verwendung des DataSource-Objekts zum Abrufen und Aktualisieren von Daten beinhaltet folgende Methoden:

DataSource._fetch_table_data_from_tushare(table, channel, df=None, f_name=None, **kwargs)`

Abrufen von Daten aus einer externen Datenquelle und Anpassen der bereinigten Daten an die Datentabelle in der Datenquelle

Datenzugriffskanal, Angabe der lokalen Datei, Finanzdaten-API oder direkte Angabe von local_df, die folgenden Optionen werden unterstützt:

  • df : Übergabe einer df mit Parametern, deren Spalten mit der Definition der Tabelle übereinstimmen müssen

  • csv : Import von Daten über eine lokale csv-Datei, in diesem Fall muss der Parameter f_name angegeben werden

  • excel: Import von Daten aus einer Excel-Datei, wobei der Parameter f_name angegeben werden muss

  • tushare: Abruf von Finanzdaten von der Tushare-API, bitte beantragen Sie die entsprechenden Berechtigungen und Kredite selbst

  • other: andere, noch nicht entwickelte Finanzdaten-APIs

DataSource.update_table_data()

Nach der Überprüfung der Eingabedaten und dem Entfernen von nicht konformen Spalten oder Zeilen werden die Daten in die Tabelle zusammengeführt, was die folgenden Schritte umfasst:

  1. Prüfen Sie, ob die Spaltennamen der heruntergeladenen Datentabelle mit der Definition der Datentabelle übereinstimmen, und löschen Sie die überflüssigen Spalten.

  2. Wenn der Datenquellentyp „db“ ist, löschen Sie die Duplikate der lokalen Daten in den heruntergeladenen Daten und behalten Sie nur die neuen Daten.

  3. Wenn der Datenquellentyp “file” ist, werden die heruntergeladenen Daten mit den lokalen Daten zusammengeführt und ihre Duplizierung aufgehoben.

DataSource.read_table_data()

Holen Sie die Daten aus einer lokalen Datei und speichern Sie sie in einer DataSource:

Der folgende Beispielcode wird im DataFrame in den Daten gespeichert, die in der DataSource im

# stock_data 是事先准备好的股票价格数据,格式为pd.DataFrame
df = ds_csv._fetch_table_data_from_tushare(table='stock_basic', channel='df', df=stock_data)
ds_csv.update_table_data('stock_basic', df)
ds_csv.table_data_exists('stock_basic')

Holen Sie die Daten über tushare und speichern Sie sie in der DataSource:

tushare ist eine webbasierte Finanzdaten-API, die eine große Menge an Finanzdaten zur Verfügung stellt. Für den Zugang zu einigen Daten sind jedoch Punkte erforderlich; daher sollten Sie ein tushare-Konto beantragen und die entsprechenden Punkte selbst erwerben. Die erläuternde Dokumentation von tushare finden Sie hier: https://tushare.pro/document/2

Wenn Sie eine Verbindung zu tushare herstellen, um Daten abzurufen, müssen Sie nur den Namen der Datentabelle angeben, und DataSource ruft die entsprechende tushare API auf, um die Daten selbst herunterzuladen:

df = ds_csv._fetch_table_data_from_tushare(table='trade_calendar', channel='tushare')
ds_csv.update_table_data('trade_calendar', df)
ds_csv.table_data_exists('trade_calendar')

Verbinden Sie sich mit „tushare“, um Daten herunterzuladen und sie in einer lokalen Datenquelle zu speichern.

qteasy bietet eine tushare-Datenschnittstelle. Nachdem Sie die entsprechenden tushare-Berechtigungen erhalten haben, können Sie Finanzdaten direkt im Stapelverfahren von tushare herunterladen und die Daten in der lokalen Datenquelle aktualisieren. Der folgende Befehl lädt beispielsweise alle täglichen K-Linien-Daten von März bis September 2022 in die lokale Quelle herunter: Vor dem Herunterladen der Daten prüfen Sie die Tabelle stock_daily stock_daily-Tabelle, bevor Sie die Daten herunterladen:

qt.refill_data_source(data_source, *args, **kwargs)

Stellen Sie eine Verbindung zu tushare her, um die erforderlichen Daten herunterzuladen und in der entsprechenden Datentabelle zu speichern. Geben Sie den Namen der herunterzuladenden Datentabelle an, begrenzen Sie den Datenbereich durch Startdatum und Enddatum, und geben Sie verschiedene Datentypen durch freq, asset_type usw. an, dann können Sie die Tabellendaten herunterladen und am entsprechenden Ort speichern. Doppelte Daten werden ignoriert oder überschreiben vorhandene Daten.

Der Parameter tables für qt.fill_data_source() gibt die aufzufüllenden Datentabellen an. Zusätzlich zur direkten Angabe der Tabellennamen können Daten aus mehreren Datentabellen gleichzeitig nach Tabellentyp heruntergeladen werden:

  • cal : Handelskalendertabelle, Handelskalender der verschiedenen Börsen

  • basics: alle grundlegenden Informationstabellen, einschließlich Aktien, Fonds, Indizes, Futures, Optionen - Tabelle mit grundlegenden Informationen

  • adj : eine Tabelle aller Neugewichtungsfaktoren, einschließlich der Aktien- und Fonds-Neugewichtungsfaktoren, die zur Erzeugung neu gewichteter Preise verwendet werden

  • data: alle historischen Datentabellen, einschließlich täglicher K-Linien-Daten sowie wöchentlicher und monatlicher K-Linien-Daten für Aktien, Fonds, Indizes, Futures und Optionen.

  • events: eine Tabelle mit allen historischen Ereignissen, einschließlich Daten zu Änderungen von Aktiennamen, Fondsmanagern, Fondsanteilen usw.

  • report: Jahresabschlüsse, einschließlich Finanzindikatoren, drei wichtige Jahresabschlüsse, Finanzübersichten, Monats-, Quartals- und Jahresberichte.

  • comp : Eine Liste der Indexkomponenten, einschließlich der Bestandteile jedes Index und ihrer prozentualen Anteile.

  • all: alle Datentabellen, alle oben genannten Datentabellen, aufgrund der großen Datenmenge wird empfohlen, die Daten in Stapeln herunterzuladen

Sobald die Daten lokal heruntergeladen sind, können Sie qt.get_history_data() verwenden, um die Daten abzurufen, und wenn Sie die historischen Daten mehrerer Aktien gleichzeitig abrufen, werden die historischen Daten jeder Aktie separat in einem dict gespeichert.

So wurde beispielsweise festgestellt, dass die Daten in der Tabelle „stock_daily“ unvollständig waren, da die jüngsten Daten nur bis zum 22. März 2022 aktualisiert wurden und insgesamt 12,1 Millionen Datenzeilen enthielten:

qt.get_table_info('stock_daily', verbose=False)
<stock_daily>, 1.57GB/12.1M records on disc
primary keys: 
-----------------------------------
1:  ts_code:
    <unknown> entries
    starts: 000001.SZ, end: 873527.BJ
2:  trade_date:       *<CRITICAL>*
    <unknown> entries
    starts: 1990-12-19, end: 2022-03-22

Verwenden Sie an dieser Stelle die Funktion „qt.fill_data_source()“, um die „stock_daily“-Daten ab März 2022 bis Ende Oktober im Stapelverfahren abzurufen.

qt.refill_data_source(tables='stock_daily', 
                      start_date='20220301',
                      end_date='20221031')

Während des Herunterladens der Daten wird der Fortschritt des Herunterladens durch einen Fortschrittsbalken angezeigt, der auch die Menge der gelesenen Daten und die Gesamtzeit für das Herunterladen anzeigt. Da die Daten in Stapeln heruntergeladen werden müssen, kann das Herunterladen einer großen Datenmenge sehr zeitaufwendig sein. Standardmäßig erhöht qteasy die Geschwindigkeit durch paralleles Herunterladen mit mehreren Threads, aber zu häufiges Herunterladen kann zu Problemen mit der Tushare-Erlaubnis führen.

[########################################]8/8-100.0%  <trade_calendar:SSE-INE>65417wrtn in 2'24"448
[########################################]163/163-100.0%  <stock_daily:20220301-20221031>786300wrtn in 2'42"199

Überprüfen Sie die „stock_daily“-Daten nach Abschluss des Downloads erneut: Sie sehen, dass die Daten auf 12,8 Millionen Zeilen angewachsen sind, was einer Zunahme von 700.000 Zeilen entspricht, und dass das Erfassungsdatum 31. Oktober 2022 erreicht wurde.

qt.get_table_info('stock_daily', verbose=False)
<stock_daily>, 1.57GB/12.8M records on disc
primary keys: 
-----------------------------------
1:  ts_code:
    <unknown> entries
    starts: 000001.SZ, end: 873527.BJ
2:  trade_date:       *<CRITICAL>*
    <unknown> entries
    starts: 1990-12-19, end: 2022-10-31

Lokale Datenerfassung und -visualisierung

Solange die Daten in der lokalen Datenquelle verfügbar sind, ist es sehr einfach, auf sie zuzugreifen und sie, im Falle von Volumen- und Preisdaten, zu visualisieren (als K-Diagramm oder Preisdiagramm zu drucken).

Grundlegende Informationsdaten über den Bestand oder die Anlage

qt.get_basic_info(code_or_name: str, asset_types=None, match_full_name=False, printout=True, verbose=False)

Grundlegende Informationen über eine Aktie oder ein Wertpapier abrufen, code_oder_name kann der Code der Aktie oder der Name der Aktie sein, standardmäßig führt das System einen vollständigen Drama-Match durch, um passende Wertpapiere zu finden, z.B. '000001' wird mit einer Reihe verschiedener Wertpapiere abgeglichen, und alle Treffer werden aufgelistet, es sei denn, ein oder mehrere Wertpapiertypen sind im Feld Eine oder mehrere Wertpapierarten werden in asset_type angegeben. Wenn match_full_name=True gesetzt ist, werden die Wertpapiere unscharf nach dem vollständigen Namen der Aktie oder des Fonds abgeglichen

qt.get_stock_info(code_or_name: str, asset_types=None, match_full_name=False, printout=True, verbose=False)

Ein Alias für get_basic_info().

Screening von Bestandscodes

qt.filter_stocks(date: str = 'today', **kwargs)

Screening einer Auswahl von Aktien auf der Grundlage einer breiten Palette verfügbarer Informationen wie Ausgabedatum, Region, Branche, Größe, Indexbestandteile usw. und Ausdrucken der Aktieninformationen

qt.filter_stock_codes(date: str = 'today', **kwargs)

Filtern einer Auswahl von Aktien auf der Grundlage einer Vielzahl verfügbarer Informationen wie Emissionsdatum, Region, Branche, Größe, Indexbestandteile usw. und Rückgabe des vollständigen Aktiencodes

Extrahieren von Daten zur Finanzgeschichte

qt.get_history_data(htypes, share=None, start=None, end=None, freq=None, asset_type=None, adj=None, as_data_frame=True, group_by=None, **kwargs)

Diese Funktion extrahiert Daten aus der standardmäßigen QT_DATA_SOURCE und gibt mehrere DataFrame- oder HistoryPanel-Objekte auf der Grundlage von Eingabeparametern wie Datentyp, Tickersymbol, Datumsbereich und Häufigkeit aus Diese DataFrames werden in einem dict gespeichert, dessen Schlüssel Tickersymbole oder Datentypen sind Der DataFrame wird in einem dict gespeichert, dessen Schlüssel Tickersymbole oder Datentypen sind und dessen Werte Datenrahmen sind, die nach Tickersymbolen oder Datentypen gruppiert sind.

Visualisierung von Mengen- und Preisdaten

qt.candle(stock=None, start=None, end=None, stock_data=None, asset_type=None, freq=None, plot_type='candle', Interactive=True, data_source=None, **kwargs)

Diese Funktion extrahiert die Kursdaten einer Aktie aus einer lokalen Datenquelle und generiert ein vollständiges dynamisches K-Chart

Beispiel für blender

Finden Sie grundlegende Informationen über Wertpapiere

Verwendung von qt.get_basic_info(), um grundlegende Informationen über ein Wertpapier zu erhalten Nachdem die relevanten Finanzdaten in der DataSource vorbereitet wurden, ist es auch einfach, Informationen über ein Wertpapier zu finden, indem man nach dem Sicherheitscode (sechs Ziffern) oder nach dem Namen des Wertpapiers sucht und die Details ausdruckt. Bei der Suche über den Namen des Wertpapiers wird eine unscharfe Suche oder die Verwendung von Wildcards unterstützt:

Zum Beispiel die Beschaffung von Informationen über ein Wertpapier mit Hilfe eines sechsstelligen Codes:

qt.get_basic_info('601728')
found 1 matches, matched codes are {'E': {'601728.SH': '中国电信'}, 'IDX': {}, 'FT': {}, 'FD': {}, 'OPT': {}, 'count': 1}
More information for asset type E:
------------------------------------------
ts_code       601728.SH
name               中国电信
area                 北京
industry           电信运营
fullname     中国电信股份有限公司
list_status           L
list_date    2021-08-20
-------------------------------------------

Es ist auch möglich, ein Wertpapier direkt über seinen Namen zu finden, wobei eine unscharfe Suche z. B. mehrere Wertpapiere abdeckt:

qt.get_basic_info('中国证券')
Too many matched codes 128, best matched are
{'E': {'000728.SZ': '国元证券'}, 'IDX': {'100630.CIC': '中金证券'}, 'FD': {'001552.OF': '天弘中证证券保险A'}}
pass "verbose=Ture" to view all matched assets
More information for asset type E:
------------------------------------------
ts_code       000728.SZ
name               国元证券
area                 安徽
industry             证券
fullname     国元证券股份有限公司
list_status           L
list_date    1997-06-16
-------------------------------------------
More information for asset type IDX:
------------------------------------------
ts_code   100630.CIC
name            中金证券
fullname      中金证券指数
publisher       中金公司
category          其他
list_date       None
-------------------------------------------
More information for asset type FD:
------------------------------------------
ts_code        001552.OF
name           天弘中证证券保险A
management          天弘基金
custodian           国泰君安
fund_type            股票型
issue_date    2015-06-29
issue_amount        0.05
invest_type        被动指数型
type              契约型开放式
-------------------------------------------

Bei der Suche nach dem Namen eines Wertpapiers wird eine Wildcard-Suche unterstützt:

qt.get_basic_info('中国?通')
found 2 matches, matched codes are {'E': {'600050.SH': '中国联通', '601698.SH': '中国卫通'}, 'IDX': {}, 'FD': {}, 'count': 2}
More information for asset type E:
------------------------------------------
ts_code           600050.SH     601698.SH
name                   中国联通          中国卫通
area                     北京            北京
industry               电信运营          电信运营
fullname     中国联合网络通信股份有限公司  中国卫通集团股份有限公司
list_status               L             L
list_date        2002-10-09    2019-06-28
-------------------------------------------

Standardmäßig wird der vollständige Name des Wertpapiers nicht nachgeschlagen, kann aber bei Bedarf abgeglichen werden, z. B…

# 使用‘贵州钢绳’为关键字搜索股票代码,不匹配全名时,找不到匹配的结果:
qt.get_basic_info('贵州钢绳')

Die Ergebnisse des Laufs sind wie folgt:

found 0 matches, matched codes are {'E': {}, 'IDX': {}, 'FD': {}, 'count': 0}
# 然而如果设置了匹配全名`match_full_name=True`,则能够找到匹配的代码:
qt.get_basic_info('贵州钢绳', match_full_name=True)

Die Ergebnisse des Laufs sind wie folgt:

found 1 matches, matched codes are {'E': {'600992.SH': '贵绳股份'}, 'IDX': {}, 'FD': {}, 'count': 1}
More information for asset type E:
------------------------------------------
ts_code       600992.SH
name               贵绳股份
area                 贵州
industry            钢加工
fullname     贵州钢绳股份有限公司
list_status           L
list_date    2004-05-14
-------------------------------------------

qt.filter_stocks wird verwendet, um Aktien nach bestimmten Kriterien zu filtern, zum Beispiel:

# 筛选2000年以后发行的HS300指数成份股
qt.filter_stocks(date = '20000101', index='000300.SH')

symbol name area industry market list_date exchange
ts_code
000001.SZ 000001 平安银行 深圳 银行 主板 1991-04-03 SZSE
000002.SZ 000002 万科A 深圳 全国地产 主板 1991-01-29 SZSE
000063.SZ 000063 中兴通讯 深圳 通信设备 主板 1997-11-18 SZSE
000069.SZ 000069 华侨城A 深圳 旅游景点 主板 1997-09-10 SZSE
000100.SZ 000100 TCL科技 广东 元器件 主板 2004-01-30 SZSE
... ... ... ... ... ... ... ...
603486.SH 603486 科沃斯 江苏 家用电器 主板 2018-05-28 SSE
605499.SH 605499 东鹏饮料 深圳 软饮料 主板 2021-05-27 SSE
688561.SH 688561 奇安信-U 北京 软件服务 科创板 2020-07-22 SSE
688599.SH 688599 天合光能 江苏 电气设备 科创板 2020-06-10 SSE
688981.SH 688981 中芯国际 上海 半导体 科创板 2020-07-16 SSE

397 rows × 7 columns

# 筛选行业为“航空或全国地产,且区域为‘上海、北京及山东“的股票
qt.filter_stocks(industry='航空, 全国地产', area='上海,北京,山东')
name area industry market list_date exchange
ts_code
000402.SZ 金融街 北京 全国地产 主板 1996-06-26 SZSE
000620.SZ 新华联 北京 全国地产 主板 1996-10-29 SZSE
002111.SZ 威海广泰 山东 航空 中小板 2007-01-26 SZSE
002829.SZ 星网宇达 北京 航空 中小板 2016-12-13 SZSE
002933.SZ 新兴装备 北京 航空 中小板 2018-08-28 SZSE
002985.SZ 北摩高科 北京 航空 中小板 2020-04-29 SZSE
300034.SZ 钢研高纳 北京 航空 创业板 2009-12-25 SZSE
300719.SZ 安达维尔 北京 航空 创业板 2017-11-09 SZSE
300965.SZ 恒宇信通 北京 航空 创业板 2021-04-02 SZSE
600118.SH 中国卫星 北京 航空 主板 1997-09-08 SSE
600372.SH 中航电子 北京 航空 主板 2001-07-06 SSE
600657.SH 信达地产 北京 全国地产 主板 1993-05-24 SSE
600708.SH 光明地产 上海 全国地产 主板 1996-06-06 SSE
600748.SH 上实发展 上海 全国地产 主板 1996-09-25 SSE
600760.SH 中航沈飞 山东 航空 主板 1996-10-11 SSE
600791.SH 京能置业 北京 全国地产 主板 1997-01-30 SSE
600823.SH 世茂股份 上海 全国地产 主板 1994-02-04 SSE