Descargar y administrar datos financieros

Este ejemplo demuestra cómo descargar, administrar y extraer datos financieros almacenados localmente usando el módulo qteasy. QTEASY proporciona un conjunto completo de herramientas para ayudarle a descargar y administrar datos financieros. Puede descargar una amplia gama de datos financieros desde el servidor tushare, almacenarlos localmente y extraerlos automáticamente del almacenamiento local cuando sea necesario para realizar pruebas retrospectivas o ejecutar estrategias.

Objeto de origen de datos Loacl DataSource

Hay un objeto DataSource definido en qteasy, que define una fuente de datos financieros locales y proporciona una serie de tablas y tipos de datos financieros locales integrados. Los usuarios pueden leer directamente los datos financieros correspondientes utilizando la identificación de varios tipos de datos (siempre que estos datos financieros se hayan descargado de Internet y guardado en la fuente de datos local).

Grandes cantidades de datos financieros de uso común, como «cierre» y «pe», están predefinidos e integrados en qteasy. Estos datos cubren una amplia gama, que incluye:

  • Volumen y precios, como precio de apertura, precio de cierre, precio alto, volumen de negociación, etc.

  • Indicadores financieros, como relación precio-beneficio pe, relación precio-valor contable pb

  • Estados financieros, como ebidta, ebit, etc.

  • Información básica de la empresa, como nombres de administradores e información de la industria de la empresa.

Los datos anteriores están predefinidos y definidos en el sistema en forma de «tablas de datos». Si necesita utilizar estos datos, primero debe descargarlos al local. El objeto DataSource define el método y la ubicación de almacenamiento de datos. qteasy define un objeto de fuente de datos predeterminado QT_DATA_SOURCE y, en ausencia de instrucciones especiales, todos los datos operados y utilizados por qteasy están en esta fuente de datos.

El objeto DataSource puede guardar datos en formato de archivo (csv, fth, etc.) o guardar datos en una base de datos mysql. Dado el volumen de datos financieros, se recomienda guardarlos en la base de datos. El método y la ubicación de almacenamiento de datos se pueden configurar en configuration de qteasy.

Dos tipos de fuentes de datos para DataSource

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

Los usuarios pueden optar por almacenar datos en diferentes formas, también conocidas como fuentes de datos, para un objeto DataSource. DataSource actualmente admite dos fuentes de datos diferentes:

  • db: los datos se almacenan en una base de datos mysql/Maria DB, a la que se accede estableciendo una conexión de base de datos

  • archivo: los datos se almacenan en la carpeta especificada en forma de archivo y admite tres formatos de archivo: csv, hdf5 y feather

Como el volumen de datos financieros es grande (por ejemplo, los datos históricos de la línea K diaria para todas las acciones tienen más de diez millones de filas de datos, y el volumen de datos de la línea K a nivel de minutos es aún mayor), se recomienda utilizar la base de datos mysql para almacenar datos. Si utiliza archivos locales para almacenar datos, la eficiencia del intercambio de datos será muy baja.

Se utilizan los siguientes parámetros para establecer un objeto DataSource conectado a una base de datos local:

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

Puede obtener información sobre la naturaleza de la conexión del objeto DataSource a través del atributo tipo_conexión

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

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

Se pueden usar los siguientes parámetros para establecer un objeto DataSource usando la carpeta local

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

Vea las variables de configuración actuales usando qt.configuration y vea el tipo y los parámetros de la fuente de datos actual usando qt.QT_DATA_SOURCE

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)

Tipos de datos históricos

qteasy puede administrar múltiples tipos de datos, descargarlos automáticamente y almacenarlos localmente para que las estrategias comerciales los utilicen. Cada tipo de datos tiene un ID de datos incorporado (data_id). Según este data_id, los usuarios pueden ver, leer y descargar los datos correspondientes.

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

qt.find_history_data() puede encontrar todos los tipos de datos integrados en qteasy, enumerando el ID de los datos, el tipo de activo, la frecuencia y la descripción detallada de los datos. Usando qt.get_history_data() y pasando el ID de los datos encontrados como parámetro, puede ver directamente los datos históricos descargados.

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

La salida es la siguiente:

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}

Verifique los datos de la fuente de datos local

Usando qt.get_table_overview() puede ver la cantidad de datos ya descargados en la fuente de datos actual. Cuando la cantidad de datos es grande, se necesitan unos minutos para analizar todos los datos e imprimir la cantidad de datos en la tabla de datos, el espacio ocupado en el disco y el rango de datos en la fuente de datos local.

