diff --git a/pyfolio/examples/round_trip_example.ipynb b/pyfolio/examples/round_trip_example.ipynb new file mode 100644 index 00000000..a3da9cdf --- /dev/null +++ b/pyfolio/examples/round_trip_example.ipynb @@ -0,0 +1,161 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Round Trip Tearsheet" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When evaluating the performance of an investing strategy, it is helpful to quantify the frequency, duration, and profitability of its independent bets, or \"round trip\" trades. A round trip trade is started when a new long or short position is opened and is only completed when the number of shares in that position returns to or crosses zero. \n", + "\n", + "The intent of the round trip tearsheet is to help differentiate strategies that profited off a few lucky trades from strategies that profited repeatedly from genuine alpha. Breaking down round trip profitability by traded name and sector can also help inform universe selection and identify exposure risks. For example, even if your equity curve looks robust, if only two securities in your universe of fifteen names contributed to overall profitability, you may have reason to question the logic of your strategy.\n", + "\n", + "To identify round trips, pyfolio groups transactions by symbol and identifies the points at which each position amount leaves and returns to zero. Behind the scenes, transactions that cause position amounts to flip directly from long to short or short to long are divided into separate transactions so that distinct round trips can be identified. In calculating round trips, pyfolio will also append position closing transactions at the last timestamp in the positions data. This closing transaction will cause the PnL from any open positions to realized as completed round trips.\n", + "\n", + "**Note: The round trip method of quantifying performance is not applicable to every style of strategy.** For instance, simple rebalancing algorithms make very few, if any, round trip trades. The results of the round trip tearsheet will be less informative for any strategy that doesn't entirely exit positions." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import gzip\n", + "import os\n", + "import pandas as pd\n", + "import pyfolio as pf" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "transactions = pd.read_csv(gzip.open('../tests/test_data/test_txn.csv.gz'),\n", + " index_col=0, parse_dates=0)\n", + "positions = pd.read_csv(gzip.open('../tests/test_data/test_pos.csv.gz'),\n", + " index_col=0, parse_dates=0)\n", + "returns = pd.read_csv(gzip.open('../tests/test_data/test_returns.csv.gz'),\n", + " index_col=0, parse_dates=0)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Optional: Sector mappings may be passed in as a dict or pd.Series. If a mapping is\n", + "# provided, PnL from symbols with mappings will be summed to display profitability by sector.\n", + "sect_map = {'COST': 'Consumer Goods', 'INTC':'Technology', 'CERN':'Healthcare', 'GPS':'Technology',\n", + " 'MMM': 'Construction', 'DELL': 'Technology', 'AMD':'Technology'}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " duration pnl returns long\n", + "count 1430 1430.000000 1430.000000 1430\n", + "mean 9 days 16:40:56.154545 45.737238 0.003543 0.5230769\n", + "std 22 days 02:16:41.165898 1616.537844 0.031288 0.4996419\n", + "min 0 days 00:00:00 -30697.460000 -0.218045 False\n", + "25% 0 days 23:59:59 -5.773144 -0.011450 0\n", + "50% 2 days 23:59:59 0.871629 0.003885 1\n", + "75% 5 days 23:59:59 40.438366 0.018126 1\n", + "max 286 days 00:00:00 17835.869482 0.204385 True\n", + "Percent of round trips profitable = 57.2%\n", + "Mean return per winning round trip = 0.02181\n", + "Mean return per losing round trip = -0.02108\n", + "A decision is made every 1.053 days.\n", + "0.9495 trading decisions per day.\n", + "19.94 trading decisions per month.\n", + "\n", + "Profitability (PnL / PnL total) per name:\n", + "symbol\n", + "COST 0.398964\n", + "INTC 0.382659\n", + "CERN 0.323077\n", + "MMM 0.221479\n", + "GPS 0.049385\n", + "AMD -0.064091\n", + "DELL -0.311473\n", + "Name: pnl, dtype: float64\n", + "\n", + "Profitability (PnL / PnL total) per name:\n", + "symbol\n", + "Consumer Goods 0.398964\n", + "Healthcare 0.323077\n", + "Construction 0.221479\n", + "Technology 0.056480\n", + "Name: pnl, dtype: float64\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\nRVCkAwAAAADgIijSAQAAAABwERTpAAAAAAC4CIp0AAAAAABcBEU6AAAAAAAugiIdAAAAAAAXQZEO\nAAAAAICLoEgHAAAAAMBFUKQDAAAAAOAiKNIBAAAAAHARFOkAAMBu7ty5mjNnTrtlK1as0E033aSU\nlBSNGzdOq1atajdeXV2tmTNnKiMjQyNHjtT8+fPV2trabp233npL11xzjYYPH65p06bpwIEDDp8L\nAADuiCIdAADIMAwtWLBAK1eulMVisS9/++239cILL+iBBx7Q3/72N02ZMkW/+93v9Ne//tW+zkMP\nPaSamhqtWLFCzz77rNasWaOFCxfax1etWqVFixbpV7/6lVauXClfX1/dc889stlsTp0jAADugCId\nAIAurqSkRJMnT9a7776rnj17tht77733NGnSJP3oRz9S7969dfvtt+uWW27RmjVrJElbt27Vli1b\n9NxzzykxMVFZWVl67LHHtGLFCjU3N0uSXn/9dU2dOlU33HCDEhIS9MILL6i6ulr/+Mc/nD5XAABc\nHUU6AABd3NatWxUbG6v3339fsbGx7cbmzJmjO+64o90yi8Wi48ePS5Jyc3MVGxvbbruMjAzV19dr\nz549qq6u1oEDB3TllVfaxwMCAjRkyBDl5uY6cFYAALgnL7MDAAAAc40fP17jx48/41hGRka7/z98\n+LA++OADTZ48WZJUUVGhqKiodutERkZKksrLy+Xp6SlJZ1ynvLy8Q/IDANCZcCYdAABckJqaGk2f\nPl2RkZG69957JUmNjY3y8fFpt563t7csFouamprU2NgoSfL19T1tnaamJucEBwDAjXTqM+mVlcfN\njnBJQkMDdORIg2nvv27dSknSj3/80w57TbPn5AjMyT0wJ+e71M8QV5/XpbiYOUVEBDs4zeUpKSmx\n3+xt+fLlCgoKkiT5+fmddgO45uZmGYYhf39/+fn5SdJp69hsNgUEBJzzPQ3DaHcTOwAAuoJOXaS7\nKy8vT7MjdDjm5B6Yk3vojHOSOue8Osucdu3apXvvvVehoaFatmxZu9b16OhoffHFF+3Wt1qtkk62\nuMfExNiX9e7du906AwcOPOf7WiwWt/2Fu6NFRASzb86B/XN27JtzY/+cHfvm3Dryl+20uwMAgLMq\nLi7WtGnT1Lt3b7399tunXVuelpamkpKSdteXZ2dnKzAwUElJSQoLC1Pfvn21efNm+3h9fb127dql\n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\n3mnwem60rkGDBmHLli04c+YMwsLCkJ2djZdffhmTJ0/G1KlT4ezsjHPnzuGTTz7B4MGDUVxcjBde\neAETJkzAjBkzzLau3/rwww8xZMgQq2ywruptjK2Nl5cXdu/ejQMHDiAqKgp1dXV47bXXcObMGaxZ\nswahoaF44403oNFo4O3tja1bt2LPnj145ZVX4OHhIXV8g9qxYwfc3NwwceJEAFfuAtDTWAQEBODg\nwYP45ptvMHjwYJw+fRovvfQS5syZg1GjRklcjX79dmxqa2vxwQcfICAgAI6Ojvj222+xYcMGPPnk\nkxg8eLDFj01OTg6WLl2Ke+65Bw8//DAaGxvR1NSEpqYmyOVyDBw40Gr3nZ7GRiaToampyar3HV9f\nX6Smpurqq6ysxMqVK9He3o5Vq1YZdt+5+TvIUU/a29vF6tWrxciRI0V8fLxYunSpqK6uFkIIceTI\nEREREdHh3r87duwQd9xxhxg+fLiYMGGCePvtt7t97bS0NBEZGWnU+6QLoZ+atFqtbn1+fr549NFH\nRWJiooiLixOLFi0SJSUlZlfTtVpbW8Xq1avF6NGjRXR0tJg3b57Iz88365qEEGLatGni9ddfN1oN\nv6Xvfa+4uFgsXrxYJCcni5EjR4onnnii23uBmktNeXl5Yu7cuSImJkakpKSI9evXC41GY9SabqSu\n/Px88fDDD4vo6GiRlJQkVq9e3eEeoo2NjeKZZ54R8fHxIjExUaxYsUK0traafV3XmjBhgtXfJ12I\nnsfYGpWWloq//OUvIikpScTExIiHH35Y5OXl6dbv27dP3H777WLYsGHizjvvFIcOHZIwrfHMnj27\nw73Aheh9LCoqKsQTTzwhYmJixOjRo8W6deuMGdlouhqb//3f/xVTpkwRw4YNE7fccov49NNPO6y3\n5LFZt26diIiI6PJx9T3XWved6xkba953hBCiqqpKPPPMMyIpKUnExcWJxYsXi7KyMt16Q+07MiGM\nOOsYEREREREREXWL16QTERERERERmQg26UREREREREQmgk06ERERERERkYlgk05ERERERERkItik\nExEREREREZkINulEREREREREJoJNOhEREREREZGJYJNuxebMmYPIyMgOj2HDhmHy5MlYs2YN2tra\nbvrfKCoqQmRkJL744gu95J0/f36P2zzzzDOYMmWK7v9HRkZi06ZNAIDU1FRERkYiIyMDAFBWVoZH\nH30UxcXFN53NUK7N35Xf1muNjh49iltvvRXDhg3DY4899v/Zu/O4Ksv8sOWr3gAAIABJREFU/+Pv\no7KDKyJIZunkUsqiokUqLo0alUtl2WgLabmAQX3LpRQ1pxQFJxW0SXMhLNMyM5tpGac0a1xQLGts\nSsdIJ0GClCUEkvP7gx93Hja1DnhzeD0fjx7JvZ3rus4Nn/t97uUoMTFRN9xwgzE/LS1NEydOvOzt\nDho0SLNmzfrdy/xWl7K/X67ly5fbjI29lwcAM7DX3+ZLqbFbtmxRly5dlJmZecnr2MtHH32k6dOn\nGz9XPM6pa4MGDdLs2bNrZdu1URMBM2typRuAKysgIMCmkBUVFWnv3r1asWKFTp06pSVLllzB1lVm\nsVhqnB8ZGamCgoIq17nhhhu0adMmdezYUZK0Z88e7dy586LbvNJqal9V/W1o4uPjZbVa9dJLL6l1\n69by8vJS//79jflvvPGGvv3229+07UvZN2pz/7H3tu+55x6FhYXV2vIAYBb2+vt5udupy7q8fv16\nlZaWGj9XPM6paytWrJCnp2etbd/sx2uAPRHSGzhPT08FBATYTAsJCVFmZqbeeOMNPf300/L29r5C\nrbt87dq1q3ZeVX2VJKvVWptNqlU19behOHPmjHr27KmbbrrJmNamTZsr2CLzatOmzWWNzeUuDwCO\n5nKPEeq6Ll/YvuqOc+pKly5drthrA46Gy91Rpa5du8pqteqHH36QVHYJU1xcnO6//34FBgbq2Wef\nlSRlZGRo2rRp6t+/v4KCgjRu3Djt37+/0vZOnTql8ePHKzAwULfccovWrVtnMz8nJ0dz5szRoEGD\n1K1bN/Xp00ePPfaY8frlSktLtXTpUt14443q2bOnnnzySf3444/G/JouMyu/DOzAgQPasmWLcYnY\n4MGDNXPmTMXFxSk4OFg///yzzXoJCQnq27evzafVF+rSpYs2bdqkJ598Uj169NBNN92kpKQk5efn\na+bMmerVq5f69u2r+Ph4m/WOHDmiyMhI3XTTTerWrZvCwsL0/PPP13ibQVxcnLp166YPP/ywyv4O\nGjRISUlJWrhwoW6++WYFBQVpwoQJ+v777222s3nzZg0dOlSBgYG69957tWPHDnXp0qXK967czz//\nrMWLF2vo0KHq3r27evbsqfHjx+s///lPteuUj8+GDRsUExOj4OBg9evXT0uXLrUZz9+yf5XfSvH9\n99/rrbfeUpcuXbRv3z6bS7RnzJihN998Uz/88IO6dOmirVu3SpJOnDihp556Sn379lW3bt108803\na+bMmcrNzbVpe1FRkebMmaNevXrpxhtv1Lx582o8Q3Lu3DnFxcWpf//+CggI0KhRo/TPf/6zxvGR\npB9++EFRUVHGvrJ27dpKy5SWlurFF1/ULbfcou7du+vWW2/VG2+8UWm5rVu3auTIkQoKCtKgQYO0\nfPlyY6wrXr7+/fffa9KkSerTp4+CgoI0ZswY7dy505hf1eXuW7du1ahRoxQcHKywsDDFxcWpqKjI\nmD9jxgxNmDBBmzdv1pAhQ9S9e3eNHDlSu3fvvug4AIC9FBcXG7UwODhY48eP14kTJ2yW2blzp8aM\nGaMePXooNDRUs2fP1pkzZ6rdZmlpqVasWKEBAwYoKChIkZGROnv2rM0ydVWX77//fu3Zs0f79+83\nlqt4ufvy5ct1xx136O9//7uGDRumgIAAjRkzRsePH9dHH32k22+/XUFBQbr33nv19ddf22z/ww8/\n1J133qmAgAD169dPixYtuuhtkBfeZlBeoz/88ENFRUUpODhYffr0UWxsrM6dO1fjdi6lJl7suHHD\nhg3q0qVLpfd848aNCggIUG5urs6dO6e5c+cqLCzMqKtr1qypsW1AXSGko0rfffedJOnqq682pr3y\nyivq2bOnVqxYoVGjRun06dO6++67dfjwYU2fPl1/+ctf5OrqqoiICO3Zs8dme0uXLtVVV12lFStW\n6JZbbtHChQu1evVqSWWfAk+YMEH79u3Tk08+qbVr1yoqKkqffvqp5s6da7Od/fv3a8eOHfrzn/+s\n2bNn61//+pfGjx+v8+fPG8tc7HIoi8WiAQMGKCoqSpKUmJioKVOm6O6771ZhYaE++OADY9nS0lJt\n27ZNI0aMUKNG1f+6xMXFqVWrVlq5cqUGDBig5cuXa/To0fLw8FBiYqL++Mc/avXq1ca2MzMzNXbs\nWJWUlCguLk6rVq1SeHi4kpOTlZycXOVrJCUlKTk5WYsXL9Yf//jHavu7bt06fffdd1q4cKHmz5+v\nL7/8UjNnzjTmv/nmm5o9e7b69eunFStWKCQkRE888cRFx23atGl6++23NWnSJK1du1YzZszQN998\noyeffLLG9STphRdeUElJiZYtW6Z7771XL730khYtWmSzzOXuXz4+Pnr99dfl6+urAQMGaNOmTbr+\n+uttxiQyMlKDBg2St7e3Nm3apP79+6uwsFDjxo3T999/r3nz5mnNmjW6//779c477+gvf/mLTZve\nffddHT9+XAkJCYqKitLbb7+txx9/vMo+Wq1WRUVFafPmzXrkkUe0YsUKdenSRZGRkdqxY0e1Y/Pz\nzz9r3Lhx+vbbb439+o033lBaWprNcnPnzlVSUpLuuusu/fWvf9WAAQM0e/ZspaSkGMts2LBBM2bM\nUFBQkFasWKGIiAitWrVKCQkJlV63tLRUEydOVFFRkeLj47Vy5Uo1b95cU6ZMsTmouXC/WLZsmWbO\nnKk+ffooKSlJERERev311zVp0iSbbX/++edav369YmJilJSUpMaNG2vq1KnKz8+vdhwAwJ7eeecd\nfffdd1q0aJHmzJmjL7/80qZevfnmm5o4caKuueYaLVu2TI8//rg++ugj3X///dWGyMWLF2vFihW6\n5557lJSUpObNmyshIaFS/ayLujx37lx1795d119/vTZt2qSuXbtWudzJkye1dOlSPf7441q8eLG+\n++47TZw4UQsXLtSUKVO0ZMkS/e9//9NTTz1lM3ZTp05V586dtWLFCk2aNEmvv/76JdX7im2eNWuW\nrr76aq1cuVLjx4/X5s2b9de//rXa9S+lJl7KceMdd9whZ2dnbdu2zWb7W7du1aBBg9S0aVM9//zz\n+uSTTzRjxgytWbNGgwcP1qJFi4wP9IEricvdG7jS0lKdP3/euFzqp59+0q5du/T666/r1ltvVfPm\nzY1lr776asXExBg/x8XFKT8/X2+++aZxSeyAAQM0fPhwxcfH25zlGzBggObNmydJuvnmm3X69Gmt\nXr1a48ePV2Zmpry8vBQbG6ugoCBJZZfcp6en680337Rpr5OTk15++WW1bt1aktSqVSs98sgj+uij\nj3TLLbdIurRL01q2bGlcknb99derbdu2kqTAwEBt27ZNI0eOlFR233pmZqbuvPPOGrd3ww03GAW3\nc+fOeuutt+Tt7W18onzjjTfqnXfe0aFDhzRkyBD95z//Ubdu3bR06VK5ublJkm666SZ9+umn2r9/\nvyZMmGBs22q1Kjk5WUlJSYqLi9Ott95q89oV+9uiRQutXLnSKJTff/+9li9frvz8fHl6eioxMVHD\nhg0z2nbzzTeroKBAr732WrX9Kyoq0rlz5xQbG2ucIejVq5fy8/MVFxenn376SS1atKh2fV9fXyUl\n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\nl2yWLT8zHRISovfff1///Oc/jYe1lN8X9eyzz2rEiBE6e/asUlJS9J///EdWq1XFxcXGpVq//PKL\nJk2apIkTJ+qHH35QQkKCbrrppoteAl6V8vD9wQcfqH///sal1X369JG/v7/2799fqR+X6mLjGhgY\nqBUrVmj16tUKCAhQenq6/vrXv6qkpKTae7W6deum++67T+vWrdPtt9/+my7FslgsioqK0owZM9Sq\nVSsNGDBABw8eNO5Zrq5wduvWTU2aNNGiRYv04IMPqqioSFu2bDG+rqumryWTyoLx008/rfDwcB08\neFApKSl67LHHqr3cTrr0/etiY920aVNlZ2dr165d6tq1qwIDA7Vx40YtXrxYYWFhysjI0Jo1a5Sd\nnV3pDHlmZqZiYmJ033336ciRI1q6dKnuuusutW/fvtLrDBw4UD169NCkSZM0ZcoUtW/fXgcPHlRS\nUpLuuOOOai/NHzFihJKTkzV58mQ9/vjjcnd318qVK2W1Wo2+denSRbfddpueeeYZ42ttvv32W/3l\nL39R9+7d5evrK0mKiorSc889pxYtWmjgwIH65ptvtGrVKk2YMKHS5Y5dunSRh4eHpk2bpqlTp6pV\nq1b67LPP9PXXX2v8+PGV2tm8eXONHz9eL774opo0aaL+/fvr22+/VWJionr37m3c43cp7wkAXEmN\nGjVSTEyMZs2apenTp+u2225TZmamli5dqg4dOticbS3n4eGhKVOm6IUXXpCrq6tCQkL08ccf6+OP\nP/5dbfmtdVkqq2+pqanas2eP8e0mv1fjxo0VExOjefPmqVGjRurXr5/OnDljPOjut159eaGaakRN\nNbHcxY4bi4qKjCsO27Vrp169emn//v2aM2eOsQ0XFxcFBgYqMTFRTk5O6tSpk44fP66tW7dq6NCh\nv7uPwO9FSG/gfs8Zr9atW+u1115TfHy85syZo/PnzysgIEBr1641niJa/hpPP/20tm3bptWrV8vP\nz09xcXEaMWKEpLKzkrGxsVq7dq3effddeXt7q0+fPkY4S01NVWhoqCTplltukY+Pj5544glZrVbd\neuutxpOmy1+rpj5dOK9Pnz66+eablZCQoL1792rlypXGvP79++sf//iH8dTry3WxcX300Uf1008/\nad26dcrPz1fbtm01cuRIWSwWrVq1SgUFBVXe5/7444/r/fff1+zZs/X6669ftL9VtWfkyJEqKCjQ\n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\nVZL27t2rXr16SZJ69uyphIQEZWRkGAV/79698vT0VNeuXWu7+QAANGjUcQAA6lath/SKn5I7OTkZ\n01u2bKlx48bpzjvv1PLlyxUeHq7t27fr8OHDmjdvniSpR48eCgoKUkxMjGJjY5WVlaX4+Hg99NBD\natKk1psPAECDRh0HAKBuXZHrQCwWi/HvTp06KSkpSe+//75GjRqljz/+WCtXrlSHDh2MZRITE+Xt\n7a2xY8fqmWee0ejRoxUVFXUlmg4AQINHHQcAoPbU+UfYvr6+lb4XNSwsTGFhYdWu4+3trcTExNpu\nGgAAuAjqOAAAtcsxnqgAAAAAAIADIKQDAAAAAGAShHQAAAAAAEyCkA4AAAAAgEkQ0gEAAAAAMAlC\nOgAAAAAAJkFIBwAAAADAJAjpAAAAAACYBCEdAAAAAACTIKQDAAAAAGAShHQAAAAAAEyCkA4AAAAA\ngEkQ0gEAAAAAMAlCOgAAAAAAJkFIBwAAAADAJAjpAP5fe3ceVlW1/w/8DSqigKihONwmrc5BkXlQ\nwBGVe6M00zQTCpLS1BTNARXI6muBIoooaN7fxSkzbw6hleU1pzSRIU1NLamrYjKIEyCTnPX7g+fs\ny4HDfOBsDu/X8/A8sNc+e6+19uZ89mevPRARERERkUwwSSciIiIiIiKSCSbpRERERERERDLBJJ2I\niIiIiIhIJpikExEREREREckEk3QiIiIiIiIimWCSTkRERERERCQTTNKJiIiIiIiIZIJJOhERERER\nEZFMMEknIiIiIiIikgkm6UREREREREQywSSdiIiIiIiISCaYpBMRERERERHJBJN0IiIiIiIiIplg\nkk5EREREREQkE0zSiYiIiIiIiGSCSToRERERERGRTDBJJyIiIiIiIpIJJulEREREREREMsEknYiI\niIiIiEgmmKQTERERERERyQSTdCIiIiIiIiKZYJJOREREREREJBNM0omIiIiIiIhkgkk6ERERERER\nkUwwSSciIiIiIiKSiWZJ0m/fvo1FixbBy8sLrq6umDp1Kn7//Xep/Mcff8TYsWNhb2+PMWPG4Pjx\n4xqfz83NxZw5c+Dq6goPDw9ERUWhrKysOapORETU6jGOExERNZ8mT9JVKhVmzZqFa9euIT4+Hjt3\n7oSFhQUCAgJw7949XL16Fe+88w6ef/557Nu3D97e3pg5cyauXr0qLePdd9/FnTt3sH37dnzyySfY\ns2cP1q5d29RVJyIiavUYx4mIiJpXkyfply9fxtmzZ/Hxx4ki8i4AACAASURBVB9jwIAB6Nu3L1as\nWIGHDx/i6NGj2Lp1KxwdHTFt2jQ8/fTTmDNnDhwdHbF161YAwM8//4y0tDRERERAoVBg6NChWLhw\nIbZv347S0tKmrj4REVGrxjhORETUvJo8Se/Vqxc2btyIp59+WppmZGQEAHjw4AFSU1Ph5uam8Rk3\nNzekpKQAAFJSUtC7d2/07t1bKnd1dUVBQQEuXbrU1NUnIiJq1RjHiYiImleTJ+mdO3fG0KFDpYAO\nANu2bUNxcTE8PT2RmZkJa2trjc90794dt27dAgBkZWVpLQeAzMzMJq49ERFR68Y4TkRE1Lya/enu\nhw8fRnR0NAIDA9G3b18UFRWhffv2GvOYmJigpKQEAFBYWAgTExON8nbt2sHIyAjFxcXNVm8iIiJi\nHCciImpqbZtzZXv27EF4eDh8fX2xYMECAED79u2lQK5WUlKCDh06AABMTU2rlJeWlkIIIc1Tk27d\nLHRUe8PDvqkZ+6d67JtyJiYqmJvdgZm5qcZ0c7P2sLKygKUl+6ky7jstG+O47hhiuwyxTYBhtqsl\nt6m62AsAFuamMEaJwcXglry9qmOIbdKlZkvS4+PjERMTAz8/P4SGhkrTe/bsiezsbI15s7Oz0aNH\nDwBAjx49qrzKRT1/5cvntMnJyWts1Q1St24W7JsasH+qx775nwcP8pBfUAwViqRpFuamyC8oxu3b\neSgpafaLlWSN+07N5H7AwjiuO4b4v2CIbQIMs10tvU3aYi9QHn/z8ovw0MBicEvfXtoYYpsA3cbx\nZtl7N23ahJiYGAQHB2sEdgBwdnZGcnKyxrSkpCS4uLhI5Tdu3NC4by0pKQnm5uawsbFp+soTERG1\ncozjREREzadZXsG2evVqTJgwARMmTEBOTo70U1hYCD8/PyQnJyM2Nhbp6emIiYnB+fPn8frrrwMA\nnJyc4ODggODgYPz66684duwYoqKiEBAQgLZtm/VqfSIiolaHcZyIiKh5NXl0/Pbbb6FSqfDll1/i\nyy+/1CgLDg7G9OnTsX79eqxcuRKbNm1C3759ER8fjz59+kjzrVu3DsuWLcOUKVNgZmaGV155BbNm\nzWrqqhMREbV6jONERETNy0gIIfRdiaZkiPc76IKh3guiK+yf6rFv/ufBg/v48fwtdDT73z1IFuam\nyMrKgdeAnujUyVKPtZMf7js1k/s96fpiiPuMIf4vGGKbAMNsV0tvk7bYC1S8Jz3PoGJwS99e2hhi\nm4AWeE86EREREREREdWOSToRERERERGRTDBJJyIiIiIiIpIJJulEREREREREMsEknYiIiIiIiEgm\nmKQTERERERERyQSTdCIiIiIiIiKZYJJOREREREREJBNM0omIiIiIiIhkgkk6ERERERERkUwwSSci\nIiIiIiKSCSbpRERERERERDLBJJ2IiIiIiIhIJpikExEREREREckEk3QiIiIiIiIimWCSTkRERERE\nRCQTTNKJiIiIiIiIZIJJOhEREREREZFMMEknIiIiIiIikgkm6UREREREREQywSSdiIiIiIiISCaY\npBMRERERERHJRFt9V4CIyNCoVCrk5T2ottzc3ALGxjxHSkREpGu1xWCAcZjkj0k6EZGOFRU+xLG0\nu+jc9bEqZYUPCzDK/Rl06mSph5oREREZtppiMMA4TC0Dk3QioiZg2qEjOppZ6LsaRERErQ5jMLV0\nvM6DiIiIiIiISCaYpBMRERERERHJBJN0IiIiIiIiIplgkk5EREREREQkE0zSiYiIiIiIiGSCSToR\nERERERGRTDBJJyIiIiIiIpIJJulEREREREREMsEknYiIiIiIiEgmmKQTERERERERyURbfVeAiKg1\nUalUyMt7UG25ubkFjI15/pSIiKgp1BaHAcZi0j8m6UREzaio8CGOpd1F566PVSkrfFiAUe7PoFMn\nSz3UjIiIyPDVFIcBxmKSBybpRETNzLRDR3Q0s9B3NYiIiFolxmGSO17HQURERERERCQTTNKJiIiI\niIiIZKLFJOllZWVYtWoVvLy84OjoiNmzZyM3N1ff1SIiIqI6YBwnIiKqmxZzT3psbCz27duHlStX\nwtLSEh988AHeffdd7NixQ99VIyIDplKpkJ+fp7UsL+8BhErodF188jsZKsZxIqqLmuIuoPvYq239\nfPo76VuLSNJLSkqwbds2hIWFYdCgQQCA6OhoeHt74+eff4ajo6Oea0hEhio/Pw+Hkq6iQ0ezKmV3\nbmeho1knmFl00sm6+OR3MlSM40RUVzXFXUD3sbcyPv2d5KBFJOmXL19GQUEB3NzcpGm9e/dG7969\nkZKSwuBO1IrUdoa9IWe3axstNzXV/hTYhwX59VpPXVT3xFmOslNLxjhO1HLUFmeBxsWcuoyUVxd3\n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\nAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pf.tears.create_round_trip_tear_sheet(transactions, positions, sector_mappings=sect_map)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.10" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/pyfolio/plotting.py b/pyfolio/plotting.py index ab9371f8..a9ce32a8 100644 --- a/pyfolio/plotting.py +++ b/pyfolio/plotting.py @@ -16,11 +16,13 @@ import pandas as pd import numpy as np +import scipy as sp import seaborn as sns import matplotlib import matplotlib.pyplot as plt from matplotlib.ticker import FuncFormatter +import matplotlib.lines as mlines from sklearn import preprocessing @@ -1402,3 +1404,114 @@ def cumulate_returns(x): ax.set_xticklabels(xticks_label) return ax + + +def plot_round_trip_life_times(round_trips, ax=None): + """ + Plots timespans and directions of round trip trades. + + Parameters + ---------- + round_trips : pd.DataFrame + DataFrame with one row per round trip trade. + - See full explanation in round_trips.extract_round_trips + ax : matplotlib.Axes, optional + Axes upon which to plot. + + Returns + ------- + ax : matplotlib.Axes + The axes that were plotted on. + """ + if ax is None: + ax = plt.subplot() + + symbols = round_trips.symbol.unique() + symbol_idx = pd.Series(np.arange(len(symbols)), index=symbols) + + for symbol, sym_round_trips in round_trips.groupby('symbol'): + for _, row in sym_round_trips.iterrows(): + c = 'b' if row.long else 'r' + y_ix = symbol_idx[symbol] + ax.plot([row['open_dt'], row['close_dt']], + [y_ix, y_ix], color=c) + + ax.set_yticklabels(symbols) + + red_line = mlines.Line2D([], [], color='r', label='Short') + blue_line = mlines.Line2D([], [], color='b', label='Long') + ax.legend(handles=[red_line, blue_line], loc=0) + + return ax + + +def show_profit_attribution(round_trips): + """ + Prints the share of total PnL contributed by each + traded name. + + Parameters + ---------- + round_trips : pd.DataFrame + DataFrame with one row per round trip trade. + - See full explanation in round_trips.extract_round_trips + ax : matplotlib.Axes, optional + Axes upon which to plot. + + Returns + ------- + ax : matplotlib.Axes + The axes that were plotted on. + """ + + total_pnl = round_trips['pnl'].sum() + pct_profit_attribution = round_trips.groupby( + 'symbol')['pnl'].sum() / total_pnl + + print('\nProfitability (PnL / PnL total) per name:') + print(pct_profit_attribution.sort(inplace=False, ascending=False)) + + +def plot_prob_profit_trade(round_trips, ax=None): + """ + Plots a probability distribution for the event of making + a profitable trade. + + Parameters + ---------- + round_trips : pd.DataFrame + DataFrame with one row per round trip trade. + - See full explanation in round_trips.extract_round_trips + ax : matplotlib.Axes, optional + Axes upon which to plot. + + Returns + ------- + ax : matplotlib.Axes + The axes that were plotted on. + """ + + x = np.linspace(0, 1., 500) + + round_trips['profitable'] = round_trips.pnl > 0 + + dist = sp.stats.beta(round_trips.profitable.sum(), + (~round_trips.profitable).sum()) + y = dist.pdf(x) + lower_perc = dist.ppf(.025) + upper_perc = dist.ppf(.975) + + lower_plot = dist.ppf(.001) + upper_plot = dist.ppf(.999) + + if ax is None: + ax = plt.subplot() + + ax.plot(x, y) + ax.axvline(lower_perc, color='0.5') + ax.axvline(upper_perc, color='0.5') + + ax.set(xlabel='Probability making a profitable decision', ylabel='Belief', + xlim=(lower_plot, upper_plot), ylim=(0, y.max() + 1.)) + + return ax diff --git a/pyfolio/round_trips.py b/pyfolio/round_trips.py new file mode 100644 index 00000000..58f13376 --- /dev/null +++ b/pyfolio/round_trips.py @@ -0,0 +1,248 @@ +# +# Copyright 2015 Quantopian, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +from __future__ import division +from collections import defaultdict + +import pandas as pd +import numpy as np + + +def extract_round_trips(transactions): + """ + Group transactions into "round trips." A round trip is started when a new + long or short position is opened and is only completed when the number + of shares in that position returns to or crosses zero. + Computes pnl for each round trip. + + For example, the following transactions would constitute one round trip: + index amount price symbol + 2004-01-09 12:18:01 186 324.12 'AAPL' + 2004-01-09 15:12:53 -10 344.54 'AAPL' + 2004-01-13 14:41:23 24 320.21 'AAPL' + 2004-01-30 10:23:34 -200 340.43 'AAPL' + + Parameters + ---------- + transactions : pd.DataFrame + Prices and amounts of executed trades. One row per trade. + - See full explanation in tears.create_full_tear_sheet + + Returns + ------- + round_trips : pd.DataFrame + DataFrame with one row per round trip. + """ + # Transactions that cross zero must be split into separate + # long and short transactions that end/start on zero. + transactions_split = split_trades(transactions) + + transactions_split['txn_dollars'] = \ + -transactions_split['amount'] * transactions_split['price'] + + round_trips = defaultdict(list) + + for sym, trans_sym in transactions_split.groupby('symbol'): + trans_sym = trans_sym.sort_index() + amount_cumsum = trans_sym.amount.cumsum() + # Find indicies where the position amount returns to zero. + closed_idx = np.where(amount_cumsum == 0)[0] + 1 + # Identify the first trade as the beginning of a round trip. + closed_idx = np.insert(closed_idx, 0, 0) + + for trade_start, trade_end in zip(closed_idx, closed_idx[1:]): + txn = trans_sym.iloc[trade_start:trade_end] + + if len(txn) == 0: + continue + + assert txn.amount.sum() == 0 + long_trade = txn.amount.iloc[0] > 0 + pnl = txn.txn_dollars.sum() + round_trips['symbol'].append(sym) + round_trips['pnl'].append(pnl) + round_trips['duration'].append(txn.index[-1] - txn.index[0]) + round_trips['long'].append(long_trade) + round_trips['open_dt'].append(txn.index[0]) + round_trips['close_dt'].append(txn.index[-1]) + + # Investing txns push the position amount farther from zero. + # invested is always a positive value. Returned - Invested = PnL. + if long_trade: + invested = -txn.query('txn_dollars < 0').txn_dollars.sum() + else: + invested = txn.query('txn_dollars > 0').txn_dollars.sum() + + if invested == 0: + round_trips['returns'].append(0) + else: + round_trips['returns'].append(pnl / invested) + + if len(round_trips) == 0: + return pd.DataFrame([]) + + round_trips = pd.DataFrame(round_trips) + round_trips = round_trips[['open_dt', 'close_dt', 'duration', + 'pnl', 'returns', 'long', 'symbol']] + + return round_trips + + +def split_trades(transactions): + """ + Splits transactions that cause total position amount to cross zero. + In other words, separates of the closing of one short/long position + with the opening of a new long/short position. + + For example, the second transaction in this transactions DataFrame + would be divided as shown in the second DataFrame: + index amount price symbol + 2004-01-09 12:18:01 180 324.12 'AAPL' + 2004-01-09 15:12:53 -200 344.54 'AAPL' + + index amount price symbol + 2004-01-09 12:18:01 180 324.12 'AAPL' + 2004-01-09 15:12:53 -180 344.54 'AAPL' + 2004-01-09 15:12:54 -20 344.54 'AAPL' + + Parameters + ---------- + transactions : pd.DataFrame + Prices and amounts of executed trades. One row per trade. + - See full explanation in tears.create_full_tear_sheet + + Returns + ------- + transactions_split : pd.DataFrame + Prices and amounts of executed trades. Trades that cause + total position amount to cross zero are divided. + """ + + trans_split = [] + + for sym, trans_sym in transactions.groupby('symbol'): + trans_sym = trans_sym.sort_index() + + while True: + cum_amount = trans_sym.amount.cumsum() + # find the indicies where position amount crosses zero + sign_flip = np.where(np.abs(np.diff(np.sign(cum_amount))) == 2)[0] + + if len(sign_flip) == 0: + break # all sign flips are converted + + sign_flip = sign_flip[0] + 2 + + txn = trans_sym.iloc[:sign_flip] + + left_over_txn_amount = txn.amount.sum() + assert left_over_txn_amount != 0 + + split_txn_1 = txn.iloc[[-1]].copy() + split_txn_2 = txn.iloc[[-1]].copy() + + split_txn_1['amount'] -= left_over_txn_amount + split_txn_2['amount'] = left_over_txn_amount + + # Delay 2nd trade by a second to avoid overlapping indices + split_txn_2.index += pd.Timedelta(seconds=1) + + assert split_txn_1.amount.iloc[0] + \ + split_txn_2.amount.iloc[0] == txn.iloc[-1].amount + assert trans_sym.iloc[:sign_flip - 1].amount.sum() + \ + split_txn_1.amount.iloc[0] == 0 + + # Recreate transactions so far with split transaction + trans_sym = pd.concat([trans_sym.iloc[:sign_flip - 1], + split_txn_1, + split_txn_2, + trans_sym.iloc[sign_flip:]]) + + assert np.all(np.abs(np.diff(np.sign(trans_sym.amount.cumsum()))) != 2) + trans_split.append(trans_sym) + + transactions_split = pd.concat(trans_split) + + return transactions_split + + +def add_closing_transactions(positions, transactions): + """ + Appends transactions that close out all positions at the end of + the timespan covered by positions data. Utilizes pricing information + in the positions DataFrame to determine closing price. + + Parameters + ---------- + positions : pd.DataFrame + The positions that the strategy takes over time. + transactions : pd.DataFrame + Prices and amounts of executed trades. One row per trade. + - See full explanation in tears.create_full_tear_sheet + + Returns + ------- + closed_txns : pd.DataFrame + Transactions with closing transactions appended. + """ + + closed_txns = transactions.copy() + + pos_at_end = positions.drop('cash', axis=1).iloc[-1] + open_pos = pos_at_end.replace(0, np.nan).dropna() + # Add closing trades one second after the close to be sure + # they don't conflict with other trades executed at that time. + end_dt = open_pos.name + pd.Timedelta(seconds=1) + + for sym, ending_val in open_pos.iteritems(): + txn_sym = transactions[transactions.symbol == sym] + + ending_amount = txn_sym.amount.sum() + + ending_price = ending_val / ending_amount + closing_txn = {'symbol': sym, + 'amount': -ending_amount, + 'price': ending_price} + + closing_txn = pd.DataFrame(closing_txn, index=[end_dt]) + closed_txns = closed_txns.append(closing_txn) + + return closed_txns + + +def apply_sector_mappings_to_round_trips(round_trips, sector_mappings): + """ + Translates round trip symbols to sectors. + + Parameters + ---------- + round_trips : pd.DataFrame + DataFrame with one row per round trip trade. + - See full explanation in round_trips.extract_round_trips + sector_mappings : dict or pd.Series, optional + Security identifier to sector mapping. + Security ids as keys, sectors as values. + + Returns + ------- + sector_round_trips : pd.DataFrame + Round trips with symbol names replaced by sector names. + """ + + sector_round_trips = round_trips.copy() + sector_round_trips.symbol = sector_round_trips.symbol.apply( + lambda x: sector_mappings.get(x, 'No Sector Mapping')) + sector_round_trips = sector_round_trips.dropna(axis=0) + + return sector_round_trips diff --git a/pyfolio/tears.py b/pyfolio/tears.py index 06a8da28..c1702e47 100644 --- a/pyfolio/tears.py +++ b/pyfolio/tears.py @@ -20,6 +20,7 @@ from . import utils from . import pos from . import txn +from . import round_trips from . import plotting from .plotting import plotting_context @@ -167,6 +168,9 @@ def create_full_tear_sheet(returns, positions=None, transactions=None, unadjusted_returns=unadjusted_returns, set_context=set_context) + create_round_trip_tear_sheet(transactions, positions, + sector_mappings=sector_mappings) + if bayesian: create_bayesian_tear_sheet(returns, live_start_date=live_start_date, @@ -402,12 +406,12 @@ def create_position_tear_sheet(returns, positions, gross_lev=None, if sector_mappings is not None: sector_exposures = pos.get_sector_exposures(positions, sector_mappings) - - sector_alloc = pos.get_percent_alloc(sector_exposures) - sector_alloc = sector_alloc.drop('cash', axis='columns') - ax_sector_alloc = plt.subplot(gs[4, :], sharex=ax_gross_leverage) - plotting.plot_sector_allocations(returns, sector_alloc, - ax=ax_sector_alloc) + if len(sector_exposures.columns) > 1: + sector_alloc = pos.get_percent_alloc(sector_exposures) + sector_alloc = sector_alloc.drop('cash', axis='columns') + ax_sector_alloc = plt.subplot(gs[4, :], sharex=ax_gross_leverage) + plotting.plot_sector_allocations(returns, sector_alloc, + ax=ax_sector_alloc) plt.show() if return_fig: @@ -435,8 +439,6 @@ def create_txn_tear_sheet(returns, positions, transactions, - See full explanation in create_full_tear_sheet. return_fig : boolean, optional If True, returns the figure that was plotted on. - set_context : boolean, optional - If True, set default plotting style context. """ vertical_sections = 5 if unadjusted_returns is not None else 3 @@ -479,6 +481,102 @@ def create_txn_tear_sheet(returns, positions, transactions, return fig +@plotting_context +def create_round_trip_tear_sheet(transactions, positions, + sector_mappings=None, + return_fig=False): + """ + Generate a number of figures and plots describing the duration, + frequency, and profitability of trade "round trips." + A round trip is started when a new long or short position is + opened and is only completed when the number of shares in that + position returns to or crosses zero. + + Parameters + ---------- + positions : pd.DataFrame + Daily net position values. + - See full explanation in create_full_tear_sheet. + transactions : pd.DataFrame + Prices and amounts of executed trades. One row per trade. + - See full explanation in create_full_tear_sheet. + sector_mappings : dict or pd.Series, optional + Security identifier to sector mapping. + Security ids as keys, sectors as values. + return_fig : boolean, optional + If True, returns the figure that was plotted on. + """ + + transactions_closed = round_trips.add_closing_transactions(positions, + transactions) + trades = round_trips.extract_round_trips(transactions_closed) + + if len(trades) < 5: + warnings.warn( + """Fewer than 5 round-trip trades made. + Skipping round trip tearsheet.""", UserWarning) + return + + ndays = len(positions) + + print(trades.drop(['open_dt', 'close_dt', 'symbol'], + axis='columns').describe()) + print('Percent of round trips profitable = {:.4}%'.format( + (trades.pnl > 0).mean() * 100)) + + winning_round_trips = trades[trades.pnl > 0] + losing_round_trips = trades[trades.pnl < 0] + print('Mean return per winning round trip = {:.4}'.format( + winning_round_trips.returns.mean())) + print('Mean return per losing round trip = {:.4}').format( + losing_round_trips.returns.mean()) + + print('A decision is made every {:.4} days.'.format(ndays / len(trades))) + print('{:.4} trading decisions per day.'.format(len(trades) * 1. / ndays)) + print('{:.4} trading decisions per month.'.format( + len(trades) * 1. / (ndays / 21))) + + plotting.show_profit_attribution(trades) + + if sector_mappings is not None: + sector_trades = round_trips.apply_sector_mappings_to_round_trips( + trades, sector_mappings) + plotting.show_profit_attribution(sector_trades) + + fig = plt.figure(figsize=(14, 3 * 6)) + + fig = plt.figure(figsize=(14, 3 * 6)) + gs = gridspec.GridSpec(3, 2, wspace=0.5, hspace=0.5) + + ax_trade_lifetimes = plt.subplot(gs[0, :]) + ax_prob_profit_trade = plt.subplot(gs[1, 0]) + ax_holding_time = plt.subplot(gs[1, 1]) + ax_pnl_per_round_trip_dollars = plt.subplot(gs[2, 0]) + ax_pnl_per_round_trip_pct = plt.subplot(gs[2, 1]) + + plotting.plot_round_trip_life_times(trades, ax=ax_trade_lifetimes) + + plotting.plot_prob_profit_trade(trades, ax=ax_prob_profit_trade) + + trade_holding_times = [x.days for x in trades['duration']] + sns.distplot(trade_holding_times, kde=False, ax=ax_holding_time) + ax_holding_time.set(xlabel='holding time in days') + + sns.distplot(trades.pnl, kde=False, ax=ax_pnl_per_round_trip_dollars) + ax_pnl_per_round_trip_dollars.set(xlabel='PnL per round-trip trade in $') + + pnl_pct = trades.pnl / trades.pnl.sum() * 100 + sns.distplot(pnl_pct, kde=False, ax=ax_pnl_per_round_trip_pct) + ax_pnl_per_round_trip_pct.set( + xlabel='PnL per round-trip trade in % of total profit') + + gs.tight_layout(fig) + + plt.show() + if return_fig: + return fig + + @plotting_context def create_interesting_times_tear_sheet( returns, benchmark_rets=None, legend_loc='best', return_fig=False): diff --git a/pyfolio/tests/test_data/test_gross_lev.csv.gz b/pyfolio/tests/test_data/test_gross_lev.csv.gz new file mode 100644 index 00000000..f0cde4ed Binary files /dev/null and b/pyfolio/tests/test_data/test_gross_lev.csv.gz differ diff --git a/pyfolio/tests/test_data/test_pos.csv.gz b/pyfolio/tests/test_data/test_pos.csv.gz new file mode 100644 index 00000000..8ae0a20a Binary files /dev/null and b/pyfolio/tests/test_data/test_pos.csv.gz differ diff --git a/pyfolio/tests/test_data/test_returns.csv.gz b/pyfolio/tests/test_data/test_returns.csv.gz new file mode 100644 index 00000000..6c2c2bbb Binary files /dev/null and b/pyfolio/tests/test_data/test_returns.csv.gz differ diff --git a/pyfolio/tests/test_data/test_txn.csv.gz b/pyfolio/tests/test_data/test_txn.csv.gz new file mode 100644 index 00000000..739844e0 Binary files /dev/null and b/pyfolio/tests/test_data/test_txn.csv.gz differ diff --git a/pyfolio/tests/test_round_trips.py b/pyfolio/tests/test_round_trips.py new file mode 100644 index 00000000..058f3458 --- /dev/null +++ b/pyfolio/tests/test_round_trips.py @@ -0,0 +1,115 @@ +from nose_parameterized import parameterized + +from unittest import TestCase + +from pandas import ( + DataFrame, + DatetimeIndex, + date_range, + Timedelta, + read_csv +) +from pandas.util.testing import (assert_frame_equal) + +import os +import gzip + +from pyfolio.round_trips import (extract_round_trips, + add_closing_transactions) + + +class RoundTripTestCase(TestCase): + dates = date_range(start='2015-01-01', freq='D', periods=20) + + @parameterized.expand([ + (DataFrame(data=[[2, 10, 'A'], + [-2, 15, 'A']], + columns=['amount', 'price', 'symbol'], + index=dates[:2]), + DataFrame(data=[[dates[0], dates[1], + Timedelta(days=1), 10, .5, + True, 'A']], + columns=['open_dt', 'close_dt', + 'duration', 'pnl', 'returns', + 'long', 'symbol'], + index=[0]) + ), + (DataFrame(data=[[2, 10, 'A'], + [2, 15, 'A'], + [-9, 10, 'A']], + columns=['amount', 'price', 'symbol'], + index=dates[:3]), + DataFrame(data=[[dates[0], dates[2], + Timedelta(days=2), -10, -.2, + True, 'A']], + columns=['open_dt', 'close_dt', + 'duration', 'pnl', 'returns', + 'long', 'symbol'], + index=[0]) + ), + (DataFrame(data=[[2, 10, 'A'], + [-4, 15, 'A'], + [3, 20, 'A']], + columns=['amount', 'price', 'symbol'], + index=dates[:3]), + DataFrame(data=[[dates[0], dates[1], + Timedelta(days=1), 10, .5, + True, 'A'], + [dates[1] + Timedelta(seconds=1), dates[2], + Timedelta(days=1) - Timedelta(seconds=1), + -10, (-1. / 3), + False, 'A']], + columns=['open_dt', 'close_dt', + 'duration', 'pnl', 'returns', + 'long', 'symbol'], + index=[0, 1]) + ) + ]) + def test_extract_round_trips(self, transactions, expected): + round_trips = extract_round_trips(transactions) + + assert_frame_equal(round_trips, expected) + + def test_add_closing_trades(self): + dates = date_range(start='2015-01-01', periods=20) + transactions = DataFrame(data=[[2, 10, 'A'], + [-5, 10, 'A'], + [-1, 10, 'B']], + columns=['amount', 'price', 'symbol'], + index=[dates[:3]]) + positions = DataFrame(data=[[20, 10, 0], + [-30, 10, 30], + [-60, 0, 30]], + columns=['A', 'B', 'cash'], + index=[dates[:3]]) + + expected_ix = dates[:3].append(DatetimeIndex([dates[2] + + Timedelta(seconds=1)])) + expected = DataFrame(data=[[2, 10, 'A'], + [-5, 10, 'A'], + [-1, 10., 'B'], + [3, 20., 'A']], + columns=['amount', 'price', 'symbol'], + index=expected_ix) + + transactions_closed = add_closing_transactions(positions, transactions) + assert_frame_equal(transactions_closed, expected) + + def test_txn_pnl_matches_round_trip_pnl(self): + __location__ = os.path.realpath( + os.path.join(os.getcwd(), os.path.dirname(__file__))) + + test_txn = read_csv(gzip.open( + __location__ + '/test_data/test_txn.csv.gz'), + index_col=0, parse_dates=0) + test_pos = read_csv(gzip.open( + __location__ + '/test_data/test_pos.csv.gz'), + index_col=0, parse_dates=0) + + transactions_closed = add_closing_transactions(test_pos, test_txn) + transactions_closed['txn_dollars'] = transactions_closed.amount * \ + -1. * transactions_closed.price + round_trips = extract_round_trips(transactions_closed) + + self.assertAlmostEqual(round_trips.pnl.sum(), + transactions_closed.txn_dollars.sum()) diff --git a/pyfolio/txn.py b/pyfolio/txn.py index a2c93de0..9ca12e2b 100644 --- a/pyfolio/txn.py +++ b/pyfolio/txn.py @@ -14,8 +14,6 @@ # limitations under the License. from __future__ import division -from collections import defaultdict - import pandas as pd @@ -39,7 +37,7 @@ def map_transaction(txn): symbol = txn['sid']['symbol'] else: sid = txn['sid'] - symbol = None + symbol = txn['sid'] return {'sid': sid, 'symbol': symbol, @@ -134,47 +132,6 @@ def adjust_returns_for_slippage(returns, turnover, slippage_bps): return trim_returns - turnover * slippage -def create_txn_profits(transactions): - """ - Compute per-trade profits. - - Generates a new transactions DataFrame with a profits column - - Parameters - ---------- - transactions : pd.DataFrame - Daily transaction volume and number of shares. - - See full explanation in tears.create_full_tear_sheet. - - Returns - ------- - profits_dts : pd.DataFrame - DataFrame containing transactions and their profits, datetimes, - amounts, current prices, prior prices, and symbols. - """ - - txn_descr = defaultdict(list) - - for symbol, transactions_sym in transactions.groupby('symbol'): - transactions_sym = transactions_sym.reset_index() - - for i, (amount, price, dt) in transactions_sym.iloc[1:][ - ['amount', 'price', 'date_time_utc']].iterrows(): - prev_amount, prev_price, prev_dt = transactions_sym.loc[ - i - 1, ['amount', 'price', 'date_time_utc']] - profit = (price - prev_price) * -amount - txn_descr['profits'].append(profit) - txn_descr['dts'].append(dt - prev_dt) - txn_descr['amounts'].append(amount) - txn_descr['prices'].append(price) - txn_descr['prev_prices'].append(prev_price) - txn_descr['symbols'].append(symbol) - - profits_dts = pd.DataFrame(txn_descr) - - return profits_dts - - def get_turnover(transactions, positions, period=None, average=True): """ Portfolio Turnover Rate: