本程序为Ernest Chen所著Quantitative Trading中文版书中42页中例子,书中主要介绍了如何使用Excel和matlab来实现夏普比率与计算最大回撤和最大回撤时间的方法,python作为一种开源语言,能够实现matlab的相同功能,并能写交易程序,因此采用python实现了书中功能,作为练手
#计算夏普率与回撤与回撤时间
#第一次完成于2016/5/24
import pandas as pd
import numpy as np
import math
import matplotlib.pyplot as plt
#读取sheet1中的内容,存放在data中,数据类型为DataFrame
data = pd.ExcelFile(‘example3_4.xls’)
data = data.parse(‘Sheet2’)
#计算日收益率(G3-G2)/G2
data[‘return’]=(data[‘Adj Close’].shift(-1)-data[‘Adj Close’])/data[‘Adj Close’]
#计算超额回报率
data[‘exReturn’]=data[‘return’]-0.04/252
#计算夏普比率
sharperatio=math.sqrt(252)*data[‘exReturn’].mean()/data[‘exReturn’].std()
print(‘该策略的夏普率为: ‘, sharperatio)
data[‘Adj Close’].plot()
#计算累积收益率cumret=(1+return).cumsum
data[‘cumret’]=np.cumprod(1+data[‘exReturn’])-1
fig = plt.figure()
data[‘cumret’].plot()
#计算累积最大收益率,最大回撤,累积最长回撤时间
Max_cumret=np.zeros(len(data))
retracement=np.zeros(len(data))
Re_date=np.zeros(len(data))
for i in range(len(data)):
#计算累积最大收益率
if i==0:
Max_cumret[0]=data[‘cumret’][0]
retracement[0]=(1+Max_cumret[0])/(1+data[‘cumret’][0])-1
else:
#计算累积最大收益率
Max_cumret[i]=max(Max_cumret[i-1],data[‘cumret’][i])
#计算策略回撤
retracement[i]=float((1+Max_cumret[i])/(1+data[‘cumret’][i])-1)
#计算最大回撤时间
if retracement[i]==0:
Re_date[i]=0
else:
Re_date[i]=Re_date[i-1]+1
#计算最最大回撤幅度
retracement=np.nan_to_num(retracement)
Max_re=retracement.max()
#计算最大回撤时间
Max_reDate=Re_date.max()