sharpe_ratio
Calculate the rolling annualized Sharpe ratio of a price series.
The prices are converted to periodic returns. In each rolling window, the mean return in excess of the risk-free rate is divided by the standard deviation of the returns and annualized assuming 252 periods per year.
Examples
from openbb import obb
obb.quantitative.performance.sharpe_ratio(target='close', window=20, data=[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}, {'date': '2023-01-07', 'open': 128.33, 'high': 140.0, 'low': 116.67, 'close': 134.17, 'volume': 11666.67}, {'date': '2023-01-08', 'open': 125.71, 'high': 137.14, 'low': 114.29, 'close': 131.43, 'volume': 11428.57}, {'date': '2023-01-09', 'open': 123.75, 'high': 135.0, 'low': 112.5, 'close': 129.38, 'volume': 11250.0}, {'date': '2023-01-10', 'open': 122.22, 'high': 133.33, 'low': 111.11, 'close': 127.78, 'volume': 11111.11}, {'date': '2023-01-11', 'open': 121.0, 'high': 132.0, 'low': 110.0, 'close': 126.5, 'volume': 11000.0}, {'date': '2023-01-12', 'open': 120.0, 'high': 130.91, 'low': 109.09, 'close': 125.45, 'volume': 10909.09}, {'date': '2023-01-13', 'open': 119.17, 'high': 130.0, 'low': 108.33, 'close': 124.58, 'volume': 10833.33}, {'date': '2023-01-14', 'open': 118.46, 'high': 129.23, 'low': 107.69, 'close': 123.85, 'volume': 10769.23}, {'date': '2023-01-15', 'open': 117.86, 'high': 128.57, 'low': 107.14, 'close': 123.21, 'volume': 10714.29}, {'date': '2023-01-16', 'open': 117.33, 'high': 128.0, 'low': 106.67, 'close': 122.67, 'volume': 10666.67}, {'date': '2023-01-17', 'open': 116.88, 'high': 127.5, 'low': 106.25, 'close': 122.19, 'volume': 10625.0}, {'date': '2023-01-18', 'open': 116.47, 'high': 127.06, 'low': 105.88, 'close': 121.76, 'volume': 10588.24}, {'date': '2023-01-19', 'open': 116.11, 'high': 126.67, 'low': 105.56, 'close': 121.39, 'volume': 10555.56}, {'date': '2023-01-20', 'open': 115.79, 'high': 126.32, 'low': 105.26, 'close': 121.05, 'volume': 10526.32}, {'date': '2023-01-21', 'open': 115.5, 'high': 126.0, 'low': 105.0, 'close': 120.75, 'volume': 10500.0}, {'date': '2023-01-22', 'open': 115.24, 'high': 125.71, 'low': 104.76, 'close': 120.48, 'volume': 10476.19}, {'date': '2023-01-23', 'open': 115.0, 'high': 125.45, 'low': 104.55, 'close': 120.23, 'volume': 10454.55}, {'date': '2023-01-24', 'open': 114.78, 'high': 125.22, 'low': 104.35, 'close': 120.0, 'volume': 10434.78}, {'date': '2023-01-25', 'open': 114.58, 'high': 125.0, 'low': 104.17, 'close': 119.79, 'volume': 10416.67}, {'date': '2023-01-26', 'open': 114.4, 'high': 124.8, 'low': 104.0, 'close': 119.6, 'volume': 10400.0}, {'date': '2023-01-27', 'open': 114.23, 'high': 124.62, 'low': 103.85, 'close': 119.42, 'volume': 10384.62}, {'date': '2023-01-28', 'open': 114.07, 'high': 124.44, 'low': 103.7, 'close': 119.26, 'volume': 10370.37}, {'date': '2023-01-29', 'open': 113.93, 'high': 124.29, 'low': 103.57, 'close': 119.11, 'volume': 10357.14}, {'date': '2023-01-30', 'open': 113.79, 'high': 124.14, 'low': 103.45, 'close': 118.97, 'volume': 10344.83}, {'date': '2023-01-31', 'open': 113.67, 'high': 124.0, 'low': 103.33, 'close': 118.83, 'volume': 10333.33}, {'date': '2023-02-01', 'open': 113.55, 'high': 123.87, 'low': 103.23, 'close': 118.71, 'volume': 10322.58}, {'date': '2023-02-02', 'open': 113.44, 'high': 123.75, 'low': 103.12, 'close': 118.59, 'volume': 10312.5}, {'date': '2023-02-03', 'open': 113.33, 'high': 123.64, 'low': 103.03, 'close': 118.48, 'volume': 10303.03}, {'date': '2023-02-04', 'open': 113.24, 'high': 123.53, 'low': 102.94, 'close': 118.38, 'volume': 10294.12}, {'date': '2023-02-05', 'open': 113.14, 'high': 123.43, 'low': 102.86, 'close': 118.29, 'volume': 10285.71}, {'date': '2023-02-06', 'open': 113.06, 'high': 123.33, 'low': 102.78, 'close': 118.19, 'volume': 10277.78}, {'date': '2023-02-07', 'open': 112.97, 'high': 123.24, 'low': 102.7, 'close': 118.11, 'volume': 10270.27}, {'date': '2023-02-08', 'open': 112.89, 'high': 123.16, 'low': 102.63, 'close': 118.03, 'volume': 10263.16}, {'date': '2023-02-09', 'open': 112.82, 'high': 123.08, 'low': 102.56, 'close': 117.95, 'volume': 10256.41}, {'date': '2023-02-10', 'open': 112.75, 'high': 123.0, 'low': 102.5, 'close': 117.87, 'volume': 10250.0}, {'date': '2023-02-11', 'open': 112.68, 'high': 122.93, 'low': 102.44, 'close': 117.8, 'volume': 10243.9}, {'date': '2023-02-12', 'open': 112.62, 'high': 122.86, 'low': 102.38, 'close': 117.74, 'volume': 10238.1}, {'date': '2023-02-13', 'open': 112.56, 'high': 122.79, 'low': 102.33, 'close': 117.67, 'volume': 10232.56}, {'date': '2023-02-14', 'open': 112.5, 'high': 122.73, 'low': 102.27, 'close': 117.61, 'volume': 10227.27}, {'date': '2023-02-15', 'open': 112.44, 'high': 122.67, 'low': 102.22, 'close': 117.56, 'volume': 10222.22}, {'date': '2023-02-16', 'open': 112.39, 'high': 122.61, 'low': 102.17, 'close': 117.5, 'volume': 10217.39}, {'date': '2023-02-17', 'open': 112.34, 'high': 122.55, 'low': 102.13, 'close': 117.45, 'volume': 10212.77}, {'date': '2023-02-18', 'open': 112.29, 'high': 122.5, 'low': 102.08, 'close': 117.4, 'volume': 10208.33}, {'date': '2023-02-19', 'open': 112.24, 'high': 122.45, 'low': 102.04, 'close': 117.35, 'volume': 10204.08}, {'date': '2023-02-20', 'open': 112.2, 'high': 122.4, 'low': 102.0, 'close': 117.3, 'volume': 10200.0}, {'date': '2023-02-21', 'open': 112.16, 'high': 122.35, 'low': 101.96, 'close': 117.25, 'volume': 10196.08}, {'date': '2023-02-22', 'open': 112.12, 'high': 122.31, 'low': 101.92, 'close': 117.21, 'volume': 10192.31}, {'date': '2023-02-23', 'open': 112.08, 'high': 122.26, 'low': 101.89, 'close': 117.17, 'volume': 10188.68}, {'date': '2023-02-24', 'open': 112.04, 'high': 122.22, 'low': 101.85, 'close': 117.13, 'volume': 10185.19}, {'date': '2023-02-25', 'open': 112.0, 'high': 122.18, 'low': 101.82, 'close': 117.09, 'volume': 10181.82}, {'date': '2023-02-26', 'open': 111.96, 'high': 122.14, 'low': 101.79, 'close': 117.05, 'volume': 10178.57}, {'date': '2023-02-27', 'open': 111.93, 'high': 122.11, 'low': 101.75, 'close': 117.02, 'volume': 10175.44}, {'date': '2023-02-28', 'open': 111.9, 'high': 122.07, 'low': 101.72, 'close': 116.98, 'volume': 10172.41}, {'date': '2023-03-01', 'open': 111.86, 'high': 122.03, 'low': 101.69, 'close': 116.95, 'volume': 10169.49}, {'date': '2023-03-02', 'open': 111.83, 'high': 122.0, 'low': 101.67, 'close': 116.92, 'volume': 10166.67}])
Parameters
- standard
data: Data | DataFrame | Series | dict | list | list[DataFrame] | list[Data] | list[Series] | ndarray
Input dataset.
target: str
Name of the price column to analyze.
rfr: float
Default: 0.0
Annualized risk-free rate, as a decimal fraction.
window: int
Default: 252
Number of observations in each rolling window.
index: str
Default: date
Name of the index column.
Returns
results: list[SharpeRatioData]
Serializable results.
provider: str
Provider name.
warnings: Optional[list[Warning_]]
List of warnings.
chart: Optional[Chart]
Chart object.
extra: dict[str, Any]
Extra info.
Data
- standard
date: date | datetime | str
Observation date.
sharpe_ratio: float
Rolling annualized Sharpe ratio.