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提供的数据支持。