ml-finance-python

python scripts for finance machine learning

git clone https://9o.is/git/ml-finance-python.git

002_quantitative_momentum_strategy.ipynb

(116215B)


      1 {
      2  "cells": [
      3   {
      4    "cell_type": "markdown",
      5    "metadata": {},
      6    "source": [
      7     "# Quantitative Momentum Strategy\n",
      8     "\n",
      9     "\"Momentum investing\" means investing in the stocks that have increased in price the most.\n",
     10     "\n",
     11     "For this project, we're going to build an investing strategy that selects the 50 stocks with the highest price momentum. From there, we will calculate recommended trades for an equal-weight portfolio of these 50 stocks.\n",
     12     "\n",
     13     "\n",
     14     "## Library Imports\n",
     15     "\n",
     16     "The first thing we need to do is import the open-source software libraries that we'll be using in this tutorial."
     17    ]
     18   },
     19   {
     20    "cell_type": "code",
     21    "execution_count": 1,
     22    "metadata": {},
     23    "outputs": [],
     24    "source": [
     25     "import numpy as np #The Numpy numerical computing library\n",
     26     "import pandas as pd #The Pandas data science library\n",
     27     "import requests #The requests library for HTTP requests in Python\n",
     28     "import xlsxwriter #The XlsxWriter libarary for \n",
     29     "import math #The Python math module\n",
     30     "from scipy import stats #The SciPy stats module"
     31    ]
     32   },
     33   {
     34    "cell_type": "markdown",
     35    "metadata": {},
     36    "source": [
     37     "## Importing Our List of Stocks\n",
     38     "\n",
     39     "As before, we'll need to import our list of stocks and our API token before proceeding. Make sure the `.csv` file is still in your working directory and import it with the following command:"
     40    ]
     41   },
     42   {
     43    "cell_type": "code",
     44    "execution_count": 2,
     45    "metadata": {},
     46    "outputs": [],
     47    "source": [
     48     "stocks = pd.read_csv('sp_500_stocks.csv')\n",
     49     "from secrets import IEX_CLOUD_API_TOKEN"
     50    ]
     51   },
     52   {
     53    "cell_type": "markdown",
     54    "metadata": {},
     55    "source": [
     56     "## Making Our First API Call\n",
     57     "\n",
     58     "It's now time to make the first version of our momentum screener!\n",
     59     "\n",
     60     "We need to get one-year price returns for each stock in the universe. Here's how."
     61    ]
     62   },
     63   {
     64    "cell_type": "code",
     65    "execution_count": 3,
     66    "metadata": {},
     67    "outputs": [
     68     {
     69      "data": {
     70       "text/plain": [
     71        "{'week52change': 1.271858,\n",
     72        " 'week52high': 462.02,\n",
     73        " 'week52low': 206.85,\n",
     74        " 'marketcap': 1937104274094,\n",
     75        " 'employees': 137265,\n",
     76        " 'day200MovingAvg': 309.44,\n",
     77        " 'day50MovingAvg': 390.09,\n",
     78        " 'float': 4440629054,\n",
     79        " 'avg10Volume': 54435185.2,\n",
     80        " 'avg30Volume': 39067154.1,\n",
     81        " 'ttmEPS': 13.7084,\n",
     82        " 'ttmDividendRate': 3.22,\n",
     83        " 'companyName': 'Apple, Inc.',\n",
     84        " 'sharesOutstanding': 4331609946,\n",
     85        " 'maxChangePercent': 452.5766,\n",
     86        " 'year5ChangePercent': 3.0546,\n",
     87        " 'year2ChangePercent': 1.1867,\n",
     88        " 'year1ChangePercent': 1.186376,\n",
     89        " 'ytdChangePercent': 0.512578,\n",
     90        " 'month6ChangePercent': 0.407457,\n",
     91        " 'month3ChangePercent': 0.485051,\n",
     92        " 'month1ChangePercent': 0.19254,\n",
     93        " 'day30ChangePercent': 0.253108,\n",
     94        " 'day5ChangePercent': -0.008155,\n",
     95        " 'nextDividendDate': '2020-08-16',\n",
     96        " 'dividendYield': 0.007235663525925464,\n",
     97        " 'nextEarningsDate': '2020-10-17',\n",
     98        " 'exDividendDate': '2020-08-06',\n",
     99        " 'peRatio': 34.17,\n",
    100        " 'beta': 1.15885673879414}"
    101       ]
    102      },
    103      "execution_count": 3,
    104      "metadata": {},
    105      "output_type": "execute_result"
    106     }
    107    ],
    108    "source": [
    109     "symbol = 'AAPL'\n",
    110     "api_url = f'https://sandbox.iexapis.com/stable/stock/{symbol}/stats?token={IEX_CLOUD_API_TOKEN}'\n",
    111     "data = requests.get(api_url).json()\n",
    112     "data"
    113    ]
    114   },
    115   {
    116    "cell_type": "markdown",
    117    "metadata": {},
    118    "source": [
    119     "## Parsing Our API Call\n",
    120     "\n",
    121     "This API call has all the information we need. We can parse it using the same square-bracket notation as in the first project of this course. Here is an example."
    122    ]
    123   },
    124   {
    125    "cell_type": "code",
    126    "execution_count": 4,
    127    "metadata": {},
    128    "outputs": [
    129     {
    130      "data": {
    131       "text/plain": [
    132        "1.186376"
    133       ]
    134      },
    135      "execution_count": 4,
    136      "metadata": {},
    137      "output_type": "execute_result"
    138     }
    139    ],
    140    "source": [
    141     "data['year1ChangePercent']"
    142    ]
    143   },
    144   {
    145    "cell_type": "markdown",
    146    "metadata": {},
    147    "source": [
    148     "## Executing A Batch API Call & Building Our DataFrame\n",
    149     "\n",
    150     "Just like in our first project, it's now time to execute several batch API calls and add the information we need to our DataFrame.\n",
    151     "\n",
    152     "We'll start by running the following code cell, which contains some code we already built last time that we can re-use for this project. More specifically, it contains a function called `chunks` that we can use to divide our list of securities into groups of 100."
    153    ]
    154   },
    155   {
    156    "cell_type": "code",
    157    "execution_count": 5,
    158    "metadata": {},
    159    "outputs": [],
    160    "source": [
    161     "# Function sourced from \n",
    162     "# https://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks\n",
    163     "def chunks(lst, n):\n",
    164     "    \"\"\"Yield successive n-sized chunks from lst.\"\"\"\n",
    165     "    for i in range(0, len(lst), n):\n",
    166     "        yield lst[i:i + n]   \n",
    167     "        \n",
    168     "symbol_groups = list(chunks(stocks['Ticker'], 100))\n",
    169     "symbol_strings = []\n",
    170     "for i in range(0, len(symbol_groups)):\n",
    171     "    symbol_strings.append(','.join(symbol_groups[i]))\n",
    172     "#     print(symbol_strings[i])\n",
    173     "\n",
    174     "my_columns = ['Ticker', 'Price', 'One-Year Price Return', 'Number of Shares to Buy']"
    175    ]
    176   },
    177   {
    178    "cell_type": "markdown",
    179    "metadata": {},
    180    "source": [
    181     "Now we need to create a blank DataFrame and add our data to the data frame one-by-one."
    182    ]
    183   },
    184   {
    185    "cell_type": "code",
    186    "execution_count": 6,
    187    "metadata": {},
    188    "outputs": [
    189     {
    190      "data": {
    191       "text/html": [
    192        "<div>\n",
    193        "<style scoped>\n",
    194        "    .dataframe tbody tr th:only-of-type {\n",
    195        "        vertical-align: middle;\n",
    196        "    }\n",
    197        "\n",
    198        "    .dataframe tbody tr th {\n",
    199        "        vertical-align: top;\n",
    200        "    }\n",
    201        "\n",
    202        "    .dataframe thead th {\n",
    203        "        text-align: right;\n",
    204        "    }\n",
    205        "</style>\n",
    206        "<table border=\"1\" class=\"dataframe\">\n",
    207        "  <thead>\n",
    208        "    <tr style=\"text-align: right;\">\n",
    209        "      <th></th>\n",
    210        "      <th>Ticker</th>\n",
    211        "      <th>Price</th>\n",
    212        "      <th>One-Year Price Return</th>\n",
    213        "      <th>Number of Shares to Buy</th>\n",
    214        "    </tr>\n",
    215        "  </thead>\n",
    216        "  <tbody>\n",
    217        "    <tr>\n",
    218        "      <th>0</th>\n",
    219        "      <td>A</td>\n",
    220        "      <td>101.50</td>\n",
    221        "      <td>0.452986</td>\n",
    222        "      <td>N/A</td>\n",
    223        "    </tr>\n",
    224        "    <tr>\n",
    225        "      <th>1</th>\n",
    226        "      <td>AAL</td>\n",
    227        "      <td>13.65</td>\n",
    228        "      <td>-0.527621</td>\n",
    229        "      <td>N/A</td>\n",
    230        "    </tr>\n",
    231        "    <tr>\n",
    232        "      <th>2</th>\n",
    233        "      <td>AAP</td>\n",
    234        "      <td>157.72</td>\n",
    235        "      <td>0.088479</td>\n",
    236        "      <td>N/A</td>\n",
    237        "    </tr>\n",
    238        "    <tr>\n",
    239        "      <th>3</th>\n",
    240        "      <td>AAPL</td>\n",
    241        "      <td>453.87</td>\n",
    242        "      <td>1.172528</td>\n",
    243        "      <td>N/A</td>\n",
    244        "    </tr>\n",
    245        "    <tr>\n",
    246        "      <th>4</th>\n",
    247        "      <td>ABBV</td>\n",
    248        "      <td>95.71</td>\n",
    249        "      <td>0.476493</td>\n",
    250        "      <td>N/A</td>\n",
    251        "    </tr>\n",
    252        "    <tr>\n",
    253        "      <th>...</th>\n",
    254        "      <td>...</td>\n",
    255        "      <td>...</td>\n",
    256        "      <td>...</td>\n",
    257        "      <td>...</td>\n",
    258        "    </tr>\n",
    259        "    <tr>\n",
    260        "      <th>500</th>\n",
    261        "      <td>YUM</td>\n",
    262        "      <td>93.50</td>\n",
    263        "      <td>-0.208066</td>\n",
    264        "      <td>N/A</td>\n",
    265        "    </tr>\n",
    266        "    <tr>\n",
    267        "      <th>501</th>\n",
    268        "      <td>ZBH</td>\n",
    269        "      <td>138.91</td>\n",
    270        "      <td>0.003031</td>\n",
    271        "      <td>N/A</td>\n",
    272        "    </tr>\n",
    273        "    <tr>\n",
    274        "      <th>502</th>\n",
    275        "      <td>ZBRA</td>\n",
    276        "      <td>287.51</td>\n",
    277        "      <td>0.369427</td>\n",
    278        "      <td>N/A</td>\n",
    279        "    </tr>\n",
    280        "    <tr>\n",
    281        "      <th>503</th>\n",
    282        "      <td>ZION</td>\n",
    283        "      <td>35.73</td>\n",
    284        "      <td>-0.162236</td>\n",
    285        "      <td>N/A</td>\n",
    286        "    </tr>\n",
    287        "    <tr>\n",
    288        "      <th>504</th>\n",
    289        "      <td>ZTS</td>\n",
    290        "      <td>165.46</td>\n",
    291        "      <td>0.288770</td>\n",
    292        "      <td>N/A</td>\n",
    293        "    </tr>\n",
    294        "  </tbody>\n",
    295        "</table>\n",
    296        "<p>505 rows × 4 columns</p>\n",
    297        "</div>"
    298       ],
    299       "text/plain": [
    300        "    Ticker   Price  One-Year Price Return Number of Shares to Buy\n",
    301        "0        A  101.50               0.452986                     N/A\n",
    302        "1      AAL   13.65              -0.527621                     N/A\n",
    303        "2      AAP  157.72               0.088479                     N/A\n",
    304        "3     AAPL  453.87               1.172528                     N/A\n",
    305        "4     ABBV   95.71               0.476493                     N/A\n",
    306        "..     ...     ...                    ...                     ...\n",
    307        "500    YUM   93.50              -0.208066                     N/A\n",
    308        "501    ZBH  138.91               0.003031                     N/A\n",
    309        "502   ZBRA  287.51               0.369427                     N/A\n",
    310        "503   ZION   35.73              -0.162236                     N/A\n",
    311        "504    ZTS  165.46               0.288770                     N/A\n",
    312        "\n",
    313        "[505 rows x 4 columns]"
    314       ]
    315      },
    316      "execution_count": 6,
    317      "metadata": {},
    318      "output_type": "execute_result"
    319     }
    320    ],
    321    "source": [
    322     "final_dataframe = pd.DataFrame(columns = my_columns)\n",
    323     "\n",
    324     "for symbol_string in symbol_strings:\n",
    325     "#     print(symbol_strings)\n",
    326     "    batch_api_call_url = f'https://sandbox.iexapis.com/stable/stock/market/batch/?types=stats,quote&symbols={symbol_string}&token={IEX_CLOUD_API_TOKEN}'\n",
    327     "    data = requests.get(batch_api_call_url).json()\n",
    328     "    for symbol in symbol_string.split(','):\n",
    329     "        final_dataframe = final_dataframe.append(\n",
    330     "                                        pd.Series([symbol, \n",
    331     "                                                   data[symbol]['quote']['latestPrice'],\n",
    332     "                                                   data[symbol]['stats']['year1ChangePercent'],\n",
    333     "                                                   'N/A'\n",
    334     "                                                   ], \n",
    335     "                                                  index = my_columns), \n",
    336     "                                        ignore_index = True)\n",
    337     "        \n",
    338     "    \n",
    339     "final_dataframe"
    340    ]
    341   },
    342   {
    343    "cell_type": "markdown",
    344    "metadata": {},
    345    "source": [
    346     "## Removing Low-Momentum Stocks\n",
    347     "\n",
    348     "The investment strategy that we're building seeks to identify the 50 highest-momentum stocks in the S&P 500.\n",
    349     "\n",
    350     "Because of this, the next thing we need to do is remove all the stocks in our DataFrame that fall below this momentum threshold. We'll sort the DataFrame by the stocks' one-year price return, and drop all stocks outside the top 50.\n"
    351    ]
    352   },
    353   {
    354    "cell_type": "code",
    355    "execution_count": 7,
    356    "metadata": {},
    357    "outputs": [
    358     {
    359      "data": {
    360       "text/html": [
    361        "<div>\n",
    362        "<style scoped>\n",
    363        "    .dataframe tbody tr th:only-of-type {\n",
    364        "        vertical-align: middle;\n",
    365        "    }\n",
    366        "\n",
    367        "    .dataframe tbody tr th {\n",
    368        "        vertical-align: top;\n",
    369        "    }\n",
    370        "\n",
    371        "    .dataframe thead th {\n",
    372        "        text-align: right;\n",
    373        "    }\n",
    374        "</style>\n",
    375        "<table border=\"1\" class=\"dataframe\">\n",
    376        "  <thead>\n",
    377        "    <tr style=\"text-align: right;\">\n",
    378        "      <th></th>\n",
    379        "      <th>Ticker</th>\n",
    380        "      <th>Price</th>\n",
    381        "      <th>One-Year Price Return</th>\n",
    382        "      <th>Number of Shares to Buy</th>\n",
    383        "    </tr>\n",
    384        "  </thead>\n",
    385        "  <tbody>\n",
    386        "    <tr>\n",
    387        "      <th>0</th>\n",
    388        "      <td>NVDA</td>\n",
    389        "      <td>458.14</td>\n",
    390        "      <td>2.015964</td>\n",
    391        "      <td>N/A</td>\n",
    392        "    </tr>\n",
    393        "    <tr>\n",
    394        "      <th>1</th>\n",
    395        "      <td>DXCM</td>\n",
    396        "      <td>441.29</td>\n",
    397        "      <td>1.721219</td>\n",
    398        "      <td>N/A</td>\n",
    399        "    </tr>\n",
    400        "    <tr>\n",
    401        "      <th>2</th>\n",
    402        "      <td>AMD</td>\n",
    403        "      <td>85.46</td>\n",
    404        "      <td>1.632817</td>\n",
    405        "      <td>N/A</td>\n",
    406        "    </tr>\n",
    407        "    <tr>\n",
    408        "      <th>3</th>\n",
    409        "      <td>CARR</td>\n",
    410        "      <td>29.94</td>\n",
    411        "      <td>1.489900</td>\n",
    412        "      <td>N/A</td>\n",
    413        "    </tr>\n",
    414        "    <tr>\n",
    415        "      <th>4</th>\n",
    416        "      <td>AAPL</td>\n",
    417        "      <td>453.87</td>\n",
    418        "      <td>1.172528</td>\n",
    419        "      <td>N/A</td>\n",
    420        "    </tr>\n",
    421        "    <tr>\n",
    422        "      <th>5</th>\n",
    423        "      <td>REGN</td>\n",
    424        "      <td>624.50</td>\n",
    425        "      <td>1.031728</td>\n",
    426        "      <td>N/A</td>\n",
    427        "    </tr>\n",
    428        "    <tr>\n",
    429        "      <th>6</th>\n",
    430        "      <td>SWKS</td>\n",
    431        "      <td>153.26</td>\n",
    432        "      <td>0.921570</td>\n",
    433        "      <td>N/A</td>\n",
    434        "    </tr>\n",
    435        "    <tr>\n",
    436        "      <th>7</th>\n",
    437        "      <td>WST</td>\n",
    438        "      <td>283.20</td>\n",
    439        "      <td>0.921000</td>\n",
    440        "      <td>N/A</td>\n",
    441        "    </tr>\n",
    442        "    <tr>\n",
    443        "      <th>8</th>\n",
    444        "      <td>LRCX</td>\n",
    445        "      <td>393.68</td>\n",
    446        "      <td>0.892740</td>\n",
    447        "      <td>N/A</td>\n",
    448        "    </tr>\n",
    449        "    <tr>\n",
    450        "      <th>9</th>\n",
    451        "      <td>QRVO</td>\n",
    452        "      <td>132.38</td>\n",
    453        "      <td>0.858187</td>\n",
    454        "      <td>N/A</td>\n",
    455        "    </tr>\n",
    456        "    <tr>\n",
    457        "      <th>10</th>\n",
    458        "      <td>PYPL</td>\n",
    459        "      <td>196.30</td>\n",
    460        "      <td>0.829338</td>\n",
    461        "      <td>N/A</td>\n",
    462        "    </tr>\n",
    463        "    <tr>\n",
    464        "      <th>11</th>\n",
    465        "      <td>AMZN</td>\n",
    466        "      <td>3192.88</td>\n",
    467        "      <td>0.759898</td>\n",
    468        "      <td>N/A</td>\n",
    469        "    </tr>\n",
    470        "    <tr>\n",
    471        "      <th>12</th>\n",
    472        "      <td>ATVI</td>\n",
    473        "      <td>83.82</td>\n",
    474        "      <td>0.710587</td>\n",
    475        "      <td>N/A</td>\n",
    476        "    </tr>\n",
    477        "    <tr>\n",
    478        "      <th>13</th>\n",
    479        "      <td>ALGN</td>\n",
    480        "      <td>313.73</td>\n",
    481        "      <td>0.709093</td>\n",
    482        "      <td>N/A</td>\n",
    483        "    </tr>\n",
    484        "    <tr>\n",
    485        "      <th>14</th>\n",
    486        "      <td>NEM</td>\n",
    487        "      <td>63.72</td>\n",
    488        "      <td>0.698936</td>\n",
    489        "      <td>N/A</td>\n",
    490        "    </tr>\n",
    491        "    <tr>\n",
    492        "      <th>15</th>\n",
    493        "      <td>ODFL</td>\n",
    494        "      <td>196.24</td>\n",
    495        "      <td>0.690263</td>\n",
    496        "      <td>N/A</td>\n",
    497        "    </tr>\n",
    498        "    <tr>\n",
    499        "      <th>16</th>\n",
    500        "      <td>ROL</td>\n",
    501        "      <td>55.90</td>\n",
    502        "      <td>0.676072</td>\n",
    503        "      <td>N/A</td>\n",
    504        "    </tr>\n",
    505        "    <tr>\n",
    506        "      <th>17</th>\n",
    507        "      <td>NOW</td>\n",
    508        "      <td>439.05</td>\n",
    509        "      <td>0.656782</td>\n",
    510        "      <td>N/A</td>\n",
    511        "    </tr>\n",
    512        "    <tr>\n",
    513        "      <th>18</th>\n",
    514        "      <td>LOW</td>\n",
    515        "      <td>159.19</td>\n",
    516        "      <td>0.646186</td>\n",
    517        "      <td>N/A</td>\n",
    518        "    </tr>\n",
    519        "    <tr>\n",
    520        "      <th>19</th>\n",
    521        "      <td>DPZ</td>\n",
    522        "      <td>405.67</td>\n",
    523        "      <td>0.644884</td>\n",
    524        "      <td>N/A</td>\n",
    525        "    </tr>\n",
    526        "    <tr>\n",
    527        "      <th>20</th>\n",
    528        "      <td>FBHS</td>\n",
    529        "      <td>85.93</td>\n",
    530        "      <td>0.635603</td>\n",
    531        "      <td>N/A</td>\n",
    532        "    </tr>\n",
    533        "    <tr>\n",
    534        "      <th>21</th>\n",
    535        "      <td>FAST</td>\n",
    536        "      <td>49.98</td>\n",
    537        "      <td>0.624303</td>\n",
    538        "      <td>N/A</td>\n",
    539        "    </tr>\n",
    540        "    <tr>\n",
    541        "      <th>22</th>\n",
    542        "      <td>TGT</td>\n",
    543        "      <td>136.10</td>\n",
    544        "      <td>0.616877</td>\n",
    545        "      <td>N/A</td>\n",
    546        "    </tr>\n",
    547        "    <tr>\n",
    548        "      <th>23</th>\n",
    549        "      <td>QCOM</td>\n",
    550        "      <td>119.34</td>\n",
    551        "      <td>0.609546</td>\n",
    552        "      <td>N/A</td>\n",
    553        "    </tr>\n",
    554        "    <tr>\n",
    555        "      <th>24</th>\n",
    556        "      <td>URI</td>\n",
    557        "      <td>181.40</td>\n",
    558        "      <td>0.590406</td>\n",
    559        "      <td>N/A</td>\n",
    560        "    </tr>\n",
    561        "    <tr>\n",
    562        "      <th>25</th>\n",
    563        "      <td>CHTR</td>\n",
    564        "      <td>602.51</td>\n",
    565        "      <td>0.586074</td>\n",
    566        "      <td>N/A</td>\n",
    567        "    </tr>\n",
    568        "    <tr>\n",
    569        "      <th>26</th>\n",
    570        "      <td>MSCI</td>\n",
    571        "      <td>369.93</td>\n",
    572        "      <td>0.583839</td>\n",
    573        "      <td>N/A</td>\n",
    574        "    </tr>\n",
    575        "    <tr>\n",
    576        "      <th>27</th>\n",
    577        "      <td>VAR</td>\n",
    578        "      <td>174.79</td>\n",
    579        "      <td>0.569642</td>\n",
    580        "      <td>N/A</td>\n",
    581        "    </tr>\n",
    582        "    <tr>\n",
    583        "      <th>28</th>\n",
    584        "      <td>ROK</td>\n",
    585        "      <td>247.30</td>\n",
    586        "      <td>0.560821</td>\n",
    587        "      <td>N/A</td>\n",
    588        "    </tr>\n",
    589        "    <tr>\n",
    590        "      <th>29</th>\n",
    591        "      <td>BIO</td>\n",
    592        "      <td>517.62</td>\n",
    593        "      <td>0.558503</td>\n",
    594        "      <td>N/A</td>\n",
    595        "    </tr>\n",
    596        "    <tr>\n",
    597        "      <th>30</th>\n",
    598        "      <td>KSU</td>\n",
    599        "      <td>193.03</td>\n",
    600        "      <td>0.548382</td>\n",
    601        "      <td>N/A</td>\n",
    602        "    </tr>\n",
    603        "    <tr>\n",
    604        "      <th>31</th>\n",
    605        "      <td>KLAC</td>\n",
    606        "      <td>216.00</td>\n",
    607        "      <td>0.547432</td>\n",
    608        "      <td>N/A</td>\n",
    609        "    </tr>\n",
    610        "    <tr>\n",
    611        "      <th>32</th>\n",
    612        "      <td>ADBE</td>\n",
    613        "      <td>449.01</td>\n",
    614        "      <td>0.540159</td>\n",
    615        "      <td>N/A</td>\n",
    616        "    </tr>\n",
    617        "    <tr>\n",
    618        "      <th>33</th>\n",
    619        "      <td>ABMD</td>\n",
    620        "      <td>307.07</td>\n",
    621        "      <td>0.537076</td>\n",
    622        "      <td>N/A</td>\n",
    623        "    </tr>\n",
    624        "    <tr>\n",
    625        "      <th>34</th>\n",
    626        "      <td>CDNS</td>\n",
    627        "      <td>111.60</td>\n",
    628        "      <td>0.532542</td>\n",
    629        "      <td>N/A</td>\n",
    630        "    </tr>\n",
    631        "    <tr>\n",
    632        "      <th>35</th>\n",
    633        "      <td>NFLX</td>\n",
    634        "      <td>486.12</td>\n",
    635        "      <td>0.531236</td>\n",
    636        "      <td>N/A</td>\n",
    637        "    </tr>\n",
    638        "    <tr>\n",
    639        "      <th>36</th>\n",
    640        "      <td>ADSK</td>\n",
    641        "      <td>240.90</td>\n",
    642        "      <td>0.526803</td>\n",
    643        "      <td>N/A</td>\n",
    644        "    </tr>\n",
    645        "    <tr>\n",
    646        "      <th>37</th>\n",
    647        "      <td>FTNT</td>\n",
    648        "      <td>132.50</td>\n",
    649        "      <td>0.522105</td>\n",
    650        "      <td>N/A</td>\n",
    651        "    </tr>\n",
    652        "    <tr>\n",
    653        "      <th>38</th>\n",
    654        "      <td>MSFT</td>\n",
    655        "      <td>215.73</td>\n",
    656        "      <td>0.518900</td>\n",
    657        "      <td>N/A</td>\n",
    658        "    </tr>\n",
    659        "    <tr>\n",
    660        "      <th>39</th>\n",
    661        "      <td>EA</td>\n",
    662        "      <td>145.30</td>\n",
    663        "      <td>0.517087</td>\n",
    664        "      <td>N/A</td>\n",
    665        "    </tr>\n",
    666        "    <tr>\n",
    667        "      <th>40</th>\n",
    668        "      <td>TMO</td>\n",
    669        "      <td>422.95</td>\n",
    670        "      <td>0.513970</td>\n",
    671        "      <td>N/A</td>\n",
    672        "    </tr>\n",
    673        "    <tr>\n",
    674        "      <th>41</th>\n",
    675        "      <td>KR</td>\n",
    676        "      <td>36.29</td>\n",
    677        "      <td>0.502626</td>\n",
    678        "      <td>N/A</td>\n",
    679        "    </tr>\n",
    680        "    <tr>\n",
    681        "      <th>42</th>\n",
    682        "      <td>DHI</td>\n",
    683        "      <td>73.64</td>\n",
    684        "      <td>0.499570</td>\n",
    685        "      <td>N/A</td>\n",
    686        "    </tr>\n",
    687        "    <tr>\n",
    688        "      <th>43</th>\n",
    689        "      <td>CTXS</td>\n",
    690        "      <td>141.53</td>\n",
    691        "      <td>0.496854</td>\n",
    692        "      <td>N/A</td>\n",
    693        "    </tr>\n",
    694        "    <tr>\n",
    695        "      <th>44</th>\n",
    696        "      <td>LEN</td>\n",
    697        "      <td>77.72</td>\n",
    698        "      <td>0.495581</td>\n",
    699        "      <td>N/A</td>\n",
    700        "    </tr>\n",
    701        "    <tr>\n",
    702        "      <th>45</th>\n",
    703        "      <td>MAS</td>\n",
    704        "      <td>61.01</td>\n",
    705        "      <td>0.493611</td>\n",
    706        "      <td>N/A</td>\n",
    707        "    </tr>\n",
    708        "    <tr>\n",
    709        "      <th>46</th>\n",
    710        "      <td>TMUS</td>\n",
    711        "      <td>119.48</td>\n",
    712        "      <td>0.490167</td>\n",
    713        "      <td>N/A</td>\n",
    714        "    </tr>\n",
    715        "    <tr>\n",
    716        "      <th>47</th>\n",
    717        "      <td>BBY</td>\n",
    718        "      <td>107.33</td>\n",
    719        "      <td>0.486775</td>\n",
    720        "      <td>N/A</td>\n",
    721        "    </tr>\n",
    722        "    <tr>\n",
    723        "      <th>48</th>\n",
    724        "      <td>VRTX</td>\n",
    725        "      <td>280.26</td>\n",
    726        "      <td>0.486553</td>\n",
    727        "      <td>N/A</td>\n",
    728        "    </tr>\n",
    729        "    <tr>\n",
    730        "      <th>49</th>\n",
    731        "      <td>PWR</td>\n",
    732        "      <td>50.22</td>\n",
    733        "      <td>0.482556</td>\n",
    734        "      <td>N/A</td>\n",
    735        "    </tr>\n",
    736        "    <tr>\n",
    737        "      <th>50</th>\n",
    738        "      <td>OTIS</td>\n",
    739        "      <td>67.90</td>\n",
    740        "      <td>0.481000</td>\n",
    741        "      <td>N/A</td>\n",
    742        "    </tr>\n",
    743        "  </tbody>\n",
    744        "</table>\n",
    745        "</div>"
    746       ],
    747       "text/plain": [
    748        "   Ticker    Price  One-Year Price Return Number of Shares to Buy\n",
    749        "0    NVDA   458.14               2.015964                     N/A\n",
    750        "1    DXCM   441.29               1.721219                     N/A\n",
    751        "2     AMD    85.46               1.632817                     N/A\n",
    752        "3    CARR    29.94               1.489900                     N/A\n",
    753        "4    AAPL   453.87               1.172528                     N/A\n",
    754        "5    REGN   624.50               1.031728                     N/A\n",
    755        "6    SWKS   153.26               0.921570                     N/A\n",
    756        "7     WST   283.20               0.921000                     N/A\n",
    757        "8    LRCX   393.68               0.892740                     N/A\n",
    758        "9    QRVO   132.38               0.858187                     N/A\n",
    759        "10   PYPL   196.30               0.829338                     N/A\n",
    760        "11   AMZN  3192.88               0.759898                     N/A\n",
    761        "12   ATVI    83.82               0.710587                     N/A\n",
    762        "13   ALGN   313.73               0.709093                     N/A\n",
    763        "14    NEM    63.72               0.698936                     N/A\n",
    764        "15   ODFL   196.24               0.690263                     N/A\n",
    765        "16    ROL    55.90               0.676072                     N/A\n",
    766        "17    NOW   439.05               0.656782                     N/A\n",
    767        "18    LOW   159.19               0.646186                     N/A\n",
    768        "19    DPZ   405.67               0.644884                     N/A\n",
    769        "20   FBHS    85.93               0.635603                     N/A\n",
    770        "21   FAST    49.98               0.624303                     N/A\n",
    771        "22    TGT   136.10               0.616877                     N/A\n",
    772        "23   QCOM   119.34               0.609546                     N/A\n",
    773        "24    URI   181.40               0.590406                     N/A\n",
    774        "25   CHTR   602.51               0.586074                     N/A\n",
    775        "26   MSCI   369.93               0.583839                     N/A\n",
    776        "27    VAR   174.79               0.569642                     N/A\n",
    777        "28    ROK   247.30               0.560821                     N/A\n",
    778        "29    BIO   517.62               0.558503                     N/A\n",
    779        "30    KSU   193.03               0.548382                     N/A\n",
    780        "31   KLAC   216.00               0.547432                     N/A\n",
    781        "32   ADBE   449.01               0.540159                     N/A\n",
    782        "33   ABMD   307.07               0.537076                     N/A\n",
    783        "34   CDNS   111.60               0.532542                     N/A\n",
    784        "35   NFLX   486.12               0.531236                     N/A\n",
    785        "36   ADSK   240.90               0.526803                     N/A\n",
    786        "37   FTNT   132.50               0.522105                     N/A\n",
    787        "38   MSFT   215.73               0.518900                     N/A\n",
    788        "39     EA   145.30               0.517087                     N/A\n",
    789        "40    TMO   422.95               0.513970                     N/A\n",
    790        "41     KR    36.29               0.502626                     N/A\n",
    791        "42    DHI    73.64               0.499570                     N/A\n",
    792        "43   CTXS   141.53               0.496854                     N/A\n",
    793        "44    LEN    77.72               0.495581                     N/A\n",
    794        "45    MAS    61.01               0.493611                     N/A\n",
    795        "46   TMUS   119.48               0.490167                     N/A\n",
    796        "47    BBY   107.33               0.486775                     N/A\n",
    797        "48   VRTX   280.26               0.486553                     N/A\n",
    798        "49    PWR    50.22               0.482556                     N/A\n",
    799        "50   OTIS    67.90               0.481000                     N/A"
    800       ]
    801      },
    802      "execution_count": 7,
    803      "metadata": {},
    804      "output_type": "execute_result"
    805     }
    806    ],
    807    "source": [
    808     "final_dataframe.sort_values('One-Year Price Return', ascending = False, inplace = True)\n",
    809     "final_dataframe = final_dataframe[:51]\n",
    810     "final_dataframe.reset_index(drop = True, inplace = True)\n",
    811     "final_dataframe"
    812    ]
    813   },
    814   {
    815    "cell_type": "markdown",
    816    "metadata": {},
    817    "source": [
    818     "## Calculating the Number of Shares to Buy\n",
    819     "\n",
    820     "Just like in the last project, we now need to calculate the number of shares we need to buy. The one change we're going to make is wrapping this functionality inside a function, since we'll be using it again later in this Jupyter Notebook.\n",
    821     "\n",
    822     "Since we've already done most of the work on this, try to complete the following two code cells without watching me do it first!"
    823    ]
    824   },
    825   {
    826    "cell_type": "code",
    827    "execution_count": 8,
    828    "metadata": {},
    829    "outputs": [
    830     {
    831      "name": "stdout",
    832      "output_type": "stream",
    833      "text": [
    834       "Enter the value of your portfolio:1000000\n",
    835       "1000000\n"
    836      ]
    837     }
    838    ],
    839    "source": [
    840     "def portfolio_input():\n",
    841     "    global portfolio_size\n",
    842     "    portfolio_size = input(\"Enter the value of your portfolio:\")\n",
    843     "\n",
    844     "    try:\n",
    845     "        val = float(portfolio_size)\n",
    846     "    except ValueError:\n",
    847     "        print(\"That's not a number! \\n Try again:\")\n",
    848     "        portfolio_size = input(\"Enter the value of your portfolio:\")\n",
    849     "\n",
    850     "portfolio_input()\n",
    851     "print(portfolio_size)"
    852    ]
    853   },
    854   {
    855    "cell_type": "code",
    856    "execution_count": 9,
    857    "metadata": {},
    858    "outputs": [
    859     {
    860      "name": "stderr",
    861      "output_type": "stream",
    862      "text": [
    863       "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/indexing.py:494: SettingWithCopyWarning: \n",
    864       "A value is trying to be set on a copy of a slice from a DataFrame.\n",
    865       "Try using .loc[row_indexer,col_indexer] = value instead\n",
    866       "\n",
    867       "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
    868       "  self.obj[item] = s\n"
    869      ]
    870     },
    871     {
    872      "data": {
    873       "text/html": [
    874        "<div>\n",
    875        "<style scoped>\n",
    876        "    .dataframe tbody tr th:only-of-type {\n",
    877        "        vertical-align: middle;\n",
    878        "    }\n",
    879        "\n",
    880        "    .dataframe tbody tr th {\n",
    881        "        vertical-align: top;\n",
    882        "    }\n",
    883        "\n",
    884        "    .dataframe thead th {\n",
    885        "        text-align: right;\n",
    886        "    }\n",
    887        "</style>\n",
    888        "<table border=\"1\" class=\"dataframe\">\n",
    889        "  <thead>\n",
    890        "    <tr style=\"text-align: right;\">\n",
    891        "      <th></th>\n",
    892        "      <th>Ticker</th>\n",
    893        "      <th>Price</th>\n",
    894        "      <th>One-Year Price Return</th>\n",
    895        "      <th>Number of Shares to Buy</th>\n",
    896        "    </tr>\n",
    897        "  </thead>\n",
    898        "  <tbody>\n",
    899        "    <tr>\n",
    900        "      <th>0</th>\n",
    901        "      <td>NVDA</td>\n",
    902        "      <td>458.14</td>\n",
    903        "      <td>2.015964</td>\n",
    904        "      <td>42</td>\n",
    905        "    </tr>\n",
    906        "    <tr>\n",
    907        "      <th>1</th>\n",
    908        "      <td>DXCM</td>\n",
    909        "      <td>441.29</td>\n",
    910        "      <td>1.721219</td>\n",
    911        "      <td>44</td>\n",
    912        "    </tr>\n",
    913        "    <tr>\n",
    914        "      <th>2</th>\n",
    915        "      <td>AMD</td>\n",
    916        "      <td>85.46</td>\n",
    917        "      <td>1.632817</td>\n",
    918        "      <td>229</td>\n",
    919        "    </tr>\n",
    920        "    <tr>\n",
    921        "      <th>3</th>\n",
    922        "      <td>CARR</td>\n",
    923        "      <td>29.94</td>\n",
    924        "      <td>1.489900</td>\n",
    925        "      <td>654</td>\n",
    926        "    </tr>\n",
    927        "    <tr>\n",
    928        "      <th>4</th>\n",
    929        "      <td>AAPL</td>\n",
    930        "      <td>453.87</td>\n",
    931        "      <td>1.172528</td>\n",
    932        "      <td>43</td>\n",
    933        "    </tr>\n",
    934        "    <tr>\n",
    935        "      <th>5</th>\n",
    936        "      <td>REGN</td>\n",
    937        "      <td>624.50</td>\n",
    938        "      <td>1.031728</td>\n",
    939        "      <td>31</td>\n",
    940        "    </tr>\n",
    941        "    <tr>\n",
    942        "      <th>6</th>\n",
    943        "      <td>SWKS</td>\n",
    944        "      <td>153.26</td>\n",
    945        "      <td>0.921570</td>\n",
    946        "      <td>127</td>\n",
    947        "    </tr>\n",
    948        "    <tr>\n",
    949        "      <th>7</th>\n",
    950        "      <td>WST</td>\n",
    951        "      <td>283.20</td>\n",
    952        "      <td>0.921000</td>\n",
    953        "      <td>69</td>\n",
    954        "    </tr>\n",
    955        "    <tr>\n",
    956        "      <th>8</th>\n",
    957        "      <td>LRCX</td>\n",
    958        "      <td>393.68</td>\n",
    959        "      <td>0.892740</td>\n",
    960        "      <td>49</td>\n",
    961        "    </tr>\n",
    962        "    <tr>\n",
    963        "      <th>9</th>\n",
    964        "      <td>QRVO</td>\n",
    965        "      <td>132.38</td>\n",
    966        "      <td>0.858187</td>\n",
    967        "      <td>148</td>\n",
    968        "    </tr>\n",
    969        "    <tr>\n",
    970        "      <th>10</th>\n",
    971        "      <td>PYPL</td>\n",
    972        "      <td>196.30</td>\n",
    973        "      <td>0.829338</td>\n",
    974        "      <td>99</td>\n",
    975        "    </tr>\n",
    976        "    <tr>\n",
    977        "      <th>11</th>\n",
    978        "      <td>AMZN</td>\n",
    979        "      <td>3192.88</td>\n",
    980        "      <td>0.759898</td>\n",
    981        "      <td>6</td>\n",
    982        "    </tr>\n",
    983        "    <tr>\n",
    984        "      <th>12</th>\n",
    985        "      <td>ATVI</td>\n",
    986        "      <td>83.82</td>\n",
    987        "      <td>0.710587</td>\n",
    988        "      <td>233</td>\n",
    989        "    </tr>\n",
    990        "    <tr>\n",
    991        "      <th>13</th>\n",
    992        "      <td>ALGN</td>\n",
    993        "      <td>313.73</td>\n",
    994        "      <td>0.709093</td>\n",
    995        "      <td>62</td>\n",
    996        "    </tr>\n",
    997        "    <tr>\n",
    998        "      <th>14</th>\n",
    999        "      <td>NEM</td>\n",
   1000        "      <td>63.72</td>\n",
   1001        "      <td>0.698936</td>\n",
   1002        "      <td>307</td>\n",
   1003        "    </tr>\n",
   1004        "    <tr>\n",
   1005        "      <th>15</th>\n",
   1006        "      <td>ODFL</td>\n",
   1007        "      <td>196.24</td>\n",
   1008        "      <td>0.690263</td>\n",
   1009        "      <td>99</td>\n",
   1010        "    </tr>\n",
   1011        "    <tr>\n",
   1012        "      <th>16</th>\n",
   1013        "      <td>ROL</td>\n",
   1014        "      <td>55.90</td>\n",
   1015        "      <td>0.676072</td>\n",
   1016        "      <td>350</td>\n",
   1017        "    </tr>\n",
   1018        "    <tr>\n",
   1019        "      <th>17</th>\n",
   1020        "      <td>NOW</td>\n",
   1021        "      <td>439.05</td>\n",
   1022        "      <td>0.656782</td>\n",
   1023        "      <td>44</td>\n",
   1024        "    </tr>\n",
   1025        "    <tr>\n",
   1026        "      <th>18</th>\n",
   1027        "      <td>LOW</td>\n",
   1028        "      <td>159.19</td>\n",
   1029        "      <td>0.646186</td>\n",
   1030        "      <td>123</td>\n",
   1031        "    </tr>\n",
   1032        "    <tr>\n",
   1033        "      <th>19</th>\n",
   1034        "      <td>DPZ</td>\n",
   1035        "      <td>405.67</td>\n",
   1036        "      <td>0.644884</td>\n",
   1037        "      <td>48</td>\n",
   1038        "    </tr>\n",
   1039        "    <tr>\n",
   1040        "      <th>20</th>\n",
   1041        "      <td>FBHS</td>\n",
   1042        "      <td>85.93</td>\n",
   1043        "      <td>0.635603</td>\n",
   1044        "      <td>228</td>\n",
   1045        "    </tr>\n",
   1046        "    <tr>\n",
   1047        "      <th>21</th>\n",
   1048        "      <td>FAST</td>\n",
   1049        "      <td>49.98</td>\n",
   1050        "      <td>0.624303</td>\n",
   1051        "      <td>392</td>\n",
   1052        "    </tr>\n",
   1053        "    <tr>\n",
   1054        "      <th>22</th>\n",
   1055        "      <td>TGT</td>\n",
   1056        "      <td>136.10</td>\n",
   1057        "      <td>0.616877</td>\n",
   1058        "      <td>144</td>\n",
   1059        "    </tr>\n",
   1060        "    <tr>\n",
   1061        "      <th>23</th>\n",
   1062        "      <td>QCOM</td>\n",
   1063        "      <td>119.34</td>\n",
   1064        "      <td>0.609546</td>\n",
   1065        "      <td>164</td>\n",
   1066        "    </tr>\n",
   1067        "    <tr>\n",
   1068        "      <th>24</th>\n",
   1069        "      <td>URI</td>\n",
   1070        "      <td>181.40</td>\n",
   1071        "      <td>0.590406</td>\n",
   1072        "      <td>108</td>\n",
   1073        "    </tr>\n",
   1074        "    <tr>\n",
   1075        "      <th>25</th>\n",
   1076        "      <td>CHTR</td>\n",
   1077        "      <td>602.51</td>\n",
   1078        "      <td>0.586074</td>\n",
   1079        "      <td>32</td>\n",
   1080        "    </tr>\n",
   1081        "    <tr>\n",
   1082        "      <th>26</th>\n",
   1083        "      <td>MSCI</td>\n",
   1084        "      <td>369.93</td>\n",
   1085        "      <td>0.583839</td>\n",
   1086        "      <td>53</td>\n",
   1087        "    </tr>\n",
   1088        "    <tr>\n",
   1089        "      <th>27</th>\n",
   1090        "      <td>VAR</td>\n",
   1091        "      <td>174.79</td>\n",
   1092        "      <td>0.569642</td>\n",
   1093        "      <td>112</td>\n",
   1094        "    </tr>\n",
   1095        "    <tr>\n",
   1096        "      <th>28</th>\n",
   1097        "      <td>ROK</td>\n",
   1098        "      <td>247.30</td>\n",
   1099        "      <td>0.560821</td>\n",
   1100        "      <td>79</td>\n",
   1101        "    </tr>\n",
   1102        "    <tr>\n",
   1103        "      <th>29</th>\n",
   1104        "      <td>BIO</td>\n",
   1105        "      <td>517.62</td>\n",
   1106        "      <td>0.558503</td>\n",
   1107        "      <td>37</td>\n",
   1108        "    </tr>\n",
   1109        "    <tr>\n",
   1110        "      <th>30</th>\n",
   1111        "      <td>KSU</td>\n",
   1112        "      <td>193.03</td>\n",
   1113        "      <td>0.548382</td>\n",
   1114        "      <td>101</td>\n",
   1115        "    </tr>\n",
   1116        "    <tr>\n",
   1117        "      <th>31</th>\n",
   1118        "      <td>KLAC</td>\n",
   1119        "      <td>216.00</td>\n",
   1120        "      <td>0.547432</td>\n",
   1121        "      <td>90</td>\n",
   1122        "    </tr>\n",
   1123        "    <tr>\n",
   1124        "      <th>32</th>\n",
   1125        "      <td>ADBE</td>\n",
   1126        "      <td>449.01</td>\n",
   1127        "      <td>0.540159</td>\n",
   1128        "      <td>43</td>\n",
   1129        "    </tr>\n",
   1130        "    <tr>\n",
   1131        "      <th>33</th>\n",
   1132        "      <td>ABMD</td>\n",
   1133        "      <td>307.07</td>\n",
   1134        "      <td>0.537076</td>\n",
   1135        "      <td>63</td>\n",
   1136        "    </tr>\n",
   1137        "    <tr>\n",
   1138        "      <th>34</th>\n",
   1139        "      <td>CDNS</td>\n",
   1140        "      <td>111.60</td>\n",
   1141        "      <td>0.532542</td>\n",
   1142        "      <td>175</td>\n",
   1143        "    </tr>\n",
   1144        "    <tr>\n",
   1145        "      <th>35</th>\n",
   1146        "      <td>NFLX</td>\n",
   1147        "      <td>486.12</td>\n",
   1148        "      <td>0.531236</td>\n",
   1149        "      <td>40</td>\n",
   1150        "    </tr>\n",
   1151        "    <tr>\n",
   1152        "      <th>36</th>\n",
   1153        "      <td>ADSK</td>\n",
   1154        "      <td>240.90</td>\n",
   1155        "      <td>0.526803</td>\n",
   1156        "      <td>81</td>\n",
   1157        "    </tr>\n",
   1158        "    <tr>\n",
   1159        "      <th>37</th>\n",
   1160        "      <td>FTNT</td>\n",
   1161        "      <td>132.50</td>\n",
   1162        "      <td>0.522105</td>\n",
   1163        "      <td>147</td>\n",
   1164        "    </tr>\n",
   1165        "    <tr>\n",
   1166        "      <th>38</th>\n",
   1167        "      <td>MSFT</td>\n",
   1168        "      <td>215.73</td>\n",
   1169        "      <td>0.518900</td>\n",
   1170        "      <td>90</td>\n",
   1171        "    </tr>\n",
   1172        "    <tr>\n",
   1173        "      <th>39</th>\n",
   1174        "      <td>EA</td>\n",
   1175        "      <td>145.30</td>\n",
   1176        "      <td>0.517087</td>\n",
   1177        "      <td>134</td>\n",
   1178        "    </tr>\n",
   1179        "    <tr>\n",
   1180        "      <th>40</th>\n",
   1181        "      <td>TMO</td>\n",
   1182        "      <td>422.95</td>\n",
   1183        "      <td>0.513970</td>\n",
   1184        "      <td>46</td>\n",
   1185        "    </tr>\n",
   1186        "    <tr>\n",
   1187        "      <th>41</th>\n",
   1188        "      <td>KR</td>\n",
   1189        "      <td>36.29</td>\n",
   1190        "      <td>0.502626</td>\n",
   1191        "      <td>540</td>\n",
   1192        "    </tr>\n",
   1193        "    <tr>\n",
   1194        "      <th>42</th>\n",
   1195        "      <td>DHI</td>\n",
   1196        "      <td>73.64</td>\n",
   1197        "      <td>0.499570</td>\n",
   1198        "      <td>266</td>\n",
   1199        "    </tr>\n",
   1200        "    <tr>\n",
   1201        "      <th>43</th>\n",
   1202        "      <td>CTXS</td>\n",
   1203        "      <td>141.53</td>\n",
   1204        "      <td>0.496854</td>\n",
   1205        "      <td>138</td>\n",
   1206        "    </tr>\n",
   1207        "    <tr>\n",
   1208        "      <th>44</th>\n",
   1209        "      <td>LEN</td>\n",
   1210        "      <td>77.72</td>\n",
   1211        "      <td>0.495581</td>\n",
   1212        "      <td>252</td>\n",
   1213        "    </tr>\n",
   1214        "    <tr>\n",
   1215        "      <th>45</th>\n",
   1216        "      <td>MAS</td>\n",
   1217        "      <td>61.01</td>\n",
   1218        "      <td>0.493611</td>\n",
   1219        "      <td>321</td>\n",
   1220        "    </tr>\n",
   1221        "    <tr>\n",
   1222        "      <th>46</th>\n",
   1223        "      <td>TMUS</td>\n",
   1224        "      <td>119.48</td>\n",
   1225        "      <td>0.490167</td>\n",
   1226        "      <td>164</td>\n",
   1227        "    </tr>\n",
   1228        "    <tr>\n",
   1229        "      <th>47</th>\n",
   1230        "      <td>BBY</td>\n",
   1231        "      <td>107.33</td>\n",
   1232        "      <td>0.486775</td>\n",
   1233        "      <td>182</td>\n",
   1234        "    </tr>\n",
   1235        "    <tr>\n",
   1236        "      <th>48</th>\n",
   1237        "      <td>VRTX</td>\n",
   1238        "      <td>280.26</td>\n",
   1239        "      <td>0.486553</td>\n",
   1240        "      <td>69</td>\n",
   1241        "    </tr>\n",
   1242        "    <tr>\n",
   1243        "      <th>49</th>\n",
   1244        "      <td>PWR</td>\n",
   1245        "      <td>50.22</td>\n",
   1246        "      <td>0.482556</td>\n",
   1247        "      <td>390</td>\n",
   1248        "    </tr>\n",
   1249        "    <tr>\n",
   1250        "      <th>50</th>\n",
   1251        "      <td>OTIS</td>\n",
   1252        "      <td>67.90</td>\n",
   1253        "      <td>0.481000</td>\n",
   1254        "      <td>288</td>\n",
   1255        "    </tr>\n",
   1256        "  </tbody>\n",
   1257        "</table>\n",
   1258        "</div>"
   1259       ],
   1260       "text/plain": [
   1261        "   Ticker    Price  One-Year Price Return  Number of Shares to Buy\n",
   1262        "0    NVDA   458.14               2.015964                       42\n",
   1263        "1    DXCM   441.29               1.721219                       44\n",
   1264        "2     AMD    85.46               1.632817                      229\n",
   1265        "3    CARR    29.94               1.489900                      654\n",
   1266        "4    AAPL   453.87               1.172528                       43\n",
   1267        "5    REGN   624.50               1.031728                       31\n",
   1268        "6    SWKS   153.26               0.921570                      127\n",
   1269        "7     WST   283.20               0.921000                       69\n",
   1270        "8    LRCX   393.68               0.892740                       49\n",
   1271        "9    QRVO   132.38               0.858187                      148\n",
   1272        "10   PYPL   196.30               0.829338                       99\n",
   1273        "11   AMZN  3192.88               0.759898                        6\n",
   1274        "12   ATVI    83.82               0.710587                      233\n",
   1275        "13   ALGN   313.73               0.709093                       62\n",
   1276        "14    NEM    63.72               0.698936                      307\n",
   1277        "15   ODFL   196.24               0.690263                       99\n",
   1278        "16    ROL    55.90               0.676072                      350\n",
   1279        "17    NOW   439.05               0.656782                       44\n",
   1280        "18    LOW   159.19               0.646186                      123\n",
   1281        "19    DPZ   405.67               0.644884                       48\n",
   1282        "20   FBHS    85.93               0.635603                      228\n",
   1283        "21   FAST    49.98               0.624303                      392\n",
   1284        "22    TGT   136.10               0.616877                      144\n",
   1285        "23   QCOM   119.34               0.609546                      164\n",
   1286        "24    URI   181.40               0.590406                      108\n",
   1287        "25   CHTR   602.51               0.586074                       32\n",
   1288        "26   MSCI   369.93               0.583839                       53\n",
   1289        "27    VAR   174.79               0.569642                      112\n",
   1290        "28    ROK   247.30               0.560821                       79\n",
   1291        "29    BIO   517.62               0.558503                       37\n",
   1292        "30    KSU   193.03               0.548382                      101\n",
   1293        "31   KLAC   216.00               0.547432                       90\n",
   1294        "32   ADBE   449.01               0.540159                       43\n",
   1295        "33   ABMD   307.07               0.537076                       63\n",
   1296        "34   CDNS   111.60               0.532542                      175\n",
   1297        "35   NFLX   486.12               0.531236                       40\n",
   1298        "36   ADSK   240.90               0.526803                       81\n",
   1299        "37   FTNT   132.50               0.522105                      147\n",
   1300        "38   MSFT   215.73               0.518900                       90\n",
   1301        "39     EA   145.30               0.517087                      134\n",
   1302        "40    TMO   422.95               0.513970                       46\n",
   1303        "41     KR    36.29               0.502626                      540\n",
   1304        "42    DHI    73.64               0.499570                      266\n",
   1305        "43   CTXS   141.53               0.496854                      138\n",
   1306        "44    LEN    77.72               0.495581                      252\n",
   1307        "45    MAS    61.01               0.493611                      321\n",
   1308        "46   TMUS   119.48               0.490167                      164\n",
   1309        "47    BBY   107.33               0.486775                      182\n",
   1310        "48   VRTX   280.26               0.486553                       69\n",
   1311        "49    PWR    50.22               0.482556                      390\n",
   1312        "50   OTIS    67.90               0.481000                      288"
   1313       ]
   1314      },
   1315      "execution_count": 9,
   1316      "metadata": {},
   1317      "output_type": "execute_result"
   1318     }
   1319    ],
   1320    "source": [
   1321     "position_size = float(portfolio_size) / len(final_dataframe.index)\n",
   1322     "for i in range(0, len(final_dataframe['Ticker'])):\n",
   1323     "    final_dataframe.loc[i, 'Number of Shares to Buy'] = math.floor(position_size / final_dataframe['Price'][i])\n",
   1324     "final_dataframe"
   1325    ]
   1326   },
   1327   {
   1328    "cell_type": "markdown",
   1329    "metadata": {},
   1330    "source": [
   1331     "## Building a Better (and More Realistic) Momentum Strategy\n",
   1332     "\n",
   1333     "Real-world quantitative investment firms differentiate between \"high quality\" and \"low quality\" momentum stocks:\n",
   1334     "\n",
   1335     "* High-quality momentum stocks show \"slow and steady\" outperformance over long periods of time\n",
   1336     "* Low-quality momentum stocks might not show any momentum for a long time, and then surge upwards.\n",
   1337     "\n",
   1338     "The reason why high-quality momentum stocks are preferred is because low-quality momentum can often be cause by short-term news that is unlikely to be repeated in the future (such as an FDA approval for a biotechnology company).\n",
   1339     "\n",
   1340     "To identify high-quality momentum, we're going to build a strategy that selects stocks from the highest percentiles of: \n",
   1341     "\n",
   1342     "* 1-month price returns\n",
   1343     "* 3-month price returns\n",
   1344     "* 6-month price returns\n",
   1345     "* 1-year price returns\n",
   1346     "\n",
   1347     "Let's start by building our DataFrame. You'll notice that I use the abbreviation `hqm` often. It stands for `high-quality momentum`."
   1348    ]
   1349   },
   1350   {
   1351    "cell_type": "code",
   1352    "execution_count": 10,
   1353    "metadata": {},
   1354    "outputs": [
   1355     {
   1356      "data": {
   1357       "text/plain": [
   1358        "Index(['Ticker', 'Price', 'Number of Shares to Buy', 'One-Year Price Return',\n",
   1359        "       'One-Year Return Percentile', 'Six-Month Price Return',\n",
   1360        "       'Six-Month Return Percentile', 'Three-Month Price Return',\n",
   1361        "       'Three-Month Return Percentile', 'One-Month Price Return',\n",
   1362        "       'One-Month Return Percentile', 'HQM Score'],\n",
   1363        "      dtype='object')"
   1364       ]
   1365      },
   1366      "execution_count": 10,
   1367      "metadata": {},
   1368      "output_type": "execute_result"
   1369     }
   1370    ],
   1371    "source": [
   1372     "hqm_columns = [\n",
   1373     "                'Ticker', \n",
   1374     "                'Price', \n",
   1375     "                'Number of Shares to Buy', \n",
   1376     "                'One-Year Price Return', \n",
   1377     "                'One-Year Return Percentile',\n",
   1378     "                'Six-Month Price Return',\n",
   1379     "                'Six-Month Return Percentile',\n",
   1380     "                'Three-Month Price Return',\n",
   1381     "                'Three-Month Return Percentile',\n",
   1382     "                'One-Month Price Return',\n",
   1383     "                'One-Month Return Percentile',\n",
   1384     "                'HQM Score'\n",
   1385     "                ]\n",
   1386     "\n",
   1387     "hqm_dataframe = pd.DataFrame(columns = hqm_columns)\n",
   1388     "\n",
   1389     "for symbol_string in symbol_strings:\n",
   1390     "#     print(symbol_strings)\n",
   1391     "    batch_api_call_url = f'https://sandbox.iexapis.com/stable/stock/market/batch/?types=stats,quote&symbols={symbol_string}&token={IEX_CLOUD_API_TOKEN}'\n",
   1392     "    data = requests.get(batch_api_call_url).json()\n",
   1393     "    for symbol in symbol_string.split(','):\n",
   1394     "        hqm_dataframe = hqm_dataframe.append(\n",
   1395     "                                        pd.Series([symbol, \n",
   1396     "                                                   data[symbol]['quote']['latestPrice'],\n",
   1397     "                                                   'N/A',\n",
   1398     "                                                   data[symbol]['stats']['year1ChangePercent'],\n",
   1399     "                                                   'N/A',\n",
   1400     "                                                   data[symbol]['stats']['month6ChangePercent'],\n",
   1401     "                                                   'N/A',\n",
   1402     "                                                   data[symbol]['stats']['month3ChangePercent'],\n",
   1403     "                                                   'N/A',\n",
   1404     "                                                   data[symbol]['stats']['month1ChangePercent'],\n",
   1405     "                                                   'N/A',\n",
   1406     "                                                   'N/A'\n",
   1407     "                                                   ], \n",
   1408     "                                                  index = hqm_columns), \n",
   1409     "                                        ignore_index = True)\n",
   1410     "        \n",
   1411     "hqm_dataframe.columns"
   1412    ]
   1413   },
   1414   {
   1415    "cell_type": "markdown",
   1416    "metadata": {},
   1417    "source": [
   1418     "## Calculating Momentum Percentiles\n",
   1419     "\n",
   1420     "We now need to calculate momentum percentile scores for every stock in the universe. More specifically, we need to calculate percentile scores for the following metrics for every stock:\n",
   1421     "\n",
   1422     "* `One-Year Price Return`\n",
   1423     "* `Six-Month Price Return`\n",
   1424     "* `Three-Month Price Return`\n",
   1425     "* `One-Month Price Return`\n",
   1426     "\n",
   1427     "Here's how we'll do this:"
   1428    ]
   1429   },
   1430   {
   1431    "cell_type": "code",
   1432    "execution_count": 11,
   1433    "metadata": {},
   1434    "outputs": [
   1435     {
   1436      "name": "stdout",
   1437      "output_type": "stream",
   1438      "text": [
   1439       "0       0.885149\n",
   1440       "1      0.0237624\n",
   1441       "2       0.578218\n",
   1442       "3       0.992079\n",
   1443       "4        0.89703\n",
   1444       "         ...    \n",
   1445       "500     0.211881\n",
   1446       "501     0.457426\n",
   1447       "502     0.843564\n",
   1448       "503     0.255446\n",
   1449       "504     0.772277\n",
   1450       "Name: One-Year Return Percentile, Length: 505, dtype: object\n",
   1451       "0       0.837624\n",
   1452       "1      0.0158416\n",
   1453       "2       0.839604\n",
   1454       "3       0.968317\n",
   1455       "4       0.629703\n",
   1456       "         ...    \n",
   1457       "500     0.405941\n",
   1458       "501      0.39604\n",
   1459       "502     0.906931\n",
   1460       "503     0.227723\n",
   1461       "504     0.776238\n",
   1462       "Name: Six-Month Return Percentile, Length: 505, dtype: object\n",
   1463       "0      0.473267\n",
   1464       "1      0.908911\n",
   1465       "2      0.643564\n",
   1466       "3      0.887129\n",
   1467       "4       0.19802\n",
   1468       "         ...   \n",
   1469       "500    0.374257\n",
   1470       "501    0.544554\n",
   1471       "502    0.611881\n",
   1472       "503     0.70297\n",
   1473       "504    0.665347\n",
   1474       "Name: Three-Month Return Percentile, Length: 505, dtype: object\n",
   1475       "0       0.530693\n",
   1476       "1       0.827723\n",
   1477       "2       0.742574\n",
   1478       "3       0.879208\n",
   1479       "4      0.0693069\n",
   1480       "         ...    \n",
   1481       "500     0.370297\n",
   1482       "501     0.762376\n",
   1483       "502     0.641584\n",
   1484       "503     0.312871\n",
   1485       "504     0.792079\n",
   1486       "Name: One-Month Return Percentile, Length: 505, dtype: object\n"
   1487      ]
   1488     },
   1489     {
   1490      "data": {
   1491       "text/html": [
   1492        "<div>\n",
   1493        "<style scoped>\n",
   1494        "    .dataframe tbody tr th:only-of-type {\n",
   1495        "        vertical-align: middle;\n",
   1496        "    }\n",
   1497        "\n",
   1498        "    .dataframe tbody tr th {\n",
   1499        "        vertical-align: top;\n",
   1500        "    }\n",
   1501        "\n",
   1502        "    .dataframe thead th {\n",
   1503        "        text-align: right;\n",
   1504        "    }\n",
   1505        "</style>\n",
   1506        "<table border=\"1\" class=\"dataframe\">\n",
   1507        "  <thead>\n",
   1508        "    <tr style=\"text-align: right;\">\n",
   1509        "      <th></th>\n",
   1510        "      <th>Ticker</th>\n",
   1511        "      <th>Price</th>\n",
   1512        "      <th>Number of Shares to Buy</th>\n",
   1513        "      <th>One-Year Price Return</th>\n",
   1514        "      <th>One-Year Return Percentile</th>\n",
   1515        "      <th>Six-Month Price Return</th>\n",
   1516        "      <th>Six-Month Return Percentile</th>\n",
   1517        "      <th>Three-Month Price Return</th>\n",
   1518        "      <th>Three-Month Return Percentile</th>\n",
   1519        "      <th>One-Month Price Return</th>\n",
   1520        "      <th>One-Month Return Percentile</th>\n",
   1521        "      <th>HQM Score</th>\n",
   1522        "    </tr>\n",
   1523        "  </thead>\n",
   1524        "  <tbody>\n",
   1525        "    <tr>\n",
   1526        "      <th>0</th>\n",
   1527        "      <td>A</td>\n",
   1528        "      <td>98.19</td>\n",
   1529        "      <td>N/A</td>\n",
   1530        "      <td>0.444090</td>\n",
   1531        "      <td>0.885149</td>\n",
   1532        "      <td>0.147456</td>\n",
   1533        "      <td>0.837624</td>\n",
   1534        "      <td>0.221461</td>\n",
   1535        "      <td>0.473267</td>\n",
   1536        "      <td>0.093820</td>\n",
   1537        "      <td>0.530693</td>\n",
   1538        "      <td>N/A</td>\n",
   1539        "    </tr>\n",
   1540        "    <tr>\n",
   1541        "      <th>1</th>\n",
   1542        "      <td>AAL</td>\n",
   1543        "      <td>13.89</td>\n",
   1544        "      <td>N/A</td>\n",
   1545        "      <td>-0.526494</td>\n",
   1546        "      <td>0.0237624</td>\n",
   1547        "      <td>-0.564540</td>\n",
   1548        "      <td>0.0158416</td>\n",
   1549        "      <td>0.509431</td>\n",
   1550        "      <td>0.908911</td>\n",
   1551        "      <td>0.172430</td>\n",
   1552        "      <td>0.827723</td>\n",
   1553        "      <td>N/A</td>\n",
   1554        "    </tr>\n",
   1555        "    <tr>\n",
   1556        "      <th>2</th>\n",
   1557        "      <td>AAP</td>\n",
   1558        "      <td>161.13</td>\n",
   1559        "      <td>N/A</td>\n",
   1560        "      <td>0.088066</td>\n",
   1561        "      <td>0.578218</td>\n",
   1562        "      <td>0.148378</td>\n",
   1563        "      <td>0.839604</td>\n",
   1564        "      <td>0.295700</td>\n",
   1565        "      <td>0.643564</td>\n",
   1566        "      <td>0.144608</td>\n",
   1567        "      <td>0.742574</td>\n",
   1568        "      <td>N/A</td>\n",
   1569        "    </tr>\n",
   1570        "    <tr>\n",
   1571        "      <th>3</th>\n",
   1572        "      <td>AAPL</td>\n",
   1573        "      <td>467.65</td>\n",
   1574        "      <td>N/A</td>\n",
   1575        "      <td>1.171724</td>\n",
   1576        "      <td>0.992079</td>\n",
   1577        "      <td>0.401695</td>\n",
   1578        "      <td>0.968317</td>\n",
   1579        "      <td>0.474900</td>\n",
   1580        "      <td>0.887129</td>\n",
   1581        "      <td>0.189840</td>\n",
   1582        "      <td>0.879208</td>\n",
   1583        "      <td>N/A</td>\n",
   1584        "    </tr>\n",
   1585        "    <tr>\n",
   1586        "      <th>4</th>\n",
   1587        "      <td>ABBV</td>\n",
   1588        "      <td>97.29</td>\n",
   1589        "      <td>N/A</td>\n",
   1590        "      <td>0.478770</td>\n",
   1591        "      <td>0.89703</td>\n",
   1592        "      <td>0.001711</td>\n",
   1593        "      <td>0.629703</td>\n",
   1594        "      <td>0.077880</td>\n",
   1595        "      <td>0.19802</td>\n",
   1596        "      <td>-0.024533</td>\n",
   1597        "      <td>0.0693069</td>\n",
   1598        "      <td>N/A</td>\n",
   1599        "    </tr>\n",
   1600        "    <tr>\n",
   1601        "      <th>...</th>\n",
   1602        "      <td>...</td>\n",
   1603        "      <td>...</td>\n",
   1604        "      <td>...</td>\n",
   1605        "      <td>...</td>\n",
   1606        "      <td>...</td>\n",
   1607        "      <td>...</td>\n",
   1608        "      <td>...</td>\n",
   1609        "      <td>...</td>\n",
   1610        "      <td>...</td>\n",
   1611        "      <td>...</td>\n",
   1612        "      <td>...</td>\n",
   1613        "      <td>...</td>\n",
   1614        "    </tr>\n",
   1615        "    <tr>\n",
   1616        "      <th>500</th>\n",
   1617        "      <td>YUM</td>\n",
   1618        "      <td>93.51</td>\n",
   1619        "      <td>N/A</td>\n",
   1620        "      <td>-0.214524</td>\n",
   1621        "      <td>0.211881</td>\n",
   1622        "      <td>-0.116757</td>\n",
   1623        "      <td>0.405941</td>\n",
   1624        "      <td>0.161550</td>\n",
   1625        "      <td>0.374257</td>\n",
   1626        "      <td>0.068180</td>\n",
   1627        "      <td>0.370297</td>\n",
   1628        "      <td>N/A</td>\n",
   1629        "    </tr>\n",
   1630        "    <tr>\n",
   1631        "      <th>501</th>\n",
   1632        "      <td>ZBH</td>\n",
   1633        "      <td>140.16</td>\n",
   1634        "      <td>N/A</td>\n",
   1635        "      <td>0.003007</td>\n",
   1636        "      <td>0.457426</td>\n",
   1637        "      <td>-0.127491</td>\n",
   1638        "      <td>0.39604</td>\n",
   1639        "      <td>0.250906</td>\n",
   1640        "      <td>0.544554</td>\n",
   1641        "      <td>0.151414</td>\n",
   1642        "      <td>0.762376</td>\n",
   1643        "      <td>N/A</td>\n",
   1644        "    </tr>\n",
   1645        "    <tr>\n",
   1646        "      <th>502</th>\n",
   1647        "      <td>ZBRA</td>\n",
   1648        "      <td>285.97</td>\n",
   1649        "      <td>N/A</td>\n",
   1650        "      <td>0.373952</td>\n",
   1651        "      <td>0.843564</td>\n",
   1652        "      <td>0.223856</td>\n",
   1653        "      <td>0.906931</td>\n",
   1654        "      <td>0.283668</td>\n",
   1655        "      <td>0.611881</td>\n",
   1656        "      <td>0.115379</td>\n",
   1657        "      <td>0.641584</td>\n",
   1658        "      <td>N/A</td>\n",
   1659        "    </tr>\n",
   1660        "    <tr>\n",
   1661        "      <th>503</th>\n",
   1662        "      <td>ZION</td>\n",
   1663        "      <td>34.95</td>\n",
   1664        "      <td>N/A</td>\n",
   1665        "      <td>-0.161814</td>\n",
   1666        "      <td>0.255446</td>\n",
   1667        "      <td>-0.255398</td>\n",
   1668        "      <td>0.227723</td>\n",
   1669        "      <td>0.328190</td>\n",
   1670        "      <td>0.70297</td>\n",
   1671        "      <td>0.055265</td>\n",
   1672        "      <td>0.312871</td>\n",
   1673        "      <td>N/A</td>\n",
   1674        "    </tr>\n",
   1675        "    <tr>\n",
   1676        "      <th>504</th>\n",
   1677        "      <td>ZTS</td>\n",
   1678        "      <td>163.66</td>\n",
   1679        "      <td>N/A</td>\n",
   1680        "      <td>0.290969</td>\n",
   1681        "      <td>0.772277</td>\n",
   1682        "      <td>0.102747</td>\n",
   1683        "      <td>0.776238</td>\n",
   1684        "      <td>0.307237</td>\n",
   1685        "      <td>0.665347</td>\n",
   1686        "      <td>0.157549</td>\n",
   1687        "      <td>0.792079</td>\n",
   1688        "      <td>N/A</td>\n",
   1689        "    </tr>\n",
   1690        "  </tbody>\n",
   1691        "</table>\n",
   1692        "<p>505 rows × 12 columns</p>\n",
   1693        "</div>"
   1694       ],
   1695       "text/plain": [
   1696        "    Ticker   Price Number of Shares to Buy  One-Year Price Return  \\\n",
   1697        "0        A   98.19                     N/A               0.444090   \n",
   1698        "1      AAL   13.89                     N/A              -0.526494   \n",
   1699        "2      AAP  161.13                     N/A               0.088066   \n",
   1700        "3     AAPL  467.65                     N/A               1.171724   \n",
   1701        "4     ABBV   97.29                     N/A               0.478770   \n",
   1702        "..     ...     ...                     ...                    ...   \n",
   1703        "500    YUM   93.51                     N/A              -0.214524   \n",
   1704        "501    ZBH  140.16                     N/A               0.003007   \n",
   1705        "502   ZBRA  285.97                     N/A               0.373952   \n",
   1706        "503   ZION   34.95                     N/A              -0.161814   \n",
   1707        "504    ZTS  163.66                     N/A               0.290969   \n",
   1708        "\n",
   1709        "    One-Year Return Percentile  Six-Month Price Return  \\\n",
   1710        "0                     0.885149                0.147456   \n",
   1711        "1                    0.0237624               -0.564540   \n",
   1712        "2                     0.578218                0.148378   \n",
   1713        "3                     0.992079                0.401695   \n",
   1714        "4                      0.89703                0.001711   \n",
   1715        "..                         ...                     ...   \n",
   1716        "500                   0.211881               -0.116757   \n",
   1717        "501                   0.457426               -0.127491   \n",
   1718        "502                   0.843564                0.223856   \n",
   1719        "503                   0.255446               -0.255398   \n",
   1720        "504                   0.772277                0.102747   \n",
   1721        "\n",
   1722        "    Six-Month Return Percentile  Three-Month Price Return  \\\n",
   1723        "0                      0.837624                  0.221461   \n",
   1724        "1                     0.0158416                  0.509431   \n",
   1725        "2                      0.839604                  0.295700   \n",
   1726        "3                      0.968317                  0.474900   \n",
   1727        "4                      0.629703                  0.077880   \n",
   1728        "..                          ...                       ...   \n",
   1729        "500                    0.405941                  0.161550   \n",
   1730        "501                     0.39604                  0.250906   \n",
   1731        "502                    0.906931                  0.283668   \n",
   1732        "503                    0.227723                  0.328190   \n",
   1733        "504                    0.776238                  0.307237   \n",
   1734        "\n",
   1735        "    Three-Month Return Percentile  One-Month Price Return  \\\n",
   1736        "0                        0.473267                0.093820   \n",
   1737        "1                        0.908911                0.172430   \n",
   1738        "2                        0.643564                0.144608   \n",
   1739        "3                        0.887129                0.189840   \n",
   1740        "4                         0.19802               -0.024533   \n",
   1741        "..                            ...                     ...   \n",
   1742        "500                      0.374257                0.068180   \n",
   1743        "501                      0.544554                0.151414   \n",
   1744        "502                      0.611881                0.115379   \n",
   1745        "503                       0.70297                0.055265   \n",
   1746        "504                      0.665347                0.157549   \n",
   1747        "\n",
   1748        "    One-Month Return Percentile HQM Score  \n",
   1749        "0                      0.530693       N/A  \n",
   1750        "1                      0.827723       N/A  \n",
   1751        "2                      0.742574       N/A  \n",
   1752        "3                      0.879208       N/A  \n",
   1753        "4                     0.0693069       N/A  \n",
   1754        "..                          ...       ...  \n",
   1755        "500                    0.370297       N/A  \n",
   1756        "501                    0.762376       N/A  \n",
   1757        "502                    0.641584       N/A  \n",
   1758        "503                    0.312871       N/A  \n",
   1759        "504                    0.792079       N/A  \n",
   1760        "\n",
   1761        "[505 rows x 12 columns]"
   1762       ]
   1763      },
   1764      "execution_count": 11,
   1765      "metadata": {},
   1766      "output_type": "execute_result"
   1767     }
   1768    ],
   1769    "source": [
   1770     "time_periods = [\n",
   1771     "                'One-Year',\n",
   1772     "                'Six-Month',\n",
   1773     "                'Three-Month',\n",
   1774     "                'One-Month'\n",
   1775     "                ]\n",
   1776     "\n",
   1777     "for row in hqm_dataframe.index:\n",
   1778     "    for time_period in time_periods:\n",
   1779     "        hqm_dataframe.loc[row, f'{time_period} Return Percentile'] = stats.percentileofscore(hqm_dataframe[f'{time_period} Price Return'], hqm_dataframe.loc[row, f'{time_period} Price Return'])/100\n",
   1780     "\n",
   1781     "# Print each percentile score to make sure it was calculated properly\n",
   1782     "for time_period in time_periods:\n",
   1783     "    print(hqm_dataframe[f'{time_period} Return Percentile'])\n",
   1784     "\n",
   1785     "#Print the entire DataFrame    \n",
   1786     "hqm_dataframe"
   1787    ]
   1788   },
   1789   {
   1790    "cell_type": "markdown",
   1791    "metadata": {},
   1792    "source": [
   1793     "## Calculating the HQM Score\n",
   1794     "\n",
   1795     "We'll now calculate our `HQM Score`, which is the high-quality momentum score that we'll use to filter for stocks in this investing strategy.\n",
   1796     "\n",
   1797     "The `HQM Score` will be the arithmetic mean of the 4 momentum percentile scores that we calculated in the last section.\n",
   1798     "\n",
   1799     "To calculate arithmetic mean, we will use the `mean` function from Python's built-in `statistics` module."
   1800    ]
   1801   },
   1802   {
   1803    "cell_type": "code",
   1804    "execution_count": 12,
   1805    "metadata": {},
   1806    "outputs": [],
   1807    "source": [
   1808     "from statistics import mean\n",
   1809     "\n",
   1810     "for row in hqm_dataframe.index:\n",
   1811     "    momentum_percentiles = []\n",
   1812     "    for time_period in time_periods:\n",
   1813     "        momentum_percentiles.append(hqm_dataframe.loc[row, f'{time_period} Return Percentile'])\n",
   1814     "    hqm_dataframe.loc[row, 'HQM Score'] = mean(momentum_percentiles)"
   1815    ]
   1816   },
   1817   {
   1818    "cell_type": "markdown",
   1819    "metadata": {},
   1820    "source": [
   1821     "## Selecting the 50 Best Momentum Stocks\n",
   1822     "\n",
   1823     "As before, we can identify the 50 best momentum stocks in our universe by sorting the DataFrame on the `HQM Score` column and dropping all but the top 50 entries."
   1824    ]
   1825   },
   1826   {
   1827    "cell_type": "code",
   1828    "execution_count": 13,
   1829    "metadata": {},
   1830    "outputs": [],
   1831    "source": [
   1832     "hqm_dataframe.sort_values(by = 'HQM Score', ascending = False)\n",
   1833     "hqm_dataframe = hqm_dataframe[:51]"
   1834    ]
   1835   },
   1836   {
   1837    "cell_type": "markdown",
   1838    "metadata": {},
   1839    "source": [
   1840     "## Calculating the Number of Shares to Buy\n",
   1841     "\n",
   1842     "We'll use the `portfolio_input` function that we created earlier to accept our portfolio size. Then we will use similar logic in a `for` loop to calculate the number of shares to buy for each stock in our investment universe."
   1843    ]
   1844   },
   1845   {
   1846    "cell_type": "code",
   1847    "execution_count": 14,
   1848    "metadata": {},
   1849    "outputs": [
   1850     {
   1851      "name": "stdout",
   1852      "output_type": "stream",
   1853      "text": [
   1854       "Enter the value of your portfolio:1000000\n"
   1855      ]
   1856     }
   1857    ],
   1858    "source": [
   1859     "portfolio_input()"
   1860    ]
   1861   },
   1862   {
   1863    "cell_type": "code",
   1864    "execution_count": 15,
   1865    "metadata": {},
   1866    "outputs": [
   1867     {
   1868      "data": {
   1869       "text/html": [
   1870        "<div>\n",
   1871        "<style scoped>\n",
   1872        "    .dataframe tbody tr th:only-of-type {\n",
   1873        "        vertical-align: middle;\n",
   1874        "    }\n",
   1875        "\n",
   1876        "    .dataframe tbody tr th {\n",
   1877        "        vertical-align: top;\n",
   1878        "    }\n",
   1879        "\n",
   1880        "    .dataframe thead th {\n",
   1881        "        text-align: right;\n",
   1882        "    }\n",
   1883        "</style>\n",
   1884        "<table border=\"1\" class=\"dataframe\">\n",
   1885        "  <thead>\n",
   1886        "    <tr style=\"text-align: right;\">\n",
   1887        "      <th></th>\n",
   1888        "      <th>Ticker</th>\n",
   1889        "      <th>Price</th>\n",
   1890        "      <th>Number of Shares to Buy</th>\n",
   1891        "      <th>One-Year Price Return</th>\n",
   1892        "      <th>One-Year Return Percentile</th>\n",
   1893        "      <th>Six-Month Price Return</th>\n",
   1894        "      <th>Six-Month Return Percentile</th>\n",
   1895        "      <th>Three-Month Price Return</th>\n",
   1896        "      <th>Three-Month Return Percentile</th>\n",
   1897        "      <th>One-Month Price Return</th>\n",
   1898        "      <th>One-Month Return Percentile</th>\n",
   1899        "      <th>HQM Score</th>\n",
   1900        "    </tr>\n",
   1901        "  </thead>\n",
   1902        "  <tbody>\n",
   1903        "    <tr>\n",
   1904        "      <th>0</th>\n",
   1905        "      <td>A</td>\n",
   1906        "      <td>98.19</td>\n",
   1907        "      <td>199</td>\n",
   1908        "      <td>0.444090</td>\n",
   1909        "      <td>0.885149</td>\n",
   1910        "      <td>0.147456</td>\n",
   1911        "      <td>0.837624</td>\n",
   1912        "      <td>0.221461</td>\n",
   1913        "      <td>0.473267</td>\n",
   1914        "      <td>0.093820</td>\n",
   1915        "      <td>0.530693</td>\n",
   1916        "      <td>0.681683</td>\n",
   1917        "    </tr>\n",
   1918        "    <tr>\n",
   1919        "      <th>1</th>\n",
   1920        "      <td>AAL</td>\n",
   1921        "      <td>13.89</td>\n",
   1922        "      <td>1411</td>\n",
   1923        "      <td>-0.526494</td>\n",
   1924        "      <td>0.0237624</td>\n",
   1925        "      <td>-0.564540</td>\n",
   1926        "      <td>0.0158416</td>\n",
   1927        "      <td>0.509431</td>\n",
   1928        "      <td>0.908911</td>\n",
   1929        "      <td>0.172430</td>\n",
   1930        "      <td>0.827723</td>\n",
   1931        "      <td>0.444059</td>\n",
   1932        "    </tr>\n",
   1933        "    <tr>\n",
   1934        "      <th>2</th>\n",
   1935        "      <td>AAP</td>\n",
   1936        "      <td>161.13</td>\n",
   1937        "      <td>121</td>\n",
   1938        "      <td>0.088066</td>\n",
   1939        "      <td>0.578218</td>\n",
   1940        "      <td>0.148378</td>\n",
   1941        "      <td>0.839604</td>\n",
   1942        "      <td>0.295700</td>\n",
   1943        "      <td>0.643564</td>\n",
   1944        "      <td>0.144608</td>\n",
   1945        "      <td>0.742574</td>\n",
   1946        "      <td>0.70099</td>\n",
   1947        "    </tr>\n",
   1948        "    <tr>\n",
   1949        "      <th>3</th>\n",
   1950        "      <td>AAPL</td>\n",
   1951        "      <td>467.65</td>\n",
   1952        "      <td>41</td>\n",
   1953        "      <td>1.171724</td>\n",
   1954        "      <td>0.992079</td>\n",
   1955        "      <td>0.401695</td>\n",
   1956        "      <td>0.968317</td>\n",
   1957        "      <td>0.474900</td>\n",
   1958        "      <td>0.887129</td>\n",
   1959        "      <td>0.189840</td>\n",
   1960        "      <td>0.879208</td>\n",
   1961        "      <td>0.931683</td>\n",
   1962        "    </tr>\n",
   1963        "    <tr>\n",
   1964        "      <th>4</th>\n",
   1965        "      <td>ABBV</td>\n",
   1966        "      <td>97.29</td>\n",
   1967        "      <td>201</td>\n",
   1968        "      <td>0.478770</td>\n",
   1969        "      <td>0.89703</td>\n",
   1970        "      <td>0.001711</td>\n",
   1971        "      <td>0.629703</td>\n",
   1972        "      <td>0.077880</td>\n",
   1973        "      <td>0.19802</td>\n",
   1974        "      <td>-0.024533</td>\n",
   1975        "      <td>0.0693069</td>\n",
   1976        "      <td>0.448515</td>\n",
   1977        "    </tr>\n",
   1978        "    <tr>\n",
   1979        "      <th>5</th>\n",
   1980        "      <td>ABC</td>\n",
   1981        "      <td>104.97</td>\n",
   1982        "      <td>186</td>\n",
   1983        "      <td>0.163705</td>\n",
   1984        "      <td>0.651485</td>\n",
   1985        "      <td>0.100112</td>\n",
   1986        "      <td>0.774257</td>\n",
   1987        "      <td>0.241867</td>\n",
   1988        "      <td>0.522772</td>\n",
   1989        "      <td>0.066990</td>\n",
   1990        "      <td>0.364356</td>\n",
   1991        "      <td>0.578218</td>\n",
   1992        "    </tr>\n",
   1993        "    <tr>\n",
   1994        "      <th>6</th>\n",
   1995        "      <td>ABMD</td>\n",
   1996        "      <td>305.78</td>\n",
   1997        "      <td>64</td>\n",
   1998        "      <td>0.546138</td>\n",
   1999        "      <td>0.942574</td>\n",
   2000        "      <td>0.874783</td>\n",
   2001        "      <td>0.99802</td>\n",
   2002        "      <td>0.645795</td>\n",
   2003        "      <td>0.954455</td>\n",
   2004        "      <td>0.145153</td>\n",
   2005        "      <td>0.746535</td>\n",
   2006        "      <td>0.910396</td>\n",
   2007        "    </tr>\n",
   2008        "    <tr>\n",
   2009        "      <th>7</th>\n",
   2010        "      <td>ABT</td>\n",
   2011        "      <td>102.94</td>\n",
   2012        "      <td>190</td>\n",
   2013        "      <td>0.161073</td>\n",
   2014        "      <td>0.647525</td>\n",
   2015        "      <td>0.139130</td>\n",
   2016        "      <td>0.823762</td>\n",
   2017        "      <td>0.093917</td>\n",
   2018        "      <td>0.233663</td>\n",
   2019        "      <td>0.081815</td>\n",
   2020        "      <td>0.457426</td>\n",
   2021        "      <td>0.540594</td>\n",
   2022        "    </tr>\n",
   2023        "    <tr>\n",
   2024        "      <th>8</th>\n",
   2025        "      <td>ACN</td>\n",
   2026        "      <td>237.88</td>\n",
   2027        "      <td>82</td>\n",
   2028        "      <td>0.197484</td>\n",
   2029        "      <td>0.69505</td>\n",
   2030        "      <td>0.085519</td>\n",
   2031        "      <td>0.762376</td>\n",
   2032        "      <td>0.279570</td>\n",
   2033        "      <td>0.605941</td>\n",
   2034        "      <td>0.067045</td>\n",
   2035        "      <td>0.366337</td>\n",
   2036        "      <td>0.607426</td>\n",
   2037        "    </tr>\n",
   2038        "    <tr>\n",
   2039        "      <th>9</th>\n",
   2040        "      <td>ADBE</td>\n",
   2041        "      <td>453.91</td>\n",
   2042        "      <td>43</td>\n",
   2043        "      <td>0.532839</td>\n",
   2044        "      <td>0.934653</td>\n",
   2045        "      <td>0.196705</td>\n",
   2046        "      <td>0.879208</td>\n",
   2047        "      <td>0.252382</td>\n",
   2048        "      <td>0.550495</td>\n",
   2049        "      <td>0.006829</td>\n",
   2050        "      <td>0.150495</td>\n",
   2051        "      <td>0.628713</td>\n",
   2052        "    </tr>\n",
   2053        "    <tr>\n",
   2054        "      <th>10</th>\n",
   2055        "      <td>ADI</td>\n",
   2056        "      <td>120.52</td>\n",
   2057        "      <td>162</td>\n",
   2058        "      <td>0.056525</td>\n",
   2059        "      <td>0.522772</td>\n",
   2060        "      <td>0.002920</td>\n",
   2061        "      <td>0.631683</td>\n",
   2062        "      <td>0.149173</td>\n",
   2063        "      <td>0.360396</td>\n",
   2064        "      <td>0.017244</td>\n",
   2065        "      <td>0.174257</td>\n",
   2066        "      <td>0.422277</td>\n",
   2067        "    </tr>\n",
   2068        "    <tr>\n",
   2069        "      <th>11</th>\n",
   2070        "      <td>ADM</td>\n",
   2071        "      <td>46.62</td>\n",
   2072        "      <td>420</td>\n",
   2073        "      <td>0.178916</td>\n",
   2074        "      <td>0.679208</td>\n",
   2075        "      <td>-0.018869</td>\n",
   2076        "      <td>0.580198</td>\n",
   2077        "      <td>0.328413</td>\n",
   2078        "      <td>0.70495</td>\n",
   2079        "      <td>0.123837</td>\n",
   2080        "      <td>0.687129</td>\n",
   2081        "      <td>0.662871</td>\n",
   2082        "    </tr>\n",
   2083        "    <tr>\n",
   2084        "      <th>12</th>\n",
   2085        "      <td>ADP</td>\n",
   2086        "      <td>139.82</td>\n",
   2087        "      <td>140</td>\n",
   2088        "      <td>-0.174896</td>\n",
   2089        "      <td>0.243564</td>\n",
   2090        "      <td>-0.227657</td>\n",
   2091        "      <td>0.265347</td>\n",
   2092        "      <td>0.037317</td>\n",
   2093        "      <td>0.134653</td>\n",
   2094        "      <td>-0.042030</td>\n",
   2095        "      <td>0.0435644</td>\n",
   2096        "      <td>0.171782</td>\n",
   2097        "    </tr>\n",
   2098        "    <tr>\n",
   2099        "      <th>13</th>\n",
   2100        "      <td>ADSK</td>\n",
   2101        "      <td>234.20</td>\n",
   2102        "      <td>83</td>\n",
   2103        "      <td>0.528696</td>\n",
   2104        "      <td>0.928713</td>\n",
   2105        "      <td>0.116990</td>\n",
   2106        "      <td>0.794059</td>\n",
   2107        "      <td>0.312257</td>\n",
   2108        "      <td>0.677228</td>\n",
   2109        "      <td>-0.001259</td>\n",
   2110        "      <td>0.122772</td>\n",
   2111        "      <td>0.630693</td>\n",
   2112        "    </tr>\n",
   2113        "    <tr>\n",
   2114        "      <th>14</th>\n",
   2115        "      <td>AEE</td>\n",
   2116        "      <td>85.23</td>\n",
   2117        "      <td>230</td>\n",
   2118        "      <td>0.073499</td>\n",
   2119        "      <td>0.556436</td>\n",
   2120        "      <td>-0.044706</td>\n",
   2121        "      <td>0.538614</td>\n",
   2122        "      <td>0.202938</td>\n",
   2123        "      <td>0.447525</td>\n",
   2124        "      <td>0.086675</td>\n",
   2125        "      <td>0.483168</td>\n",
   2126        "      <td>0.506436</td>\n",
   2127        "    </tr>\n",
   2128        "    <tr>\n",
   2129        "      <th>15</th>\n",
   2130        "      <td>AEP</td>\n",
   2131        "      <td>87.88</td>\n",
   2132        "      <td>223</td>\n",
   2133        "      <td>-0.069760</td>\n",
   2134        "      <td>0.368317</td>\n",
   2135        "      <td>-0.186159</td>\n",
   2136        "      <td>0.326733</td>\n",
   2137        "      <td>0.084255</td>\n",
   2138        "      <td>0.217822</td>\n",
   2139        "      <td>-0.007456</td>\n",
   2140        "      <td>0.106931</td>\n",
   2141        "      <td>0.25495</td>\n",
   2142        "    </tr>\n",
   2143        "    <tr>\n",
   2144        "      <th>16</th>\n",
   2145        "      <td>AES</td>\n",
   2146        "      <td>17.54</td>\n",
   2147        "      <td>1117</td>\n",
   2148        "      <td>0.141966</td>\n",
   2149        "      <td>0.635644</td>\n",
   2150        "      <td>-0.177281</td>\n",
   2151        "      <td>0.336634</td>\n",
   2152        "      <td>0.510037</td>\n",
   2153        "      <td>0.910891</td>\n",
   2154        "      <td>0.186968</td>\n",
   2155        "      <td>0.873267</td>\n",
   2156        "      <td>0.689109</td>\n",
   2157        "    </tr>\n",
   2158        "    <tr>\n",
   2159        "      <th>17</th>\n",
   2160        "      <td>AFL</td>\n",
   2161        "      <td>39.27</td>\n",
   2162        "      <td>499</td>\n",
   2163        "      <td>-0.298263</td>\n",
   2164        "      <td>0.116832</td>\n",
   2165        "      <td>-0.283044</td>\n",
   2166        "      <td>0.190099</td>\n",
   2167        "      <td>0.178662</td>\n",
   2168        "      <td>0.4</td>\n",
   2169        "      <td>0.082055</td>\n",
   2170        "      <td>0.459406</td>\n",
   2171        "      <td>0.291584</td>\n",
   2172        "    </tr>\n",
   2173        "    <tr>\n",
   2174        "      <th>18</th>\n",
   2175        "      <td>AIG</td>\n",
   2176        "      <td>31.76</td>\n",
   2177        "      <td>617</td>\n",
   2178        "      <td>-0.468456</td>\n",
   2179        "      <td>0.0356436</td>\n",
   2180        "      <td>-0.398200</td>\n",
   2181        "      <td>0.0673267</td>\n",
   2182        "      <td>0.242767</td>\n",
   2183        "      <td>0.528713</td>\n",
   2184        "      <td>0.042150</td>\n",
   2185        "      <td>0.271287</td>\n",
   2186        "      <td>0.225743</td>\n",
   2187        "    </tr>\n",
   2188        "    <tr>\n",
   2189        "      <th>19</th>\n",
   2190        "      <td>AIV</td>\n",
   2191        "      <td>39.00</td>\n",
   2192        "      <td>502</td>\n",
   2193        "      <td>-0.260956</td>\n",
   2194        "      <td>0.168317</td>\n",
   2195        "      <td>-0.323003</td>\n",
   2196        "      <td>0.142574</td>\n",
   2197        "      <td>0.096556</td>\n",
   2198        "      <td>0.243564</td>\n",
   2199        "      <td>0.004109</td>\n",
   2200        "      <td>0.140594</td>\n",
   2201        "      <td>0.173762</td>\n",
   2202        "    </tr>\n",
   2203        "    <tr>\n",
   2204        "      <th>20</th>\n",
   2205        "      <td>AIZ</td>\n",
   2206        "      <td>129.93</td>\n",
   2207        "      <td>150</td>\n",
   2208        "      <td>0.016575</td>\n",
   2209        "      <td>0.475248</td>\n",
   2210        "      <td>-0.116835</td>\n",
   2211        "      <td>0.40396</td>\n",
   2212        "      <td>0.418900</td>\n",
   2213        "      <td>0.839604</td>\n",
   2214        "      <td>0.254327</td>\n",
   2215        "      <td>0.948515</td>\n",
   2216        "      <td>0.666832</td>\n",
   2217        "    </tr>\n",
   2218        "    <tr>\n",
   2219        "      <th>21</th>\n",
   2220        "      <td>AJG</td>\n",
   2221        "      <td>111.00</td>\n",
   2222        "      <td>176</td>\n",
   2223        "      <td>0.195680</td>\n",
   2224        "      <td>0.689109</td>\n",
   2225        "      <td>-0.011750</td>\n",
   2226        "      <td>0.6</td>\n",
   2227        "      <td>0.253483</td>\n",
   2228        "      <td>0.554455</td>\n",
   2229        "      <td>0.092902</td>\n",
   2230        "      <td>0.520792</td>\n",
   2231        "      <td>0.591089</td>\n",
   2232        "    </tr>\n",
   2233        "    <tr>\n",
   2234        "      <th>22</th>\n",
   2235        "      <td>AKAM</td>\n",
   2236        "      <td>110.00</td>\n",
   2237        "      <td>178</td>\n",
   2238        "      <td>0.206310</td>\n",
   2239        "      <td>0.70495</td>\n",
   2240        "      <td>0.075705</td>\n",
   2241        "      <td>0.752475</td>\n",
   2242        "      <td>0.125834</td>\n",
   2243        "      <td>0.312871</td>\n",
   2244        "      <td>-0.027015</td>\n",
   2245        "      <td>0.0594059</td>\n",
   2246        "      <td>0.457426</td>\n",
   2247        "    </tr>\n",
   2248        "    <tr>\n",
   2249        "      <th>23</th>\n",
   2250        "      <td>ALB</td>\n",
   2251        "      <td>94.85</td>\n",
   2252        "      <td>206</td>\n",
   2253        "      <td>0.339750</td>\n",
   2254        "      <td>0.823762</td>\n",
   2255        "      <td>0.036265</td>\n",
   2256        "      <td>0.691089</td>\n",
   2257        "      <td>0.528245</td>\n",
   2258        "      <td>0.918812</td>\n",
   2259        "      <td>0.120477</td>\n",
   2260        "      <td>0.673267</td>\n",
   2261        "      <td>0.776733</td>\n",
   2262        "    </tr>\n",
   2263        "    <tr>\n",
   2264        "      <th>24</th>\n",
   2265        "      <td>ALGN</td>\n",
   2266        "      <td>309.25</td>\n",
   2267        "      <td>63</td>\n",
   2268        "      <td>0.692338</td>\n",
   2269        "      <td>0.970297</td>\n",
   2270        "      <td>0.131757</td>\n",
   2271        "      <td>0.815842</td>\n",
   2272        "      <td>0.554489</td>\n",
   2273        "      <td>0.928713</td>\n",
   2274        "      <td>0.143933</td>\n",
   2275        "      <td>0.738614</td>\n",
   2276        "      <td>0.863366</td>\n",
   2277        "    </tr>\n",
   2278        "    <tr>\n",
   2279        "      <th>25</th>\n",
   2280        "      <td>ALK</td>\n",
   2281        "      <td>38.63</td>\n",
   2282        "      <td>507</td>\n",
   2283        "      <td>-0.387440</td>\n",
   2284        "      <td>0.0633663</td>\n",
   2285        "      <td>-0.438559</td>\n",
   2286        "      <td>0.0534653</td>\n",
   2287        "      <td>0.519770</td>\n",
   2288        "      <td>0.916832</td>\n",
   2289        "      <td>0.103833</td>\n",
   2290        "      <td>0.576238</td>\n",
   2291        "      <td>0.402475</td>\n",
   2292        "    </tr>\n",
   2293        "    <tr>\n",
   2294        "      <th>26</th>\n",
   2295        "      <td>ALL</td>\n",
   2296        "      <td>99.53</td>\n",
   2297        "      <td>197</td>\n",
   2298        "      <td>-0.079870</td>\n",
   2299        "      <td>0.354455</td>\n",
   2300        "      <td>-0.230788</td>\n",
   2301        "      <td>0.261386</td>\n",
   2302        "      <td>0.045750</td>\n",
   2303        "      <td>0.146535</td>\n",
   2304        "      <td>0.088925</td>\n",
   2305        "      <td>0.49703</td>\n",
   2306        "      <td>0.314851</td>\n",
   2307        "    </tr>\n",
   2308        "    <tr>\n",
   2309        "      <th>27</th>\n",
   2310        "      <td>ALLE</td>\n",
   2311        "      <td>105.13</td>\n",
   2312        "      <td>186</td>\n",
   2313        "      <td>0.071934</td>\n",
   2314        "      <td>0.542574</td>\n",
   2315        "      <td>-0.246470</td>\n",
   2316        "      <td>0.241584</td>\n",
   2317        "      <td>0.112362</td>\n",
   2318        "      <td>0.277228</td>\n",
   2319        "      <td>0.024073</td>\n",
   2320        "      <td>0.20396</td>\n",
   2321        "      <td>0.316337</td>\n",
   2322        "    </tr>\n",
   2323        "    <tr>\n",
   2324        "      <th>28</th>\n",
   2325        "      <td>ALXN</td>\n",
   2326        "      <td>107.60</td>\n",
   2327        "      <td>182</td>\n",
   2328        "      <td>-0.079570</td>\n",
   2329        "      <td>0.356436</td>\n",
   2330        "      <td>-0.006381</td>\n",
   2331        "      <td>0.60396</td>\n",
   2332        "      <td>0.003280</td>\n",
   2333        "      <td>0.0792079</td>\n",
   2334        "      <td>-0.040910</td>\n",
   2335        "      <td>0.0455446</td>\n",
   2336        "      <td>0.271287</td>\n",
   2337        "    </tr>\n",
   2338        "    <tr>\n",
   2339        "      <th>29</th>\n",
   2340        "      <td>AMAT</td>\n",
   2341        "      <td>68.10</td>\n",
   2342        "      <td>287</td>\n",
   2343        "      <td>0.389577</td>\n",
   2344        "      <td>0.855446</td>\n",
   2345        "      <td>-0.013556</td>\n",
   2346        "      <td>0.594059</td>\n",
   2347        "      <td>0.301391</td>\n",
   2348        "      <td>0.651485</td>\n",
   2349        "      <td>0.082413</td>\n",
   2350        "      <td>0.461386</td>\n",
   2351        "      <td>0.640594</td>\n",
   2352        "    </tr>\n",
   2353        "    <tr>\n",
   2354        "      <th>30</th>\n",
   2355        "      <td>AMCR</td>\n",
   2356        "      <td>11.52</td>\n",
   2357        "      <td>1702</td>\n",
   2358        "      <td>0.073093</td>\n",
   2359        "      <td>0.552475</td>\n",
   2360        "      <td>0.105582</td>\n",
   2361        "      <td>0.778218</td>\n",
   2362        "      <td>0.238793</td>\n",
   2363        "      <td>0.510891</td>\n",
   2364        "      <td>0.077579</td>\n",
   2365        "      <td>0.433663</td>\n",
   2366        "      <td>0.568812</td>\n",
   2367        "    </tr>\n",
   2368        "    <tr>\n",
   2369        "      <th>31</th>\n",
   2370        "      <td>AMD</td>\n",
   2371        "      <td>85.23</td>\n",
   2372        "      <td>230</td>\n",
   2373        "      <td>1.590065</td>\n",
   2374        "      <td>0.99604</td>\n",
   2375        "      <td>0.532176</td>\n",
   2376        "      <td>0.984158</td>\n",
   2377        "      <td>0.597011</td>\n",
   2378        "      <td>0.948515</td>\n",
   2379        "      <td>0.560304</td>\n",
   2380        "      <td>0.99802</td>\n",
   2381        "      <td>0.981683</td>\n",
   2382        "    </tr>\n",
   2383        "    <tr>\n",
   2384        "      <th>32</th>\n",
   2385        "      <td>AME</td>\n",
   2386        "      <td>104.38</td>\n",
   2387        "      <td>187</td>\n",
   2388        "      <td>0.177719</td>\n",
   2389        "      <td>0.677228</td>\n",
   2390        "      <td>-0.002080</td>\n",
   2391        "      <td>0.615842</td>\n",
   2392        "      <td>0.305470</td>\n",
   2393        "      <td>0.659406</td>\n",
   2394        "      <td>0.147190</td>\n",
   2395        "      <td>0.752475</td>\n",
   2396        "      <td>0.676238</td>\n",
   2397        "    </tr>\n",
   2398        "    <tr>\n",
   2399        "      <th>33</th>\n",
   2400        "      <td>AMGN</td>\n",
   2401        "      <td>253.49</td>\n",
   2402        "      <td>77</td>\n",
   2403        "      <td>0.176726</td>\n",
   2404        "      <td>0.671287</td>\n",
   2405        "      <td>0.086140</td>\n",
   2406        "      <td>0.764356</td>\n",
   2407        "      <td>0.020895</td>\n",
   2408        "      <td>0.112871</td>\n",
   2409        "      <td>-0.034769</td>\n",
   2410        "      <td>0.0534653</td>\n",
   2411        "      <td>0.400495</td>\n",
   2412        "    </tr>\n",
   2413        "    <tr>\n",
   2414        "      <th>34</th>\n",
   2415        "      <td>AMP</td>\n",
   2416        "      <td>166.96</td>\n",
   2417        "      <td>117</td>\n",
   2418        "      <td>0.254633</td>\n",
   2419        "      <td>0.736634</td>\n",
   2420        "      <td>-0.101617</td>\n",
   2421        "      <td>0.429703</td>\n",
   2422        "      <td>0.385995</td>\n",
   2423        "      <td>0.80198</td>\n",
   2424        "      <td>0.089628</td>\n",
   2425        "      <td>0.50099</td>\n",
   2426        "      <td>0.617327</td>\n",
   2427        "    </tr>\n",
   2428        "    <tr>\n",
   2429        "      <th>35</th>\n",
   2430        "      <td>AMT</td>\n",
   2431        "      <td>252.70</td>\n",
   2432        "      <td>77</td>\n",
   2433        "      <td>0.137500</td>\n",
   2434        "      <td>0.631683</td>\n",
   2435        "      <td>-0.022213</td>\n",
   2436        "      <td>0.574257</td>\n",
   2437        "      <td>0.091099</td>\n",
   2438        "      <td>0.231683</td>\n",
   2439        "      <td>-0.018941</td>\n",
   2440        "      <td>0.0871287</td>\n",
   2441        "      <td>0.381188</td>\n",
   2442        "    </tr>\n",
   2443        "    <tr>\n",
   2444        "      <th>36</th>\n",
   2445        "      <td>AMZN</td>\n",
   2446        "      <td>3267.82</td>\n",
   2447        "      <td>6</td>\n",
   2448        "      <td>0.753428</td>\n",
   2449        "      <td>0.978218</td>\n",
   2450        "      <td>0.471720</td>\n",
   2451        "      <td>0.974257</td>\n",
   2452        "      <td>0.339324</td>\n",
   2453        "      <td>0.728713</td>\n",
   2454        "      <td>0.018781</td>\n",
   2455        "      <td>0.178218</td>\n",
   2456        "      <td>0.714851</td>\n",
   2457        "    </tr>\n",
   2458        "    <tr>\n",
   2459        "      <th>37</th>\n",
   2460        "      <td>ANET</td>\n",
   2461        "      <td>225.98</td>\n",
   2462        "      <td>86</td>\n",
   2463        "      <td>-0.065031</td>\n",
   2464        "      <td>0.374257</td>\n",
   2465        "      <td>-0.093866</td>\n",
   2466        "      <td>0.449505</td>\n",
   2467        "      <td>0.011798</td>\n",
   2468        "      <td>0.0910891</td>\n",
   2469        "      <td>0.024541</td>\n",
   2470        "      <td>0.207921</td>\n",
   2471        "      <td>0.280693</td>\n",
   2472        "    </tr>\n",
   2473        "    <tr>\n",
   2474        "      <th>38</th>\n",
   2475        "      <td>ANSS</td>\n",
   2476        "      <td>321.00</td>\n",
   2477        "      <td>61</td>\n",
   2478        "      <td>0.451591</td>\n",
   2479        "      <td>0.887129</td>\n",
   2480        "      <td>0.058949</td>\n",
   2481        "      <td>0.722772</td>\n",
   2482        "      <td>0.229415</td>\n",
   2483        "      <td>0.487129</td>\n",
   2484        "      <td>0.044242</td>\n",
   2485        "      <td>0.283168</td>\n",
   2486        "      <td>0.59505</td>\n",
   2487        "    </tr>\n",
   2488        "    <tr>\n",
   2489        "      <th>39</th>\n",
   2490        "      <td>ANTM</td>\n",
   2491        "      <td>293.84</td>\n",
   2492        "      <td>66</td>\n",
   2493        "      <td>-0.013031</td>\n",
   2494        "      <td>0.439604</td>\n",
   2495        "      <td>-0.053364</td>\n",
   2496        "      <td>0.514851</td>\n",
   2497        "      <td>0.058803</td>\n",
   2498        "      <td>0.164356</td>\n",
   2499        "      <td>0.104273</td>\n",
   2500        "      <td>0.582178</td>\n",
   2501        "      <td>0.425248</td>\n",
   2502        "    </tr>\n",
   2503        "    <tr>\n",
   2504        "      <th>40</th>\n",
   2505        "      <td>AON</td>\n",
   2506        "      <td>196.84</td>\n",
   2507        "      <td>99</td>\n",
   2508        "      <td>0.006102</td>\n",
   2509        "      <td>0.463366</td>\n",
   2510        "      <td>-0.183042</td>\n",
   2511        "      <td>0.332673</td>\n",
   2512        "      <td>0.010224</td>\n",
   2513        "      <td>0.0891089</td>\n",
   2514        "      <td>-0.026247</td>\n",
   2515        "      <td>0.0633663</td>\n",
   2516        "      <td>0.237129</td>\n",
   2517        "    </tr>\n",
   2518        "    <tr>\n",
   2519        "      <th>41</th>\n",
   2520        "      <td>AOS</td>\n",
   2521        "      <td>50.31</td>\n",
   2522        "      <td>389</td>\n",
   2523        "      <td>0.101690</td>\n",
   2524        "      <td>0.59802</td>\n",
   2525        "      <td>0.141115</td>\n",
   2526        "      <td>0.825743</td>\n",
   2527        "      <td>0.260257</td>\n",
   2528        "      <td>0.564356</td>\n",
   2529        "      <td>0.032405</td>\n",
   2530        "      <td>0.231683</td>\n",
   2531        "      <td>0.55495</td>\n",
   2532        "    </tr>\n",
   2533        "    <tr>\n",
   2534        "      <th>42</th>\n",
   2535        "      <td>APA</td>\n",
   2536        "      <td>16.40</td>\n",
   2537        "      <td>1195</td>\n",
   2538        "      <td>-0.291451</td>\n",
   2539        "      <td>0.124752</td>\n",
   2540        "      <td>-0.441406</td>\n",
   2541        "      <td>0.0514851</td>\n",
   2542        "      <td>0.485613</td>\n",
   2543        "      <td>0.893069</td>\n",
   2544        "      <td>0.260429</td>\n",
   2545        "      <td>0.952475</td>\n",
   2546        "      <td>0.505446</td>\n",
   2547        "    </tr>\n",
   2548        "    <tr>\n",
   2549        "      <th>43</th>\n",
   2550        "      <td>APD</td>\n",
   2551        "      <td>295.10</td>\n",
   2552        "      <td>66</td>\n",
   2553        "      <td>0.242925</td>\n",
   2554        "      <td>0.728713</td>\n",
   2555        "      <td>0.124499</td>\n",
   2556        "      <td>0.807921</td>\n",
   2557        "      <td>0.273219</td>\n",
   2558        "      <td>0.592079</td>\n",
   2559        "      <td>0.040389</td>\n",
   2560        "      <td>0.265347</td>\n",
   2561        "      <td>0.598515</td>\n",
   2562        "    </tr>\n",
   2563        "    <tr>\n",
   2564        "      <th>44</th>\n",
   2565        "      <td>APH</td>\n",
   2566        "      <td>110.83</td>\n",
   2567        "      <td>176</td>\n",
   2568        "      <td>0.255236</td>\n",
   2569        "      <td>0.738614</td>\n",
   2570        "      <td>0.053364</td>\n",
   2571        "      <td>0.714851</td>\n",
   2572        "      <td>0.342563</td>\n",
   2573        "      <td>0.740594</td>\n",
   2574        "      <td>0.168114</td>\n",
   2575        "      <td>0.819802</td>\n",
   2576        "      <td>0.753465</td>\n",
   2577        "    </tr>\n",
   2578        "    <tr>\n",
   2579        "      <th>45</th>\n",
   2580        "      <td>APTV</td>\n",
   2581        "      <td>91.40</td>\n",
   2582        "      <td>214</td>\n",
   2583        "      <td>0.072118</td>\n",
   2584        "      <td>0.544554</td>\n",
   2585        "      <td>-0.011731</td>\n",
   2586        "      <td>0.60198</td>\n",
   2587        "      <td>0.490744</td>\n",
   2588        "      <td>0.89505</td>\n",
   2589        "      <td>0.172564</td>\n",
   2590        "      <td>0.829703</td>\n",
   2591        "      <td>0.717822</td>\n",
   2592        "    </tr>\n",
   2593        "    <tr>\n",
   2594        "      <th>46</th>\n",
   2595        "      <td>ARE</td>\n",
   2596        "      <td>174.20</td>\n",
   2597        "      <td>112</td>\n",
   2598        "      <td>0.208731</td>\n",
   2599        "      <td>0.706931</td>\n",
   2600        "      <td>-0.001613</td>\n",
   2601        "      <td>0.619802</td>\n",
   2602        "      <td>0.214849</td>\n",
   2603        "      <td>0.465347</td>\n",
   2604        "      <td>0.078630</td>\n",
   2605        "      <td>0.441584</td>\n",
   2606        "      <td>0.558416</td>\n",
   2607        "    </tr>\n",
   2608        "    <tr>\n",
   2609        "      <th>47</th>\n",
   2610        "      <td>ATO</td>\n",
   2611        "      <td>108.98</td>\n",
   2612        "      <td>179</td>\n",
   2613        "      <td>-0.039357</td>\n",
   2614        "      <td>0.415842</td>\n",
   2615        "      <td>-0.125705</td>\n",
   2616        "      <td>0.4</td>\n",
   2617        "      <td>0.089492</td>\n",
   2618        "      <td>0.229703</td>\n",
   2619        "      <td>0.053203</td>\n",
   2620        "      <td>0.306931</td>\n",
   2621        "      <td>0.338119</td>\n",
   2622        "    </tr>\n",
   2623        "    <tr>\n",
   2624        "      <th>48</th>\n",
   2625        "      <td>ATVI</td>\n",
   2626        "      <td>82.88</td>\n",
   2627        "      <td>236</td>\n",
   2628        "      <td>0.706749</td>\n",
   2629        "      <td>0.976238</td>\n",
   2630        "      <td>0.310780</td>\n",
   2631        "      <td>0.950495</td>\n",
   2632        "      <td>0.110910</td>\n",
   2633        "      <td>0.273267</td>\n",
   2634        "      <td>0.048812</td>\n",
   2635        "      <td>0.289109</td>\n",
   2636        "      <td>0.622277</td>\n",
   2637        "    </tr>\n",
   2638        "    <tr>\n",
   2639        "      <th>49</th>\n",
   2640        "      <td>AVB</td>\n",
   2641        "      <td>156.62</td>\n",
   2642        "      <td>125</td>\n",
   2643        "      <td>-0.263600</td>\n",
   2644        "      <td>0.162376</td>\n",
   2645        "      <td>-0.336301</td>\n",
   2646        "      <td>0.120792</td>\n",
   2647        "      <td>0.012586</td>\n",
   2648        "      <td>0.0930693</td>\n",
   2649        "      <td>0.005162</td>\n",
   2650        "      <td>0.142574</td>\n",
   2651        "      <td>0.129703</td>\n",
   2652        "    </tr>\n",
   2653        "    <tr>\n",
   2654        "      <th>50</th>\n",
   2655        "      <td>AVGO</td>\n",
   2656        "      <td>336.73</td>\n",
   2657        "      <td>N/A</td>\n",
   2658        "      <td>0.177460</td>\n",
   2659        "      <td>0.675248</td>\n",
   2660        "      <td>0.030386</td>\n",
   2661        "      <td>0.679208</td>\n",
   2662        "      <td>0.278870</td>\n",
   2663        "      <td>0.60198</td>\n",
   2664        "      <td>0.074210</td>\n",
   2665        "      <td>0.405941</td>\n",
   2666        "      <td>0.590594</td>\n",
   2667        "    </tr>\n",
   2668        "  </tbody>\n",
   2669        "</table>\n",
   2670        "</div>"
   2671       ],
   2672       "text/plain": [
   2673        "   Ticker    Price Number of Shares to Buy  One-Year Price Return  \\\n",
   2674        "0       A    98.19                     199               0.444090   \n",
   2675        "1     AAL    13.89                    1411              -0.526494   \n",
   2676        "2     AAP   161.13                     121               0.088066   \n",
   2677        "3    AAPL   467.65                      41               1.171724   \n",
   2678        "4    ABBV    97.29                     201               0.478770   \n",
   2679        "5     ABC   104.97                     186               0.163705   \n",
   2680        "6    ABMD   305.78                      64               0.546138   \n",
   2681        "7     ABT   102.94                     190               0.161073   \n",
   2682        "8     ACN   237.88                      82               0.197484   \n",
   2683        "9    ADBE   453.91                      43               0.532839   \n",
   2684        "10    ADI   120.52                     162               0.056525   \n",
   2685        "11    ADM    46.62                     420               0.178916   \n",
   2686        "12    ADP   139.82                     140              -0.174896   \n",
   2687        "13   ADSK   234.20                      83               0.528696   \n",
   2688        "14    AEE    85.23                     230               0.073499   \n",
   2689        "15    AEP    87.88                     223              -0.069760   \n",
   2690        "16    AES    17.54                    1117               0.141966   \n",
   2691        "17    AFL    39.27                     499              -0.298263   \n",
   2692        "18    AIG    31.76                     617              -0.468456   \n",
   2693        "19    AIV    39.00                     502              -0.260956   \n",
   2694        "20    AIZ   129.93                     150               0.016575   \n",
   2695        "21    AJG   111.00                     176               0.195680   \n",
   2696        "22   AKAM   110.00                     178               0.206310   \n",
   2697        "23    ALB    94.85                     206               0.339750   \n",
   2698        "24   ALGN   309.25                      63               0.692338   \n",
   2699        "25    ALK    38.63                     507              -0.387440   \n",
   2700        "26    ALL    99.53                     197              -0.079870   \n",
   2701        "27   ALLE   105.13                     186               0.071934   \n",
   2702        "28   ALXN   107.60                     182              -0.079570   \n",
   2703        "29   AMAT    68.10                     287               0.389577   \n",
   2704        "30   AMCR    11.52                    1702               0.073093   \n",
   2705        "31    AMD    85.23                     230               1.590065   \n",
   2706        "32    AME   104.38                     187               0.177719   \n",
   2707        "33   AMGN   253.49                      77               0.176726   \n",
   2708        "34    AMP   166.96                     117               0.254633   \n",
   2709        "35    AMT   252.70                      77               0.137500   \n",
   2710        "36   AMZN  3267.82                       6               0.753428   \n",
   2711        "37   ANET   225.98                      86              -0.065031   \n",
   2712        "38   ANSS   321.00                      61               0.451591   \n",
   2713        "39   ANTM   293.84                      66              -0.013031   \n",
   2714        "40    AON   196.84                      99               0.006102   \n",
   2715        "41    AOS    50.31                     389               0.101690   \n",
   2716        "42    APA    16.40                    1195              -0.291451   \n",
   2717        "43    APD   295.10                      66               0.242925   \n",
   2718        "44    APH   110.83                     176               0.255236   \n",
   2719        "45   APTV    91.40                     214               0.072118   \n",
   2720        "46    ARE   174.20                     112               0.208731   \n",
   2721        "47    ATO   108.98                     179              -0.039357   \n",
   2722        "48   ATVI    82.88                     236               0.706749   \n",
   2723        "49    AVB   156.62                     125              -0.263600   \n",
   2724        "50   AVGO   336.73                     N/A               0.177460   \n",
   2725        "\n",
   2726        "   One-Year Return Percentile  Six-Month Price Return  \\\n",
   2727        "0                    0.885149                0.147456   \n",
   2728        "1                   0.0237624               -0.564540   \n",
   2729        "2                    0.578218                0.148378   \n",
   2730        "3                    0.992079                0.401695   \n",
   2731        "4                     0.89703                0.001711   \n",
   2732        "5                    0.651485                0.100112   \n",
   2733        "6                    0.942574                0.874783   \n",
   2734        "7                    0.647525                0.139130   \n",
   2735        "8                     0.69505                0.085519   \n",
   2736        "9                    0.934653                0.196705   \n",
   2737        "10                   0.522772                0.002920   \n",
   2738        "11                   0.679208               -0.018869   \n",
   2739        "12                   0.243564               -0.227657   \n",
   2740        "13                   0.928713                0.116990   \n",
   2741        "14                   0.556436               -0.044706   \n",
   2742        "15                   0.368317               -0.186159   \n",
   2743        "16                   0.635644               -0.177281   \n",
   2744        "17                   0.116832               -0.283044   \n",
   2745        "18                  0.0356436               -0.398200   \n",
   2746        "19                   0.168317               -0.323003   \n",
   2747        "20                   0.475248               -0.116835   \n",
   2748        "21                   0.689109               -0.011750   \n",
   2749        "22                    0.70495                0.075705   \n",
   2750        "23                   0.823762                0.036265   \n",
   2751        "24                   0.970297                0.131757   \n",
   2752        "25                  0.0633663               -0.438559   \n",
   2753        "26                   0.354455               -0.230788   \n",
   2754        "27                   0.542574               -0.246470   \n",
   2755        "28                   0.356436               -0.006381   \n",
   2756        "29                   0.855446               -0.013556   \n",
   2757        "30                   0.552475                0.105582   \n",
   2758        "31                    0.99604                0.532176   \n",
   2759        "32                   0.677228               -0.002080   \n",
   2760        "33                   0.671287                0.086140   \n",
   2761        "34                   0.736634               -0.101617   \n",
   2762        "35                   0.631683               -0.022213   \n",
   2763        "36                   0.978218                0.471720   \n",
   2764        "37                   0.374257               -0.093866   \n",
   2765        "38                   0.887129                0.058949   \n",
   2766        "39                   0.439604               -0.053364   \n",
   2767        "40                   0.463366               -0.183042   \n",
   2768        "41                    0.59802                0.141115   \n",
   2769        "42                   0.124752               -0.441406   \n",
   2770        "43                   0.728713                0.124499   \n",
   2771        "44                   0.738614                0.053364   \n",
   2772        "45                   0.544554               -0.011731   \n",
   2773        "46                   0.706931               -0.001613   \n",
   2774        "47                   0.415842               -0.125705   \n",
   2775        "48                   0.976238                0.310780   \n",
   2776        "49                   0.162376               -0.336301   \n",
   2777        "50                   0.675248                0.030386   \n",
   2778        "\n",
   2779        "   Six-Month Return Percentile  Three-Month Price Return  \\\n",
   2780        "0                     0.837624                  0.221461   \n",
   2781        "1                    0.0158416                  0.509431   \n",
   2782        "2                     0.839604                  0.295700   \n",
   2783        "3                     0.968317                  0.474900   \n",
   2784        "4                     0.629703                  0.077880   \n",
   2785        "5                     0.774257                  0.241867   \n",
   2786        "6                      0.99802                  0.645795   \n",
   2787        "7                     0.823762                  0.093917   \n",
   2788        "8                     0.762376                  0.279570   \n",
   2789        "9                     0.879208                  0.252382   \n",
   2790        "10                    0.631683                  0.149173   \n",
   2791        "11                    0.580198                  0.328413   \n",
   2792        "12                    0.265347                  0.037317   \n",
   2793        "13                    0.794059                  0.312257   \n",
   2794        "14                    0.538614                  0.202938   \n",
   2795        "15                    0.326733                  0.084255   \n",
   2796        "16                    0.336634                  0.510037   \n",
   2797        "17                    0.190099                  0.178662   \n",
   2798        "18                   0.0673267                  0.242767   \n",
   2799        "19                    0.142574                  0.096556   \n",
   2800        "20                     0.40396                  0.418900   \n",
   2801        "21                         0.6                  0.253483   \n",
   2802        "22                    0.752475                  0.125834   \n",
   2803        "23                    0.691089                  0.528245   \n",
   2804        "24                    0.815842                  0.554489   \n",
   2805        "25                   0.0534653                  0.519770   \n",
   2806        "26                    0.261386                  0.045750   \n",
   2807        "27                    0.241584                  0.112362   \n",
   2808        "28                     0.60396                  0.003280   \n",
   2809        "29                    0.594059                  0.301391   \n",
   2810        "30                    0.778218                  0.238793   \n",
   2811        "31                    0.984158                  0.597011   \n",
   2812        "32                    0.615842                  0.305470   \n",
   2813        "33                    0.764356                  0.020895   \n",
   2814        "34                    0.429703                  0.385995   \n",
   2815        "35                    0.574257                  0.091099   \n",
   2816        "36                    0.974257                  0.339324   \n",
   2817        "37                    0.449505                  0.011798   \n",
   2818        "38                    0.722772                  0.229415   \n",
   2819        "39                    0.514851                  0.058803   \n",
   2820        "40                    0.332673                  0.010224   \n",
   2821        "41                    0.825743                  0.260257   \n",
   2822        "42                   0.0514851                  0.485613   \n",
   2823        "43                    0.807921                  0.273219   \n",
   2824        "44                    0.714851                  0.342563   \n",
   2825        "45                     0.60198                  0.490744   \n",
   2826        "46                    0.619802                  0.214849   \n",
   2827        "47                         0.4                  0.089492   \n",
   2828        "48                    0.950495                  0.110910   \n",
   2829        "49                    0.120792                  0.012586   \n",
   2830        "50                    0.679208                  0.278870   \n",
   2831        "\n",
   2832        "   Three-Month Return Percentile  One-Month Price Return  \\\n",
   2833        "0                       0.473267                0.093820   \n",
   2834        "1                       0.908911                0.172430   \n",
   2835        "2                       0.643564                0.144608   \n",
   2836        "3                       0.887129                0.189840   \n",
   2837        "4                        0.19802               -0.024533   \n",
   2838        "5                       0.522772                0.066990   \n",
   2839        "6                       0.954455                0.145153   \n",
   2840        "7                       0.233663                0.081815   \n",
   2841        "8                       0.605941                0.067045   \n",
   2842        "9                       0.550495                0.006829   \n",
   2843        "10                      0.360396                0.017244   \n",
   2844        "11                       0.70495                0.123837   \n",
   2845        "12                      0.134653               -0.042030   \n",
   2846        "13                      0.677228               -0.001259   \n",
   2847        "14                      0.447525                0.086675   \n",
   2848        "15                      0.217822               -0.007456   \n",
   2849        "16                      0.910891                0.186968   \n",
   2850        "17                           0.4                0.082055   \n",
   2851        "18                      0.528713                0.042150   \n",
   2852        "19                      0.243564                0.004109   \n",
   2853        "20                      0.839604                0.254327   \n",
   2854        "21                      0.554455                0.092902   \n",
   2855        "22                      0.312871               -0.027015   \n",
   2856        "23                      0.918812                0.120477   \n",
   2857        "24                      0.928713                0.143933   \n",
   2858        "25                      0.916832                0.103833   \n",
   2859        "26                      0.146535                0.088925   \n",
   2860        "27                      0.277228                0.024073   \n",
   2861        "28                     0.0792079               -0.040910   \n",
   2862        "29                      0.651485                0.082413   \n",
   2863        "30                      0.510891                0.077579   \n",
   2864        "31                      0.948515                0.560304   \n",
   2865        "32                      0.659406                0.147190   \n",
   2866        "33                      0.112871               -0.034769   \n",
   2867        "34                       0.80198                0.089628   \n",
   2868        "35                      0.231683               -0.018941   \n",
   2869        "36                      0.728713                0.018781   \n",
   2870        "37                     0.0910891                0.024541   \n",
   2871        "38                      0.487129                0.044242   \n",
   2872        "39                      0.164356                0.104273   \n",
   2873        "40                     0.0891089               -0.026247   \n",
   2874        "41                      0.564356                0.032405   \n",
   2875        "42                      0.893069                0.260429   \n",
   2876        "43                      0.592079                0.040389   \n",
   2877        "44                      0.740594                0.168114   \n",
   2878        "45                       0.89505                0.172564   \n",
   2879        "46                      0.465347                0.078630   \n",
   2880        "47                      0.229703                0.053203   \n",
   2881        "48                      0.273267                0.048812   \n",
   2882        "49                     0.0930693                0.005162   \n",
   2883        "50                       0.60198                0.074210   \n",
   2884        "\n",
   2885        "   One-Month Return Percentile HQM Score  \n",
   2886        "0                     0.530693  0.681683  \n",
   2887        "1                     0.827723  0.444059  \n",
   2888        "2                     0.742574   0.70099  \n",
   2889        "3                     0.879208  0.931683  \n",
   2890        "4                    0.0693069  0.448515  \n",
   2891        "5                     0.364356  0.578218  \n",
   2892        "6                     0.746535  0.910396  \n",
   2893        "7                     0.457426  0.540594  \n",
   2894        "8                     0.366337  0.607426  \n",
   2895        "9                     0.150495  0.628713  \n",
   2896        "10                    0.174257  0.422277  \n",
   2897        "11                    0.687129  0.662871  \n",
   2898        "12                   0.0435644  0.171782  \n",
   2899        "13                    0.122772  0.630693  \n",
   2900        "14                    0.483168  0.506436  \n",
   2901        "15                    0.106931   0.25495  \n",
   2902        "16                    0.873267  0.689109  \n",
   2903        "17                    0.459406  0.291584  \n",
   2904        "18                    0.271287  0.225743  \n",
   2905        "19                    0.140594  0.173762  \n",
   2906        "20                    0.948515  0.666832  \n",
   2907        "21                    0.520792  0.591089  \n",
   2908        "22                   0.0594059  0.457426  \n",
   2909        "23                    0.673267  0.776733  \n",
   2910        "24                    0.738614  0.863366  \n",
   2911        "25                    0.576238  0.402475  \n",
   2912        "26                     0.49703  0.314851  \n",
   2913        "27                     0.20396  0.316337  \n",
   2914        "28                   0.0455446  0.271287  \n",
   2915        "29                    0.461386  0.640594  \n",
   2916        "30                    0.433663  0.568812  \n",
   2917        "31                     0.99802  0.981683  \n",
   2918        "32                    0.752475  0.676238  \n",
   2919        "33                   0.0534653  0.400495  \n",
   2920        "34                     0.50099  0.617327  \n",
   2921        "35                   0.0871287  0.381188  \n",
   2922        "36                    0.178218  0.714851  \n",
   2923        "37                    0.207921  0.280693  \n",
   2924        "38                    0.283168   0.59505  \n",
   2925        "39                    0.582178  0.425248  \n",
   2926        "40                   0.0633663  0.237129  \n",
   2927        "41                    0.231683   0.55495  \n",
   2928        "42                    0.952475  0.505446  \n",
   2929        "43                    0.265347  0.598515  \n",
   2930        "44                    0.819802  0.753465  \n",
   2931        "45                    0.829703  0.717822  \n",
   2932        "46                    0.441584  0.558416  \n",
   2933        "47                    0.306931  0.338119  \n",
   2934        "48                    0.289109  0.622277  \n",
   2935        "49                    0.142574  0.129703  \n",
   2936        "50                    0.405941  0.590594  "
   2937       ]
   2938      },
   2939      "execution_count": 15,
   2940      "metadata": {},
   2941      "output_type": "execute_result"
   2942     }
   2943    ],
   2944    "source": [
   2945     "position_size = float(portfolio_size) / len(hqm_dataframe.index)\n",
   2946     "for i in range(0, len(hqm_dataframe['Ticker'])-1):\n",
   2947     "    hqm_dataframe.loc[i, 'Number of Shares to Buy'] = math.floor(position_size / hqm_dataframe['Price'][i])\n",
   2948     "hqm_dataframe"
   2949    ]
   2950   },
   2951   {
   2952    "cell_type": "markdown",
   2953    "metadata": {},
   2954    "source": [
   2955     "## Formatting Our Excel Output\n",
   2956     "\n",
   2957     "We will be using the XlsxWriter library for Python to create nicely-formatted Excel files.\n",
   2958     "\n",
   2959     "XlsxWriter is an excellent package and offers tons of customization. However, the tradeoff for this is that the library can seem very complicated to new users. Accordingly, this section will be fairly long because I want to do a good job of explaining how XlsxWriter works."
   2960    ]
   2961   },
   2962   {
   2963    "cell_type": "code",
   2964    "execution_count": 16,
   2965    "metadata": {},
   2966    "outputs": [],
   2967    "source": [
   2968     "writer = pd.ExcelWriter('momentum_strategy.xlsx', engine='xlsxwriter')\n",
   2969     "hqm_dataframe.to_excel(writer, sheet_name='Momentum Strategy', index = False)"
   2970    ]
   2971   },
   2972   {
   2973    "cell_type": "markdown",
   2974    "metadata": {},
   2975    "source": [
   2976     "## Creating the Formats We'll Need For Our .xlsx File\n",
   2977     "\n",
   2978     "You'll recall from our first project that formats include colors, fonts, and also symbols like % and $. We'll need four main formats for our Excel document:\n",
   2979     "\n",
   2980     "* String format for tickers\n",
   2981     "* \\$XX.XX format for stock prices\n",
   2982     "* \\$XX,XXX format for market capitalization\n",
   2983     "* Integer format for the number of shares to purchase\n",
   2984     "\n",
   2985     "Since we already built our formats in the last section of this course, I've included them below for you. Run this code cell before proceeding."
   2986    ]
   2987   },
   2988   {
   2989    "cell_type": "code",
   2990    "execution_count": 17,
   2991    "metadata": {},
   2992    "outputs": [],
   2993    "source": [
   2994     "background_color = '#0a0a23'\n",
   2995     "font_color = '#ffffff'\n",
   2996     "\n",
   2997     "string_template = writer.book.add_format(\n",
   2998     "        {\n",
   2999     "            'font_color': font_color,\n",
   3000     "            'bg_color': background_color,\n",
   3001     "            'border': 1\n",
   3002     "        }\n",
   3003     "    )\n",
   3004     "\n",
   3005     "dollar_template = writer.book.add_format(\n",
   3006     "        {\n",
   3007     "            'num_format':'$0.00',\n",
   3008     "            'font_color': font_color,\n",
   3009     "            'bg_color': background_color,\n",
   3010     "            'border': 1\n",
   3011     "        }\n",
   3012     "    )\n",
   3013     "\n",
   3014     "integer_template = writer.book.add_format(\n",
   3015     "        {\n",
   3016     "            'num_format':'0',\n",
   3017     "            'font_color': font_color,\n",
   3018     "            'bg_color': background_color,\n",
   3019     "            'border': 1\n",
   3020     "        }\n",
   3021     "    )\n",
   3022     "\n",
   3023     "percent_template = writer.book.add_format(\n",
   3024     "        {\n",
   3025     "            'num_format':'0.0%',\n",
   3026     "            'font_color': font_color,\n",
   3027     "            'bg_color': background_color,\n",
   3028     "            'border': 1\n",
   3029     "        }\n",
   3030     "    )"
   3031    ]
   3032   },
   3033   {
   3034    "cell_type": "code",
   3035    "execution_count": 18,
   3036    "metadata": {},
   3037    "outputs": [],
   3038    "source": [
   3039     "column_formats = { \n",
   3040     "                    'A': ['Ticker', string_template],\n",
   3041     "                    'B': ['Price', dollar_template],\n",
   3042     "                    'C': ['Number of Shares to Buy', integer_template],\n",
   3043     "                    'D': ['One-Year Price Return', percent_template],\n",
   3044     "                    'E': ['One-Year Return Percentile', percent_template],\n",
   3045     "                    'F': ['Six-Month Price Return', percent_template],\n",
   3046     "                    'G': ['Six-Month Return Percentile', percent_template],\n",
   3047     "                    'H': ['Three-Month Price Return', percent_template],\n",
   3048     "                    'I': ['Three-Month Return Percentile', percent_template],\n",
   3049     "                    'J': ['One-Month Price Return', percent_template],\n",
   3050     "                    'K': ['One-Month Return Percentile', percent_template],\n",
   3051     "                    'L': ['HQM Score', integer_template]\n",
   3052     "                    }\n",
   3053     "\n",
   3054     "for column in column_formats.keys():\n",
   3055     "    writer.sheets['Momentum Strategy'].set_column(f'{column}:{column}', 20, column_formats[column][1])\n",
   3056     "    writer.sheets['Momentum Strategy'].write(f'{column}1', column_formats[column][0], string_template)"
   3057    ]
   3058   },
   3059   {
   3060    "cell_type": "markdown",
   3061    "metadata": {},
   3062    "source": [
   3063     "## Saving Our Excel Output\n",
   3064     "\n",
   3065     "As before, saving our Excel output is very easy:"
   3066    ]
   3067   },
   3068   {
   3069    "cell_type": "code",
   3070    "execution_count": 19,
   3071    "metadata": {},
   3072    "outputs": [],
   3073    "source": [
   3074     "writer.save()"
   3075    ]
   3076   }
   3077  ],
   3078  "metadata": {
   3079   "kernelspec": {
   3080    "display_name": "Python 3",
   3081    "language": "python",
   3082    "name": "python3"
   3083   },
   3084   "language_info": {
   3085    "codemirror_mode": {
   3086     "name": "ipython",
   3087     "version": 3
   3088    },
   3089    "file_extension": ".py",
   3090    "mimetype": "text/x-python",
   3091    "name": "python",
   3092    "nbconvert_exporter": "python",
   3093    "pygments_lexer": "ipython3",
   3094    "version": "3.8.2"
   3095   }
   3096  },
   3097  "nbformat": 4,
   3098  "nbformat_minor": 4
   3099 }