hello,我是毛豆。本系列用最精简的代码和案例带你快速入门量化,只讲最干的干货,想要学习量化又不知道该如何上手的小伙伴赶紧看过来!
前期回顾:
本期内容将介绍如何计算单期/多期收益率、以及连续复利收益率。毛豆在每周末都会更新这个系列,建议大家收藏起来方便学习。
一、单期收益率
我们以剑桥科技为例,计算其单期收益率(日收益率)。
首先导入相关的包,并认证Tushare Pro账号。
import tushare as ts
import numpy as np
import matplotlib.pyplot as plt
pro = ts.pro_api('your token')
获取剑桥科技今年以来的行情数据,不清楚如何调用数据接口的可以看我的上一期帖子。
df = pro.daily(ts_code='603083.SH', start_date='20230101', end_date='20230512')
df.head()
返回如下:
只用取每天的收盘价就可以了。为了方便计算收益率,我们通过shift()函数将收盘价滞后一期,并合并到数据框df_close。第一天的数据由于没有前项,值会变为NaN。
日收益率=(当日收盘价-昨日收盘价)/昨日收盘价
df_close=df[['ts_code','trade_date','close']]
df_close['lagclose']=df_close['close'].shift(1)
#日收益率
df_close['ret1']=(df_close['close']-df_close['lagclose'])/df_close['lagclose']
df_close.head()
返回如下:
ret1即为当日收益率。
用一行代码绘制股价走势图:
plt.plot(df_close['close'].tolist()[::-1])
返回如下:
绘制收益率曲线图:
plt.plot(df_close['ret1'].tolist()[::-1])
返回如下:
二、多期收益率
多期收益率的计算方式和单期收益率是类似的,例如:
5期收益率(周收益率)=(当日收盘价-5日前收盘价)/5日前收盘价
20期收益率(月收益率)=(当日收盘价-20日前收盘价)/20日前收盘价
k期收益率=(当日收盘价-k日前收盘价)/k日前收盘价
在操作时,我们只需要通过shift()函数将收盘价滞后k期即可。
#5期收益率
df_close['lagclose5']=df_close['close'].shift(-5)
df_close['ret5']=(df_close['close']-df_close['lagclose5'])/df_close['lagclose5']
#20期收益率
df_close['lagclose20']=df_close['close'].shift(-20)
df_close['ret20']=(df_close['close']-df_close['lagclose20'])/df_close['lagclose20']
df_close.head()
返回如下:
ret5为5期收益率(周收益率)、ret20为20期收益率(月收益率)。
同样绘制收益率曲线图:
plt.plot(df_close['ret1'].tolist()[::-1])
plt.plot(df_close['ret5'].tolist()[::-1])
plt.plot(df_close['ret20'].tolist()[::-1])
plt.legend(['ret1','ret5','ret20'])
返回如下:
三、连续复利收益率
什么是复利?举个例子,投入股市初始资金10000元,如果每天都有涨停板,那么10个交易日后,我们就有10000*(1+10%)^10=25937元(复利),而不是10000*(1+10*10%)=20000元(单利)。这里面就有“利生利”的效果。
连续复利的计算方式为:FV=PV*e^(r*t)
FV表示未来的价值,PV表示现在的价值,e为自然对数的底数,r为年利率,t为投资时间。
因此单期连续复利收益率计算如下:
comporet=np.log(df_close['close']/df_close['lagclose'])
comporet.head()
返回如下:
5期连续复利收益率计算如下:
comporet5=np.log(df_close['close']/df_close['lagclose5'])
comporet5.head()
返回如下:
以上是今天的全部干货内容,毛豆会在每周末更新这个系列,也会在每个交易日继续和大家分享旋风冲锋量化策略的实盘情况,欢迎大家点赞关注。
回测:旋风冲锋策略说明