import math
from decimal import Decimal
def profit(prevNum,nextNum):
if prevNum==0:return 0
return Decimal((nextNum-prevNum)/prevNum).quantize(Decimal('0.00'))
#参数:策略起始日收益、策略终止日收益
def strategyProfit(strategyList):
#策略收益率
start = strategyList[0]
end = strategyList[-1]
return (end-start)/start
#参数:基准起始日收益、基准终止日收益
def benchmarkProfit(benchmarkList):
#基准收益率
start = benchmarkList[0]
end = benchmarkList[-1]
return (end-start)/start
#参数:策略收益率、基准收益率
def excessProfit(strategyList,benchmarkList):
#超额收益:策略和基准取终止日收益率
if(len(strategyList)==0 or len(benchmarkList)==0):
return 0
return (strategyProfit(strategyList)+1)/(benchmarkProfit(benchmarkList)+1)-1
#参数:策略收益率、基准收益率
def excessIncome(strategyList,benchmarkList):
#超额收益列表
if(len(strategyList)==0 or len(benchmarkList)==0):
return 0
_min = min(len(strategyList),len(benchmarkList))
EIList=[]
for i in range(_min-1):
start = strategyList[i]
end = strategyList[i+1]
benchmarkstart = benchmarkList[i]
benchmarkend = benchmarkList[i+1]
EIList.append((profit(start,end)+1)/(profit(benchmarkstart,benchmarkend)+1)-1)
return EIList
来源:oschina
链接:https://my.oschina.net/osokra/blog/4512630