Los datos locales se almacenan en varias tablas de datos y también puede usar qt.get_table_info() para obtener información detallada sobre una tabla de datos específica. Además del tipo de clave principal y el rango de valores de la tabla de datos, también incluye el nombre, el significado y el tipo de datos de cada columna de datos.

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

Obtenga información sobre una tabla de datos, incluida la cantidad de datos (número de filas), el espacio ocupado en disco, el nombre de la clave principal y el rango de datos. Si se configura verbose=True, también puede ver la información completa de las columnas de datos en la tabla de datos, incluidos los nombres de las columnas, los tipos de datos y las descripciones.

qt.get_table_overview(data_source=None)

Imprima una descripción general de la cantidad de datos en todas las tablas de datos en la fuente de datos

Adquirir información sobre una tabla de datos usando qt.get_table_info():

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  成交额(元)

Verifique y muestre una descripción general de todos los datos locales guardados en DataSource usando qt.get_table_overview()

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 与 ⟦CÓDIGO0⟧

En qteasy 2.x, se recomienda que qt.get_history_data() devuelva un HistoryPanel directamente:

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 es un contenedor 3-D con ejes:

  • eje 0 (acciones): lista de instrumentos, p.e. códigos de acciones o índices

  • eje 1 (hdates): eje de tiempo: una fila por marca de tiempo

  • eje 2 (htypes): tipos de datos históricos como open, high, low, close, vol

Cortar con hp[...] devuelve un sub-HistoryPanel con etiquetas de eje correctas, no un ndarray sin formato. Utilice hp['close'].values o hp['close'].to_numpy(copy=True) para matrices; consulte hp.subpanel(..., copy=True) para conocer los sectores con nombre y el comportamiento de copia.

Para máscaras de investigación y API con mask=, use hp.where(condition), una matriz bool que coincide con hp.values sin mutar hp. Consulte HistoryPanel API y HistoryPanel tutorial.

Desde 2.2.8: atributos de columna de solo lectura (hp.closehp['close']); las comparaciones (hp.close > 100) producen numerosas matrices booleanas para hp.where(...); filtrado de tiempo mediante hp.loc[key] (≡ hp[:, :, key]). Consulte API “acceso a columnas, comparaciones y ubicación” y el tutorial §6.1.

Las estrategias y la visualización comparten un objeto estructurado sin conversiones repetidas.

Adapte el DataFrame existente o dicte datos con qt.dataframe_to_hp() y reutilice la misma API.

De HistoryPanel a la visualización

HistoryPanel.plot() selecciona tipos de gráficos (velas, volumen, MACD, líneas) de los tipos h existentes y admite la comparación de múltiples instrumentos:

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 Visualización interactiva (Plotly)

