-
-
Save damonclifford/27ffa8a505a55654fbc9b22f6acad6bb to your computer and use it in GitHub Desktop.
Revisions
-
AnthonyFJGarner revised this gist
Dec 21, 2018 . 1 changed file with 0 additions and 883 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,883 +0,0 @@ -
AnthonyFJGarner revised this gist
Dec 21, 2018 . 1 changed file with 907 additions and 0 deletions.There are no files selected for viewing
-
AnthonyFJGarner revised this gist
Dec 19, 2018 . 1 changed file with 0 additions and 635 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,635 +0,0 @@ -
AnthonyFJGarner revised this gist
Dec 19, 2018 . 1 changed file with 883 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,883 @@ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# A simple Mean Reversion System\n", "Most of the following imports are mainstream, well known Python libraries.\n", "\n", "alpha_vantage and fix_yahoo are specialist libraries to download stock data free. To use alpha_vantage you will need to obtain your own key from the providers https://www.alphavantage.co/\n", "\n", "ffn is a specialist library to report trading systems statistics" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from matplotlib.pyplot import figure\n", "%matplotlib notebook\n", "import pandas as pd\n", "from alpha_vantage.timeseries import TimeSeries\n", "import fix_yahoo_finance as yf\n", "#because the is_list_like is moved to pandas.api.types\n", "pd.core.common.is_list_like = pd.api.types.is_list_like\n", "import ffn\n", "#import pixiedust" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following two cells can be used to download stock data and then blanked out again once the data has been saved to csv.\n", "\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "#ts = TimeSeries(key='insert own key', output_format='pandas')\n", "#data, meta_data = ts.get_daily_adjusted(symbol='SPY', outputsize='full')\n", "#data = yf.download(\"SPY\", start=\"1970-01-01\", end=\"2018-12-08\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following line is to create split adjusted Open prices since only the adjusted close is provided:\n", "data['Adj_Open']=data.Open*(data.Adj_Close/data.Close)\n", "\n", "Useful if you want to test taking signal from previous close and trading at the next open." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "#data.rename(columns={'Adj Close': 'Adj_Close'}, inplace=True)\n", "#data['Adj_Open']=data.Open*(data.Adj_Close/data.Close)\n", "#data.to_csv('../data/Stocks/spy.csv')\n", "#data.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Chart the data to check there are no obvious problems with the split adjusted data." ] }, { "cell_type": "code", "execution_count": 112, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 480x320 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pricing = pd.read_csv(\n", " '../data/Stocks/spy.csv',\n", " header=0,\n", " parse_dates=[\"Date\"],\n", " #index_col=0,\n", " usecols=['Date','Adj_Open', 'Adj_Close'])\n", "figure(num=None, figsize=(6, 4), dpi=80, facecolor='w', edgecolor='k')\n", "plt.plot(pricing.Adj_Open, label='Spy Open')\n", "plt.plot(pricing.Adj_Close, label='Spy Close')\n", "plt.xlabel('Date')\n", "plt.ylabel('Price')\n", "plt.legend();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Visual inspection of the DataFrame. Adjust to see wider and different selection of rows. e.g pricing.tail(10) shows \n", "the final ten rows of data. See 10 Minutes to Pandas https://pandas.pydata.org/pandas-docs/stable/10min.html \n", "or the Pandas Cheat Sheet https://pandas.pydata.org/Pandas_Cheat_Sheet.pdf" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>Date</th>\n", " <th>Adj_Close</th>\n", " <th>Adj_Open</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>1993-01-29</td>\n", " <td>27.112253</td>\n", " <td>27.131505</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>1993-02-01</td>\n", " <td>27.305082</td>\n", " <td>27.131502</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>1993-02-02</td>\n", " <td>27.362904</td>\n", " <td>27.285771</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>1993-02-03</td>\n", " <td>27.652185</td>\n", " <td>27.401472</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>1993-02-04</td>\n", " <td>27.767893</td>\n", " <td>27.748579</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Date Adj_Close Adj_Open\n", "0 1993-01-29 27.112253 27.131505\n", "1 1993-02-01 27.305082 27.131502\n", "2 1993-02-02 27.362904 27.285771\n", "3 1993-02-03 27.652185 27.401472\n", "4 1993-02-04 27.767893 27.748579" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pricing.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Shift the Adjusted Close down one row so that it aligns with the next day's Adjusted Open. That way we can calculate the signals using the previous day's Close and enter the trade on the next day's Open" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>Date</th>\n", " <th>Adj_Close</th>\n", " <th>Adj_Open</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>6508</th>\n", " <td>2018-11-30</td>\n", " <td>273.980011</td>\n", " <td>273.809998</td>\n", " </tr>\n", " <tr>\n", " <th>6509</th>\n", " <td>2018-12-03</td>\n", " <td>275.649994</td>\n", " <td>280.279999</td>\n", " </tr>\n", " <tr>\n", " <th>6510</th>\n", " <td>2018-12-04</td>\n", " <td>279.299988</td>\n", " <td>278.369995</td>\n", " </tr>\n", " <tr>\n", " <th>6511</th>\n", " <td>2018-12-06</td>\n", " <td>270.250000</td>\n", " <td>265.920013</td>\n", " </tr>\n", " <tr>\n", " <th>6512</th>\n", " <td>2018-12-07</td>\n", " <td>269.839996</td>\n", " <td>269.459991</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Date Adj_Close Adj_Open\n", "6508 2018-11-30 273.980011 273.809998\n", "6509 2018-12-03 275.649994 280.279999\n", "6510 2018-12-04 279.299988 278.369995\n", "6511 2018-12-06 270.250000 265.920013\n", "6512 2018-12-07 269.839996 269.459991" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "stock=pricing.copy()\n", "stock.Adj_Close=stock.Adj_Close.shift(1)\n", "\n", "stock.tail()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create three or more separate blocks of data for testing. Reserve one of these for out of sample testing." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>Date</th>\n", " <th>Adj_Close</th>\n", " <th>Adj_Open</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>2001-09-04</td>\n", " <td>81.720024</td>\n", " <td>81.505194</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>2001-09-05</td>\n", " <td>81.197357</td>\n", " <td>81.397842</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>2001-09-06</td>\n", " <td>81.397842</td>\n", " <td>80.646166</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>2001-09-07</td>\n", " <td>79.300270</td>\n", " <td>78.763331</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>2001-09-10</td>\n", " <td>77.832664</td>\n", " <td>77.102443</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Date Adj_Close Adj_Open\n", "0 2001-09-04 81.720024 81.505194\n", "1 2001-09-05 81.197357 81.397842\n", "2 2001-09-06 81.397842 80.646166\n", "3 2001-09-07 79.300270 78.763331\n", "4 2001-09-10 77.832664 77.102443" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "stock_1=stock.iloc[0:2170].copy()\n", "stock_2=stock.iloc[2170:4342].copy().reset_index(drop=True)\n", "stock_3=stock.iloc[4342:6513].copy().reset_index(drop=True) \n", "stock_2.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is the code for the actual function which loops through the stock data and executes the trades. You can experiment with different parameters such as changing the maximum position size or starting capital.\n", "\n", "Experiment with changing references:\n", "\n", "1.from both trading and signal generation at the Close; to \n", "\n", "2.signal generation at the Close but trading at the next Open. \n", "\n", "You will not be happy with the result suggesting you may need to automate trading to generate signals and trade intraday so you can execute a trade immediately a signal is given." ] }, { "cell_type": "code", "execution_count": 99, "metadata": { "pixiedust": { "displayParams": {} } }, "outputs": [], "source": [ "# Trade using a simple mean-reversion strategy\n", "def trade(stock, length):\n", "\n", " temp_dict = {}\n", " # If window length is 0, algorithm doesn't make sense, so exit\n", " if length == 0:\n", " return 0\n", "\n", " # Compute rolling means and rolling standard deviation\n", " #sma and lma are filters to prevent taking long or short positions against the longer term trend\n", " rolling_window = stock.Adj_Close.rolling(window=length)\n", " mu = rolling_window.mean()\n", " sma = stock.Adj_Close.rolling(window=length).mean()\n", " lma = stock.Adj_Close.rolling(window=length * 10).mean()\n", " std = rolling_window.std()\n", "\n", " #If you don't use a maximum position size the positions will keep on pyramidding.\n", " #Set max_position to a high number (1000?) to disable this parameter\n", " #Need to beware of unintended leverage\n", " max_position = 1\n", " percent_per_trade = 1.0\n", "\n", " #Slippage and commission adjustment - simply reduces equity by a percentage guess\n", " # a setting of 1 means no slippage, a setting of 0.999 gives 0.1% slippage\n", " slippage_adj = 1\n", "\n", " # Compute the z-scores for each day using the historical data up to that day\n", " zscores = (stock.Adj_Close - mu) / std\n", "\n", " # Simulate trading\n", " # Start with your chosen starting capital and no positions\n", " money = 1000.00\n", " position_count = 0\n", "\n", " for i, row in enumerate(stock.itertuples(), 0):\n", "\n", " #set up position size so that each position is a fixed position of your account equity\n", " equity = money + (stock.Adj_Close[i] * position_count)\n", " if equity > 0:\n", " fixed_frac = (equity * percent_per_trade) / stock.Adj_Close[i]\n", " else:\n", " fixed_frac = 0\n", " fixed_frac = int(round(fixed_frac))\n", "\n", " #exit all positions if zscore flips from positive to negative or vice versa without going through\n", " #the neutral zone\n", " if i > 0:\n", " if (zscores[i - 1] > 0.5\n", " and zscores[i] < -0.5) or (zscores[i - 1] < -0.5\n", " and zscores[i] > 0.5):\n", " #money += position_count * stock.Adj_Close[i]\n", " if position_count > 0:\n", " money += position_count * stock.Adj_Close[i] * slippage_adj\n", " elif position_count < 0:\n", " money += position_count * stock.Adj_Close[i] * (\n", " 1 / slippage_adj)\n", " position_count = 0\n", "\n", " # Sell short if the z-score is > 1 and if the longer term trend is negative\n", " if (zscores[i] > 1) & (position_count > max_position * -1) & (sma[i] <\n", " lma[i]):\n", "\n", " position_count -= fixed_frac\n", " money += fixed_frac * stock.Adj_Close[i] * slippage_adj\n", "\n", " # Buy long if the z-score is < 1 and the longer term trend is positive\n", " elif zscores[i] < -1 and position_count < max_position and sma[i] > lma[i]:\n", "\n", " position_count += fixed_frac\n", " money -= fixed_frac * stock.Adj_Close[i] * (1 / slippage_adj)\n", "\n", " # Clear positions if the z-score between -.5 and .5\n", " elif abs(zscores[i]) < 0.5:\n", " #money += position_count * stock.Adj_Close[i]\n", " if position_count > 0:\n", " money += position_count * stock.Adj_Close[i] * slippage_adj\n", " elif position_count < 0:\n", " money += position_count * stock.Adj_Close[i] * (\n", " 1 / slippage_adj)\n", " position_count = 0\n", "\n", " #fill dictionary with the trading results.\n", " temp_dict[stock.Date[i]] = [\n", " stock.Adj_Open[i], stock.Adj_Close[i], mu[i], std[i], zscores[i],\n", " money, position_count, fixed_frac, sma[i], lma[i]\n", " ]\n", " #create a dataframe to return for use in calculating and charting the trading results\n", " pr = pd.DataFrame(data=temp_dict).T\n", " pr.index.name = 'Date'\n", " pr.index = pd.to_datetime(pr.index)\n", " pr.columns = [\n", " 'Open', 'Close', 'mu', 'std', 'zscores', 'money', 'position_count',\n", " 'fixed_frac', 'sma', 'lma'\n", " ]\n", " pr['equity'] = pr.money + (pr.Close * pr.position_count)\n", " #\n", " return pr" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The next cell calls the function. Experiment with different moving averages by altering the number in brackets.\n", "\n", "profit = trade(stock, moving_average) runs the back test with the entire price series\n", "profit = trade(stock_1, moving_average) runs the test using only the first third of the data and so forth through \n", "stock_2 and stock_3" ] }, { "cell_type": "code", "execution_count": 106, "metadata": { "pixiedust": { "displayParams": {} } }, "outputs": [], "source": [ "moving_average=10\n", "profit = trade(stock, moving_average)\n", "profit.to_csv('../data/mean_reversion_profit.csv')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Inspect the reults data frame" ] }, { "cell_type": "code", "execution_count": 107, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>Open</th>\n", " <th>Close</th>\n", " <th>mu</th>\n", " <th>std</th>\n", " <th>zscores</th>\n", " <th>money</th>\n", " <th>position_count</th>\n", " <th>fixed_frac</th>\n", " <th>sma</th>\n", " <th>lma</th>\n", " <th>equity</th>\n", " </tr>\n", " <tr>\n", " <th>Date</th>\n", " <th></th>\n", " <th></th>\n", " <th></th>\n", " <th></th>\n", " <th></th>\n", " <th></th>\n", " <th></th>\n", " <th></th>\n", " <th></th>\n", " <th></th>\n", " <th></th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>2018-11-30</th>\n", " <td>273.809998</td>\n", " <td>273.980011</td>\n", " <td>269.269998</td>\n", " <td>4.334340</td>\n", " <td>1.086674</td>\n", " <td>15886.752402</td>\n", " <td>-29.0</td>\n", " <td>29.0</td>\n", " <td>269.269998</td>\n", " <td>280.604163</td>\n", " <td>7941.332083</td>\n", " </tr>\n", " <tr>\n", " <th>2018-12-03</th>\n", " <td>280.279999</td>\n", " <td>275.649994</td>\n", " <td>269.532999</td>\n", " <td>4.655090</td>\n", " <td>1.314045</td>\n", " <td>15886.752402</td>\n", " <td>-29.0</td>\n", " <td>29.0</td>\n", " <td>269.532999</td>\n", " <td>280.604539</td>\n", " <td>7892.902576</td>\n", " </tr>\n", " <tr>\n", " <th>2018-12-04</th>\n", " <td>278.369995</td>\n", " <td>279.299988</td>\n", " <td>270.089996</td>\n", " <td>5.474237</td>\n", " <td>1.682425</td>\n", " <td>15886.752402</td>\n", " <td>-29.0</td>\n", " <td>28.0</td>\n", " <td>270.089996</td>\n", " <td>280.616429</td>\n", " <td>7787.052750</td>\n", " </tr>\n", " <tr>\n", " <th>2018-12-06</th>\n", " <td>265.920013</td>\n", " <td>270.250000</td>\n", " <td>270.204996</td>\n", " <td>5.463197</td>\n", " <td>0.008238</td>\n", " <td>8049.502402</td>\n", " <td>0.0</td>\n", " <td>30.0</td>\n", " <td>270.204996</td>\n", " <td>280.535628</td>\n", " <td>8049.502402</td>\n", " </tr>\n", " <tr>\n", " <th>2018-12-07</th>\n", " <td>269.459991</td>\n", " <td>269.839996</td>\n", " <td>270.776996</td>\n", " <td>5.038219</td>\n", " <td>-0.185978</td>\n", " <td>8049.502402</td>\n", " <td>0.0</td>\n", " <td>30.0</td>\n", " <td>270.776996</td>\n", " <td>280.453216</td>\n", " <td>8049.502402</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Open Close mu std zscores \\\n", "Date \n", "2018-11-30 273.809998 273.980011 269.269998 4.334340 1.086674 \n", "2018-12-03 280.279999 275.649994 269.532999 4.655090 1.314045 \n", "2018-12-04 278.369995 279.299988 270.089996 5.474237 1.682425 \n", "2018-12-06 265.920013 270.250000 270.204996 5.463197 0.008238 \n", "2018-12-07 269.459991 269.839996 270.776996 5.038219 -0.185978 \n", "\n", " money position_count fixed_frac sma lma \\\n", "Date \n", "2018-11-30 15886.752402 -29.0 29.0 269.269998 280.604163 \n", "2018-12-03 15886.752402 -29.0 29.0 269.532999 280.604539 \n", "2018-12-04 15886.752402 -29.0 28.0 270.089996 280.616429 \n", "2018-12-06 8049.502402 0.0 30.0 270.204996 280.535628 \n", "2018-12-07 8049.502402 0.0 30.0 270.776996 280.453216 \n", "\n", " equity \n", "Date \n", "2018-11-30 7941.332083 \n", "2018-12-03 7892.902576 \n", "2018-12-04 7787.052750 \n", "2018-12-06 8049.502402 \n", "2018-12-07 8049.502402 " ] }, "execution_count": 107, "metadata": {}, "output_type": "execute_result" } ], "source": [ "profit.tail()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create a new dataframe which contains trhe equity curve as its only column to feed to FFN the stats library" ] }, { "cell_type": "code", "execution_count": 108, "metadata": {}, "outputs": [], "source": [ "series=profit[['equity']].copy()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following charts and stats are allproduced by the FFN Library" ] }, { "cell_type": "code", "execution_count": 109, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Stat equity\n", "------------------- ----------\n", "Start 1993-02-01\n", "End 2018-12-07\n", "Risk-free rate 0.00%\n", "\n", "Total Return 704.95%\n", "Daily Sharpe 0.85\n", "Daily Sortino 1.33\n", "CAGR 8.40%\n", "Max Drawdown -14.44%\n", "Calmar Ratio 0.58\n", "\n", "MTD 1.36%\n", "3m -0.78%\n", "6m -1.30%\n", "YTD -4.45%\n", "1Y -4.45%\n", "3Y (ann.) 1.78%\n", "5Y (ann.) 3.69%\n", "10Y (ann.) 7.96%\n", "Since Incep. (ann.) 8.40%\n", "\n", "Daily Sharpe 0.85\n", "Daily Sortino 1.33\n", "Daily Mean (ann.) 8.58%\n", "Daily Vol (ann.) 10.10%\n", "Daily Skew 0.42\n", "Daily Kurt 24.86\n", "Best Day 8.87%\n", "Worst Day -7.28%\n", "\n", "Monthly Sharpe 1.06\n", "Monthly Sortino 1.96\n", "Monthly Mean (ann.) 8.41%\n", "Monthly Vol (ann.) 7.93%\n", "Monthly Skew 0.31\n", "Monthly Kurt 7.35\n", "Best Month 15.75%\n", "Worst Month -9.52%\n", "\n", "Yearly Sharpe 0.83\n", "Yearly Sortino 9.86\n", "Yearly Mean 8.82%\n", "Yearly Vol 10.69%\n", "Yearly Skew 1.97\n", "Yearly Kurt 4.80\n", "Best Year 44.31%\n", "Worst Year -4.45%\n", "\n", "Avg. Drawdown -2.37%\n", "Avg. Drawdown Days 45.15\n", "Avg. Up Month 1.86%\n", "Avg. Down Month -1.36%\n", "Win Year % 84.00%\n", "Win 12m % 87.33%\n" ] } ], "source": [ "stats = series.calc_stats()\n", "stats.display()" ] }, { "cell_type": "code", "execution_count": 110, "metadata": {}, "outputs": [ { "data": { "image/png": "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Go3GgVYMGo1Go3HQaVJStLW10dTUxP79+wstSkGprq6moaGBykq9SqpGo0mPTqMYmpqaqK2tZeTIkUgXXWlcKUVzczNNTU2MGjWq0OJoNJoSpdOYkvbv30/fvn27rFIAEBH69u3b5UdNGo0mMzqNYgC6tFKw0M9Ao9FkSqdSDBqNRqPJnIwUg4jUi8hSEVlt/u/jU+5hEdkuIg/47P+5iOzORJbOwvr16zn11FMBePnll3nooYcKLJFGo+lqZDpiuBxYppQaCywzv3txA3Cm1w4RaQT0un8mQ4YM4e677wa0YtBoNIUhU8VwEnC7+fl24GSvQkqpZcAu93YRKcdQGt/MUI6i4I477mDmzJlMnTqVL33pS3R0dHDrrbcybtw4jjnmGM477zwuvPBCAL74xS/GFQBAz57GYunr1q3joIMOorW1lauuuoq77rqLqVOnctdddzF27Fg2b94MQCwWY8yYMWzZsiX/N6rRaDo1mYarDlRKbQBQSm0QkQERj78QuN88NkNREnznH6/zxvqdWTsfwKQhvbj64wf67n/zzTe56667ePrpp6msrOSCCy7gjjvu4Oqrr2blypXU1dUxZ84cpk2bFup63bp149prr2XFihXceOONALz11lvceeedXHzxxTz66KNMmTKFfv36ZeX+NBqNxiKlYhCRR4FBHruuzOTCIjIEOA2YHbL8YmAxwPDhwzO5dE5YtmwZK1eu5JBDDgFg3759PPPMM8yePZv+/fsD8OlPf5pVq1alfY2zzz6bk046iYsvvphbbrmFs846KyuyazQajZ2UikEpNc9vn4hsFJHBZo9/MLApwrWnAWOANeZooUZE1iilxvjIcRNwE0BjY6MKOnFQzz5XKKVYtGgR119/fXzbvffeyz333ONZvqKiglgsFj+2tbU15TWGDRvGwIEDeeyxx3j++ee58847syO8RqPR2MjUx3A/sMj8vAi4L+yBSqkHlVKDlFIjlVIjgb1+SqEUmDt3LnfffTebNhm6cevWrUybNo0nnniC5uZm2tra+Otf/xovP3LkSFauXAnAfffdR1tbW9I5a2tr2bXL6Zo599xz+fznP8/pp59OeXl5Du9Io9F0VTJVDEuA+SKyGphvfkdEGkXkZquQiCwH/grMFZEmEVmQ4XWLjkmTJvHd736X4447jsmTJzN//nw2bNjANddcw2GHHca8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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "prices =series\n", "ax = stats.prices.to_drawdown_series().plot()" ] }, { "cell_type": "code", "execution_count": 111, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ax = prices.plot(logy=True)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "celltoolbar": "Raw Cell Format", "kernelspec": { "display_name": "Python 3", "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.6.5" } }, "nbformat": 4, "nbformat_minor": 2 } -
AnthonyFJGarner created this gist
Dec 10, 2018 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,635 @@ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## A simple mean reversion System\n", "Most of the following imports are mainstream, well known Python libraries.\n", "\n", "alpha_vantage and fix_yahoo are specialist libraries to download stock data free. To use alpha_vantage you will need to obtain your own key from the providers https://www.alphavantage.co/\n", "\n", "ffn is a specialist library to report trading systems statistics" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from matplotlib.pyplot import figure\n", "%matplotlib notebook\n", "import pandas as pd\n", "from alpha_vantage.timeseries import TimeSeries\n", "import fix_yahoo_finance as yf\n", "#because the is_list_like is moved to pandas.api.types\n", "pd.core.common.is_list_like = pd.api.types.is_list_like\n", "import ffn\n", "#import pixiedust" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following two cells can be used to download stock data and then blanked out again once the data has been saved to csv.\n", "\n", "The following line is to create split adjusted Open prices since only the adjusted close is provided:\n", "\n", "data['Adj_Open']=data.Open*(data.Adj_Close/data.Close)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "#ts = TimeSeries(key='insert own key', output_format='pandas')\n", "#data, meta_data = ts.get_daily_adjusted(symbol='SPY', outputsize='full')\n", "#data = yf.download(\"SPY\", start=\"1970-01-01\", end=\"2018-12-08\")" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "#data.rename(columns={'Adj Close': 'Adj_Close'}, inplace=True)\n", "#data['Adj_Open']=data.Open*(data.Adj_Close/data.Close)\n", "#data.to_csv('../data/Stocks/spy.csv')\n", "#data.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Chart the data to check there are no obvious problems with the split adjusted data." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "<matplotlib.legend.Legend at 0x1b55c0471d0>" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 480x320 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pricing = pd.read_csv(\n", " '../data/Stocks/spy.csv',\n", " header=0,\n", " parse_dates=[\"Date\"],\n", " #index_col=0,\n", " usecols=['Date','Adj_Open', 'Adj_Close'])\n", "figure(num=None, figsize=(6, 4), dpi=80, facecolor='w', edgecolor='k')\n", "plt.plot(pricing.Adj_Open, label='Spy Open')\n", "plt.plot(pricing.Adj_Close, label='Spy Close')\n", "plt.xlabel('Date')\n", "plt.ylabel('Price')\n", "plt.legend()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>Date</th>\n", " <th>Adj_Close</th>\n", " <th>Adj_Open</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>1993-01-29</td>\n", " <td>27.112253</td>\n", " <td>27.131505</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>1993-02-01</td>\n", " <td>27.305082</td>\n", " <td>27.131502</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>1993-02-02</td>\n", " <td>27.362904</td>\n", " <td>27.285771</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>1993-02-03</td>\n", " <td>27.652185</td>\n", " <td>27.401472</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>1993-02-04</td>\n", " <td>27.767893</td>\n", " <td>27.748579</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Date Adj_Close Adj_Open\n", "0 1993-01-29 27.112253 27.131505\n", "1 1993-02-01 27.305082 27.131502\n", "2 1993-02-02 27.362904 27.285771\n", "3 1993-02-03 27.652185 27.401472\n", "4 1993-02-04 27.767893 27.748579" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pricing.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Shift the Adjusted Close down one row so that it aligns with the next day's Adjusted Open. That way we can calculate the signals using the previous day's Close and enter the trade on the next day's Open" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>Date</th>\n", " <th>Adj_Close</th>\n", " <th>Adj_Open</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>6508</th>\n", " <td>2018-11-30</td>\n", " <td>273.980011</td>\n", " <td>273.809998</td>\n", " </tr>\n", " <tr>\n", " <th>6509</th>\n", " <td>2018-12-03</td>\n", " <td>275.649994</td>\n", " <td>280.279999</td>\n", " </tr>\n", " <tr>\n", " <th>6510</th>\n", " <td>2018-12-04</td>\n", " <td>279.299988</td>\n", " <td>278.369995</td>\n", " </tr>\n", " <tr>\n", " <th>6511</th>\n", " <td>2018-12-06</td>\n", " <td>270.250000</td>\n", " <td>265.920013</td>\n", " </tr>\n", " <tr>\n", " <th>6512</th>\n", " <td>2018-12-07</td>\n", " <td>269.839996</td>\n", " <td>269.459991</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Date Adj_Close Adj_Open\n", "6508 2018-11-30 273.980011 273.809998\n", "6509 2018-12-03 275.649994 280.279999\n", "6510 2018-12-04 279.299988 278.369995\n", "6511 2018-12-06 270.250000 265.920013\n", "6512 2018-12-07 269.839996 269.459991" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "stock=pricing.copy()\n", "stock.Adj_Close=stock.Adj_Close.shift(1)\n", "stock.tail()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create three or more separate blocks of data for testing. Reserve one of these for out of sample testing." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>Date</th>\n", " <th>Adj_Close</th>\n", " <th>Adj_Open</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>6508</th>\n", " <td>2018-11-30</td>\n", " <td>273.980011</td>\n", " <td>273.809998</td>\n", " </tr>\n", " <tr>\n", " <th>6509</th>\n", " <td>2018-12-03</td>\n", " <td>275.649994</td>\n", " <td>280.279999</td>\n", " </tr>\n", " <tr>\n", " <th>6510</th>\n", " <td>2018-12-04</td>\n", " <td>279.299988</td>\n", " <td>278.369995</td>\n", " </tr>\n", " <tr>\n", " <th>6511</th>\n", " <td>2018-12-06</td>\n", " <td>270.250000</td>\n", " <td>265.920013</td>\n", " </tr>\n", " <tr>\n", " <th>6512</th>\n", " <td>2018-12-07</td>\n", " <td>269.839996</td>\n", " <td>269.459991</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Date Adj_Close Adj_Open\n", "6508 2018-11-30 273.980011 273.809998\n", "6509 2018-12-03 275.649994 280.279999\n", "6510 2018-12-04 279.299988 278.369995\n", "6511 2018-12-06 270.250000 265.920013\n", "6512 2018-12-07 269.839996 269.459991" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "stock_1=stock.iloc[0:2170]\n", "stock_2=stock.iloc[2170:4342]\n", "stock_3=stock.iloc[4342:6513] \n", "stock_3.tail()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is the code for the actual function which loops through the stock data and executes the trades. You can experiment with different parameters such as changing the maximum position size or starting capital." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "pixiedust": { "displayParams": {} } }, "outputs": [], "source": [ "# Trade using a simple mean-reversion strategy\n", "def trade(stock, length):\n", "\n", " temp_dict = {}\n", " # If window length is 0, algorithm doesn't make sense, so exit\n", " if length == 0:\n", " return 0\n", "\n", " # Compute rolling mean and rolling standard deviation\n", " rolling_window = stock.Adj_Close.rolling(window=length)\n", " mu = rolling_window.mean()\n", " std = rolling_window.std()\n", "\n", " #If you don't use a maximum position size the positions will keep on pyramidding.\n", " #Set max_position to a high number (1000?) to disable this parameter\n", " max_position = 2\n", "\n", " # Compute the z-scores for each day using the historical data up to that day\n", " zscores = (stock.Adj_Close - mu) / std\n", "\n", " # Simulate trading\n", " # Start with your chosen starting capital and no positions\n", " money = 100\n", " position_count = 0\n", "\n", " for i, row in enumerate(stock.itertuples(), 0):\n", "\n", " # Sell short if the z-score is > 1\n", " if zscores[i] > 1 and position_count > max_position * -1:\n", " money += stock.Adj_Open[i]\n", " position_count -= 1\n", " # Buy long if the z-score is < 1\n", " elif zscores[i] < -1 and position_count < max_position:\n", " # print (position_count)\n", " money -= stock.Adj_Open[i]\n", " position_count += 1\n", " # Clear positions if the z-score between -.5 and .5\n", " elif abs(zscores[i]) < 0.5:\n", " money += position_count * stock.Adj_Open[i]\n", " position_count = 0\n", " #fill dictionary with the trading results.\n", " temp_dict[stock.Date[i]] = [\n", " stock.Adj_Open[i], stock.Adj_Close[i], mu[i], std[i], zscores[i],\n", " money, position_count\n", " ]\n", " #create a dataframe to return for use in calculating and charting the trading results\n", " pr = pd.DataFrame(data=temp_dict).T\n", " pr.index.name = 'Date'\n", " pr.index = pd.to_datetime(pr.index)\n", " pr.columns = [\n", " 'Open', 'Close', 'mu', 'std', 'zscores', 'money', 'position_count'\n", " ]\n", " pr['equity'] = pr.money + (pr.Close * pr.position_count)\n", " #\n", " return pr" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The next cell calls the function. Experiment with different moving averages by altering the number in brackets." ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "pixiedust": { "displayParams": {} } }, "outputs": [], "source": [ "profit = trade(stock_1, 15)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "series=profit[['equity']].copy()" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Stat equity\n", "------------------- ----------\n", "Start 1993-02-01\n", "End 2001-08-31\n", "Risk-free rate 0.00%\n", "\n", "Total Return 64.54%\n", "Daily Sharpe 0.46\n", "Daily Sortino 0.74\n", "CAGR 5.98%\n", "Max Drawdown -22.30%\n", "Calmar Ratio 0.27\n", "\n", "MTD 0.07%\n", "3m 7.02%\n", "6m -2.38%\n", "YTD -7.91%\n", "1Y -3.33%\n", "3Y (ann.) 12.04%\n", "5Y (ann.) 7.31%\n", "10Y (ann.) 5.98%\n", "Since Incep. (ann.) 5.98%\n", "\n", "Daily Sharpe 0.46\n", "Daily Sortino 0.74\n", "Daily Mean (ann.) 6.94%\n", "Daily Vol (ann.) 15.20%\n", "Daily Skew 0.28\n", "Daily Kurt 15.55\n", "Best Day 8.22%\n", "Worst Day -8.73%\n", "\n", "Monthly Sharpe 0.53\n", "Monthly Sortino 0.98\n", "Monthly Mean (ann.) 6.59%\n", "Monthly Vol (ann.) 12.39%\n", "Monthly Skew 0.22\n", "Monthly Kurt 2.31\n", "Best Month 13.23%\n", "Worst Month -11.69%\n", "\n", "Yearly Sharpe 0.41\n", "Yearly Sortino 1.24\n", "Yearly Mean 6.51%\n", "Yearly Vol 15.95%\n", "Yearly Skew 0.54\n", "Yearly Kurt -0.39\n", "Best Year 33.48%\n", "Worst Year -14.16%\n", "\n", "Avg. Drawdown -2.18%\n", "Avg. Drawdown Days 33.64\n", "Avg. Up Month 2.66%\n", "Avg. Down Month -2.35%\n", "Win Year % 62.50%\n", "Win 12m % 70.65%\n" ] } ], "source": [ "stats = series.calc_stats()\n", "stats.display()" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "prices =series\n", "ax = stats.prices.to_drawdown_series().plot()" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ax = prices.plot(logy=True)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.6.5" } }, "nbformat": 4, "nbformat_minor": 2 }