2440 lines
79 KiB
Plaintext
2440 lines
79 KiB
Plaintext
|
{
|
|||
|
"cells": [
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"# Pipeline\n",
|
|||
|
"\n",
|
|||
|
"Ce notebook est tiré du Guide Officiel de Quantopian sur les pipelines. N'oubliez pas de consulter leur documentation pour obtenir de nombreuses autres ressources intéressantes !\n",
|
|||
|
"\n",
|
|||
|
"De nombreux algorithmes de Trading ont la structure suivante :\n",
|
|||
|
"\n",
|
|||
|
"1. Pour chaque actif d'un ensemble connu (important), calculer N valeurs scalaires pour l'actif sur la base d'une fenêtre de données.\n",
|
|||
|
"2. Sélectionnez un ensemble d'actifs négociables plus petit sur la base des valeurs calculées en (1).\n",
|
|||
|
"3. Calculer les pondérations de portefeuille souhaitées sur l'ensemble des actifs sélectionnés en (2).\n",
|
|||
|
"4. Passer des ordres pour déplacer les allocations de portefeuille actuelles de l'algorithme vers les pondérations souhaitées calculées en (3).\n",
|
|||
|
"\n",
|
|||
|
"Il y a plusieurs défis techniques à relever pour réaliser cette opération de manière robuste. Il s'agit notamment de :\n",
|
|||
|
"\n",
|
|||
|
"* Interroger efficacement de grands ensembles d'actifs\n",
|
|||
|
"* effectuer des calculs sur de grands ensembles d'actifs\n",
|
|||
|
"* traitement des ajustements (fractionnements et dividendes)\n",
|
|||
|
"* les radiations d'actifs\n",
|
|||
|
"\n",
|
|||
|
"Le pipeline existe pour résoudre ces défis en fournissant une API uniforme pour exprimer les calculs sur une collection diverse d'ensembles de données."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"## Facteurs\n",
|
|||
|
"Un facteur est une fonction d'un actif et d'un moment dans le temps à une valeur numérique.\n",
|
|||
|
"\n",
|
|||
|
"Un exemple simple de facteur est le prix le plus récent d'un titre. Pour un titre et un moment précis, le prix le plus récent est un nombre. Un autre exemple est le volume moyen des transactions sur 10 jours d'un titre. Les facteurs sont le plus souvent utilisés pour attribuer des valeurs aux titres, qui peuvent ensuite être utilisées de plusieurs façons. Un facteur peut être utilisé dans chacune des procédures suivantes :\n",
|
|||
|
"* calcul des pondérations cibles\n",
|
|||
|
"* générer un signal alpha\n",
|
|||
|
"* construire d'autres facteurs plus complexes\n",
|
|||
|
"* construction de filtres"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"## Filtres\n",
|
|||
|
"Un filtre est une fonction allant d'un actif et d'un moment dans le temps à un booléen.\n",
|
|||
|
"Un exemple de filtre est une fonction indiquant si le prix d'un titre est inférieur à 10 $. En fonction d'un titre et d'un moment dans le temps, cela permet d'évaluer si le titre est vrai ou faux. Les filtres sont le plus souvent utilisés pour décrire des ensembles d'actifs à inclure ou à exclure dans un but particulier."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"## Classificateurs\n",
|
|||
|
"Un classificateur est une fonction d'un actif et d'un moment dans le temps ayant une sortie catégorielle.\n",
|
|||
|
"Plus précisément, un classificateur produit une chaîne ou un int qui ne représente pas une valeur numérique (par exemple, un label entier tel qu'un code de secteur). Les classificateurs sont le plus souvent utilisés pour regrouper des actifs pour des transformations complexes sur des sorties de facteurs. Un exemple de classificateur est la bourse sur laquelle un actif est actuellement négocié."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 49,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"from quantopian.pipeline import Pipeline"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 50,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"def make_pipeline():\n",
|
|||
|
" return Pipeline()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 51,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"pipe = make_pipeline()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 52,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"from quantopian.research import run_pipeline"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 53,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"application/vnd.jupyter.widget-view+json": {
|
|||
|
"model_id": "",
|
|||
|
"version_major": 2,
|
|||
|
"version_minor": 0
|
|||
|
},
|
|||
|
"text/plain": []
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<b>Pipeline Execution Time:</b> 0.02 Seconds"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
"<IPython.core.display.HTML object>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"result = run_pipeline(pipe,'2017-01-01','2017-01-01')"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 54,
|
|||
|
"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></th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th rowspan=\"10\" valign=\"top\">2017-01-03 00:00:00+00:00</th>\n",
|
|||
|
" <th>Equity(2 [ARNC])</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(21 [AAME])</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(24 [AAPL])</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(25 [ARNC_PR])</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(31 [ABAX])</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(39 [DDC])</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(41 [ARCB])</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(52 [ABM])</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(53 [ABMD])</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(62 [ABT])</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
"Empty DataFrame\n",
|
|||
|
"Columns: []\n",
|
|||
|
"Index: [(2017-01-03 00:00:00+00:00, Equity(2 [ARNC])), (2017-01-03 00:00:00+00:00, Equity(21 [AAME])), (2017-01-03 00:00:00+00:00, Equity(24 [AAPL])), (2017-01-03 00:00:00+00:00, Equity(25 [ARNC_PR])), (2017-01-03 00:00:00+00:00, Equity(31 [ABAX])), (2017-01-03 00:00:00+00:00, Equity(39 [DDC])), (2017-01-03 00:00:00+00:00, Equity(41 [ARCB])), (2017-01-03 00:00:00+00:00, Equity(52 [ABM])), (2017-01-03 00:00:00+00:00, Equity(53 [ABMD])), (2017-01-03 00:00:00+00:00, Equity(62 [ABT]))]"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 54,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"result.head(10)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 55,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"<class 'pandas.core.frame.DataFrame'>\n",
|
|||
|
"MultiIndex: 8356 entries, (2017-01-03 00:00:00+00:00, Equity(2 [ARNC])) to (2017-01-03 00:00:00+00:00, Equity(50569 [OUSM]))\n",
|
|||
|
"Empty DataFrame"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"result.info()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"# Data"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 56,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"from quantopian.pipeline.data.builtin import USEquityPricing"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"## Facteurs\n",
|
|||
|
"\n",
|
|||
|
"N'oubliez pas que les facteurs prennent en compte un actif et un horodatage et rendent une certaine valeur numérique."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 57,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"from quantopian.pipeline.factors import BollingerBands,SimpleMovingAverage,EWMA"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 58,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"SimpleMovingAverage([EquityPricing<US>.close], 30)"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 58,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"SimpleMovingAverage(inputs=[USEquityPricing.close],window_length=30)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 59,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"def make_pipeline():\n",
|
|||
|
" \n",
|
|||
|
" mean_close_30 = SimpleMovingAverage(inputs=[USEquityPricing.close],window_length=30)\n",
|
|||
|
" \n",
|
|||
|
" return Pipeline(columns={\n",
|
|||
|
" '30 Day Mean Close':mean_close_30\n",
|
|||
|
" })"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 60,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"application/vnd.jupyter.widget-view+json": {
|
|||
|
"model_id": "",
|
|||
|
"version_major": 2,
|
|||
|
"version_minor": 0
|
|||
|
},
|
|||
|
"text/plain": []
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<b>Pipeline Execution Time:</b> 0.38 Seconds"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
"<IPython.core.display.HTML object>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"results = run_pipeline(make_pipeline(),'2017-01-01','2017-01-01')"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 61,
|
|||
|
"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></th>\n",
|
|||
|
" <th>30 Day Mean Close</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th rowspan=\"20\" valign=\"top\">2017-01-03 00:00:00+00:00</th>\n",
|
|||
|
" <th>Equity(2 [ARNC])</th>\n",
|
|||
|
" <td>20.110500</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(21 [AAME])</th>\n",
|
|||
|
" <td>3.899241</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(24 [AAPL])</th>\n",
|
|||
|
" <td>113.368433</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(25 [ARNC_PR])</th>\n",
|
|||
|
" <td>86.796111</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(31 [ABAX])</th>\n",
|
|||
|
" <td>52.498394</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(39 [DDC])</th>\n",
|
|||
|
" <td>9.523000</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(41 [ARCB])</th>\n",
|
|||
|
" <td>29.969167</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(52 [ABM])</th>\n",
|
|||
|
" <td>42.138239</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(53 [ABMD])</th>\n",
|
|||
|
" <td>114.030167</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(62 [ABT])</th>\n",
|
|||
|
" <td>38.664333</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(64 [GOLD])</th>\n",
|
|||
|
" <td>15.117736</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(66 [AB])</th>\n",
|
|||
|
" <td>23.119167</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(67 [ADSK])</th>\n",
|
|||
|
" <td>75.960667</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(69 [ACAT])</th>\n",
|
|||
|
" <td>15.839500</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(70 [VBF])</th>\n",
|
|||
|
" <td>18.208480</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(76 [TAP])</th>\n",
|
|||
|
" <td>97.727924</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(84 [ACET])</th>\n",
|
|||
|
" <td>20.722753</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(100 [IEP])</th>\n",
|
|||
|
" <td>59.281167</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(106 [ACU])</th>\n",
|
|||
|
" <td>22.628433</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(110 [RAMP])</th>\n",
|
|||
|
" <td>26.800333</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" 30 Day Mean Close\n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(2 [ARNC]) 20.110500\n",
|
|||
|
" Equity(21 [AAME]) 3.899241\n",
|
|||
|
" Equity(24 [AAPL]) 113.368433\n",
|
|||
|
" Equity(25 [ARNC_PR]) 86.796111\n",
|
|||
|
" Equity(31 [ABAX]) 52.498394\n",
|
|||
|
" Equity(39 [DDC]) 9.523000\n",
|
|||
|
" Equity(41 [ARCB]) 29.969167\n",
|
|||
|
" Equity(52 [ABM]) 42.138239\n",
|
|||
|
" Equity(53 [ABMD]) 114.030167\n",
|
|||
|
" Equity(62 [ABT]) 38.664333\n",
|
|||
|
" Equity(64 [GOLD]) 15.117736\n",
|
|||
|
" Equity(66 [AB]) 23.119167\n",
|
|||
|
" Equity(67 [ADSK]) 75.960667\n",
|
|||
|
" Equity(69 [ACAT]) 15.839500\n",
|
|||
|
" Equity(70 [VBF]) 18.208480\n",
|
|||
|
" Equity(76 [TAP]) 97.727924\n",
|
|||
|
" Equity(84 [ACET]) 20.722753\n",
|
|||
|
" Equity(100 [IEP]) 59.281167\n",
|
|||
|
" Equity(106 [ACU]) 22.628433\n",
|
|||
|
" Equity(110 [RAMP]) 26.800333"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 61,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"results.head(20)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 62,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"def make_pipeline():\n",
|
|||
|
" \n",
|
|||
|
" mean_close_30 = SimpleMovingAverage(inputs=[USEquityPricing.close],window_length=30)\n",
|
|||
|
" latest_close = USEquityPricing.close.latest\n",
|
|||
|
" \n",
|
|||
|
" return Pipeline(columns={\n",
|
|||
|
" '30 Day Mean Close':mean_close_30,\n",
|
|||
|
" 'Latest Close':latest_close\n",
|
|||
|
" })"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 63,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"application/vnd.jupyter.widget-view+json": {
|
|||
|
"model_id": "",
|
|||
|
"version_major": 2,
|
|||
|
"version_minor": 0
|
|||
|
},
|
|||
|
"text/plain": []
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<b>Pipeline Execution Time:</b> 0.41 Seconds"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
"<IPython.core.display.HTML object>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"results = run_pipeline(make_pipeline(),'2017-01-01','2017-01-01')"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"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></th>\n",
|
|||
|
" <th>30 Day Mean Close</th>\n",
|
|||
|
" <th>Latest Close</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th rowspan=\"10\" valign=\"top\">2017-01-03 00:00:00+00:00</th>\n",
|
|||
|
" <th>Equity(2 [ARNC])</th>\n",
|
|||
|
" <td>20.110500</td>\n",
|
|||
|
" <td>18.55</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(21 [AAME])</th>\n",
|
|||
|
" <td>3.899241</td>\n",
|
|||
|
" <td>4.10</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(24 [AAPL])</th>\n",
|
|||
|
" <td>113.368433</td>\n",
|
|||
|
" <td>115.84</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(25 [ARNC_PR])</th>\n",
|
|||
|
" <td>86.796111</td>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(31 [ABAX])</th>\n",
|
|||
|
" <td>52.498394</td>\n",
|
|||
|
" <td>52.74</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(39 [DDC])</th>\n",
|
|||
|
" <td>9.523000</td>\n",
|
|||
|
" <td>9.69</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(41 [ARCB])</th>\n",
|
|||
|
" <td>29.969167</td>\n",
|
|||
|
" <td>27.75</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(52 [ABM])</th>\n",
|
|||
|
" <td>42.138239</td>\n",
|
|||
|
" <td>40.68</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(53 [ABMD])</th>\n",
|
|||
|
" <td>114.030167</td>\n",
|
|||
|
" <td>112.70</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(62 [ABT])</th>\n",
|
|||
|
" <td>38.664333</td>\n",
|
|||
|
" <td>38.42</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" 30 Day Mean Close \\\n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(2 [ARNC]) 20.110500 \n",
|
|||
|
" Equity(21 [AAME]) 3.899241 \n",
|
|||
|
" Equity(24 [AAPL]) 113.368433 \n",
|
|||
|
" Equity(25 [ARNC_PR]) 86.796111 \n",
|
|||
|
" Equity(31 [ABAX]) 52.498394 \n",
|
|||
|
" Equity(39 [DDC]) 9.523000 \n",
|
|||
|
" Equity(41 [ARCB]) 29.969167 \n",
|
|||
|
" Equity(52 [ABM]) 42.138239 \n",
|
|||
|
" Equity(53 [ABMD]) 114.030167 \n",
|
|||
|
" Equity(62 [ABT]) 38.664333 \n",
|
|||
|
"\n",
|
|||
|
" Latest Close \n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(2 [ARNC]) 18.55 \n",
|
|||
|
" Equity(21 [AAME]) 4.10 \n",
|
|||
|
" Equity(24 [AAPL]) 115.84 \n",
|
|||
|
" Equity(25 [ARNC_PR]) NaN \n",
|
|||
|
" Equity(31 [ABAX]) 52.74 \n",
|
|||
|
" Equity(39 [DDC]) 9.69 \n",
|
|||
|
" Equity(41 [ARCB]) 27.75 \n",
|
|||
|
" Equity(52 [ABM]) 40.68 \n",
|
|||
|
" Equity(53 [ABMD]) 112.70 \n",
|
|||
|
" Equity(62 [ABT]) 38.42 "
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 64,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"results.head(10)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"## Facteurs Combinés"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 65,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"def make_pipeline():\n",
|
|||
|
" \n",
|
|||
|
" mean_close_10 = SimpleMovingAverage(inputs=[USEquityPricing.close],window_length=10)\n",
|
|||
|
" mean_close_30 = SimpleMovingAverage(inputs=[USEquityPricing.close],window_length=30)\n",
|
|||
|
" latest_close = USEquityPricing.close.latest\n",
|
|||
|
" \n",
|
|||
|
" percent_difference = (mean_close_10-mean_close_30) / mean_close_30\n",
|
|||
|
" \n",
|
|||
|
" return Pipeline(columns={\n",
|
|||
|
" 'Percent Difference':percent_difference,\n",
|
|||
|
" '30 Day Mean Close':mean_close_30,\n",
|
|||
|
" 'Latest Close':latest_close\n",
|
|||
|
" })"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 66,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"application/vnd.jupyter.widget-view+json": {
|
|||
|
"model_id": "",
|
|||
|
"version_major": 2,
|
|||
|
"version_minor": 0
|
|||
|
},
|
|||
|
"text/plain": []
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<b>Pipeline Execution Time:</b> 0.41 Seconds"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
"<IPython.core.display.HTML object>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"results = run_pipeline(make_pipeline(),'2017-01-01','2017-01-01')"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 67,
|
|||
|
"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></th>\n",
|
|||
|
" <th>30 Day Mean Close</th>\n",
|
|||
|
" <th>Latest Close</th>\n",
|
|||
|
" <th>Percent Difference</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th rowspan=\"5\" valign=\"top\">2017-01-03 00:00:00+00:00</th>\n",
|
|||
|
" <th>Equity(2 [ARNC])</th>\n",
|
|||
|
" <td>20.110500</td>\n",
|
|||
|
" <td>18.55</td>\n",
|
|||
|
" <td>-0.022749</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(21 [AAME])</th>\n",
|
|||
|
" <td>3.899241</td>\n",
|
|||
|
" <td>4.10</td>\n",
|
|||
|
" <td>-0.005499</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(24 [AAPL])</th>\n",
|
|||
|
" <td>113.368433</td>\n",
|
|||
|
" <td>115.84</td>\n",
|
|||
|
" <td>0.028481</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(25 [ARNC_PR])</th>\n",
|
|||
|
" <td>86.796111</td>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" <td>-0.000474</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(31 [ABAX])</th>\n",
|
|||
|
" <td>52.498394</td>\n",
|
|||
|
" <td>52.74</td>\n",
|
|||
|
" <td>-0.007665</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" 30 Day Mean Close \\\n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(2 [ARNC]) 20.110500 \n",
|
|||
|
" Equity(21 [AAME]) 3.899241 \n",
|
|||
|
" Equity(24 [AAPL]) 113.368433 \n",
|
|||
|
" Equity(25 [ARNC_PR]) 86.796111 \n",
|
|||
|
" Equity(31 [ABAX]) 52.498394 \n",
|
|||
|
"\n",
|
|||
|
" Latest Close \\\n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(2 [ARNC]) 18.55 \n",
|
|||
|
" Equity(21 [AAME]) 4.10 \n",
|
|||
|
" Equity(24 [AAPL]) 115.84 \n",
|
|||
|
" Equity(25 [ARNC_PR]) NaN \n",
|
|||
|
" Equity(31 [ABAX]) 52.74 \n",
|
|||
|
"\n",
|
|||
|
" Percent Difference \n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(2 [ARNC]) -0.022749 \n",
|
|||
|
" Equity(21 [AAME]) -0.005499 \n",
|
|||
|
" Equity(24 [AAPL]) 0.028481 \n",
|
|||
|
" Equity(25 [ARNC_PR]) -0.000474 \n",
|
|||
|
" Equity(31 [ABAX]) -0.007665 "
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 67,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"results.head()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"# Filtres et Ecrans\n",
|
|||
|
"\n",
|
|||
|
"Les filtres prennent en compte un actif et un horodatage et renvoient un booléen"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 68,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"last_close_price = USEquityPricing.close.latest\n",
|
|||
|
"close_price_filter = last_close_price > 20"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 69,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"NumExprFilter(expr='x_0 > (20.0)', bindings={'x_0': Latest([EquityPricing<US>.close], 1)})"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 69,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"close_price_filter"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 70,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"def make_pipeline():\n",
|
|||
|
" \n",
|
|||
|
" mean_close_10 = SimpleMovingAverage(inputs=[USEquityPricing.close],window_length=10)\n",
|
|||
|
" mean_close_30 = SimpleMovingAverage(inputs=[USEquityPricing.close],window_length=30)\n",
|
|||
|
" latest_close = USEquityPricing.close.latest\n",
|
|||
|
" \n",
|
|||
|
" percent_difference = (mean_close_10-mean_close_30) / mean_close_30\n",
|
|||
|
" \n",
|
|||
|
" perc_diff_check = percent_difference > 0 \n",
|
|||
|
" \n",
|
|||
|
" return Pipeline(columns={\n",
|
|||
|
" 'Percent Difference':percent_difference,\n",
|
|||
|
" '30 Day Mean Close':mean_close_30,\n",
|
|||
|
" 'Latest Close':latest_close,\n",
|
|||
|
" 'Positive Percent Diff': perc_diff_check\n",
|
|||
|
" })"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 71,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"application/vnd.jupyter.widget-view+json": {
|
|||
|
"model_id": "",
|
|||
|
"version_major": 2,
|
|||
|
"version_minor": 0
|
|||
|
},
|
|||
|
"text/plain": []
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<b>Pipeline Execution Time:</b> 0.41 Seconds"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
"<IPython.core.display.HTML object>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<div>\n",
|
|||
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|||
|
" <thead>\n",
|
|||
|
" <tr style=\"text-align: right;\">\n",
|
|||
|
" <th></th>\n",
|
|||
|
" <th></th>\n",
|
|||
|
" <th>30 Day Mean Close</th>\n",
|
|||
|
" <th>Latest Close</th>\n",
|
|||
|
" <th>Percent Difference</th>\n",
|
|||
|
" <th>Positive Percent Diff</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th rowspan=\"5\" valign=\"top\">2017-01-03 00:00:00+00:00</th>\n",
|
|||
|
" <th>Equity(2 [ARNC])</th>\n",
|
|||
|
" <td>20.110500</td>\n",
|
|||
|
" <td>18.55</td>\n",
|
|||
|
" <td>-0.022749</td>\n",
|
|||
|
" <td>False</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(21 [AAME])</th>\n",
|
|||
|
" <td>3.899241</td>\n",
|
|||
|
" <td>4.10</td>\n",
|
|||
|
" <td>-0.005499</td>\n",
|
|||
|
" <td>False</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(24 [AAPL])</th>\n",
|
|||
|
" <td>113.368433</td>\n",
|
|||
|
" <td>115.84</td>\n",
|
|||
|
" <td>0.028481</td>\n",
|
|||
|
" <td>True</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(25 [ARNC_PR])</th>\n",
|
|||
|
" <td>86.796111</td>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" <td>-0.000474</td>\n",
|
|||
|
" <td>False</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(31 [ABAX])</th>\n",
|
|||
|
" <td>52.498394</td>\n",
|
|||
|
" <td>52.74</td>\n",
|
|||
|
" <td>-0.007665</td>\n",
|
|||
|
" <td>False</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" 30 Day Mean Close \\\n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(2 [ARNC]) 20.110500 \n",
|
|||
|
" Equity(21 [AAME]) 3.899241 \n",
|
|||
|
" Equity(24 [AAPL]) 113.368433 \n",
|
|||
|
" Equity(25 [ARNC_PR]) 86.796111 \n",
|
|||
|
" Equity(31 [ABAX]) 52.498394 \n",
|
|||
|
"\n",
|
|||
|
" Latest Close \\\n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(2 [ARNC]) 18.55 \n",
|
|||
|
" Equity(21 [AAME]) 4.10 \n",
|
|||
|
" Equity(24 [AAPL]) 115.84 \n",
|
|||
|
" Equity(25 [ARNC_PR]) NaN \n",
|
|||
|
" Equity(31 [ABAX]) 52.74 \n",
|
|||
|
"\n",
|
|||
|
" Percent Difference \\\n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(2 [ARNC]) -0.022749 \n",
|
|||
|
" Equity(21 [AAME]) -0.005499 \n",
|
|||
|
" Equity(24 [AAPL]) 0.028481 \n",
|
|||
|
" Equity(25 [ARNC_PR]) -0.000474 \n",
|
|||
|
" Equity(31 [ABAX]) -0.007665 \n",
|
|||
|
"\n",
|
|||
|
" Positive Percent Diff \n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(2 [ARNC]) False \n",
|
|||
|
" Equity(21 [AAME]) False \n",
|
|||
|
" Equity(24 [AAPL]) True \n",
|
|||
|
" Equity(25 [ARNC_PR]) False \n",
|
|||
|
" Equity(31 [ABAX]) False "
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 71,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"results = run_pipeline(make_pipeline(),'2017-01-01','2017-01-01')\n",
|
|||
|
"results.head()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"## Ecrans"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 72,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"def make_pipeline():\n",
|
|||
|
" \n",
|
|||
|
" mean_close_10 = SimpleMovingAverage(inputs=[USEquityPricing.close],window_length=10)\n",
|
|||
|
" mean_close_30 = SimpleMovingAverage(inputs=[USEquityPricing.close],window_length=30)\n",
|
|||
|
" latest_close = USEquityPricing.close.latest\n",
|
|||
|
" \n",
|
|||
|
" percent_difference = (mean_close_10-mean_close_30) / mean_close_30\n",
|
|||
|
" \n",
|
|||
|
" perc_diff_check = percent_difference > 0 \n",
|
|||
|
" \n",
|
|||
|
" return Pipeline(columns={\n",
|
|||
|
" 'Percent Difference':percent_difference,\n",
|
|||
|
" '30 Day Mean Close':mean_close_30,\n",
|
|||
|
" 'Latest Close':latest_close,\n",
|
|||
|
" 'Positive Percent Diff': perc_diff_check},\n",
|
|||
|
" screen=perc_diff_check)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 73,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"application/vnd.jupyter.widget-view+json": {
|
|||
|
"model_id": "",
|
|||
|
"version_major": 2,
|
|||
|
"version_minor": 0
|
|||
|
},
|
|||
|
"text/plain": []
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<b>Pipeline Execution Time:</b> 0.44 Seconds"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
"<IPython.core.display.HTML object>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<div>\n",
|
|||
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|||
|
" <thead>\n",
|
|||
|
" <tr style=\"text-align: right;\">\n",
|
|||
|
" <th></th>\n",
|
|||
|
" <th></th>\n",
|
|||
|
" <th>30 Day Mean Close</th>\n",
|
|||
|
" <th>Latest Close</th>\n",
|
|||
|
" <th>Percent Difference</th>\n",
|
|||
|
" <th>Positive Percent Diff</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th rowspan=\"5\" valign=\"top\">2017-01-03 00:00:00+00:00</th>\n",
|
|||
|
" <th>Equity(24 [AAPL])</th>\n",
|
|||
|
" <td>113.368433</td>\n",
|
|||
|
" <td>115.84</td>\n",
|
|||
|
" <td>0.028481</td>\n",
|
|||
|
" <td>True</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(66 [AB])</th>\n",
|
|||
|
" <td>23.119167</td>\n",
|
|||
|
" <td>23.45</td>\n",
|
|||
|
" <td>0.004578</td>\n",
|
|||
|
" <td>True</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(69 [ACAT])</th>\n",
|
|||
|
" <td>15.839500</td>\n",
|
|||
|
" <td>15.02</td>\n",
|
|||
|
" <td>0.009375</td>\n",
|
|||
|
" <td>True</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(70 [VBF])</th>\n",
|
|||
|
" <td>18.208480</td>\n",
|
|||
|
" <td>18.49</td>\n",
|
|||
|
" <td>0.011814</td>\n",
|
|||
|
" <td>True</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(84 [ACET])</th>\n",
|
|||
|
" <td>20.722753</td>\n",
|
|||
|
" <td>21.97</td>\n",
|
|||
|
" <td>0.039630</td>\n",
|
|||
|
" <td>True</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" 30 Day Mean Close Latest Close \\\n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(24 [AAPL]) 113.368433 115.84 \n",
|
|||
|
" Equity(66 [AB]) 23.119167 23.45 \n",
|
|||
|
" Equity(69 [ACAT]) 15.839500 15.02 \n",
|
|||
|
" Equity(70 [VBF]) 18.208480 18.49 \n",
|
|||
|
" Equity(84 [ACET]) 20.722753 21.97 \n",
|
|||
|
"\n",
|
|||
|
" Percent Difference \\\n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(24 [AAPL]) 0.028481 \n",
|
|||
|
" Equity(66 [AB]) 0.004578 \n",
|
|||
|
" Equity(69 [ACAT]) 0.009375 \n",
|
|||
|
" Equity(70 [VBF]) 0.011814 \n",
|
|||
|
" Equity(84 [ACET]) 0.039630 \n",
|
|||
|
"\n",
|
|||
|
" Positive Percent Diff \n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(24 [AAPL]) True \n",
|
|||
|
" Equity(66 [AB]) True \n",
|
|||
|
" Equity(69 [ACAT]) True \n",
|
|||
|
" Equity(70 [VBF]) True \n",
|
|||
|
" Equity(84 [ACET]) True "
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 73,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"results = run_pipeline(make_pipeline(),'2017-01-01','2017-01-01')\n",
|
|||
|
"results.head()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"### Inverser un écran"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 74,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"def make_pipeline():\n",
|
|||
|
" \n",
|
|||
|
" mean_close_10 = SimpleMovingAverage(inputs=[USEquityPricing.close],window_length=10)\n",
|
|||
|
" mean_close_30 = SimpleMovingAverage(inputs=[USEquityPricing.close],window_length=30)\n",
|
|||
|
" latest_close = USEquityPricing.close.latest\n",
|
|||
|
" \n",
|
|||
|
" percent_difference = (mean_close_10-mean_close_30) / mean_close_30\n",
|
|||
|
" \n",
|
|||
|
" perc_diff_check = percent_difference > 0 \n",
|
|||
|
" \n",
|
|||
|
" return Pipeline(columns={\n",
|
|||
|
" 'Percent Difference':percent_difference,\n",
|
|||
|
" '30 Day Mean Close':mean_close_30,\n",
|
|||
|
" 'Latest Close':latest_close,\n",
|
|||
|
" 'Positive Percent Diff': perc_diff_check},\n",
|
|||
|
" screen=~perc_diff_check)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 75,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"application/vnd.jupyter.widget-view+json": {
|
|||
|
"model_id": "",
|
|||
|
"version_major": 2,
|
|||
|
"version_minor": 0
|
|||
|
},
|
|||
|
"text/plain": []
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<b>Pipeline Execution Time:</b> 0.41 Seconds"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
"<IPython.core.display.HTML object>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<div>\n",
|
|||
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|||
|
" <thead>\n",
|
|||
|
" <tr style=\"text-align: right;\">\n",
|
|||
|
" <th></th>\n",
|
|||
|
" <th></th>\n",
|
|||
|
" <th>30 Day Mean Close</th>\n",
|
|||
|
" <th>Latest Close</th>\n",
|
|||
|
" <th>Percent Difference</th>\n",
|
|||
|
" <th>Positive Percent Diff</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th rowspan=\"5\" valign=\"top\">2017-01-03 00:00:00+00:00</th>\n",
|
|||
|
" <th>Equity(2 [ARNC])</th>\n",
|
|||
|
" <td>20.110500</td>\n",
|
|||
|
" <td>18.55</td>\n",
|
|||
|
" <td>-0.022749</td>\n",
|
|||
|
" <td>False</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(21 [AAME])</th>\n",
|
|||
|
" <td>3.899241</td>\n",
|
|||
|
" <td>4.10</td>\n",
|
|||
|
" <td>-0.005499</td>\n",
|
|||
|
" <td>False</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(25 [ARNC_PR])</th>\n",
|
|||
|
" <td>86.796111</td>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" <td>-0.000474</td>\n",
|
|||
|
" <td>False</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(31 [ABAX])</th>\n",
|
|||
|
" <td>52.498394</td>\n",
|
|||
|
" <td>52.74</td>\n",
|
|||
|
" <td>-0.007665</td>\n",
|
|||
|
" <td>False</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(39 [DDC])</th>\n",
|
|||
|
" <td>9.523000</td>\n",
|
|||
|
" <td>9.69</td>\n",
|
|||
|
" <td>-0.015436</td>\n",
|
|||
|
" <td>False</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" 30 Day Mean Close \\\n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(2 [ARNC]) 20.110500 \n",
|
|||
|
" Equity(21 [AAME]) 3.899241 \n",
|
|||
|
" Equity(25 [ARNC_PR]) 86.796111 \n",
|
|||
|
" Equity(31 [ABAX]) 52.498394 \n",
|
|||
|
" Equity(39 [DDC]) 9.523000 \n",
|
|||
|
"\n",
|
|||
|
" Latest Close \\\n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(2 [ARNC]) 18.55 \n",
|
|||
|
" Equity(21 [AAME]) 4.10 \n",
|
|||
|
" Equity(25 [ARNC_PR]) NaN \n",
|
|||
|
" Equity(31 [ABAX]) 52.74 \n",
|
|||
|
" Equity(39 [DDC]) 9.69 \n",
|
|||
|
"\n",
|
|||
|
" Percent Difference \\\n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(2 [ARNC]) -0.022749 \n",
|
|||
|
" Equity(21 [AAME]) -0.005499 \n",
|
|||
|
" Equity(25 [ARNC_PR]) -0.000474 \n",
|
|||
|
" Equity(31 [ABAX]) -0.007665 \n",
|
|||
|
" Equity(39 [DDC]) -0.015436 \n",
|
|||
|
"\n",
|
|||
|
" Positive Percent Diff \n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(2 [ARNC]) False \n",
|
|||
|
" Equity(21 [AAME]) False \n",
|
|||
|
" Equity(25 [ARNC_PR]) False \n",
|
|||
|
" Equity(31 [ABAX]) False \n",
|
|||
|
" Equity(39 [DDC]) False "
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 75,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"results = run_pipeline(make_pipeline(),'2017-01-01','2017-01-01')\n",
|
|||
|
"results.head()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"## Combiner des Filtres"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 76,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"def make_pipeline():\n",
|
|||
|
" \n",
|
|||
|
" mean_close_10 = SimpleMovingAverage(inputs=[USEquityPricing.close],window_length=10)\n",
|
|||
|
" mean_close_30 = SimpleMovingAverage(inputs=[USEquityPricing.close],window_length=30)\n",
|
|||
|
" latest_close = USEquityPricing.close.latest\n",
|
|||
|
" \n",
|
|||
|
" percent_difference = (mean_close_10-mean_close_30) / mean_close_30\n",
|
|||
|
" \n",
|
|||
|
" perc_diff_check = percent_difference > 0 \n",
|
|||
|
" small_price = latest_close < 5\n",
|
|||
|
" \n",
|
|||
|
" final_filter = perc_diff_check & small_price\n",
|
|||
|
" \n",
|
|||
|
" return Pipeline(columns={\n",
|
|||
|
" 'Percent Difference':percent_difference,\n",
|
|||
|
" '30 Day Mean Close':mean_close_30,\n",
|
|||
|
" 'Latest Close':latest_close,\n",
|
|||
|
" 'Positive Percent Diff': perc_diff_check},\n",
|
|||
|
" screen=final_filter)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 77,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"application/vnd.jupyter.widget-view+json": {
|
|||
|
"model_id": "",
|
|||
|
"version_major": 2,
|
|||
|
"version_minor": 0
|
|||
|
},
|
|||
|
"text/plain": []
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<b>Pipeline Execution Time:</b> 0.41 Seconds"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
"<IPython.core.display.HTML object>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<div>\n",
|
|||
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|||
|
" <thead>\n",
|
|||
|
" <tr style=\"text-align: right;\">\n",
|
|||
|
" <th></th>\n",
|
|||
|
" <th></th>\n",
|
|||
|
" <th>30 Day Mean Close</th>\n",
|
|||
|
" <th>Latest Close</th>\n",
|
|||
|
" <th>Percent Difference</th>\n",
|
|||
|
" <th>Positive Percent Diff</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th rowspan=\"5\" valign=\"top\">2017-01-03 00:00:00+00:00</th>\n",
|
|||
|
" <th>Equity(535 [ARTW])</th>\n",
|
|||
|
" <td>3.097778</td>\n",
|
|||
|
" <td>3.40</td>\n",
|
|||
|
" <td>0.013271</td>\n",
|
|||
|
" <td>True</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(677 [AXAS])</th>\n",
|
|||
|
" <td>2.265333</td>\n",
|
|||
|
" <td>2.56</td>\n",
|
|||
|
" <td>0.145527</td>\n",
|
|||
|
" <td>True</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(1144 [LCTX])</th>\n",
|
|||
|
" <td>3.531167</td>\n",
|
|||
|
" <td>3.62</td>\n",
|
|||
|
" <td>0.065795</td>\n",
|
|||
|
" <td>True</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(1323 [CAW])</th>\n",
|
|||
|
" <td>2.541333</td>\n",
|
|||
|
" <td>2.60</td>\n",
|
|||
|
" <td>0.016002</td>\n",
|
|||
|
" <td>True</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(1546 [CIF])</th>\n",
|
|||
|
" <td>2.500370</td>\n",
|
|||
|
" <td>2.57</td>\n",
|
|||
|
" <td>0.015579</td>\n",
|
|||
|
" <td>True</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" 30 Day Mean Close \\\n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(535 [ARTW]) 3.097778 \n",
|
|||
|
" Equity(677 [AXAS]) 2.265333 \n",
|
|||
|
" Equity(1144 [LCTX]) 3.531167 \n",
|
|||
|
" Equity(1323 [CAW]) 2.541333 \n",
|
|||
|
" Equity(1546 [CIF]) 2.500370 \n",
|
|||
|
"\n",
|
|||
|
" Latest Close \\\n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(535 [ARTW]) 3.40 \n",
|
|||
|
" Equity(677 [AXAS]) 2.56 \n",
|
|||
|
" Equity(1144 [LCTX]) 3.62 \n",
|
|||
|
" Equity(1323 [CAW]) 2.60 \n",
|
|||
|
" Equity(1546 [CIF]) 2.57 \n",
|
|||
|
"\n",
|
|||
|
" Percent Difference \\\n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(535 [ARTW]) 0.013271 \n",
|
|||
|
" Equity(677 [AXAS]) 0.145527 \n",
|
|||
|
" Equity(1144 [LCTX]) 0.065795 \n",
|
|||
|
" Equity(1323 [CAW]) 0.016002 \n",
|
|||
|
" Equity(1546 [CIF]) 0.015579 \n",
|
|||
|
"\n",
|
|||
|
" Positive Percent Diff \n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(535 [ARTW]) True \n",
|
|||
|
" Equity(677 [AXAS]) True \n",
|
|||
|
" Equity(1144 [LCTX]) True \n",
|
|||
|
" Equity(1323 [CAW]) True \n",
|
|||
|
" Equity(1546 [CIF]) True "
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 77,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"results = run_pipeline(make_pipeline(),'2017-01-01','2017-01-01')\n",
|
|||
|
"results.head()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"# Fundamentals de Morningstar\n",
|
|||
|
"\n",
|
|||
|
"`Fundamentals` donne un accès à la base de données fondamentale quantopienne. Basée sur les données fournies par Morningstar, `Fundamentals` fournit plus de 600 mesures d'entreprise remontant à 2002 (pour correspondre aux données de tarification de Quantopian).\n",
|
|||
|
"\n",
|
|||
|
"Regardez la documentation de Fundamentals : https://www.quantopian.com/docs/data-reference/morningstar_fundamentals.\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 78,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"from quantopian.pipeline.data.morningstar import Fundamentals"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 79,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"def make_pipeline():\n",
|
|||
|
" \n",
|
|||
|
" my_funds = Fundamentals.market_cap.latest\n",
|
|||
|
" \n",
|
|||
|
" return Pipeline(columns={'Market Cap':my_funds})"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 80,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"application/vnd.jupyter.widget-view+json": {
|
|||
|
"model_id": "",
|
|||
|
"version_major": 2,
|
|||
|
"version_minor": 0
|
|||
|
},
|
|||
|
"text/plain": []
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<b>Pipeline Execution Time:</b> 0.12 Seconds"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
"<IPython.core.display.HTML object>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"results = run_pipeline(make_pipeline(),'2017-01-03','2017-01-03')"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 81,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"<class 'pandas.core.frame.DataFrame'>\n",
|
|||
|
"MultiIndex: 8356 entries, (2017-01-03 00:00:00+00:00, Equity(2 [ARNC])) to (2017-01-03 00:00:00+00:00, Equity(50569 [OUSM]))\n",
|
|||
|
"Data columns (total 1 columns):\n",
|
|||
|
"Market Cap 5040 non-null float64\n",
|
|||
|
"dtypes: float64(1)\n",
|
|||
|
"memory usage: 130.6+ KB\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"results.info()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 82,
|
|||
|
"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></th>\n",
|
|||
|
" <th>Market Cap</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th rowspan=\"61\" valign=\"top\">2017-01-03 00:00:00+00:00</th>\n",
|
|||
|
" <th>Equity(2 [ARNC])</th>\n",
|
|||
|
" <td>8.129387e+09</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(21 [AAME])</th>\n",
|
|||
|
" <td>8.370243e+07</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(24 [AAPL])</th>\n",
|
|||
|
" <td>6.175885e+11</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(25 [ARNC_PR])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(31 [ABAX])</th>\n",
|
|||
|
" <td>1.189172e+09</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(39 [DDC])</th>\n",
|
|||
|
" <td>8.039806e+08</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(41 [ARCB])</th>\n",
|
|||
|
" <td>7.084623e+08</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(52 [ABM])</th>\n",
|
|||
|
" <td>2.268896e+09</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(53 [ABMD])</th>\n",
|
|||
|
" <td>4.888170e+09</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(62 [ABT])</th>\n",
|
|||
|
" <td>5.655141e+10</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(64 [GOLD])</th>\n",
|
|||
|
" <td>1.862359e+10</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(66 [AB])</th>\n",
|
|||
|
" <td>2.221112e+09</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(67 [ADSK])</th>\n",
|
|||
|
" <td>1.647140e+10</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(69 [ACAT])</th>\n",
|
|||
|
" <td>1.959759e+08</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(70 [VBF])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(76 [TAP])</th>\n",
|
|||
|
" <td>2.090877e+10</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(84 [ACET])</th>\n",
|
|||
|
" <td>6.602278e+08</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(100 [IEP])</th>\n",
|
|||
|
" <td>8.490282e+09</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(106 [ACU])</th>\n",
|
|||
|
" <td>8.501910e+07</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(110 [RAMP])</th>\n",
|
|||
|
" <td>2.079641e+09</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(112 [ACY])</th>\n",
|
|||
|
" <td>1.480530e+07</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(114 [ADBE])</th>\n",
|
|||
|
" <td>5.090425e+10</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(117 [AEY])</th>\n",
|
|||
|
" <td>1.793760e+07</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(122 [ADI])</th>\n",
|
|||
|
" <td>2.237935e+10</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(128 [ADM])</th>\n",
|
|||
|
" <td>2.626700e+10</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(149 [ADX])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(153 [AE])</th>\n",
|
|||
|
" <td>1.672277e+08</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(154 [AEM])</th>\n",
|
|||
|
" <td>9.434941e+09</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(157 [AEG])</th>\n",
|
|||
|
" <td>1.166367e+10</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(161 [AEP])</th>\n",
|
|||
|
" <td>3.095816e+10</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>...</th>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50534 [HGV])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50535 [PK])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50537 [WRD])</th>\n",
|
|||
|
" <td>1.734876e+09</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50539 [TIG])</th>\n",
|
|||
|
" <td>2.339749e+09</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50540 [TRVG])</th>\n",
|
|||
|
" <td>2.762639e+09</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50541 [KEY_PRI])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50542 [JHMD])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50543 [COWZ])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50544 [KEG])</th>\n",
|
|||
|
" <td>2.618865e+07</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50546 [NURE])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50547 [YTRA])</th>\n",
|
|||
|
" <td>3.297637e+08</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50548 [PHIO_W])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50549 [BMLP])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50550 [WBIY])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50552 [FIV])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50554 [HEBT])</th>\n",
|
|||
|
" <td>8.415000e+07</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50555 [UUUU_WS])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50556 [SAB_CL])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50558 [INFR])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50559 [VVPR])</th>\n",
|
|||
|
" <td>5.894486e+07</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50560 [XK])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50561 [XE])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50562 [XH])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50563 [XM])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50564 [XD])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50565 [XI])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50566 [XU])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50567 [XF])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50568 [XS])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(50569 [OUSM])</th>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"<p>8356 rows × 1 columns</p>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" Market Cap\n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(2 [ARNC]) 8.129387e+09\n",
|
|||
|
" Equity(21 [AAME]) 8.370243e+07\n",
|
|||
|
" Equity(24 [AAPL]) 6.175885e+11\n",
|
|||
|
" Equity(25 [ARNC_PR]) NaN\n",
|
|||
|
" Equity(31 [ABAX]) 1.189172e+09\n",
|
|||
|
" Equity(39 [DDC]) 8.039806e+08\n",
|
|||
|
" Equity(41 [ARCB]) 7.084623e+08\n",
|
|||
|
" Equity(52 [ABM]) 2.268896e+09\n",
|
|||
|
" Equity(53 [ABMD]) 4.888170e+09\n",
|
|||
|
" Equity(62 [ABT]) 5.655141e+10\n",
|
|||
|
" Equity(64 [GOLD]) 1.862359e+10\n",
|
|||
|
" Equity(66 [AB]) 2.221112e+09\n",
|
|||
|
" Equity(67 [ADSK]) 1.647140e+10\n",
|
|||
|
" Equity(69 [ACAT]) 1.959759e+08\n",
|
|||
|
" Equity(70 [VBF]) NaN\n",
|
|||
|
" Equity(76 [TAP]) 2.090877e+10\n",
|
|||
|
" Equity(84 [ACET]) 6.602278e+08\n",
|
|||
|
" Equity(100 [IEP]) 8.490282e+09\n",
|
|||
|
" Equity(106 [ACU]) 8.501910e+07\n",
|
|||
|
" Equity(110 [RAMP]) 2.079641e+09\n",
|
|||
|
" Equity(112 [ACY]) 1.480530e+07\n",
|
|||
|
" Equity(114 [ADBE]) 5.090425e+10\n",
|
|||
|
" Equity(117 [AEY]) 1.793760e+07\n",
|
|||
|
" Equity(122 [ADI]) 2.237935e+10\n",
|
|||
|
" Equity(128 [ADM]) 2.626700e+10\n",
|
|||
|
" Equity(149 [ADX]) NaN\n",
|
|||
|
" Equity(153 [AE]) 1.672277e+08\n",
|
|||
|
" Equity(154 [AEM]) 9.434941e+09\n",
|
|||
|
" Equity(157 [AEG]) 1.166367e+10\n",
|
|||
|
" Equity(161 [AEP]) 3.095816e+10\n",
|
|||
|
"... ...\n",
|
|||
|
" Equity(50534 [HGV]) NaN\n",
|
|||
|
" Equity(50535 [PK]) NaN\n",
|
|||
|
" Equity(50537 [WRD]) 1.734876e+09\n",
|
|||
|
" Equity(50539 [TIG]) 2.339749e+09\n",
|
|||
|
" Equity(50540 [TRVG]) 2.762639e+09\n",
|
|||
|
" Equity(50541 [KEY_PRI]) NaN\n",
|
|||
|
" Equity(50542 [JHMD]) NaN\n",
|
|||
|
" Equity(50543 [COWZ]) NaN\n",
|
|||
|
" Equity(50544 [KEG]) 2.618865e+07\n",
|
|||
|
" Equity(50546 [NURE]) NaN\n",
|
|||
|
" Equity(50547 [YTRA]) 3.297637e+08\n",
|
|||
|
" Equity(50548 [PHIO_W]) NaN\n",
|
|||
|
" Equity(50549 [BMLP]) NaN\n",
|
|||
|
" Equity(50550 [WBIY]) NaN\n",
|
|||
|
" Equity(50552 [FIV]) NaN\n",
|
|||
|
" Equity(50554 [HEBT]) 8.415000e+07\n",
|
|||
|
" Equity(50555 [UUUU_WS]) NaN\n",
|
|||
|
" Equity(50556 [SAB_CL]) NaN\n",
|
|||
|
" Equity(50558 [INFR]) NaN\n",
|
|||
|
" Equity(50559 [VVPR]) 5.894486e+07\n",
|
|||
|
" Equity(50560 [XK]) NaN\n",
|
|||
|
" Equity(50561 [XE]) NaN\n",
|
|||
|
" Equity(50562 [XH]) NaN\n",
|
|||
|
" Equity(50563 [XM]) NaN\n",
|
|||
|
" Equity(50564 [XD]) NaN\n",
|
|||
|
" Equity(50565 [XI]) NaN\n",
|
|||
|
" Equity(50566 [XU]) NaN\n",
|
|||
|
" Equity(50567 [XF]) NaN\n",
|
|||
|
" Equity(50568 [XS]) NaN\n",
|
|||
|
" Equity(50569 [OUSM]) NaN\n",
|
|||
|
"\n",
|
|||
|
"[8356 rows x 1 columns]"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 82,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"results"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 83,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"def make_pipeline():\n",
|
|||
|
" \n",
|
|||
|
" my_funds = Fundamentals.market_cap.latest\n",
|
|||
|
" \n",
|
|||
|
" # Entreprises d'une valeur de 500 milliards ou plus ;)\n",
|
|||
|
" cap_filter = my_funds > 500000000000\n",
|
|||
|
" \n",
|
|||
|
" return Pipeline(columns={'Market Cap':my_funds},\n",
|
|||
|
" screen = cap_filter)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 84,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"application/vnd.jupyter.widget-view+json": {
|
|||
|
"model_id": "",
|
|||
|
"version_major": 2,
|
|||
|
"version_minor": 0
|
|||
|
},
|
|||
|
"text/plain": []
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<b>Pipeline Execution Time:</b> 0.12 Seconds"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
"<IPython.core.display.HTML object>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"results = run_pipeline(make_pipeline(),'2017-01-03','2017-01-03')"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 85,
|
|||
|
"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></th>\n",
|
|||
|
" <th>Market Cap</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th rowspan=\"3\" valign=\"top\">2017-01-03 00:00:00+00:00</th>\n",
|
|||
|
" <th>Equity(24 [AAPL])</th>\n",
|
|||
|
" <td>6.175885e+11</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(26578 [GOOG_L])</th>\n",
|
|||
|
" <td>5.461871e+11</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(46631 [GOOG])</th>\n",
|
|||
|
" <td>5.319681e+11</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" Market Cap\n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(24 [AAPL]) 6.175885e+11\n",
|
|||
|
" Equity(26578 [GOOG_L]) 5.461871e+11\n",
|
|||
|
" Equity(46631 [GOOG]) 5.319681e+11"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 85,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"results"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"# Masques\n",
|
|||
|
"\n",
|
|||
|
"Parfois, nous voulons ignorer certains atouts lors du calcul des expressions des pipelines. Il y a deux cas courants où il est utile d'ignorer des actifs :\n",
|
|||
|
"* Nous voulons calculer une expression qui est coûteuse en termes de calcul, et nous savons que nous ne nous soucions que des résultats pour certains actifs.\n",
|
|||
|
"* Nous voulons calculer une expression qui effectue des comparaisons entre des actifs, mais nous voulons que ces comparaisons soient effectuées uniquement par rapport à un sous-ensemble de tous les actifs. "
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 86,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"def make_pipeline():\n",
|
|||
|
" \n",
|
|||
|
" # Créer d'abord les masques pour les filtres\n",
|
|||
|
" latest_close = USEquityPricing.close.latest\n",
|
|||
|
" small_price = latest_close < 5\n",
|
|||
|
" \n",
|
|||
|
" # Passer dans le masque\n",
|
|||
|
" mean_close_10 = SimpleMovingAverage(inputs=[USEquityPricing.close],window_length=10,mask=small_price)\n",
|
|||
|
" mean_close_30 = SimpleMovingAverage(inputs=[USEquityPricing.close],window_length=30,mask=small_price)\n",
|
|||
|
" \n",
|
|||
|
" \n",
|
|||
|
" percent_difference = (mean_close_10-mean_close_30) / mean_close_30\n",
|
|||
|
" \n",
|
|||
|
" perc_diff_check = percent_difference > 0 \n",
|
|||
|
" \n",
|
|||
|
" \n",
|
|||
|
" final_filter = perc_diff_check\n",
|
|||
|
" \n",
|
|||
|
" return Pipeline(columns={\n",
|
|||
|
" 'Percent Difference':percent_difference,\n",
|
|||
|
" '30 Day Mean Close':mean_close_30,\n",
|
|||
|
" 'Latest Close':latest_close,\n",
|
|||
|
" 'Positive Percent Diff': perc_diff_check},\n",
|
|||
|
" screen=final_filter)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 87,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"application/vnd.jupyter.widget-view+json": {
|
|||
|
"model_id": "",
|
|||
|
"version_major": 2,
|
|||
|
"version_minor": 0
|
|||
|
},
|
|||
|
"text/plain": []
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<b>Pipeline Execution Time:</b> 0.42 Seconds"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
"<IPython.core.display.HTML object>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<div>\n",
|
|||
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|||
|
" <thead>\n",
|
|||
|
" <tr style=\"text-align: right;\">\n",
|
|||
|
" <th></th>\n",
|
|||
|
" <th></th>\n",
|
|||
|
" <th>30 Day Mean Close</th>\n",
|
|||
|
" <th>Latest Close</th>\n",
|
|||
|
" <th>Percent Difference</th>\n",
|
|||
|
" <th>Positive Percent Diff</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th rowspan=\"5\" valign=\"top\">2017-01-03 00:00:00+00:00</th>\n",
|
|||
|
" <th>Equity(535 [ARTW])</th>\n",
|
|||
|
" <td>3.097778</td>\n",
|
|||
|
" <td>3.40</td>\n",
|
|||
|
" <td>0.013271</td>\n",
|
|||
|
" <td>True</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(677 [AXAS])</th>\n",
|
|||
|
" <td>2.265333</td>\n",
|
|||
|
" <td>2.56</td>\n",
|
|||
|
" <td>0.145527</td>\n",
|
|||
|
" <td>True</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(1144 [LCTX])</th>\n",
|
|||
|
" <td>3.531167</td>\n",
|
|||
|
" <td>3.62</td>\n",
|
|||
|
" <td>0.065795</td>\n",
|
|||
|
" <td>True</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(1323 [CAW])</th>\n",
|
|||
|
" <td>2.541333</td>\n",
|
|||
|
" <td>2.60</td>\n",
|
|||
|
" <td>0.016002</td>\n",
|
|||
|
" <td>True</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(1546 [CIF])</th>\n",
|
|||
|
" <td>2.500370</td>\n",
|
|||
|
" <td>2.57</td>\n",
|
|||
|
" <td>0.015579</td>\n",
|
|||
|
" <td>True</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" 30 Day Mean Close \\\n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(535 [ARTW]) 3.097778 \n",
|
|||
|
" Equity(677 [AXAS]) 2.265333 \n",
|
|||
|
" Equity(1144 [LCTX]) 3.531167 \n",
|
|||
|
" Equity(1323 [CAW]) 2.541333 \n",
|
|||
|
" Equity(1546 [CIF]) 2.500370 \n",
|
|||
|
"\n",
|
|||
|
" Latest Close \\\n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(535 [ARTW]) 3.40 \n",
|
|||
|
" Equity(677 [AXAS]) 2.56 \n",
|
|||
|
" Equity(1144 [LCTX]) 3.62 \n",
|
|||
|
" Equity(1323 [CAW]) 2.60 \n",
|
|||
|
" Equity(1546 [CIF]) 2.57 \n",
|
|||
|
"\n",
|
|||
|
" Percent Difference \\\n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(535 [ARTW]) 0.013271 \n",
|
|||
|
" Equity(677 [AXAS]) 0.145527 \n",
|
|||
|
" Equity(1144 [LCTX]) 0.065795 \n",
|
|||
|
" Equity(1323 [CAW]) 0.016002 \n",
|
|||
|
" Equity(1546 [CIF]) 0.015579 \n",
|
|||
|
"\n",
|
|||
|
" Positive Percent Diff \n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(535 [ARTW]) True \n",
|
|||
|
" Equity(677 [AXAS]) True \n",
|
|||
|
" Equity(1144 [LCTX]) True \n",
|
|||
|
" Equity(1323 [CAW]) True \n",
|
|||
|
" Equity(1546 [CIF]) True "
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 87,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"results = run_pipeline(make_pipeline(),'2017-01-01','2017-01-01')\n",
|
|||
|
"results.head()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 88,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"391"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 88,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"len(results)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"# Classificateurs\n",
|
|||
|
"\n",
|
|||
|
"Un classificateur est une fonction d'un actif et d'un moment dans le temps à une sortie catégorielle telle qu'une chaîne de caractères ou un label d'entier."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 89,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"from quantopian.pipeline.data import morningstar\n",
|
|||
|
"from quantopian.pipeline.classifiers.morningstar import Sector"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 90,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"morningstar_sector = Sector()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 91,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"exchange = morningstar.share_class_reference.exchange_id.latest"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 92,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"Latest([share_class_reference<US>.exchange_id], 1)"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 92,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"exchange"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"### Méthodes Classificateur\n",
|
|||
|
"\n",
|
|||
|
"* eq (equals)\n",
|
|||
|
"* isnull\n",
|
|||
|
"* startswith"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 93,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"nyse_filter = exchange.eq('NYS')"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 94,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"def make_pipeline():\n",
|
|||
|
" \n",
|
|||
|
" # Créer d'abord les masques pour les filtres\n",
|
|||
|
" latest_close = USEquityPricing.close.latest\n",
|
|||
|
" small_price = latest_close < 5\n",
|
|||
|
" \n",
|
|||
|
" # Classificateur\n",
|
|||
|
" nyse_filter = exchange.eq('NYS')\n",
|
|||
|
" \n",
|
|||
|
" # passer dans le masque\n",
|
|||
|
" mean_close_10 = SimpleMovingAverage(inputs=[USEquityPricing.close],window_length=10,mask=small_price)\n",
|
|||
|
" mean_close_30 = SimpleMovingAverage(inputs=[USEquityPricing.close],window_length=30,mask=small_price)\n",
|
|||
|
" \n",
|
|||
|
" \n",
|
|||
|
" percent_difference = (mean_close_10-mean_close_30) / mean_close_30\n",
|
|||
|
" \n",
|
|||
|
" perc_diff_check = percent_difference > 0 \n",
|
|||
|
" \n",
|
|||
|
" \n",
|
|||
|
" final_filter = perc_diff_check & nyse_filter\n",
|
|||
|
" \n",
|
|||
|
" return Pipeline(columns={\n",
|
|||
|
" 'Percent Difference':percent_difference,\n",
|
|||
|
" '30 Day Mean Close':mean_close_30,\n",
|
|||
|
" 'Latest Close':latest_close,\n",
|
|||
|
" 'Positive Percent Diff': perc_diff_check},\n",
|
|||
|
" screen=final_filter)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 95,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"application/vnd.jupyter.widget-view+json": {
|
|||
|
"model_id": "",
|
|||
|
"version_major": 2,
|
|||
|
"version_minor": 0
|
|||
|
},
|
|||
|
"text/plain": []
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<b>Pipeline Execution Time:</b> 1.07 Seconds"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
"<IPython.core.display.HTML object>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<div>\n",
|
|||
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|||
|
" <thead>\n",
|
|||
|
" <tr style=\"text-align: right;\">\n",
|
|||
|
" <th></th>\n",
|
|||
|
" <th></th>\n",
|
|||
|
" <th>30 Day Mean Close</th>\n",
|
|||
|
" <th>Latest Close</th>\n",
|
|||
|
" <th>Percent Difference</th>\n",
|
|||
|
" <th>Positive Percent Diff</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th rowspan=\"5\" valign=\"top\">2017-01-03 00:00:00+00:00</th>\n",
|
|||
|
" <th>Equity(2586 [EQS])</th>\n",
|
|||
|
" <td>1.960533</td>\n",
|
|||
|
" <td>2.020</td>\n",
|
|||
|
" <td>0.022120</td>\n",
|
|||
|
" <td>True</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(3265 [GLF])</th>\n",
|
|||
|
" <td>1.576367</td>\n",
|
|||
|
" <td>1.725</td>\n",
|
|||
|
" <td>0.162420</td>\n",
|
|||
|
" <td>True</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(3645 [HOV])</th>\n",
|
|||
|
" <td>2.406667</td>\n",
|
|||
|
" <td>2.735</td>\n",
|
|||
|
" <td>0.176939</td>\n",
|
|||
|
" <td>True</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(4577 [LUB])</th>\n",
|
|||
|
" <td>4.292333</td>\n",
|
|||
|
" <td>4.270</td>\n",
|
|||
|
" <td>0.004116</td>\n",
|
|||
|
" <td>True</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>Equity(4971 [RT])</th>\n",
|
|||
|
" <td>3.244000</td>\n",
|
|||
|
" <td>3.240</td>\n",
|
|||
|
" <td>0.009094</td>\n",
|
|||
|
" <td>True</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" 30 Day Mean Close Latest Close \\\n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(2586 [EQS]) 1.960533 2.020 \n",
|
|||
|
" Equity(3265 [GLF]) 1.576367 1.725 \n",
|
|||
|
" Equity(3645 [HOV]) 2.406667 2.735 \n",
|
|||
|
" Equity(4577 [LUB]) 4.292333 4.270 \n",
|
|||
|
" Equity(4971 [RT]) 3.244000 3.240 \n",
|
|||
|
"\n",
|
|||
|
" Percent Difference \\\n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(2586 [EQS]) 0.022120 \n",
|
|||
|
" Equity(3265 [GLF]) 0.162420 \n",
|
|||
|
" Equity(3645 [HOV]) 0.176939 \n",
|
|||
|
" Equity(4577 [LUB]) 0.004116 \n",
|
|||
|
" Equity(4971 [RT]) 0.009094 \n",
|
|||
|
"\n",
|
|||
|
" Positive Percent Diff \n",
|
|||
|
"2017-01-03 00:00:00+00:00 Equity(2586 [EQS]) True \n",
|
|||
|
" Equity(3265 [GLF]) True \n",
|
|||
|
" Equity(3645 [HOV]) True \n",
|
|||
|
" Equity(4577 [LUB]) True \n",
|
|||
|
" Equity(4971 [RT]) True "
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 95,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"results = run_pipeline(make_pipeline(),'2017-01-01','2017-01-01')\n",
|
|||
|
"results.head()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 96,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"66"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 96,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"len(results)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"# Pipelines dans l'IDE Quantopian"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"from quantopian.pipeline import Pipeline\n",
|
|||
|
"from quantopian.algorithm import attach_pipeline, pipeline_output\n",
|
|||
|
"\n",
|
|||
|
"def initialize(context):\n",
|
|||
|
" my_pipe = make_pipeline()\n",
|
|||
|
" attach_pipeline(my_pipe, 'my_pipeline')\n",
|
|||
|
"\n",
|
|||
|
"def make_pipeline():\n",
|
|||
|
" return Pipeline()\n",
|
|||
|
"\n",
|
|||
|
"def before_trading_start(context, data):\n",
|
|||
|
" # Stocker les résultats de notre pipeline DataFrame dans la variable context.\n",
|
|||
|
" context.output = pipeline_output('my_pipeline')"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"metadata": {
|
|||
|
"kernelspec": {
|
|||
|
"display_name": "Python 3.5",
|
|||
|
"language": "python",
|
|||
|
"name": "py35"
|
|||
|
},
|
|||
|
"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.5.9"
|
|||
|
}
|
|||
|
},
|
|||
|
"nbformat": 4,
|
|||
|
"nbformat_minor": 2
|
|||
|
}
|