python-pour-finance/10-Plateforme-Quantopian/.ipynb_checkpoints/01-Bases-Quantopian-Researc...

702 lines
70 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"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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\nERERh6QwIyIiIiIiDklhRkREREREHJLCjIiIiIiIOCSFGRERERERcUgKMyIiIiIi4pAUZkRERERE\nxCEpzIiIiIiIiENSmBEREREREYekMCMiIiIiIg5JYUZERERERBySwoyIiIiIiDgkhRkREREREXFI\nCjMiIiIiIuKQFGZERERERMQhKcyIiIiIiIhDUpgRERERERGHpDAjIiIiIiIOSWFGREREREQcksKM\niIiIiIg4JIUZERERERFxSAozIiIiIiLikBRmRERERETEISnMiIiIiIiIQ1KYERERERERh6QwIyIi\nIiIiDklhRkREREREHJLCjIiIiIiIOCSFGRERERERcUgKMyIiIiIi4pAUZkRERERExCEpzIiIiIiI\niENSmBEREREREYekMCMiIiIiIg5JYUZERERERBySwoyIiIiIiDgkhRkREREREXFICjMiIiIiIuKQ\nFGZERERERMQhKcyIiIiIiIhDUpgRERERERGH5NLYN3zxxRdJTEzEYDDw5JNPEhcX19hvISIiIiIi\n0rhhZsuWLSQnJ/Pxxx9z5MgRZs6cyccff9yYbyEiIiIiIgI08jSzDRs2MHbsWAA6depEXl4ehYWF\njfkWIiIiIiIiQCOHmaysLIKCgqzPAwMDycrKasy3EBERERERAZq4AIDZbG7K24uIiIiIyGWsUdfM\nhIWF2YzEZGRkEBoaetFrtm3b1phNEAelfiCgfiCV1BcE1A/EQv1ALqZRw8zw4cOZN28eU6ZMYe/e\nvYSHh+Pl5VXj+f3792/MtxcRERERkctIo4aZfv360bNnT2699VacnZ156qmnGvP2IiIiIiIiVgaz\nFraIiIiIiIgDatICACIiIiIiIk1FYUZERERERBySwoyIiIiIiDgkhRkREREREXFICjPSLNLT0wEw\nmUx2bonYm2qOiIjI+QoKCuzdBHFgCjPSpPLz85kzZw633HILaWlpODmpy12OcnNzeeedd0hKSqKo\nqAhQqLlc5eXlcezYMXs3Q+wsLy+Pf//736xZs4YzZ84A+p5wOcrLy2P27Nm8++67lJaW2rs54qD0\nm6U0mU8++YT7778fgClTpuDk5KQfVpehDRs28MADD5CZmcmyZct48cUXATAYDHZumTS38vJypk2b\nxvz58zl16pS9myN2snLlSh588EGKi4vZsGEDr776KqDvCZebRYsWMW3aNHx9fbn33ntxc3Ozd5PE\n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\n/w97e4RCsi9jfgAAAABJRU5ErkJggg==\n",
"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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\n9Kfyer06duxYQNt0ywqz9957z/r5z39uWZZl/fnPf7Y2btx40zrPPfeclZ+fb23YsKFX25nIX7s0\nNTVZCxYssBoaGqyrV69a3/ve96y6ujrr3XfftXbt2hWJkqNOaWmp9cwzz1iWZVlnz561li1b1uXv\nDz74oHXhwgWrra3Neuyxx6yzZ8/63cZkwbTnqVOnujzfcZ2/tnzppZesw4cPW4888kjA23Qn7F09\nnefvuf/++1VWVnbTOr/4xS80ffr0Xm9nIn/tUlFRodTUVDkcDsXHxys9Pb1jHYsBXJJ6nlNKks6d\nO6eRI0cqJSVFMTExmjVrlj755JNbbmO63rbnX/7yF0kcj93xd5zl5uZq9uzZvdqmO2EP/pqaGjmd\nTklSTEyMbDabrl271mWdoUOHBrWdify1S+e/S5LT6VR1dbWk67On/uhHP9KqVav0+eef92/hUeTG\nNmqfU6q7v7W33622MV1v27Oq6vr0DV6vV2vWrNHjjz+ukpKS/i06Svk7zvxlZXfbdCekffxHjx7V\nsWPHFBNzfT4Qy7L02WefdVmnra0tqH0Hu91AFor2bD+ruvvuu+V0OjVr1iz99a9/1fPPP6/jx4+H\np/AB5lZnnj39jbPVngXSnt/85je1bt06LVq0SOfOndPKlSv1hz/8QUOGcG2ozoI5zgLZJqStvGTJ\nEi1ZsqTLsry8PNXU1Gjy5MkdZ6aB/HOTk5OD2m4wCaY9k5OTO87wJcnn8yktLU0TJkzomFDq7rvv\n1qVLl2RZVseLiknaj612VVVVGjNmTMffbmy/5ORkxcbG9riN6YJpz+TkZC1atEiSNH78eI0ePVo+\nn0+332725SJv1Zah3CbsXT0zZ87UyZMnJUkffvih7r333m7XsyyryytVoNuZxl+7TJ8+XR6PRw0N\nDWpsbFR5ebkyMjL05ptv6ujRo5Kks2fPyul0Ghn60vU2LC4ulqSb5pS6/fbb1djYqPPnz+vatWv6\n4x//qG9/+9u33MZ0wbTn8ePHtW/fPklSbW2tLl68qJSUlIg9hmgRyHHWXVb29tgM+5QNbW1t2rZt\nmyorKxUfH69f/vKXSklJUX5+vu69915NmzZNixcvVnNzs+rq6vS1r31NL7zwgu6///5utzOdv/ac\nPn26fv/73+vNN9+UzWbTihUr9N3vflc+n0+bNm3q2MeWLVuMHo74q1/9SqWlpR1zSv39739XYmKi\n5s2bp08//VSvvvqqJGnhwoV66qmnut1m8uTJEXwE0aW37dnY2Kjc3FzV1dXJsiytXbtWmZmZEX4U\n0eFWbblq1SpduHBBX331lcaPH6+nnnpKjzzyiF577TWdPn064GOTuXoAwDB8cxcADEPwA4BhCH4A\nMAzBDwCGIfgBwDAEPwAYhuAHAMMQ/ABgmP8DH/WYevZoWlYAAAAASUVORK5CYII=\n",
"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
}