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.close ≡ hp['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;highlightsigue 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 |
|
Volumen |
⟦CÓDIGO0⟧ 或 ⟦CÓDIGO1⟧ |
MACD |
|
gráfico de líneas |
Cualquier serie 1-D (por ejemplo, |
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:
Analizar
stock,start,end, buscar desde DataSource localAdaptar precios a un solo instrumento HistoryPanel
Adjunte los indicadores solicitados (MA, Bollinger, MACD) en HistoryPanel
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 (normalmenteclose)'none'/'n': solo datos, devuelveDataFramepara 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.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:
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
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.
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')
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
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













