股票基本信息
ts_code:股票代码,这是每只股票的唯一标识符。不同市场的股票代码格式不同,比如 A 股市场中,上交所股票代码以 60 开头,深交所中小板股票代码以 002 开头,创业板股票代码以 300 开头等。
trade_date:交易日期,格式一般为 YYYYMMDD,它明确了数据对应的具体交易时间。
行情数据
open:开盘价,即股票在每个交易日开始时的第一笔成交价格。
high:最高价,指股票在一个交易日内所达到的最高成交价格。
low:最低价,是股票在一个交易日内所达到的最低成交价格。
close:收盘价,也就是股票在每个交易日结束时的最后一笔成交价格。
pre_close:前收盘价,代表上一个交易日的收盘价,它是计算当日涨跌幅等指标的重要参考。
change:涨跌额,计算方式是当日收盘价减去前收盘价,反映了股票价格较上一交易日的绝对变动金额。
pct_chg:涨跌幅,用百分比表示,计算公式为 (当日收盘价 - 前收盘价) / 前收盘价 * 100%,体现了股票价格的相对变动幅度。
vol:成交量,指在一个交易日内股票的成交总手数,反映了市场的交易活跃程度。
amount:成交额,是指在一个交易日内股票的成交总金额,通过成交量与成交价格相乘得到,同样能反映市场的交易活跃程度和资金流动情况。
交易指标
turnover_rate:换手率,计算公式为 成交量 / 流通股本 * 100%,它反映了股票在一定时间内的转手买卖频率,是衡量股票流通性强弱的指标。
turnover_rate_f:自由流通股本换手率,计算方式为 成交量 / 自由流通股本 * 100%,自由流通股本是指剔除了控股股东、战略投资者等持有的长期锁定股份后的股本,该指标更能反映市场中实际可交易股份的换手情况。
volume_ratio:量比,是衡量相对成交量的指标,它是开市后平均每分钟的成交量与过去 5 个交易日平均每分钟成交量之比。量比大于 1 表示当日每分钟的平均成交量大于过去 5 日的平均值,交易相对活跃;反之则表示交易相对清淡。
估值指标
pe:市盈率(Price - Earnings Ratio),分为静态市盈率和动态市盈率。静态市盈率是用当前股价除以过去一年的每股收益;动态市盈率则考虑了公司未来的盈利增长情况,一般用当前股价除以预测的未来一年每股收益。市盈率反映了投资者为获取公司每一元盈利所愿意支付的价格,是评估股票估值的重要指标之一。
pe_ttm:滚动市盈率,即 Trailing Twelve Months 的缩写,它是用当前股价除以过去四个季度的每股收益之和。与静态市盈率相比,滚动市盈率能更及时地反映公司的盈利变化情况。
pb:市净率(Price - to - Book Ratio),计算公式为 股价 / 每股净资产,反映了市场对公司净资产的估值水平。一般来说,市净率较低的股票可能被低估,但也可能暗示公司存在经营问题。
ps:市销率(Price - to - Sales Ratio),用当前股价除以每股销售收入,它主要用于评估一些尚未盈利但有销售收入的公司的估值情况,反映了市场对公司销售收入的认可程度。
ps_ttm:滚动市销率,计算方式是用当前股价除以过去四个季度的每股销售收入之和,同样是为了更及时地反映公司销售收入的变化。
股息指标
dv_ratio:股息率,计算公式为 年度股息 / 当前股价 * 100%,它反映了股票的分红收益情况,是投资者选择股票时考虑的重要因素之一。
dv_ttm:滚动股息率,是过去 12 个月的股息率,通过计算过去四个季度的股息总和与当前股价的比率得到,能更动态地反映公司的股息分配情况。
股本与市值指标
total_share:总股本,指公司发行的全部股份数量,包括流通股和非流通股。
float_share:流通股本,即可以在证券市场上自由买卖的股份数量。
free_share:自由流通股本,是指剔除了控股股东、战略投资者等持有的长期锁定股份后的流通股本,更能反映市场上实际可交易的股份数量。
total_mv:总市值,计算方法是 总股本 * 股价,它反映了公司在市场上的整体价值。
circ_mv:流通市值,计算公式为 流通股本 * 股价,代表了公司可在市场上自由交易的股份的总价值。
# 导入 tushare 库,tushare 是一个免费、开源的 python 财经数据接口包,可用于获取各类金融数据
import tushare as ts
import pandas as pd
# 从 datetime 模块导入 datetime 和 timedelta 类
# datetime 类用于处理日期和时间,timedelta 类用于表示时间间隔
from datetime import datetime, timedelta
# 设置 tushare 的 token,需要在 tushare 官网注册获取
# token 是使用 tushare 接口的身份凭证,只有设置了有效的 token 才能正常调用接口获取数据
ts.set_token('your_token')
# 创建 tushare 的 pro 接口对象,后续通过该对象调用各种数据接口
pro = ts.pro_api()
# 起始日期,指定从该日期开始获取 A 股数据
start_date = '20060101'
# 获取当前日期,并将其格式化为 'YYYYMMDD' 的字符串形式
# 这样可以动态地以当前日期作为数据获取的截止日期
end_date = datetime.today().strftime('%Y%m%d')
# 将起始日期字符串转换为 datetime 对象
# 方便后续进行日期的比较和计算
start = datetime.strptime(start_date, '%Y%m%d')
# 将结束日期字符串转换为 datetime 对象
end = datetime.strptime(end_date, '%Y%m%d')
# 循环遍历从起始日期到结束日期的每一天
# 初始化当前日期为起始日期
current_date = start
# 只要当前日期小于等于结束日期,就继续循环
while current_date <= end:
# 将当前日期格式化为 'YYYYMMDD' 的字符串形式
date_str = current_date.strftime('%Y%m%d')
try:
# 使用 pro.daily_basic 接口获取数据
df_daily_basic = pro.daily_basic(trade_date=date_str)
# 使用 pro.daily 接口获取数据
df_daily = pro.daily(trade_date=date_str)
if 'close' in df_daily.columns:
df_daily = df_daily.drop(columns='close')
if 'trade_date' in df_daily.columns:
df_daily = df_daily.drop(columns='trade_date')
# 合并数据,根据股票代码(ts_code)进行左连接合并
merged_df = pd.merge(df_daily, df_daily_basic, on='ts_code', how='left')
# 删除多余的列,保留合并前df_daily中的close和trade_date列,删除df_daily_basic中的同名列
# 检查获取到的数据 DataFrame 是否为空
if not merged_df.empty:
# 若不为空,将数据保存为 CSV 文件,文件名以日期命名
file_path = f'D:/quantkt/data/stock/basic_and_daily_data/{date_str}_stock_data.csv'
print(file_path)
# 使用 pandas 的 to_csv 方法将数据保存为 CSV 文件,index=False 表示不保存索引列
merged_df.to_csv(file_path, index=False)
# 打印保存成功的提示信息
print(f"{date_str} 的数据已成功保存到 {file_path}")
else:
# 若获取到的数据为空,打印提示信息,可能该日是非交易日
print(f"未获取到 {date_str} 的股票数据,可能该日非交易日。")
except Exception as e:
# 若在请求数据或保存文件过程中出现异常,打印错误信息
print(f"请求 {date_str} 数据或保存文件时出现错误: {e}")
# 日期加一天,以便处理下一天的数据
current_date += timedelta(days=1)
详情数据下载可来本人自建量化平台quantkt.com来获取