利用Tushare pro进行量化学习
·
Tushare ID:502365
大家好,我目前研一在读,刚入门量化分析研究学习,有很多知识还不牢固,在这里分享一下自己的学习成果,如有错误,请各位大神指出,讨论。
首先从‘烟蒂选股’策略开始说起。‘烟蒂选股’需要股票的PE PB等指标,由于本人目前积分不足,不能调用Tushare中这一部分数据,不过可用股票价格 / eps 代替,本文只讨论研究方法,此细节请各位忽略。
第一步,从Tushare中调取沪深300股票的成分股
import tushare as ts
pro=ts.pro_api('')
# 查找沪深300股票组成,并将其转化为str类型用于Tushare查找
hs300_list = pro.hs_const(hs_type='SH')['ts_code'].tolist()
# print(hs300_list)
a = ','
hs300 = a.join(hs300_list)
# 从数据库导入hs300财务报表
stocks_fina = pro.fina_indicator(ts_code=hs300, fields='ts_code,roe,roa,eps,bps', start_date=20210101,end_date=20220101) #从数据库中导入hs300公司基本信息
stocks_basic = pro.stock_basic(ts_code=hs300, fields='ts_code,name,industry')
# 从数据库导入hs300股价信息
stocks_price = pro.daily(ts_code=hs300, start_date=20211231, end_date=20220101, fields='ts_code,close')
# 将三个Dataframe按照ts_code合并
from functools import reduce
merge = lambda x, y: pd.merge(x, y, how='left', on='ts_code')
stocks = reduce(merge, [stocks_fina, stocks_price, stocks_basic])
# print(stocks)
# 修饰表格
order = ['ts_code', 'name', 'industry', 'eps', 'bps', 'roe', 'roa', 'close']
stocks = stocks[order]
stocks.rename(columns={'ts_code': '股票代码', 'name': '公司名字', 'industry': '行业', 'roe': 'ROE', 'roa': 'ROA'}, inplace=True)
# print(stocks)
# 计算选股指标PE PB PE*PB
stocks['PE'] = stocks['close'] / stocks['eps']
stocks['PB'] = stocks['close'] / stocks['bps']
stocks['选股指标'] = stocks['PE']*stocks['PB']
# print(stocks)
# 将stocks导出到EXCEL
writer = pd.ExcelWriter('Bravo的选股指标01.xlsx')
stocks.to_excel(writer, sheet_name='sheet_1')
writer.save()
writer.close()
# 条件选股
stocks_filtered = stocks[(stocks['选股指标'] < 60) & (stocks['ROE'] > 5)]
writer = pd.ExcelWriter('Bravo的选股指标02.xlsx')
stocks_filtered.to_excel(writer, sheet_name='sheet_1')
writer.save()
writer.close()
# 将股票按选股系数大小排列
stocks.sort_values(['选股指标'], ascending=True, inplace=True)
# 定义股票成长性 apply函数
def map_func(df):
if df['ROE'] > 5:
return '高成长'
elif df['ROE'] >= 0:
return '低成长'
elif df['ROE'] < 0:
return '负增长'
stocks['成长性'] = stocks.apply(map_func, axis=1)
# print(stocks)
writer = pd.ExcelWriter('Bravo的成长性指标.xlsx')
stocks.to_excel(writer, sheet_name='sheet_1')
writer.save()
writer.close()
# 按照行业进行烟蒂选股
def group_func(df):
return df.sort_values(['选股指标'], ascending=True)[:5]
stocks_grouped = stocks.groupby('行业').apply(group_func)
# print(stocks_grouped)
writer = pd.ExcelWriter('Bravo烟蒂投资行业分类.xlsx')
stocks_grouped.to_excel(writer, sheet_name='sheet_1')
writer.save()
writer.close()
目前本人正处于初学阶段,知识掌握并不牢固,欢迎各位讨论指导,并且感谢Tushare提供的数据支持。
更多推荐


所有评论(0)