702 lines
70 KiB
Plaintext
702 lines
70 KiB
Plaintext
|
{
|
|||
|
"cells": [
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"# 01-Les bases de Research avec Quantopian\n",
|
|||
|
"\n",
|
|||
|
"**N'oubliez pas que ce notebook ne fonctionnera que sur Quantopian ! Créez un compte et téléversez (upload) le fichier de ce notebook. Ces commandes et fonctions ne fonctionneront que sur la plateforme de trading Quantopian !**\n",
|
|||
|
"\n",
|
|||
|
"Notez qu'une grande partie du texte écrit dans ce notebook en Markdown provient directement des documents et tutoriels Quantopian, regardez les bien aussi, ils sont bien faits !\n",
|
|||
|
"\n",
|
|||
|
"## Research\n",
|
|||
|
"\n",
|
|||
|
"Le format notebook nous permet de rassembler facilement les informations sur les différents titres au sein de la plateforme Quantopian. Il faut garder à l'esprit que cela est différent de la plateforme de codage de base de Quantopian, qui se concentre sur la mise en œuvre effective et le backtesting des stratégies de trading."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 21,
|
|||
|
"metadata": {
|
|||
|
"collapsed": true
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"import numpy as np\n",
|
|||
|
"import pandas as pd\n",
|
|||
|
"import matplotlib.pyplot as plt\n",
|
|||
|
"# PAS BESOIN D'UTILISER LA COMMANDE MAGIQUE SUR QUANTOPIAN !"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"collapsed": true
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"## Obtenir des informations\n",
|
|||
|
"\n",
|
|||
|
"Passons en revue quelques fonctions clés :\n",
|
|||
|
"\n",
|
|||
|
"* get_pricing()\n",
|
|||
|
"* symbols()\n",
|
|||
|
"* local_csv()\n",
|
|||
|
"* get_backtest()\n",
|
|||
|
"* get_fundamentals()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"## get_pricing()\n",
|
|||
|
"\n",
|
|||
|
"La fonction `get_pricing` permet d'accéder à 12 ans de données sur le prix des actions américaines : les mêmes données que celles utilisées par le backtester Quantopian.\n",
|
|||
|
"\n",
|
|||
|
"`get_pricing` retourne un <b>objet Pandas</b>. Il peut s'agir d'un dataframe ou d'une série, selon les valeurs d'entrée. "
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 17,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"mcdon = get_pricing('MCD',\n",
|
|||
|
" start_date='2017-01-01', \n",
|
|||
|
" end_date = '2017-02-01', \n",
|
|||
|
" frequency='minute')"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 18,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<div>\n",
|
|||
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|||
|
" <thead>\n",
|
|||
|
" <tr style=\"text-align: right;\">\n",
|
|||
|
" <th></th>\n",
|
|||
|
" <th>open_price</th>\n",
|
|||
|
" <th>high</th>\n",
|
|||
|
" <th>low</th>\n",
|
|||
|
" <th>close_price</th>\n",
|
|||
|
" <th>volume</th>\n",
|
|||
|
" <th>price</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>2017-01-03 14:31:00+00:00</th>\n",
|
|||
|
" <td>121.86</td>\n",
|
|||
|
" <td>121.86</td>\n",
|
|||
|
" <td>121.57</td>\n",
|
|||
|
" <td>121.63</td>\n",
|
|||
|
" <td>123665.0</td>\n",
|
|||
|
" <td>121.63</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>2017-01-03 14:32:00+00:00</th>\n",
|
|||
|
" <td>121.73</td>\n",
|
|||
|
" <td>121.92</td>\n",
|
|||
|
" <td>121.41</td>\n",
|
|||
|
" <td>121.45</td>\n",
|
|||
|
" <td>13536.0</td>\n",
|
|||
|
" <td>121.45</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>2017-01-03 14:33:00+00:00</th>\n",
|
|||
|
" <td>121.45</td>\n",
|
|||
|
" <td>121.79</td>\n",
|
|||
|
" <td>121.45</td>\n",
|
|||
|
" <td>121.52</td>\n",
|
|||
|
" <td>17562.0</td>\n",
|
|||
|
" <td>121.52</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>2017-01-03 14:34:00+00:00</th>\n",
|
|||
|
" <td>121.45</td>\n",
|
|||
|
" <td>121.80</td>\n",
|
|||
|
" <td>121.44</td>\n",
|
|||
|
" <td>121.75</td>\n",
|
|||
|
" <td>12072.0</td>\n",
|
|||
|
" <td>121.75</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>2017-01-03 14:35:00+00:00</th>\n",
|
|||
|
" <td>121.74</td>\n",
|
|||
|
" <td>122.00</td>\n",
|
|||
|
" <td>121.66</td>\n",
|
|||
|
" <td>121.99</td>\n",
|
|||
|
" <td>8100.0</td>\n",
|
|||
|
" <td>121.99</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" open_price high low close_price volume \\\n",
|
|||
|
"2017-01-03 14:31:00+00:00 121.86 121.86 121.57 121.63 123665.0 \n",
|
|||
|
"2017-01-03 14:32:00+00:00 121.73 121.92 121.41 121.45 13536.0 \n",
|
|||
|
"2017-01-03 14:33:00+00:00 121.45 121.79 121.45 121.52 17562.0 \n",
|
|||
|
"2017-01-03 14:34:00+00:00 121.45 121.80 121.44 121.75 12072.0 \n",
|
|||
|
"2017-01-03 14:35:00+00:00 121.74 122.00 121.66 121.99 8100.0 \n",
|
|||
|
"\n",
|
|||
|
" price \n",
|
|||
|
"2017-01-03 14:31:00+00:00 121.63 \n",
|
|||
|
"2017-01-03 14:32:00+00:00 121.45 \n",
|
|||
|
"2017-01-03 14:33:00+00:00 121.52 \n",
|
|||
|
"2017-01-03 14:34:00+00:00 121.75 \n",
|
|||
|
"2017-01-03 14:35:00+00:00 121.99 "
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 18,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"mcdon.head()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 19,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"<class 'pandas.core.frame.DataFrame'>\n",
|
|||
|
"DatetimeIndex: 8190 entries, 2017-01-03 14:31:00+00:00 to 2017-02-01 21:00:00+00:00\n",
|
|||
|
"Data columns (total 6 columns):\n",
|
|||
|
"open_price 8188 non-null float64\n",
|
|||
|
"high 8188 non-null float64\n",
|
|||
|
"low 8188 non-null float64\n",
|
|||
|
"close_price 8188 non-null float64\n",
|
|||
|
"volume 8190 non-null float64\n",
|
|||
|
"price 8190 non-null float64\n",
|
|||
|
"dtypes: float64(6)\n",
|
|||
|
"memory usage: 447.9 KB\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"mcdon.info()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 33,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"# On ne peut revenir que 12 ans en arrière\n",
|
|||
|
"# ce qui est vraiment tout ce dont vous avez besoin pour l'algo de trading', \n",
|
|||
|
"# remonter plus loin est probablement plus du bruit que du signal.\n",
|
|||
|
"\n",
|
|||
|
"mcdon = get_pricing('MCD',\n",
|
|||
|
" start_date='2005-01-01', \n",
|
|||
|
" end_date = '2017-01-01', \n",
|
|||
|
" frequency='daily')"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 34,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"<matplotlib.axes._subplots.AxesSubplot at 0x7f98b62cdc90>"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 34,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAzMAAAHBCAYAAABdbuWNAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd8VFXaB/Df9Mmk9xBCaKFDQggdQWqwV4oFXFdXd0Vl\n12XtrGVdXRF5XXaV1bWsBexYAAsKgiBICxB6CYSQhPReJpn6/jEzd+ZmJslkMpMy+X3/4d5z25lw\nPzBPnnOeIzGbzWYQERERERF1M9LO7gAREREREZEnGMwQEREREVG3xGCGiIiIiIi6JQYzRERERETU\nLTGYISIiIiKibonBDBERERERdUtuBTOnTp3CnDlzsG7dOlH7zp07MXToUGF/w4YNmDdvHhYuXIjP\nP//cuz0lIiIiIiJyIG/tBK1WixUrVmDKlCmidp1Oh//+97+IiYkRzluzZg3Wr18PuVyOefPmIT09\nHSEhIb7pORERERER9WitZmZUKhXeeOMNREVFidpff/11LF68GAqFAgCQmZmJ5ORkBAYGQqVSYcyY\nMTh48KBvek1ERERERD1eq8GMVCqFUqkUtWVnZyMrKwvp6elCW2lpKSIiIoT9iIgIlJSUeLGrRERE\nREREdh4VAFixYgUee+wxAIDZbHZ5TnPtRERERERE3tDqnJmmioqKkJ2djT//+c8wm80oKSnB4sWL\nsXTpUmzbtk10Xmpqaov3ysjIaHuPiYiIiIioR0lLS3PZ3uZgJjY2Fps3bxb2Z86ciQ8++ACNjY1Y\nvnw5amtrIZFIcOjQITz55JMed4x6joyMDL4HxPeABHwXCOB7QBZ8DwhoOQHSajCTmZmJ5cuXo7y8\nHDKZDB9//DHWrl2L0NBQAIBEIgFgKRSwbNky3HXXXZBKpXjwwQcRFBTkpY9AREREREQk1mowk5KS\ngo0bNzZ7fOvWrcJ2enq6qCgAERERERGRr3hUAICIiIiIiKizMZghIiIiIqJuicEMERERERF1Swxm\niIiIiIioW2IwQ0RERERE3RKDGSIiIiIi6pYYzBARERERUbfEYIaIiIiIiLolBjNERERERNQtMZgh\nIiIiIqJuicEMERERERF1SwxmiIiIiIioW2IwQ0RERERE3RKDGSIiIiIi6pYYzBARERERUbfEYIaI\niIiIiLolBjNERERERNQtMZghIiIiIqJuicEMERERERF1SwxmiIiIiIioW2IwQ0RERERE3RKDGSIi\n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\n7es9GmZGREREREQdr15
|
|||
|
"text/plain": [
|
|||
|
"<matplotlib.figure.Figure at 0x7f98c634d790>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"mcdon['close_price'].plot()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 35,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"<matplotlib.axes._subplots.AxesSubplot at 0x7f98c85a6a10>"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 35,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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\nj1dubq5ycnJks9m0fv1
|
|||
|
"text/plain": [
|
|||
|
"<matplotlib.figure.Figure at 0x7f98b6d440d0>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"mcdon['close_price'].pct_change(1).hist(bins=100,figsize=(6,4))"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"## symbols()\n",
|
|||
|
"\n",
|
|||
|
"By default `symbols` returns the security object for a ticker symbol. Specify a ticker symbol, or list of symbols, as a string and get a list of security objects back. \n",
|
|||
|
"\n",
|
|||
|
"- Use `symbol_reference_date` to identify which date you want the symbol back for a particular ticker symbol. \n",
|
|||
|
"- Specify how you would like missing results to be handled with `handle_missing`\n",
|
|||
|
"\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 39,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"mcdon_eq_info = symbols('MCD')"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 41,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"<type 'zipline.assets._assets.Equity'>"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 41,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"type(mcdon_eq_info)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 48,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"end_date\n",
|
|||
|
"2017-07-19 00:00:00+00:00\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"exchange\n",
|
|||
|
"NYSE\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"auto_close_date\n",
|
|||
|
"2017-07-24 00:00:00+00:00\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"symbol\n",
|
|||
|
"MCD\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"first_traded\n",
|
|||
|
"None\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"asset_name\n",
|
|||
|
"MCDONALDS CORP\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"exchange_full\n",
|
|||
|
"NEW YORK STOCK EXCHANGE\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"sid\n",
|
|||
|
"4707\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"start_date\n",
|
|||
|
"2002-01-01 00:00:00+00:00\n",
|
|||
|
"\n",
|
|||
|
"\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"for key in mcdon_eq_info.to_dict():\n",
|
|||
|
" print(key)\n",
|
|||
|
" print(mcdon_eq_info.to_dict()[key])\n",
|
|||
|
" print('\\n')"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"## get_fundamentals()\n",
|
|||
|
"\n",
|
|||
|
"La fonction `get_fundamentals` fournit un accès programmatique à la base de données fondamentale Quantopian. Basé sur les données fournies par Morningstar, `get_fundamentals` fournit plus de 600 mesures d'entreprises datant de 2002 (pour correspondre aux données de tarification de Quantopian). \n",
|
|||
|
"\n",
|
|||
|
"Les données utilisées par cette fonction de recherche sont les mêmes que celles utilisées par la fonction `get_fundamentals` utilisée dans l'IDE Quantopian. C'est décrit dans les documents d'aide Quantopian: http://www.quantopian.com/help/fundamentals.\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 49,
|
|||
|
"metadata": {
|
|||
|
"collapsed": true
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"# Il faut faire ça d'abord dans le notebook:\n",
|
|||
|
"fundamentals = init_fundamentals()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"The get_fundamentals() function takes in a SQLAlchemy query which can be quite complicated and strange looking at first. Basically it allows you to filter by a variety of fundamentals (things like Market Cap, P/E Ratio, or even city of HQ). Check out the link above for all the things you can filter by!\n",
|
|||
|
"\n",
|
|||
|
"Let's walk through a few query examples.\n",
|
|||
|
"\n",
|
|||
|
"First call fundamentals and use tab to check out the various options:"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 55,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"ename": "SyntaxError",
|
|||
|
"evalue": "invalid syntax (<ipython-input-55-bbf6938c8013>, line 1)",
|
|||
|
"output_type": "error",
|
|||
|
"traceback": [
|
|||
|
"\u001b[0;36m File \u001b[0;32m\"<ipython-input-55-bbf6938c8013>\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m fundamentals. # call tab here as in the video!\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"fundamentals. # call tab here as in the video!"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 57,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"# Market Cap\n",
|
|||
|
"my_query = query(fundamentals.valuation.market_cap)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 59,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"my_funds = get_fundamentals(my_query,'2017-01-01')"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 62,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"<class 'pandas.core.frame.DataFrame'>\n",
|
|||
|
"Index: 1 entries, market_cap to market_cap\n",
|
|||
|
"Columns: 5551 entries, Equity(21 [AAME]) to Equity(50554 [HEBT])\n",
|
|||
|
"dtypes: float64(5551)\n",
|
|||
|
"memory usage: 43.4+ KB\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"my_funds.info()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 64,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<div>\n",
|
|||
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|||
|
" <thead>\n",
|
|||
|
" <tr style=\"text-align: right;\">\n",
|
|||
|
" <th></th>\n",
|
|||
|
" <th>Equity(21 [AAME])</th>\n",
|
|||
|
" <th>Equity(24 [AAPL])</th>\n",
|
|||
|
" <th>Equity(25 [ARNC_PR])</th>\n",
|
|||
|
" <th>Equity(31 [ABAX])</th>\n",
|
|||
|
" <th>Equity(39 [DDC])</th>\n",
|
|||
|
" <th>Equity(41 [ARCB])</th>\n",
|
|||
|
" <th>Equity(52 [ABM])</th>\n",
|
|||
|
" <th>Equity(53 [ABMD])</th>\n",
|
|||
|
" <th>Equity(62 [ABT])</th>\n",
|
|||
|
" <th>Equity(64 [ABX])</th>\n",
|
|||
|
" <th>...</th>\n",
|
|||
|
" <th>Equity(50533 [CNDT])</th>\n",
|
|||
|
" <th>Equity(50534 [HGV])</th>\n",
|
|||
|
" <th>Equity(50535 [PK])</th>\n",
|
|||
|
" <th>Equity(50537 [WRD])</th>\n",
|
|||
|
" <th>Equity(50539 [TIG])</th>\n",
|
|||
|
" <th>Equity(50540 [TRVG])</th>\n",
|
|||
|
" <th>Equity(50541 [KEY_PRI])</th>\n",
|
|||
|
" <th>Equity(50544 [KEG])</th>\n",
|
|||
|
" <th>Equity(50547 [YTRA])</th>\n",
|
|||
|
" <th>Equity(50554 [HEBT])</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>market_cap</th>\n",
|
|||
|
" <td>80256300.0</td>\n",
|
|||
|
" <td>6.224410e+11</td>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" <td>1.190750e+09</td>\n",
|
|||
|
" <td>808964000.0</td>\n",
|
|||
|
" <td>722555000.0</td>\n",
|
|||
|
" <td>2.265560e+09</td>\n",
|
|||
|
" <td>4.927210e+09</td>\n",
|
|||
|
" <td>5.640420e+10</td>\n",
|
|||
|
" <td>1.910140e+10</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>3.029760e+09</td>\n",
|
|||
|
" <td>2.559150e+09</td>\n",
|
|||
|
" <td>5.890500e+09</td>\n",
|
|||
|
" <td>1.734880e+09</td>\n",
|
|||
|
" <td>2.265930e+09</td>\n",
|
|||
|
" <td>2.741480e+09</td>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" <td>26639500.0</td>\n",
|
|||
|
" <td>329764000.0</td>\n",
|
|||
|
" <td>91800000.0</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"<p>1 rows × 5551 columns</p>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" Equity(21 [AAME]) Equity(24 [AAPL]) Equity(25 [ARNC_PR]) \\\n",
|
|||
|
"market_cap 80256300.0 6.224410e+11 NaN \n",
|
|||
|
"\n",
|
|||
|
" Equity(31 [ABAX]) Equity(39 [DDC]) Equity(41 [ARCB]) \\\n",
|
|||
|
"market_cap 1.190750e+09 808964000.0 722555000.0 \n",
|
|||
|
"\n",
|
|||
|
" Equity(52 [ABM]) Equity(53 [ABMD]) Equity(62 [ABT]) \\\n",
|
|||
|
"market_cap 2.265560e+09 4.927210e+09 5.640420e+10 \n",
|
|||
|
"\n",
|
|||
|
" Equity(64 [ABX]) ... Equity(50533 [CNDT]) \\\n",
|
|||
|
"market_cap 1.910140e+10 ... 3.029760e+09 \n",
|
|||
|
"\n",
|
|||
|
" Equity(50534 [HGV]) Equity(50535 [PK]) Equity(50537 [WRD]) \\\n",
|
|||
|
"market_cap 2.559150e+09 5.890500e+09 1.734880e+09 \n",
|
|||
|
"\n",
|
|||
|
" Equity(50539 [TIG]) Equity(50540 [TRVG]) \\\n",
|
|||
|
"market_cap 2.265930e+09 2.741480e+09 \n",
|
|||
|
"\n",
|
|||
|
" Equity(50541 [KEY_PRI]) Equity(50544 [KEG]) \\\n",
|
|||
|
"market_cap NaN 26639500.0 \n",
|
|||
|
"\n",
|
|||
|
" Equity(50547 [YTRA]) Equity(50554 [HEBT]) \n",
|
|||
|
"market_cap 329764000.0 91800000.0 \n",
|
|||
|
"\n",
|
|||
|
"[1 rows x 5551 columns]"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 64,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"# Basically just returns the market cap of everything\n",
|
|||
|
"# for 2017-01-01\n",
|
|||
|
"my_funds.head()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 74,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"# What you usualy do is filter by other qualities after the query!\n",
|
|||
|
"\n",
|
|||
|
"# Only get companies worth 500 billion or more (that's a lot of dough!)\n",
|
|||
|
"big_companies = (query(fundamentals.valuation.market_cap).\n",
|
|||
|
" filter(fundamentals.valuation.market_cap > 500000000000) )"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 75,
|
|||
|
"metadata": {
|
|||
|
"collapsed": true
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"my_big_funds = get_fundamentals(big_companies,'2017-07-19')"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 76,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<div>\n",
|
|||
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|||
|
" <thead>\n",
|
|||
|
" <tr style=\"text-align: right;\">\n",
|
|||
|
" <th></th>\n",
|
|||
|
" <th>Equity(24 [AAPL])</th>\n",
|
|||
|
" <th>Equity(5061 [MSFT])</th>\n",
|
|||
|
" <th>Equity(26578 [GOOG_L])</th>\n",
|
|||
|
" <th>Equity(46631 [GOOG])</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>market_cap</th>\n",
|
|||
|
" <td>7.824930e+11</td>\n",
|
|||
|
" <td>5.659140e+11</td>\n",
|
|||
|
" <td>6.752440e+11</td>\n",
|
|||
|
" <td>6.752440e+11</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" Equity(24 [AAPL]) Equity(5061 [MSFT]) Equity(26578 [GOOG_L]) \\\n",
|
|||
|
"market_cap 7.824930e+11 5.659140e+11 6.752440e+11 \n",
|
|||
|
"\n",
|
|||
|
" Equity(46631 [GOOG]) \n",
|
|||
|
"market_cap 6.752440e+11 "
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 76,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"# On \n",
|
|||
|
"my_big_funds"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 70,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"782000000000.0"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 70,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"7.82 * 10**11"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 50,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"ename": "TypeError",
|
|||
|
"evalue": "get_fundamentals() takes at least 2 arguments (0 given)",
|
|||
|
"output_type": "error",
|
|||
|
"traceback": [
|
|||
|
"\u001b[0;31m\u001b[0m",
|
|||
|
"\u001b[0;31mTypeError\u001b[0mTraceback (most recent call last)",
|
|||
|
"\u001b[0;32m<ipython-input-50-68e9d331adfd>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mget_fundamentals\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
|
|||
|
"\u001b[0;31mTypeError\u001b[0m: get_fundamentals() takes at least 2 arguments (0 given)"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"get_fundamentals()"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"metadata": {
|
|||
|
"kernelspec": {
|
|||
|
"display_name": "Python 3",
|
|||
|
"language": "python",
|
|||
|
"name": "python3"
|
|||
|
},
|
|||
|
"language_info": {
|
|||
|
"codemirror_mode": {
|
|||
|
"name": "ipython",
|
|||
|
"version": 3
|
|||
|
},
|
|||
|
"file_extension": ".py",
|
|||
|
"mimetype": "text/x-python",
|
|||
|
"name": "python",
|
|||
|
"nbconvert_exporter": "python",
|
|||
|
"pygments_lexer": "ipython3",
|
|||
|
"version": "3.7.5"
|
|||
|
}
|
|||
|
},
|
|||
|
"nbformat": 4,
|
|||
|
"nbformat_minor": 2
|
|||
|
}
|