夏普率(The Sharpe ratio)=(预期收益率 - 无风险利率)/投资组合标准差
也叫报酬与波动性比率,可能是最常用的投资组合管理度量标准。它采用的方法是,组合中超过无风险利率的那部分收益要用投资组合的标准差来衡量。
如果夏普率=2,表示风险每增长1%,可以换来2%的收益;这个难度其实很大,去看那些有10年以上业绩基金,sharp没有超过1的
- 夏普率通常是天为基本单位,如果是短线策略也要先按天计算出净值,就是daily return,然后才能算sharp
- 无风险收益率用十年期国债收益率,大概是 2.85%,一年有252个交易日
- 研究出一个量化策略,跑出pnl曲线,然后算一下sharp率,就可以评估策略的可行性
python代码
import pandas as pd
import numpy as np
def sharpe(daily_return):
if len(daily_return) <2:return 0
df = pd.DataFrame(daily_return,columns=['value'])
ds = np.log(df["value"]) - np.log(df['value'].shift(1))
return (ds.mean()- 0.0285/252)/ds.std()*np.sqrt(252)
c++代码
/*
base 是初始金额,dailys里面是每日profit
*/
float sharpe(std::vector<float> &dailys, float base)
{
if (dailys.size() == 0 || base <= 0)
return 0;
std::vector<float> rtn;
float sum = 0;
for (int i = 1; i < dailys.size(); i++)
{
float t = log((dailys[i] + base) / (dailys[i - 1] + base));
sum += t;
rtn.push_back(t);
}
if (rtn.size() < 2)
return 0;
float mean = sum / rtn.size();
float accum = 0.0;
std::for_each(std::begin(rtn), std::end(rtn), [&](const float d) {
accum += (d - mean) * (d - mean);
});
float stdev = sqrt(accum / (rtn.size() - 1));
//先转化成天,无风险收益用10年期国债利率 2.85%
return sqrt(252) * (mean - 0.0285 / 252) / stdev;
}
更多量化策略,欢迎关注博客: 量化交易