hp.plot(interactive=True) usa Plotly con zoom, desplazamiento y desplazamiento. En los cuadernos, se prefiere FigureWidget (necesita ipywidgets y anywidget); de lo contrario, recurrirá a HTML. Establezca `plotly_backend_app=”auto”|”FigureWidget”|”html” explícitamente si es necesario.

Dependencias e instalación

  • Interactividad básica (Figura gráfica):

pip install plotly
  • Interactividad completa con el cuaderno (FigureWidget + devoluciones de llamada):

pip install ipywidgets anywidget

Si falta Plotly, interactive=True genera un error en inglés (por ejemplo, «requires plotly»), por lo que las dependencias que faltan fallan antes de tiempo en lugar de producir un gráfico vacío no interactivo.

plotly_backend_app: modo de salida y respaldo

plotly_backend_app se aplica solo cuando interactive=True:

  • plotly_backend_app='auto': prefiere FigureWidget en cuadernos; de lo contrario, contenedor HTML; puede devolver la figura Plotly sin procesar en los scripts.

  • plotly_backend_app='FigureWidget': fuerza FigureWidget; error si no está en el cuaderno o faltan los departamentos.

  • plotly_backend_app='html': fuerza el contenedor HTML; error si no está en el cuaderno.

Funciones interactivas clave (vista de usuario)

  • Coherencia de zoom/panorámica: HTML y FigureWidget comparten restricciones del eje x: barras mínimas visibles, panorámica de regreso al rango de datos cuando está fuera de los límites.

  • Resumen superior de OHLC: se muestra cuando existe el gráfico principal completo de velas de OHLC; comienza en la última barra, se actualiza al hacer clic. Oculto para gráficos de solo líneas (por ejemplo, solo cerrar).

  • layout='overlay' para dos instrumentos: al hacer clic en una barra se cambia de primario a secundario; actualización de opacidad y ancho de línea; highlight sigue al instrumento principal.

  • Cruz de selección: se muestra en el gráfico de precios principal después de hacer clic; se sincroniza con zoom/panorámica; oculto cuando la barra seleccionada se desplaza fuera de la vista.

Ejemplos: dos llamadas interactivas comunes

Ejemplo 1: vela interactiva de un solo instrumento

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

Ejemplo 2: superposición de dos instrumentos + resaltado

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',
)

La visualización sigue «trazar lo que existe»:

  • Solo las columnas que ya están en HistoryPanel; no se calculan nuevos indicadores en la capa de trazado

  • La vela, el volumen o el MACD dependen únicamente de los tipos h correspondientes presentes

Mapeo típico de htype a gráfico:

Tipo de gráfico

Tipos de ejemplo requeridos

Candelero

open, high, low, close

Volumen

⟦CÓDIGO0⟧ 或 ⟦CÓDIGO1⟧

MACD

macd_*, macd_signal_*, macd_hist_*

gráfico de líneas

Cualquier serie 1-D (por ejemplo, close, pe)

Para MA/Bollinger/MACD, calcule en HistoryPanel (hp.kline.ma(), hp.kline.bbands(), hp.kline.macd()), agregue columnas y luego hp.plot().

Relación entre qt.candle y HistoryPanel

qt.candle() es un atajo de alto nivel para trazar la vela de un instrumento en una línea:

  1. Analizar stock, start, end, buscar desde DataSource local

  2. Adaptar precios a un solo instrumento HistoryPanel

  3. Adjunte los indicadores solicitados (MA, Bollinger, MACD) en HistoryPanel

  4. Llame a hp.plot(...) para renderizar

Mantenga las llamadas qt.candle existentes o controle el trazado directamente en HistoryPanel.

Ejemplos de uso comunes:

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

  • 'candle' / 'c': vela OHLC

  • 'ohlc' / 'o': alias ligero cerca de 'candle'

  • 'line' / 'l': línea de precio 1-D (normalmente close)

  • 'none' / 'n': solo datos, devuelve DataFrame para trazado externo

Renko ('renko' / 'r') ya no está integrado; Utilice una biblioteca de gráficos/TA dedicada.

Adquirir datos históricos y guardarlos en DataSource

Si no hay datos en DataSource, será difícil que qteasy desempeñe su función. Por tanto, el primer paso es guardar los datos en DataSource. La clase DataSource proporciona la función _fetch_table_data_from_tushare() para adquirir y almacenar datos históricos en DataSource. En los parámetros de esta función, puede proporcionar directamente un DataFrame, un nombre de archivo csv o un nombre de archivo excel. También puede conectarse a la API del proveedor de datos de la red para adquirir datos. Los métodos para adquirir y actualizar datos utilizando el objeto DataSource incluyen:

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

Adquirir datos de fuentes de datos externas, ajustar y limpiar los datos para que coincidan con la tabla de datos en la fuente de datos.

Canal para la adquisición de datos, especifique archivos locales, API de datos financieros o proporcione directamente local_df, admitiendo las siguientes opciones:

  • df: pasa un df a través del parámetro, y las columnas de este df deben ser las mismas que la definición de la tabla

  • csv: importa datos a través del archivo csv local, y el parámetro f_name se debe proporcionar en este momento

  • excel: importa datos a través de un archivo Excel, y se debe proporcionar el parámetro f_name en este momento

  • tushare: adquiera datos financieros de la API de Tushare, solicite los permisos y puntos correspondientes usted mismo

  • other: otra API de datos financieros, aún no desarrollada

DataSource.update_table_data()

Inspeccione la entrada df, elimine las columnas o filas que no cumplan con los requisitos y combine los datos en la tabla, incluidos los siguientes pasos:

  1. Inspeccione si los nombres de las columnas de la tabla de datos descargada son los mismos que la definición de la tabla de datos y elimine las columnas adicionales

  2. Si el tipo de fuente de datos es «db», elimine la parte de los datos descargados que está duplicada con los datos locales y conserve solo los datos nuevos.

  3. Si el tipo de fuente de datos es «archivo», combine los datos descargados con los datos locales y elimine los duplicados

DataSource.read_table_data()

Adquiera datos a través de archivos locales y guárdelos en DataSource:

El siguiente código de ejemplo guarda los datos almacenados en DataFrame en DataSource

# 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')

Adquiera datos a través de tushare y guárdelos en DataSource:

tushare es una API web de datos financieros que proporciona una gran cantidad de datos financieros. Sin embargo, algunos datos requieren puntos para obtenerse. Solicite una cuenta tushare y obtenga los puntos correspondientes usted mismo. La documentación tushare está aquí: https://tushare.pro/document/2

Solo necesita especificar el nombre de la tabla de datos cuando se conecta a tushare para adquirir datos. DataSource llamará automáticamente al tushare API correspondiente para descargar los datos:

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

Descargue datos de tushare y guárdelos en la fuente de datos local

qteasy proporciona la interfaz de datos tushare. Después de obtener los permisos tushare correspondientes, puede descargar datos financieros directamente en lotes desde tushare y actualizar los datos en la fuente de datos local. Por ejemplo, el siguiente comando descarga todos los datos diarios de stock K-line de marzo a septiembre de 2022 al local: Verifique la información de la tabla stock_daily antes de descargar los datos:

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

Conéctese a tushare para descargar los datos requeridos y guardarlos en la tabla de datos correspondiente. Especifique el nombre de la tabla de datos que se descargará, limite el rango de datos mediante start_date y end_date, y especifique diferentes tipos de datos mediante freq, asset_type, etc. Puede descargar los datos de la tabla y guardarlos en la ubicación adecuada. Los datos duplicados se ignorarán o se sobrescribirán los datos existentes.

qt.refill_data_source() tables selecciona las mesas para rellenar, por nombre o por grupo:

  • cal: calendarios comerciales por intercambio

  • basics: tablas de información básica (acciones, fondos, índices, futuros, opciones)

  • adj: tablas de factores de ajuste para precios ajustados

  • data: tablas históricas de OHLCV (diarias/semanales/mensuales)

  • events: tablas corporativas/de eventos (cambios de nombre, cambios de administrador, participaciones en fondos, etc.)

  • report: estados e informes financieros

  • comp: composición y ponderaciones del índice

  • all: todas las tablas - descarga grande; recarga en lotes

Después de la descarga, use qt.get_history_data(); varias acciones devuelven un dict codificado por código.

Ejemplo: stock_daily finaliza el 22 de marzo de 2022 con ~12,1 millones de filas

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

Utilice qt.refill_data_source() para recargar stock_daily desde marzo de 2022 hasta octubre de 2022

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

La recarga muestra el progreso, el recuento de filas y el tiempo transcurrido. Los grandes trabajos son lentos; Los subprocesos paralelos aceleran las descargas, pero pueden alcanzar los límites de velocidad de Tushare.

[########################################]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

Después de la recarga, stock_daily crece a ~12,8 millones de filas (+700k) hasta el 31 de octubre de 2022.

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

Acceso y visualización de datos locales

Una vez que los datos sean locales, recupérelos fácilmente; OHLCV se puede visualizar como velas o líneas.

Información básica de seguridad

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

get_basic_info(code_or_name) acepta código o nombre; la coincidencia global enumera todos los resultados a menos que asset_type reduzca el alcance; match_full_name=True coincidencias aproximadas de nombres completos

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

Alias ​​de get_basic_info()

Filtrar códigos de acciones

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

Filtre acciones por fecha de cotización, región, industria, tamaño, membresía del índice, etc., e imprima información

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

Mismos filtros, devolver códigos de stock completos

Extraer datos financieros históricos

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

Lee desde el valor predeterminado QT_DATA_SOURCE por tipo de datos, códigos, rango de fechas y frecuencia; devuelve objetos DataFrame o HistoryPanel en un dictado codificado por código o tipo

Visualización OHLCV

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)

Obtenga datos de precios locales y genere un gráfico de velas avanzado dinámico completo

Ejemplo:

Busque información básica de seguridad

Con datos en DataSource, qt.get_basic_info() busca valores por código o nombre de seis dígitos (se admite búsqueda difusa o con comodines)

Ejemplo: búsqueda por código de seis dígitos

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

O busque por nombre: la coincidencia aproximada puede devolver múltiples resultados, por ejemplo:

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              契约型开放式
-------------------------------------------

Se admite la búsqueda con comodines por nombre

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

De forma predeterminada, los nombres completos no coinciden; establezca la coincidencia de nombres completos cuando sea necesario, por ejemplo:

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

Producción:

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

Producción:

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 filtra acciones por criterios, por ejemplo:

# 筛选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