{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Streams as instruments -- FIRST SEEN dummies"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [],
   "source": [
    "from simple_back_test import *\n",
    "from plotnine import *"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "pe = general_stats_first_seen()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "366"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(pe)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "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>index</th>\n",
       "      <th>predicted_streams</th>\n",
       "      <th>actual_streams</th>\n",
       "      <th>open_price</th>\n",
       "      <th>close_price</th>\n",
       "      <th>ret</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>366.000000</td>\n",
       "      <td>366.000000</td>\n",
       "      <td>366.000000</td>\n",
       "      <td>366.000000</td>\n",
       "      <td>3.660000e+02</td>\n",
       "      <td>366.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>1673.292350</td>\n",
       "      <td>14.576078</td>\n",
       "      <td>14.729638</td>\n",
       "      <td>17082.010766</td>\n",
       "      <td>7.485393e+04</td>\n",
       "      <td>3.201099</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>1512.050872</td>\n",
       "      <td>1.068588</td>\n",
       "      <td>1.625493</td>\n",
       "      <td>27420.843146</td>\n",
       "      <td>2.957263e+05</td>\n",
       "      <td>25.998816</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>2.000000</td>\n",
       "      <td>13.137789</td>\n",
       "      <td>11.313132</td>\n",
       "      <td>2031.090264</td>\n",
       "      <td>4.094500e+02</td>\n",
       "      <td>-0.916837</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>414.500000</td>\n",
       "      <td>13.688634</td>\n",
       "      <td>13.503302</td>\n",
       "      <td>3523.368340</td>\n",
       "      <td>3.659226e+03</td>\n",
       "      <td>-0.260957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>894.500000</td>\n",
       "      <td>14.390992</td>\n",
       "      <td>14.509169</td>\n",
       "      <td>7112.025573</td>\n",
       "      <td>1.000547e+04</td>\n",
       "      <td>0.448554</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>3198.750000</td>\n",
       "      <td>15.202668</td>\n",
       "      <td>15.600113</td>\n",
       "      <td>16013.820541</td>\n",
       "      <td>2.979125e+04</td>\n",
       "      <td>1.498147</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>4810.000000</td>\n",
       "      <td>17.604891</td>\n",
       "      <td>20.423193</td>\n",
       "      <td>176915.945206</td>\n",
       "      <td>3.703820e+06</td>\n",
       "      <td>436.692092</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             index  predicted_streams  actual_streams     open_price  \\\n",
       "count   366.000000         366.000000      366.000000     366.000000   \n",
       "mean   1673.292350          14.576078       14.729638   17082.010766   \n",
       "std    1512.050872           1.068588        1.625493   27420.843146   \n",
       "min       2.000000          13.137789       11.313132    2031.090264   \n",
       "25%     414.500000          13.688634       13.503302    3523.368340   \n",
       "50%     894.500000          14.390992       14.509169    7112.025573   \n",
       "75%    3198.750000          15.202668       15.600113   16013.820541   \n",
       "max    4810.000000          17.604891       20.423193  176915.945206   \n",
       "\n",
       "        close_price         ret  \n",
       "count  3.660000e+02  366.000000  \n",
       "mean   7.485393e+04    3.201099  \n",
       "std    2.957263e+05   25.998816  \n",
       "min    4.094500e+02   -0.916837  \n",
       "25%    3.659226e+03   -0.260957  \n",
       "50%    1.000547e+04    0.448554  \n",
       "75%    2.979125e+04    1.498147  \n",
       "max    3.703820e+06  436.692092  "
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pe.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6252015.9403058095"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pe.open_price.sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "27396537.459999997"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pe.close_price.sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2          (2031.089, 4409.006]\n",
       "435        (2031.089, 4409.006]\n",
       "422        (2031.089, 4409.006]\n",
       "571        (2031.089, 4409.006]\n",
       "798        (2031.089, 4409.006]\n",
       "526        (2031.089, 4409.006]\n",
       "193        (2031.089, 4409.006]\n",
       "36         (2031.089, 4409.006]\n",
       "38         (2031.089, 4409.006]\n",
       "194        (2031.089, 4409.006]\n",
       "185        (2031.089, 4409.006]\n",
       "539        (2031.089, 4409.006]\n",
       "802        (2031.089, 4409.006]\n",
       "1242       (2031.089, 4409.006]\n",
       "1348       (2031.089, 4409.006]\n",
       "1345       (2031.089, 4409.006]\n",
       "1347       (2031.089, 4409.006]\n",
       "1423       (2031.089, 4409.006]\n",
       "174        (2031.089, 4409.006]\n",
       "300        (2031.089, 4409.006]\n",
       "246        (2031.089, 4409.006]\n",
       "261        (2031.089, 4409.006]\n",
       "25         (2031.089, 4409.006]\n",
       "351        (2031.089, 4409.006]\n",
       "413        (2031.089, 4409.006]\n",
       "1138       (2031.089, 4409.006]\n",
       "52         (2031.089, 4409.006]\n",
       "706        (2031.089, 4409.006]\n",
       "230        (2031.089, 4409.006]\n",
       "239        (2031.089, 4409.006]\n",
       "                 ...           \n",
       "114     (11699.525, 176915.945]\n",
       "1118    (11699.525, 176915.945]\n",
       "277     (11699.525, 176915.945]\n",
       "404     (11699.525, 176915.945]\n",
       "831     (11699.525, 176915.945]\n",
       "1126    (11699.525, 176915.945]\n",
       "1120    (11699.525, 176915.945]\n",
       "352     (11699.525, 176915.945]\n",
       "279     (11699.525, 176915.945]\n",
       "145     (11699.525, 176915.945]\n",
       "54      (11699.525, 176915.945]\n",
       "63      (11699.525, 176915.945]\n",
       "212     (11699.525, 176915.945]\n",
       "168     (11699.525, 176915.945]\n",
       "564     (11699.525, 176915.945]\n",
       "405     (11699.525, 176915.945]\n",
       "172     (11699.525, 176915.945]\n",
       "175     (11699.525, 176915.945]\n",
       "472     (11699.525, 176915.945]\n",
       "61      (11699.525, 176915.945]\n",
       "213     (11699.525, 176915.945]\n",
       "166     (11699.525, 176915.945]\n",
       "521     (11699.525, 176915.945]\n",
       "163     (11699.525, 176915.945]\n",
       "169     (11699.525, 176915.945]\n",
       "195     (11699.525, 176915.945]\n",
       "170     (11699.525, 176915.945]\n",
       "198     (11699.525, 176915.945]\n",
       "215     (11699.525, 176915.945]\n",
       "214     (11699.525, 176915.945]\n",
       "Name: open_price, Length: 366, dtype: category\n",
       "Categories (3, interval[float64]): [(2031.089, 4409.006] < (4409.006, 11699.525] < (11699.525, 176915.945]]"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.qcut(pe['open_price'],3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "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>min</th>\n",
       "      <th>max</th>\n",
       "      <th>mean</th>\n",
       "      <th>median</th>\n",
       "      <th>std</th>\n",
       "      <th>count</th>\n",
       "      <th>sum</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>open_price_bin</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>&lt;4,409</th>\n",
       "      <td>-0.877874</td>\n",
       "      <td>9.395892</td>\n",
       "      <td>0.882663</td>\n",
       "      <td>0.250870</td>\n",
       "      <td>1.994756</td>\n",
       "      <td>122</td>\n",
       "      <td>3.683373e+05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>&lt;11,700</th>\n",
       "      <td>-0.820495</td>\n",
       "      <td>436.692092</td>\n",
       "      <td>5.113487</td>\n",
       "      <td>0.280281</td>\n",
       "      <td>40.364775</td>\n",
       "      <td>122</td>\n",
       "      <td>9.000389e+05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>&lt;110,000</th>\n",
       "      <td>-0.916837</td>\n",
       "      <td>218.506047</td>\n",
       "      <td>3.607147</td>\n",
       "      <td>0.798074</td>\n",
       "      <td>19.910312</td>\n",
       "      <td>122</td>\n",
       "      <td>4.983640e+06</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     min         max      mean    median        std  count  \\\n",
       "open_price_bin                                                               \n",
       "<4,409         -0.877874    9.395892  0.882663  0.250870   1.994756    122   \n",
       "<11,700        -0.820495  436.692092  5.113487  0.280281  40.364775    122   \n",
       "<110,000       -0.916837  218.506047  3.607147  0.798074  19.910312    122   \n",
       "\n",
       "                         sum  \n",
       "open_price_bin                \n",
       "<4,409          3.683373e+05  \n",
       "<11,700         9.000389e+05  \n",
       "<110,000        4.983640e+06  "
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pe['open_price_bin'] = pd.qcut(pe['open_price'],3, labels=['<4,409', '<11,700', '<110,000'])\n",
    "\n",
    "return_stats = pe.groupby('open_price_bin')['ret'].agg([min, max, np.mean, np.median, np.std, \"count\"])\n",
    "\n",
    "capital = pe.groupby('open_price_bin')['open_price'].agg([sum])\n",
    "\n",
    "return_stats.join(capital)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/paperspace/anaconda3/envs/whitelist/lib/python3.6/site-packages/plotnine/utils.py:281: FutureWarning: Method .as_matrix will be removed in a future version. Use .values instead.\n",
      "  ndistinct = ids.apply(len_unique, axis=0).as_matrix()\n",
      "/home/paperspace/anaconda3/envs/whitelist/lib/python3.6/site-packages/pandas/core/generic.py:4388: FutureWarning: Attribute 'is_copy' is deprecated and will be removed in a future version.\n",
      "  object.__getattribute__(self, name)\n",
      "/home/paperspace/anaconda3/envs/whitelist/lib/python3.6/site-packages/pandas/core/generic.py:4389: FutureWarning: Attribute 'is_copy' is deprecated and will be removed in a future version.\n",
      "  return object.__setattr__(self, name, value)\n",
      "/home/paperspace/anaconda3/envs/whitelist/lib/python3.6/site-packages/plotnine/positions/position.py:188: FutureWarning: Method .as_matrix will be removed in a future version. Use .values instead.\n",
      "  intervals = data[xminmax].drop_duplicates().as_matrix().flatten()\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<ggplot: (-9223363265192046925)>"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pe['log_ret_p1'] = np.log(pe['ret'] + 1)\n",
    "ggplot(pe, aes('open_price_bin', 'log_ret_p1')) + geom_violin()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/paperspace/anaconda3/envs/whitelist/lib/python3.6/site-packages/plotnine/utils.py:281: FutureWarning: Method .as_matrix will be removed in a future version. Use .values instead.\n",
      "  ndistinct = ids.apply(len_unique, axis=0).as_matrix()\n",
      "/home/paperspace/anaconda3/envs/whitelist/lib/python3.6/site-packages/pandas/core/generic.py:4388: FutureWarning: Attribute 'is_copy' is deprecated and will be removed in a future version.\n",
      "  object.__getattribute__(self, name)\n",
      "/home/paperspace/anaconda3/envs/whitelist/lib/python3.6/site-packages/pandas/core/generic.py:4389: FutureWarning: Attribute 'is_copy' is deprecated and will be removed in a future version.\n",
      "  return object.__setattr__(self, name, value)\n",
      "/home/paperspace/anaconda3/envs/whitelist/lib/python3.6/site-packages/plotnine/positions/position.py:188: FutureWarning: Method .as_matrix will be removed in a future version. Use .values instead.\n",
      "  intervals = data[xminmax].drop_duplicates().as_matrix().flatten()\n"
     ]
    },
    {
     "data": {
      "image/png": "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0ksvKTU1NeAeHBs3bvT/9da6deuA+wQtX75c77zzjo4fP65GjRpp0KBBZU5ERPV2at9avXq1pk2bFrC9TZs2euaZZySd6D+n3yLhv/7rv3TXXXfJ5XJp+PDhysnJUc2aNSWduDx68ODBeuGFF9SsWbOA1/l8Ps2fP18ffPCBPB6POnbsWOY+QS+//LL/PkF333039wmqZkLVt6QTn3WzZs3Sb7/9VuY+QX/729+0Z88ejR49WtJ/7hP08ccf++8TNHDgQP9+d+7cqVdffVU7d+5U3bp1dd999/kDlfSf+wQdO3ZMHTp00AMPPMB9goJACELEuVwuTZkyRc8//7zVpcAwa9eu1e7du894A0UgHJ588kndc889atSokdWl4BSEIAAAYCTOCQIAAEYiBAEAACMRggAAgJEIQQAAwEiEIAAAYCRCEAAAMBIhCAAAGIkQBAAAjEQIAhD1xo0bp+Tk5IgfNzs7O+BRBxXp3LmzbrnllghUBOBUPEUeQNQbOnSobr75ZqvLqNCMGTPkcDisLgMwDiEIQNQqLCxUYmKiGjZsqIYNG1pdToVat25tdQmAkZgOAwz0/vvvq3379kpISFC9evU0fPhwHT16VJK0bt062Ww2/eMf/1Dfvn3ldDpVv359/5O0T/Xjjz+qT58+SklJkdPp1M0336x///vfAW1sNpuee+45PfXUU6pbt67S0tJ09913y+12n3O9J6eL3nrrLTVv3lyJiYnq3Lmztm7dWuZYkydP1iOPPKJ69eopPT1dUvnTYQcPHtQDDzyghg0bKj4+Xk2bNtWjjz4a0GbFihW6+uqrlZiYqPT0dN13332VqvukDz74QG3atFFCQoI6dOigzz77rNz3d9LJejdt2qTrrrtOSUlJatOmjVauXFnpYwOoGCEIMMyyZcvUt29fXXTRRVq6dKnGjh2rt99+W7feemtAu2HDhql58+ZasmSJBg4cqMcff1yzZs3yb9+xY4euvfZaHThwQG+88YYWLFig/fv3q1u3bioqKgrY16uvvqqffvpJb775psaOHasFCxZo4sSJlar7m2++0bPPPqvJkyfrrbfe0t69e9WjR48yx5o2bZp++uknvf7665o3b165+yoqKlLXrl01f/58jRkzRh988IHGjRsnl8vlb/Pee++pd+/eatu2rZYuXarnnntOS5Ys0ZAhQypV9969e3X//fdrzJgxWrRokeLj49WjRw/l5+ef8XUlJSUaOHCgsrOztXTpUqWlpalfv376/fffK3V8AGfgA2CU9u3b+6666qqAdQsWLPBJ8q1du9a3du1anyTfn//854A2AwcO9DVs2NDn8Xh8Pp/P99///d++pk2b+goLC/1t8vPzfU6n0zd9+nT/Okm+K6+8MmBfWVlZvubNm59zzZ06dfLZ7Xbftm3b/Ou2bdvms9vtvtmzZwcc65JLLvF5vd6A1z/11FM+p9PpX54zZ45Pku/TTz8t93her9eXmZnpu/POOwPWr1ixwmez2Xy5ubnnVPegQYN8knyrV6/2rysoKPAlJyf7Hn300YD3d/PNNwfUK8m3YsUK/7rt27f7JPnefvvtczo2gLNjJAgwyNGjR/Xdd99pwIABAev79++vmJgYffzxx/51t912W0Cbvn376pdfftEvv/wiSfrwww/Vp08fxcTEqLS0VKWlpUpNTdVll12mL7/8MuC1N954Y8By69at/fs5V23atFGLFi38yy1atFCbNm3KTC317NlTNpvtjPtavXq1WrVqpWuuuabc7du2bdOuXbs0YMAA/3srLS1Vp06dZLPZ9NVXX51z3SkpKeratat/uVatWuratWuZuk9nt9vVvXt3//KFF16ouLi4Sn/fAFSMEAQY5ODBg/L5fKpXr17A+piYGNWpU0cHDhzwr8vIyAhoc3J57969kiSXy6WXXnpJsbGxAf99+umn+vnnnwNeW6tWrYDluLi4MtNYZ3N6PSfXnaznTO1O9/vvv6tBgwYVbj85LXbbbbcFvLfk5GR5vd4y7+9MTp6XdLa6T5eYmKi4uLiAdbGxsTp+/Pg5HxvAmXF1GGCQWrVqyWaz6bfffgtYX1paqt9//121a9f2rzv9nJWTy/Xr15ck1a5dWzfffLPuv//+MsepUaNGqEsv9xya/Px8dejQIWDd2UaBJKlOnTratGlThdtPfh9effVVXX311WW2nylAnW7//v1l1uXn5/u/jwCsw0gQYJDk5GS1a9dOixYtCli/ePFilZaW6vrrr/evW7p0aUCbJUuWqEGDBv5Lzbt3767c3Fy1b99eV1xxRcB/LVu2DHntubm52r59u395+/btys3NLTeknE337t31448/VjgldfHFF6thw4basWNHmfd2xRVXVCoEHTp0SGvWrCmzHEzdAEKLkSDAMOPGjdOtt96qO++8U4MGDdKOHTv06KOPqlu3burcubPWrVsnSVqzZo3GjBmjG264QR999JHmzZun6dOny24/8bfT+PHjdeWVV6pHjx4aNmyY6tatq3379mn9+vW6/vrrdeedd4a07rp166p3796aOHGifD6fxo4dqwsuuECDBg2q9L7+/Oc/a8aMGbrlllv01FNPqU2bNtqzZ482bNigOXPmyGazaerUqbrrrrvkdrt18803y+l0ateuXVqxYoWeeeYZXXTRRed0rNq1a2vIkCEaP368atWqpcmTJ0uSRo0aVem6AYQWIQgwTO/evbV48WJNmDBBffr0Ua1atTRw4EBNmTIloN3s2bM1e/ZszZgxQzVq1NDEiRMDpr4uvPBCffHFF3riiSd0//336+jRo6pfv746duyoSy+9NOR1X3755erXr5/GjBmjvXv36uqrr9asWbOUkJBQ6X3Fx8dr9erVevzxx/XMM8/owIEDatiwYUBw69+/v2rVqqWnn37af6l9kyZN9Kc//Ul169Y952PVr19fU6ZM0ZgxY/Tvf/9bl1xyiVauXFmpfQAID5vP5/NZXQSAqmPdunXq0qWLvvzyS11xxRVWlyPpxM0Ek5OTtXz5cqtLARBFOCcIAAAYiekwAJbyeDw604B0TEzV/JiqrnUD+A+mwwBYqkmTJtq1a1eF26vqR1Tnzp21fv36Crfn5eWpSZMmkSsIQKURggBYavPmzWe8cWJVOS/pdFu3btWRI0cq3H7ppZeWudkhgKqFEAQAAIzEidEAAMBIhCAAAGAkQhAAADASIQgAABiJEAQAAIxECAIAAEYiBAEAACP9Py85hUqpRXxOAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<ggplot: (8771662978140)>"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ggplot(pe, aes('open_price_bin', 'log_ret_p1')) + geom_boxplot()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# With slippage "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "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>min</th>\n",
       "      <th>max</th>\n",
       "      <th>mean</th>\n",
       "      <th>median</th>\n",
       "      <th>std</th>\n",
       "      <th>count</th>\n",
       "      <th>sum</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>open_price_bin</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>(2022.53, 4511.512]</th>\n",
       "      <td>-0.877874</td>\n",
       "      <td>9.395892</td>\n",
       "      <td>0.790443</td>\n",
       "      <td>0.226009</td>\n",
       "      <td>1.821447</td>\n",
       "      <td>108</td>\n",
       "      <td>3.309290e+05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(4511.512, 11507.086]</th>\n",
       "      <td>-0.916837</td>\n",
       "      <td>436.692092</td>\n",
       "      <td>5.772132</td>\n",
       "      <td>0.368967</td>\n",
       "      <td>42.878417</td>\n",
       "      <td>108</td>\n",
       "      <td>7.562700e+05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(11507.086, 141532.756]</th>\n",
       "      <td>-0.843068</td>\n",
       "      <td>218.506047</td>\n",
       "      <td>3.980469</td>\n",
       "      <td>0.809486</td>\n",
       "      <td>21.139043</td>\n",
       "      <td>108</td>\n",
       "      <td>3.839108e+06</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                              min         max      mean    median        std  \\\n",
       "open_price_bin                                                                 \n",
       "(2022.53, 4511.512]     -0.877874    9.395892  0.790443  0.226009   1.821447   \n",
       "(4511.512, 11507.086]   -0.916837  436.692092  5.772132  0.368967  42.878417   \n",
       "(11507.086, 141532.756] -0.843068  218.506047  3.980469  0.809486  21.139043   \n",
       "\n",
       "                         count           sum  \n",
       "open_price_bin                                \n",
       "(2022.53, 4511.512]        108  3.309290e+05  \n",
       "(4511.512, 11507.086]      108  7.562700e+05  \n",
       "(11507.086, 141532.756]    108  3.839108e+06  "
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "pe = general_stats_first_seen(slippage=0.8)\n",
    "pe['open_price_bin'] = pd.qcut(pe['open_price'],3)\n",
    "\n",
    "return_stats = pe.groupby('open_price_bin')['ret'].agg([min, max, np.mean, np.median, np.std, \"count\"])\n",
    "\n",
    "capital = pe.groupby('open_price_bin')['open_price'].agg([sum])\n",
    "\n",
    "return_stats.join(capital)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "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>min</th>\n",
       "      <th>max</th>\n",
       "      <th>mean</th>\n",
       "      <th>median</th>\n",
       "      <th>std</th>\n",
       "      <th>count</th>\n",
       "      <th>sum</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>open_price_bin</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>(2001.752, 3876.501]</th>\n",
       "      <td>-0.808948</td>\n",
       "      <td>436.692092</td>\n",
       "      <td>6.749661</td>\n",
       "      <td>0.090700</td>\n",
       "      <td>48.045299</td>\n",
       "      <td>86</td>\n",
       "      <td>2.450293e+05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(3876.501, 8648.544]</th>\n",
       "      <td>-0.916837</td>\n",
       "      <td>218.506047</td>\n",
       "      <td>3.446082</td>\n",
       "      <td>0.357560</td>\n",
       "      <td>23.677308</td>\n",
       "      <td>85</td>\n",
       "      <td>4.953874e+05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(8648.544, 88457.973]</th>\n",
       "      <td>-0.843068</td>\n",
       "      <td>21.637598</td>\n",
       "      <td>2.315469</td>\n",
       "      <td>0.968619</td>\n",
       "      <td>3.861602</td>\n",
       "      <td>86</td>\n",
       "      <td>2.228496e+06</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                            min         max      mean    median        std  \\\n",
       "open_price_bin                                                               \n",
       "(2001.752, 3876.501]  -0.808948  436.692092  6.749661  0.090700  48.045299   \n",
       "(3876.501, 8648.544]  -0.916837  218.506047  3.446082  0.357560  23.677308   \n",
       "(8648.544, 88457.973] -0.843068   21.637598  2.315469  0.968619   3.861602   \n",
       "\n",
       "                       count           sum  \n",
       "open_price_bin                              \n",
       "(2001.752, 3876.501]      86  2.450293e+05  \n",
       "(3876.501, 8648.544]      85  4.953874e+05  \n",
       "(8648.544, 88457.973]     86  2.228496e+06  "
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pe = general_stats_first_seen(slippage=0.5)\n",
    "pe['open_price_bin'] = pd.qcut(pe['open_price'],3)\n",
    "\n",
    "return_stats = pe.groupby('open_price_bin')['ret'].agg([min, max, np.mean, np.median, np.std, \"count\"])\n",
    "\n",
    "capital = pe.groupby('open_price_bin')['open_price'].agg([sum])\n",
    "\n",
    "return_stats.join(capital)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:whitelist]",
   "language": "python",
   "name": "conda-env-whitelist-py"
  },
  "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.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
