分析:索提诺(Sortino)比率 

定义:

索蒂诺比率是Frank Sortino开发的夏普(Sharpe)比率的改良版。与夏普比率不同,索蒂诺比率忽略了正向波动率,仅关注对投资者构成危险的回撤。

解释:

它显示了收益与风险的补偿效果。最终值直接表明了1%的下行偏差对应多少百分比的收益。

该指标的普遍接受目标值为≥2,但应始终考虑其与基准和市场情况的比率。

例子:

投资组合:

  • 无风险利率 (RFR) = 2%
  • 2025年1月1日 存入1000
  • 2025年3月3日 购买纳斯达克股票代码:AAPL(数量:1,价格:190,佣金:0)
  • 2025年4月11日 索提诺比率计算日期。AAPL最新价格 = 198.15

索提诺比率投资组合 0.047%:

  • 下行风险无法通过收益得到有效补偿
  • 每1%可接受的下行偏差仅带来0.047%的超额收益

索提诺比率基准 -0.817%:

  • 每下降一个单位百分比,投资组合相对于无风险利率就会损失 0.817% 的回报 

注意:为简化计算,应考虑观察期的短期性质。 

计算:

索蒂诺比率 = (Rp − RFR) / DD 

  • Rp(投资组合回报率)—— 投资组合业绩百分比,使用TWR方法按月计算,以百分比表示。
  • RFR(无风险利率)—— 取自投资组合设置。由于设置中设定的是年利率,因此在计算之前必须将其转换为当期利率。
  • DD(下行偏差)—— 当期业绩负值之间的标准差

索提诺比率计算解释示例: 

  1. 每月 RFR 计算:  2 / 12 = 0.167%
  2. Rp计算:  Performance by periods:
    1. 1月: 0
    2. 2月: 0
    3. 3月: 3.2% (obtained: pv on March 31 → ((1032.13 − 1000) / 1000) * 100 )
    4. 4月: −2.3% (obtained: ((1008.15 − 1032.13) / 1032.13) * 100 )

Rp = (0 + 0 + 3.2 − 2.3) / 4 = 0.225

  1. DD计算: 
    1. 1月: min(0, 0 − 0.167)² = 0.0279
    2. 2月: min(0, 0 − 0.167)² = 0.0279
    3. 3月: min(0, 3.2 − 0.167)² = 0
    4. 4月: min(0, −2.3 − 0.167)² = 6.1009

DD = ((0.0279 + 0.0279 + 0 + 6.1009) / 4)^(1/2) = 1.24%

  1. 索提诺比率计算: SR = (Rp − RFR) / DD = (0.225% − 0.167%) / 1.24% ≈ 0.047%

Pine参考:

//@version=6 indicator("Sortino ratio example") method downsideDeviation(array<float> returns, series float targetReturn) =>    float sum = 0.0    for r in returns        if r >= targetReturn            continue        sum += math.pow(r - targetReturn, 2)    sum /= returns.size()    float result = math.sqrt(sum) method sortinoRatio(array<float> returnsArray, series float annualBenchmark) =>    var int numberOfperiods = 12    if barstate.islast        float fixedPeriodReturn = annualBenchmark / numberOfperiods        float downsideDev       = returnsArray.downsideDeviation(fixedPeriodReturn)        float avgReturn         = returnsArray.avg()        float result            = (avgReturn - fixedPeriodReturn) / downsideDev array<float> arr = array.from(0, 0, 3.2, -2.3) float sortino = sortinoRatio(arr, 2) plot(sortino, precision = 3)
Generic

注意:

如果所有交易都是在相对于指标计算日期的当前月份进行的,则不会计算该指标,因为没有一个完整的日历月。

另请阅读: