<aside> 📐 SDR Sharpe Ratio
$$ \text{SDRSR}=\frac{\text{ACR}-\text{RF}}{\sqrt{2} * \text{DD}} $$
where:
The downside deviation (DD) is calculated as:
$$ ⁍ $$
where:
Then, to find the minimum value of SDRSR for any 28-day daily incremented successive rolling windows, we write:
$$ \min_{t} \left\{ \text{SDRSR}_{t:t+28} \right\} $$
where:
Each $\text{SDRSR}_{t:t+28}$ is calculated using the original SDRSR formula, but with $N = 28$ and the return and deviation variables $(X_i$, $\overline{X}$, and DD) computed over the $t$ to $t+28$ window.
</aside>
The symmetric downside-risk (SDR) Sharpe ratio, introduced by William T. Ziemba, is similar to the Sortino ratio in purpose and construction. However, it addresses a crucial issue of upward bias in the Sortino ratio compared to the Sharpe ratio. The SDR Sharpe ratio is calculated by subtracting the risk-free return from the compounded return and then dividing it by the downside deviation. The downside deviation is calculated similarly to the Sortino ratio but with one important difference: a multiplier of 2.0 is applied to account for the fact that only returns below a specified benchmark are considered in the deviation calculation.
<aside> 💡 Note that the product of the square roots of two numbers is equal to the square root of the product of those numbers. In other words: $\sqrt{A} \cdot \sqrt{B} = \sqrt{A \cdot B}$
</aside>
The benchmark used for the downside deviation can be set at any level, with the same choices as the MAR in the Sortino ratio: zero, risk-free return, or average return. (Ziemba uses zero as the benchmark in his article.) Unlike the Sortino ratio, the SDR Sharpe ratio (with the benchmark set to the average) can be directly compared to the Sharpe ratio.
Since the SDR Sharpe ratio only contains the downside deviation, multiplying by the square root of 2, a result of the squared deviations being doubled, is akin to assuming the upside deviation mirrors the downside. This substitute for the upside deviation enables the comparison of SDR Sharpe and Sharpe ratio values.
The SDR Sharpe ratio, with any standard benchmark value, is favoured over the Sharpe ratio, considering it factors in the substantial disparity in risk implications of downside versus upside deviations from an investor's viewpoint. The SDR Sharpe ratio is also favoured over the Sortino ratio, given its nearly identical computation, but crucially, it aligns directly with the extensively used Sharpe ratio.
Further, contrasting a manager’s SDR Sharpe ratio with the Sharpe ratio, allows an investor to perceive whether the manager’s returns skew positively or negatively.
Ziemba used the term benchmark instead of MAR in defining downside deviation. If the median were used as the benchmark, only half the returns would be used to calculate the downside deviation, and a multiplier of 2.0 would then provide an exact compensating adjustment. For other choices for the benchmark (e.g., zero, risk-free return, average), the number of points below the benchmark would not necessarily be exactly half, and a multiplier of 2.0 would provide an approximate adjustment.
To be perfectly precise, there would be a tendency for the SDR Sharpe ratio to be slightly lower for a symmetric distribution of returns because the SDR Sharpe ratio uses the compounded return rather than the arithmetic return used in the Sharpe ratio, and the arithmetic return will always be equal to or higher than the compounded return. If, however, zero or the risk-free return is used as the benchmark in the downside deviation calculation, assuming the manager’s average return is greater than the risk-free return, there would be a tendency for the SDR Sharpe ratio to be higher than the Sharpe ratio for a symmetric distribution of returns for two reasons:
These two factors would cause the downside deviation to be smaller than the standard deviation, implying a higher SDR Sharpe ratio than Sharpe ratio.
import numpy as np
def calculate_sdrsr(returns, risk_free_rate, benchmark):
# Calculate Annual Compounded Return (ACR)
acr = np.prod(1 + np.array(returns))**(1/len(returns)) - 1
# Calculate Downside Deviation (DD)
downside_returns = [min(ret - benchmark, 0) for ret in returns]
dd = np.sqrt(np.sum(np.square(downside_returns)) / (len(returns) - 1))
# Calculate Symmetric Downside-Risk Sharpe Ratio (SDRSR)
sdrsr = (acr - risk_free_rate) / (np.sqrt(2) * dd)
return sdrsr
def find_min_sdrsr(returns, risk_free_rate, window_length=28):
min_sdrsr = float('inf')
for i in range(len(returns) - window_length + 1):
window_returns = returns[i:i + window_length]
benchmark = np.mean(window_returns) # replace with your data
sdrsr = calculate_sdrsr(window_returns, risk_free_rate, benchmark)
if sdrsr < min_sdrsr:
min_sdrsr = sdrsr
return min_sdrsr
returns = [0.1, -0.05, 0.2, -0.1, 0.15, -0.05, 0.1, -0.15, 0.2, -0.05, 0.15, -0.1, 0.2, -0.05, 0.15, -0.1, 0.2, -0.05, 0.1, -0.15, 0.2, -0.05, 0.15, -0.1, 0.2, -0.05, 0.15, -0.1, 0.2, -0.05, 0.15] # replace with your data
risk_free_rate = 0.02 # replace with your data
min_sdrsr = find_min_sdrsr(returns, risk_free_rate)
print("The minimum Symmetric Downside-Risk Sharpe Ratio in 28-day windows is:", min_sdrsr)
The Symmetric Downside-Risk Sharpe Ratio (SDRSR) is defined as:
<aside> 📐 Sharpe ratio
Sharpe ratio is a measure for calculating risk-adjusted return, and this formula is widely used in the finance industry. The formula is as follows:
$$ ⁍ $$
where: