最近开始炒股,需要比较直观的分析行情数据,发现Tushare非常好用,分享给有需要的人,代码如下:
import tushare as ts
import csv
# 此处输入需要分析的股票代码
TsCode_list = '002594.sz,600104.sh,002352.sz,002049.sz,600660.sh,603738.sh,002138.sz,000636.sz,000733.sz,002179.sz,603160.sh'
# 输入查询的日期
search_date = 20210205
# 输出文件命名
file_name = str(search_date) + '.csv'
# 创建csv文件并打开
file = open(file_name, 'w', encoding='utf-8-sig', newline='')
csv_writer = csv.writer(file)
# 写第一行各列的名称
csv_writer.writerow(['序号', '股票代码', '股票名称', '市盈TTM', '总市值(w)', '预估利润(w)', '实际业绩(w)', '业绩差(w)', '增长比例','开盘价', '最高价', '最低价', '收盘价', '昨收价', '涨跌额', '涨跌幅(%)', '成交量(手)', '成交额(w)'])
print('序号 股票代码 股票名称 市盈率 总市值 预估利润 实际业绩 业绩差 增长比例 开盘价 最高价 最低价 收盘价 昨收价 涨跌额 涨跌幅 成交量(手) 成交额(w)')
# 设置tocken,从https://tushare.pro获取
token = 'XXXXXX'
# 初始化pro接口
pro = ts.pro_api(token)
# 获取市盈率TTM、总市值数据
get_daily_basic_data = pro.daily_basic(ts_code=TsCode_list, trade_date=str(search_date),
fields='ts_code,trade_date,pe_ttm,total_mv')
# 获取日线行情
get_daily_data = pro.daily(ts_code=TsCode_list, trade_date=str(search_date))
# 计算股票个数,剔除无法获取数据的股票,比如停牌的
TsCode_list_num = get_daily_basic_data.shape[0]
# 循环一个个获取股票中文名称、市盈率、总市值、预期利润(2020年全年)、预告利润、利润差及比例
for num in range(0, TsCode_list_num):
TsCode = get_daily_basic_data.ts_code[num]
CodeName = pro.stock_basic(ts_code=TsCode).name[0]
PeTtm = round(get_daily_basic_data.pe_ttm[num], 2)
TotalValue = int(get_daily_basic_data.total_mv[num])
if PeTtm > 0:
profit_exp = int(get_daily_basic_data.total_mv[num] / get_daily_basic_data.pe_ttm[num])
else:
profit_exp = 0
profit_fore = pro.forecast(ts_code=TsCode, period='20201231', fields='net_profit_min,net_profit_max')
if profit_fore.net_profit_min.count() == 0 or profit_fore.net_profit_max.count() == 0:
profit_true = 0
else:
profit_true = int(profit_fore.net_profit_min[0] + profit_fore.net_profit_max[0])/2
profit_diff = profit_true - profit_exp
if profit_exp == 0:
grow_rate = 0
else:
grow_rate = '{:.1%}'.format(profit_diff/profit_exp)
daily_open = get_daily_data.open[num] # 开盘价
daily_high = get_daily_data.high[num] # 最高价
daily_low = get_daily_data.low[num] # 最低价
daily_close = get_daily_data.close[num] # 收盘价
daily_pre_close = get_daily_data.pre_close[num] # 昨收价
daily_change = get_daily_data.change[num] # 涨跌额
daily_pct_chg = str(round(get_daily_data.pct_chg[num], 2)) + '%' # 涨跌幅(未复权)
daily_vol = int(get_daily_data.vol[num]) # 成交量(手)
daily_amount = int(get_daily_data.amount[num]/10) # 成交额(w)
print(num, TsCode, CodeName, PeTtm, TotalValue, profit_exp, profit_true, profit_diff,
grow_rate, daily_open, daily_high, daily_low, daily_close, daily_pre_close,
daily_change, daily_pct_chg, daily_vol, daily_amount)
csv_writer.writerow([num, TsCode, CodeName, PeTtm, TotalValue, profit_exp, profit_true, profit_diff,
grow_rate, daily_open, daily_high, daily_low, daily_close, daily_pre_close,
daily_change, daily_pct_chg, daily_vol, daily_amount])
注:
- tushare需要注册后获取token,链接:https://tushare.pro/register?reg=421774;
- 调用daily_basic接口需要600积分以上;