利用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
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值