{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Sharpe Ratio - Introduction\n", "\n", "\n", "Sharpe Ratio is the most common metric used to measure risk in finance.\n", "\n", "The formula is \n", "\n", "> (return on portfolio - risk free rate)/standard deviation of the excess return on the portfolio\n", "\n", "There are tons of resources on the internet about sharpe ratio.\n", "\n", "[This investopedia page](https://www.investopedia.com/terms/s/sharperatio.asp) is a good introduction.\n", "\n", "In this series of articles, we take a deep dive into the sharpe ratio and its variations and usage.\n", "\n", "We assume the risk free rate to be zero, then the formula simply becomes mean returns divided by the standard deviation of returns. The following terms are used interchangebly throughout this article\n", "\n", " * mean returns/average returns/mu\n", " * standard deviation of returns/deviation/sigma\n", "\n", "We would be working on the NSE Nifty 50 index data" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import empyrical as ep\n", "from typing import Tuple\n", "import seaborn as sns\n", "sns.set()" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "parameters" ] }, "outputs": [], "source": [ "# Parameters \n", "# useful when running as a papermill notebook\n", "\n", "filename:str = '/tmp/nifty.csv'\n", "periods:Tuple[str] = ('W','M','Y')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
openhighlowclosedaily_return
date
2000-01-031482.151592.901482.151592.2NaN
2000-01-041594.401641.951594.401638.70.029205
2000-01-051634.551635.501555.051595.8-0.026179
2000-01-061595.801639.001595.801617.60.013661
2000-01-071616.601628.251597.201613.3-0.002658
\n", "
" ], "text/plain": [ " open high low close daily_return\n", "date \n", "2000-01-03 1482.15 1592.90 1482.15 1592.2 NaN\n", "2000-01-04 1594.40 1641.95 1594.40 1638.7 0.029205\n", "2000-01-05 1634.55 1635.50 1555.05 1595.8 -0.026179\n", "2000-01-06 1595.80 1639.00 1595.80 1617.6 0.013661\n", "2000-01-07 1616.60 1628.25 1597.20 1613.3 -0.002658" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv(filename, index_col=['date'], parse_dates=['date'])\n", "df['daily_return'] = df.close.pct_change()\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Daily mean return = 0.0005\n", "Deviation of daily returns = 0.0144\n", "Sharpe ratio = 0.0381\n" ] } ], "source": [ "mu,sigma = df.daily_return.mean(), df.daily_return.std()\n", "print(f\"Daily mean return = {mu :.4f}\")\n", "print(f\"Deviation of daily returns = {sigma :.4f}\")\n", "print(f\"Sharpe ratio = {mu/sigma :.4f}\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Sharpe ratio - converting to various periods\n", "\n", "The sharpe ratio calculated here is based on daily return. To calculate it for other periods, multiply this by the square root of the period.\n", "\n", "`sharpe ratio * √n`\n", "\n", "To get the weekly sharpe ratio, multiply by √5 since there are 5 trading days in a week, √20 for a month and so on. Most of the literature and news display the annualized sharpe ratio, sharpe ratio per annum\n", "\n", "" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sharpe ratio for the period weekly is 0.0851\n", "Sharpe ratio for the period monthly is 0.1703\n", "Sharpe ratio for the period yearly is 0.6044\n", "Sharpe ratio annualized calculated using empyrical is 0.6044\n" ] } ], "source": [ "def sharpe_period(sr:float, n:int)->float:\n", " sr_p = sr*np.sqrt(n)\n", " return sr_p\n", "\n", "for p,n in zip(('weekly','monthly','yearly'),(5,20,252)):\n", " print(f\"Sharpe ratio for the period {p} is {sharpe_period(mu/sigma, n):.4f}\")\n", " \n", "print(f\"Sharpe ratio annualized calculated using empyrical is {ep.sharpe_ratio(df.daily_return):.4f}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Calculate sharpe ratio by resampling" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sharpe ratio for the period weekly is 0.0852\n", "Sharpe ratio for the period monthly is 0.1752\n", "Sharpe ratio for the period yearly is 0.5821\n" ] } ], "source": [ "def resampled_sharpe(dataframe:pd.DataFrame, freq:str)->float:\n", " resampled = dataframe.resample(freq).close.last().pct_change()\n", " sharpe = resampled.mean()/resampled.std()\n", " return sharpe\n", "\n", "for p,n in zip(('weekly','monthly','yearly'),periods):\n", " print(f\"Sharpe ratio for the period {p} is {resampled_sharpe(df, n):.4f}\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The sharpe ratio by both the methods match though not exact and bigger the timeframe, the bigger is the difference between the methods. This may be due to the fact that the daily returns have more data compared to the resampled series which has got less data when we increase the time period.\n", "\n", "The sharpe ratio calculated thus far is the *ex-post* sharpe ratio since it is calculated after the event has occured. In practice, we use this ratio on a *ex-ante* basis, as a predictor for the future. *ex-ante* is the the expected sharpe ratio while the *ex-post* is the actual/realised sharpe ratio\n", "\n", "This excellent [article](https://corporatefinanceinstitute.com/resources/knowledge/trading-investing/ex-ante-vs-ex-post/) shows how ex-post and ex-ante are calculated in general" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## A note on the risk free rate\n", "\n", "All the calculations are done assuming 0 is the risk-free rate. Let us see a simulation with different risk free rates\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "rates = np.linspace(0,0.1,50)\n", "sharpe_ratios = {}\n", "for r in rates:\n", " sharpe_ratios[r] = ep.sharpe_ratio(df.daily_return,risk_free=r/365)\n", "ax = pd.Series(sharpe_ratios).plot(title='Sharpe ratio versus risk free rate')\n", "ax.set_xlabel('Sharpe Ratio')\n", "ax.set_ylabel('Risk free rate');\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.2" }, "nikola": { "category": "risk management", "date": "2021-11-04 06:52:05 UTC", "slug": "sharpe-ratio", "tags": "sharpe,risk", "title": "Sharpe ratio" } }, "nbformat": 4, "nbformat_minor": 4 }