stock_code:股票代码
name:股票名称
trade_date:交易日期
open:开盘价
high:最高价
low:最低价
close:收盘价
pre_close:前收盘价
change:涨跌额
pct_chg:涨跌幅(百分比)
vol:成交量
amount:成交金额
turnover_rate:换手率
turnover_rate_f:流通股本换手率
volume_ratio:量比
pe:市盈率(静态)
pe_ttm:市盈率(滚动)
pb:市净率
ps:市销率
ps_ttm:市销率(滚动)
dv_ratio:股息率(静态)
dv_ttm:股息率(滚动)
total_share:总股本
float_share:流通股本
free_share:自由流通股本
total_mv:总市值
circ_mv:流通市值
import tushare as ts
import pandas as pd
# 设置你的 Tushare Token
ts.set_token('your_token')
pro = ts.pro_api()
stock_basic = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name')
# 重命名 ts_code 列为 stock_code
stock_basic = stock_basic.rename(columns={'ts_code': 'stock_code'})
for index, row in stock_basic.iterrows():
stock_code = row['stock_code']
stock_name = row['name']
# 获取个股历史日线数据
df_daily = pro.daily(ts_code=stock_code, start_date='', end_date='')
if not df_daily.empty:
# 按交易日期升序排序
df_daily = df_daily.sort_values(by='trade_date')
# 重置索引
df_daily = df_daily.reset_index(drop=True)
# 重命名 ts_code 列为 stock_code
df_daily = df_daily.rename(columns={'ts_code': 'stock_code'})
# 获取个股每日基本面数据(包含市值、市盈率等)
df_daily_basic = pro.daily_basic(ts_code=stock_code, start_date='', end_date='')
if not df_daily_basic.empty:
df_daily_basic = df_daily_basic.sort_values(by='trade_date')
df_daily_basic = df_daily_basic.reset_index(drop=True)
df_daily_basic = df_daily_basic.rename(columns={'ts_code': 'stock_code'})
# 删除 df_daily_basic 中的 close 列
if 'close' in df_daily_basic.columns:
df_daily_basic = df_daily_basic.drop(columns='close')
# 合并日线数据和基本面数据
df = pd.merge(df_daily, df_daily_basic, on=['stock_code', 'trade_date'], how='left')
else:
df = df_daily
# 添加个股名称列
df['name'] = stock_name
# 调整列顺序,将 stock_code 列放在第一列,name 列放在第二列
columns = ['stock_code', 'name'] + [col for col in df.columns if col not in ['stock_code', 'name']]
df = df[columns]
# 构建文件名
file_name = f'D:/quantkt/data/stock/every_stock_history_data/{stock_code}_history_data.csv'
try:
# 保存数据到 CSV 文件
df.to_csv(file_name, index=False)
print(f'{stock_code}({stock_name}) 的历史数据已成功保存到 {file_name}')
except Exception as e:
print(f'保存 {stock_code}({stock_name}) 的数据时出现错误: {e}')
else:
print(f'未获取到 {stock_code}({stock_name}) 历史数据。')
数据格式如下
详情数据可来本人自建量化平台quantkt.com来获取