本程序为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()