財務データのダウンロードと管理
この例では、qteasy モジュールを使用して、ローカルに保存されている財務データをダウンロード、管理、抽出する方法を示します。 QTEASY は、財務データのダウンロードと管理に役立つツールの完全なセットを提供します。 tushare サーバーから幅広い財務データをダウンロードしてローカルに保存し、バックテストや戦略の実行に必要なときにローカル ストレージから自動的に抽出できます。
Loacl データ ソース オブジェクト DataSource
qteasy には DataSource オブジェクトが定義されており、ローカル財務データ ソースを定義し、一連の組み込みローカル財務データ テーブルとデータ型を提供します。ユーザーは、さまざまなデータ タイプの ID を使用して、対応する財務データを直接読み取ることができます (これらの財務データがインターネットからダウンロードされ、ローカル データ ソースに保存されている場合)。
「close」や「pe」など、一般的に使用される大量の財務データが事前定義され、qteasy に組み込まれています。これらのデータは次のような広範囲をカバーしています。
始値始値、終値終値、高値高、取引量ボリュームなどの出来高と価格。
株価収益率pe、株価純資産倍率pbなどの財務指標
ebidta、ebit などの財務諸表。
経営者名や企業の業種情報などの企業基本情報
上記のデータは事前定義されており、「データ テーブル」の形式でシステムに定義されています。このデータを使用する必要がある場合は、まずデータをローカルにダウンロードする必要があります。 DataSource オブジェクトは、データの保存方法と場所を定義します。 qteasy はデフォルトのデータ ソース オブジェクト QT_DATA_SOURCE を定義し、特別な命令がない限り、qteasy によって操作および使用されるすべてのデータはこのデータ ソース内にあります。
DataSource オブジェクトは、データをファイル形式 (csv、fth など) で保存したり、mysql データベースにデータを保存したりできます。財務データの量を考慮すると、データをデータベースに保存することをお勧めします。データの保存方法と保存場所はconfigurationまたはqteasyで設定できます。
DataSourceの2種類のデータソース
qt.DataSource(source_type, file_type='fth', file_loc='qteasy/data/', host='localhost', port=3306, user=None, password=None, db='qt_db')
ユーザーは、DataSource オブジェクトのデータを、データ ソースとも呼ばれるさまざまな形式で保存することを選択できます。 DataSource は現在、2 つの異なるデータ ソースをサポートしています。
db: データは mysql/Maria DB データベースに保存され、データベース接続を確立することでアクセスされます。
ファイル: データはファイル形式で指定されたフォルダーに保存されます。csv、hdf5、feather の 3 つのファイル形式をサポートします。
財務データの量が多いため (たとえば、全銘柄の日次 K ラインのヒストリカル データには 1,000 万行を超えるデータがあり、分単位の K ラインのデータ量はさらに多くなります)、データを保存するには mysql データベースを使用することをお勧めします。ローカル ファイルを使用してデータを保存すると、データ交換の効率が非常に低くなります。
次のパラメータは、ローカル データベースに接続する DataSource オブジェクトを確立するために使用されます。
import qteasy as qt
ds_db = qt.DataSource(source_type='db', host='localhost', port=3306, user='user', password='password', db='qt_db')
connection_type 属性を通じて、DataSource オブジェクトの接続の性質について知ることができます。
print(ds_db.connection_type)
ds_db
db:mysql://localhost@3306/qt_db
DataSource('db', 'localhost', 3306)
次のパラメータを使用して、ローカル フォルダーを使用して DataSource オブジェクトを確立できます。
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')
qt.configuration を使用して現在の構成変数を表示し、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)
履歴データの種類
qteasy は複数のデータタイプを管理し、これらのタイプのデータを自動的にダウンロードし、取引戦略を呼び出すためにローカルに保存できます。各タイプのデータには、組み込みのデータ ID (data_id) があります。この data_id に基づいて、ユーザーは対応するデータを表示、読み取り、ダウンロードできます。
qt.find_history_data(s, match_description=False, fuzzy=False, freq=None, asset_type=None, match_threshold=0.85,)
qt.find_history_data() は、qteasy のすべての組み込みデータ タイプを検索し、データ ID、アセット タイプ、頻度、およびデータの詳細な説明をリストします。 qt.get_history_data() を使用し、見つかったデータ ID をパラメータとして渡すと、ダウンロードした履歴データを直接表示できます。
import qteasy as qt
qt.find_history_data('pe')
出力は次のとおりです。
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}
ローカル データ ソース データを確認する
qt.get_table_overview() を使用すると、現在のデータ ソースに既にダウンロードされているデータの量を表示できます。データの量が多い場合、すべてのデータを分析し、データ テーブル内のデータ量、占有されているディスク領域、およびローカル データ ソース内のデータ範囲を出力するのに数分かかります。
ローカル データは複数のデータ テーブルに保存されており、qt.get_table_info() を使用して特定のデータ テーブルに関する詳細情報を取得することもできます。 データ テーブルの主キーの種類と値の範囲に加えて、各データ列の名前、意味、データ型も含まれます。
qt.get_table_info(table_name, data_source=None, verbose=True)
データ量 (行数)、占有ディスク容量、主キーの名前、データ範囲など、データ テーブルに関する情報を取得します。 verbose=True が設定されている場合は、列名、データ型、説明など、データテーブル内のデータ列の完全な情報を表示することもできます。
qt.get_table_overview(data_source=None)
データ ソース内のすべてのデータ テーブルのデータ量の概要を出力します。
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 成交额(元)
qt.get_table_overview()を使用して、DataSourceに保存されているすべてのローカルデータの概要を確認および表示します
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 と get_history_data
qteasy 2.x では、qt.get_history_data() は HistoryPanel を直接返すことが推奨されます。
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 は軸を持つ 3D コンテナです。
軸 0 (シェア): 機器リスト、例:銘柄コードまたはインデックスコード
軸 1 (hdates): 時間軸 — タイムスタンプごとに 1 行
軸 2 (htypes):
open、high、low、close、volなどの履歴データ型
hp[...] でスライスすると、生の ndarray ではなく、正しい軸ラベルを持つ サブ HistoryPanel が返されます。配列には hp['close'].values または hp['close'].to_numpy(copy=True) を使用します。名前付きスライスとコピー動作については、hp.subpanel(..., copy=True) を参照してください。
mask= のリサーチ マスクと API の場合は、hp.where(condition) — hp を変更せずに hp.values に一致するブール配列を使用します。 HistoryPanel API および HistoryPanel チュートリアル を参照してください。
2.2.8 以降: 読み取り専用の列属性 (hp.close ≡ hp['close'])。比較 (hp.close > 100) は、hp.where(...) の numpy bool 配列を生成します。 hp.loc[key] (≡ hp[:, :, key]) による時間フィルタリング。 API「列アクセス、比較、および loc」およびチュートリアル §6.1 を参照してください。
戦略とビジュアライゼーションは、変換を繰り返すことなく 1 つの構造化オブジェクトを共有します。
既存の DataFrame または dict データを qt.dataframe_to_hp() に適応させ、同じ API を再利用します。
HistoryPanelから可視化へ
HistoryPanel.plot() は、既存の htype からチャート タイプ (ローソク足、出来高、MACD、ライン) を選択し、複数商品の比較をサポートします。
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 インタラクティブな視覚化 (Plotly)
hp.plot(interactive=True) は、ズーム、パン、ホバーを備えた Plotly を使用します。ノートブックでは、FigureWidget (ipywidgets と anywidget が必要) が推奨されます。それ以外の場合は HTML フォールバック。必要に応じて、`plotly_backend_app='auto'|'FigureWidget'|'html' を明示的に設定します。
依存関係とインストール
基本的な対話性 (Plotly Figure):
pip install plotly
完全なノートブックの対話機能 (FigureWidget + コールバック):
pip install ipywidgets anywidget
Plotly が欠落している場合、interactive=True は英語のエラー (例: 「plotly が必要です」) を生成するため、欠落している依存関係は非対話型の空のチャートを生成するのではなく、早期に失敗します。
plotly_backend_app: 出力モードとフォールバック
plotly_backend_app は、interactive=True の場合にのみ適用されます。
plotly_backend_app='auto': ノートブックでは FigureWidget を好みます。それ以外の場合は HTML ラッパー。スクリプトで生の Plotly Figure を返す場合があります。plotly_backend_app='FigureWidget': FigureWidget を強制します。ノートブックにない場合、またはdepsが見つからない場合はエラー。plotly_backend_app='html': HTML ラッパーを強制します。ノートブックにない場合はエラーになります。
主なインタラクティブ機能 (ユーザービュー)
ズーム/パンの一貫性: HTML と FigureWidget は X 軸の制約を共有します。つまり、表示される最小バー、境界外の場合はデータ範囲にパンし直します。
トップ OHLC サマリー: 完全な OHLC ローソク足メイン チャートが存在する場合に表示されます。最後のバーから始まり、クリックすると更新されます。折れ線のみのチャートでは非表示になります (終値のみなど)。
layout='overlay'2 つの楽器の場合: バーをクリックするとプライマリ/セカンダリが切り替わります。不透明度と線幅の更新。highlightは主計器の後に続きます。選択十字線: クリックするとメイン価格チャートに表示されます。ズーム/パンを同期します。選択したバーがスクロールして表示されなくなると非表示になります。
例: 2 つの一般的な対話型通話
例 1: 単一銘柄のインタラクティブなローソク足
hp.plot(interactive=True, plotly_backend_app='auto')
例 2: 2 つの楽器のオーバーレイ + ハイライト
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',
)
視覚化は「存在するものをプロット」に従います。
すでに HistoryPanel にある列のみ — プロット レイヤーで新しいインジケーターは計算されません
ローソク足、出来高、または MACD は、存在する対応する htype のみに依存します
一般的な htype からチャートへのマッピング:
グラフの種類 |
必要な htype の例 |
|---|---|
ローソク足 |
|
音量 |
⟦コード0⟧ または ⟦コード1⟧ |
MACD |
|
折れ線グラフ |
任意の 1-D シリーズ (例: |
MA/ボリンジャー/MACD の場合、HistoryPanel (hp.kline.ma()、hp.kline.bbands()、hp.kline.macd()) で計算し、列を追加してから、hp.plot() を追加します。
qt.candleとHistoryPanelの関係
qt.candle() は、1 つの金融商品のローソク足を 1 行にプロットするための高レベルのショートカットです。
stock、start、endを解析し、ローカル DataSource から取得します単一商品 HistoryPanel に価格を適応させる
リクエストされたインジケーター (MA、ボリンジャー、MACD) をHistoryPanel に追加します
hp.plot(...)を呼び出してレンダリングします
既存の qt.candle 呼び出しを維持するか、HistoryPanel でプロットを直接制御します。
一般的な使用例:
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 値:
'candle'/'c': OHLC ローソク足'ohlc'/'o':'candle'の近くの軽量エイリアス'line'/'l': 1-D 価格線 (通常はclose)'none'/'n': データのみ、外部プロットの場合はDataFrameを返します
Renko ('renko' / 'r') は組み込まれなくなりました。専用の TA/チャート ライブラリを使用します。
過去のデータを取得し、DataSourceに保存します
DataSourceにデータが無い場合、qteasyがその役割を果たすことが難しくなります。したがって、最初のステップは、DataSource にデータを保存することです。 DataSource クラスは、DataSource に履歴データを取得して保存するための _fetch_table_data_from_tushare() 関数を提供します。この関数のパラメーターでは、DataFrame、csv ファイル名、または Excel ファイル名を直接指定できます。ネットワークデータプロバイダーのAPIに接続してデータを取得することもできます。 DataSource オブジェクトを使用してデータを取得および更新するメソッドは次のとおりです。
DataSource.update_table_data()
入力 df を検査し、要件を満たさない列または行を削除し、データをテーブルにマージします。これには次の手順が含まれます。
ダウンロードしたデータテーブルの列名がデータテーブルの定義と同じかどうかを検査し、余分な列を削除します
データソースタイプが「db」の場合、ダウンロードしたデータのうちローカルデータと重複する部分を削除し、新しいデータのみを保持します
データソースの種類が「ファイル」の場合、ダウンロードしたデータをローカル データとマージし、重複を削除します。
DataSource.read_table_data()
ローカル ファイルからデータを取得し、DataSource に保存します。
次のコード例では、DataFrame に保存されているデータを 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')
ローカル データ アクセスと視覚化
データがローカルにあれば、簡単にフェッチできます。 OHLCV はローソク足または線として視覚化できます
基本的なセキュリティ情報
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) はコードまたは名前を受け入れます。グローバル一致では、asset_type が範囲を狭めない限り、すべてのヒットがリストされます。 match_full_name=True フルネームのあいまい一致
qt.get_stock_info(code_or_name: str, asset_types=None, match_full_name=False, printout=True, verbose=False)
get_basic_info()の別名
銘柄コードをフィルターする
qt.filter_stocks(date: str = 'today', **kwargs)
上場日、地域、業種、規模、指数メンバーシップなどで銘柄をフィルターし、情報を印刷します
qt.filter_stock_codes(date: str = 'today', **kwargs)
同じフィルター、完全な株式コードを返します
過去の財務データを抽出する
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)
ローカル価格データを取得し、完全で動的で高度なローソク足チャートをレンダリングします
例:
基本的なセキュリティ情報を調べる
DataSource にデータがある場合、qt.get_basic_info() は 6 桁のコードまたは名前で証券を検索します (あいまい検索またはワイルドカード検索をサポート)
例:6桁のコードによる検索
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
-------------------------------------------
または、名前で検索します。あいまい一致では複数のヒットが返される場合があります。例:
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 契约型开放式
-------------------------------------------
名前によるワイルドカード検索がサポートされています
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
-------------------------------------------
デフォルトではフルネームは一致しません。必要に応じてフルネームの一致を設定します。例:
# 使用‘贵州钢绳’为关键字搜索股票代码,不匹配全名时,找不到匹配的结果:
qt.get_basic_info('贵州钢绳')
出力:
found 0 matches, matched codes are {'E': {}, 'IDX': {}, 'FD': {}, 'count': 0}
# 然而如果设置了匹配全名`match_full_name=True`,则能够找到匹配的代码:
qt.get_basic_info('贵州钢绳', match_full_name=True)
出力:
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 は、基準に基づいて株式をフィルタリングします。例:
# 筛选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













