python作业分享:如何运用Tuhare进行opts最优化算法算出上证50的最优投资组合

TushareID:469107大家好,本期给大家带来的python作业分享是:如何运用Tuhare进行opts最优化算法算出上证50的最优投资组合(当然有两个限制条件:第一个就是特定时段的上证50组合,第二个就是特定历史时段的股票价格数据)第一步在tushare上获取相关的信息这一步在上次的作业里面有明确提到过,因此此次不再赘述,只贴出相关的代码并作出相应的解释。#提取上证50的成分股pro = ts.pro_api('你的tushare token')date_start_50=int(i
摘要由CSDN通过智能技术生成

TushareID:469107
大家好,本期给大家带来的python作业分享是:如何运用Tuhare进行opts最优化算法算出上证50的最优投资组合(当然有两个限制条件:第一个就是特定时段的上证50组合,第二个就是特定历史时段的股票价格数据)

第一步
在tushare上获取相关的信息
这一步在上次的作业里面有明确提到过,因此此次不再赘述,只贴出相关的代码并作出相应的解释。

#提取上证50的成分股
pro = ts.pro_api('你的tushare token')
date_start_50=int(input('上证50成分筛选开始时段(8位):'))
date_end_50=int(input('上证50成分筛选结束时段(8位):'))
df=pro.index_weight(index_code='000016.SH', start_date=date_start_50, end_date=date_end_50)
df=df.iloc[:,[0,1]]
#df.rename(columns={'index_code':'index','con_code':'code'},inplace=True)

1、在上面的代码段中,date_start_50和date_end_50是定义选取上证50成分股的时段,为什么要加这个时段呢?这是因为上证50的成分股一直在更新,此处我推荐大家选择的时间区间是一个月,例如20210101-20210201
2、其中iloc选择的是上证50的代码和成分股代码,大家一试便知。

date_start_history=int(input('根据历史数据的选股开始时段(8位):'))
date_end_history=int(input('根据历史数据的选股结束时段(8位):'))
future_start=int(input('验证最优组合的开始时段(8位):'))
future_end=int(input('验证最优组合的结束时段(8位):'))

上面的代码片中,四个键入实际上选择优化计算最优权重的历史数据和测试段数据,
history是历史数据,future是预测数据。

第二步
对数据的清洗和整理

#数据的转化和清洗
len_df=len(df)#测量df的长度,下方循环时选择下标会用到
#下面是获取和处理指数数据
df_index=pro.index_daily(ts_code='399300.SZ', start_date=date_start_history, end_date=date_end_history,fields='trade_date,pct_chg')#获取指数数据
df_index['trade_date']=df_index['trade_date'].astype('str')#转化为时间序列-1
df_index['trade_date']=pd.to_datetime(df_index['trade_date'])#转化为时间序列-2
df_index=df_index.sort_values('trade_date',ascending=True)
#下面是获取成分股的股票数据
daily_trade=pro.daily(ts_code=df.iloc[4,1], start_date=date_start_history, end_date=date_end_history,fields='trade_date,close')
#注意,获取股票的价格数据的处理我们是选择了一个比较笨的方法,但我们认为是很好用的,也就是按照成分股代码一个一个的遍历然后取数据
for i in range(1,len_df):
    daily_trade1=pro.daily(ts_code=df.iloc[i,1], start_date=date_start_history, end_date=date_end_history,fields='close')
    daily_trade[df.iloc[i,1]]=daily_trade1#将之前columns中close的名称改为股票代码,因为这样的话方便我们下方处理
daily_trade.rename(columns={
   'close':df.iloc[0,1]},inplace=True)#聚合之后第一列股票的收盘价还没有更改columns的名字,需要改为第一个
daily_trade['trade_date']=daily_trade['trade_date'].astype('str')
daily_trade['trade_date']=pd.to_datetime(daily_trade['trade_date'])
daily_trade=daily_trade.fillna(method='pad',axis=0)#将Nan数据按照按前一个数据进行填充
daily_trade=daily_trade.sort_values('trade_date',ascending=True)
print(daily_trade)#此时获取的是历史时段的股票数据

第三步
计算相关需要用到的值,例如方差、均值、收益率等等


                
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值