Files
pandas-ta/examples/PandasTA_Strategy_Examples.ipynb
T
2020-07-25 11:30:00 -07:00

3026 lines
106 KiB
Plaintext
Raw 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": [
"# Pandas TA ([pandas_ta](https://github.com/twopirllc/pandas-ta)) Strategies for Custom Technical Analysis\n",
"\n",
"## Topics\n",
"- What is a Pandas TA Strategy?\n",
" - Builtin Strategies: __AllStrategy__ and __CommonStrategy__\n",
" - Creating Strategies\n",
"- Watchlist Class\n",
" - Strategy Management and Execution\n",
"- Indicator Composition/Chaining for more Complex Strategies\n",
" - Comprehensive Example: _MACD and RSI Momo with BBANDS and SMAs 50 & 200 and Cumulative Log Returns_"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"%matplotlib inline\n",
"import datetime as dt\n",
"\n",
"# import matplotlib.pyplot as plt\n",
"# import mplfinance as mpf\n",
"\n",
"import pandas as pd\n",
"import pandas_ta as ta\n",
"from alphaVantageAPI.alphavantage import AlphaVantage # pip install alphaVantage-api\n",
"\n",
"from watchlist import Watchlist\n",
"%pylab inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# What is a Pandas TA Strategy?\n",
"A _Strategy_ is a simple way to name and group your favorite TA indicators. Technically, a _Strategy_ is a simple Data Class to contain list of indicators and their parameters. __Note__: _Strategy_ is experimental and subject to change. Pandas TA comes with two basic Strategies: __AllStrategy__ and __CommonStrategy__.\n",
"\n",
"## Strategy Requirements:\n",
"- _name_: Some short memorable string. _Note_: Case-insensitive \"All\" is reserved.\n",
"- _ta_: A list of dicts containing keyword arguments to identify the indicator and the indicator's arguments\n",
"\n",
"## Optional Requirements:\n",
"- _description_: A more detailed description of what the Strategy tries to capture. Default: None\n",
"- _created_: At datetime string of when it was created. Default: Automatically generated.\n",
"\n",
"### Things to note:\n",
"- A Strategy will __fail__ when consumed by Pandas TA if there is no {\"kind\": \"indicator name\"} attribute."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Builtin Examples"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### All"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"name = All\n",
"description = All the indicators with their default settings. Pandas TA default.\n",
"created = 07/25/2020, 11:24:19\n",
"ta = None\n"
]
}
],
"source": [
"AllStrategy = ta.AllStrategy\n",
"print(\"name =\", AllStrategy.name)\n",
"print(\"description =\", AllStrategy.description)\n",
"print(\"created =\", AllStrategy.created)\n",
"print(\"ta =\", AllStrategy.ta)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Common"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"name = Common Price and Volume SMAs\n",
"description = Common Price SMAs: 10, 20, 50, 200 and Volume SMA: 20.\n",
"created = 07/25/2020, 11:24:19\n",
"ta = [{'kind': 'sma', 'length': 10}, {'kind': 'sma', 'length': 20}, {'kind': 'sma', 'length': 50}, {'kind': 'sma', 'length': 200}, {'kind': 'sma', 'close': 'volume', 'length': 20, 'prefix': 'VOL'}]\n"
]
}
],
"source": [
"CommonStrategy = ta.CommonStrategy\n",
"print(\"name =\", CommonStrategy.name)\n",
"print(\"description =\", CommonStrategy.description)\n",
"print(\"created =\", CommonStrategy.created)\n",
"print(\"ta =\", CommonStrategy.ta)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Creating Strategies"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Simple Strategy A"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Strategy(name='A', ta=[{'kind': 'sma', 'length': 50}, {'kind': 'sma', 'length': 200}], description=None, created='07/25/2020, 11:24:19', last_run=None, run_time=None)"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"custom_a = ta.Strategy(name=\"A\", ta=[{\"kind\": \"sma\", \"length\": 50}, {\"kind\": \"sma\", \"length\": 200}])\n",
"custom_a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Simple Strategy B"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Strategy(name='B', ta=[{'kind': 'ema', 'length': 8}, {'kind': 'ema', 'length': 21}, {'kind': 'log_return', 'cumulative': True}, {'kind': 'rsi'}, {'kind': 'supertrend'}], description=None, created='07/25/2020, 11:24:19', last_run=None, run_time=None)"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"custom_b = ta.Strategy(name=\"B\", ta=[{\"kind\": \"ema\", \"length\": 8}, {\"kind\": \"ema\", \"length\": 21}, {\"kind\": \"log_return\", \"cumulative\": True}, {\"kind\": \"rsi\"}, {\"kind\": \"supertrend\"}])\n",
"custom_b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Bad Strategy. (Misspelled Indicator)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Strategy(name='Runtime Failure', ta=[{'kind': 'percet_return'}], description=None, created='07/25/2020, 11:24:19', last_run=None, run_time=None)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Misspelled indicator, will fail later when ran with Pandas\n",
"custom_run_failure = ta.Strategy(name=\"Runtime Failure\", ta=[{\"kind\": \"percet_return\"}])\n",
"custom_run_failure"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Strategy Management and Execution with _Watchlist_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Initialize AlphaVantage Data Source"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"AlphaVantage(\n",
" end_point:str = https://www.alphavantage.co/query,\n",
" api_key:str = YOUR API KEY,\n",
" export:bool = True,\n",
" export_path:str = .,\n",
" output_size:str = full,\n",
" output:str = csv,\n",
" datatype:str = json,\n",
" clean:bool = True,\n",
" proxy:dict = {}\n",
")"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"AV = AlphaVantage(\n",
" api_key=\"YOUR API KEY\", premium=False,\n",
" output_size='full', clean=True,\n",
" export_path=\".\", export=True\n",
")\n",
"AV"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Create Watchlist and set it's 'ds' to AlphaVantage"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"watch = Watchlist([\"SPY\", \"IWM\"], ds=AV)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Info about the Watchlist. Note, the default Strategy is \"All\""
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Watch(name='Watchlist: SPY, IWM', tickers[2]='SPY, IWM', tf='D', strategy[0]='All')"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"watch"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Help about Watchlist"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Help on class Watchlist in module watchlist:\n",
"\n",
"class Watchlist(builtins.object)\n",
" | Watchlist(tickers: list, tf: str = None, name: str = None, strategy: pandas_ta.core.Strategy = None, ds: object = None, **kwargs)\n",
" | \n",
" | Watchlist Class (** This is subject to change! **)\n",
" | ============================================================================\n",
" | A simple Class to load/download financial market data and automatically\n",
" | apply Technical Analysis indicators with a Pandas TA Strategy. Default\n",
" | Strategy: pandas_ta.AllStrategy.\n",
" | \n",
" | Requirements:\n",
" | - Pandas TA (pip install pandas_ta)\n",
" | - AlphaVantage (pip install alphaVantage-api) for the Default Data Source.\n",
" | To use another Data Source, update the load() method after AV.\n",
" | \n",
" | Required Arguments:\n",
" | - tickers: A list of strings containing tickers. Example: ['SPY', 'AAPL']\n",
" | ============================================================================\n",
" | \n",
" | Methods defined here:\n",
" | \n",
" | __init__(self, tickers: list, tf: str = None, name: str = None, strategy: pandas_ta.core.Strategy = None, ds: object = None, **kwargs)\n",
" | Initialize self. See help(type(self)) for accurate signature.\n",
" | \n",
" | __repr__(self) -> str\n",
" | Return repr(self).\n",
" | \n",
" | indicators(self, *args, **kwargs) -> <built-in function any>\n",
" | Returns the list of indicators that are available with Pandas Ta.\n",
" | \n",
" | load(self, ticker: str = None, tf: str = None, index: str = 'date', drop: list = ['dividend', 'split_coefficient'], file_path: str = '.', **kwargs) -> pandas.core.frame.DataFrame\n",
" | Loads or Downloads (if a local csv does not exist) the data from the\n",
" | Data Source. When successful, it returns a Data Frame for the requested\n",
" | ticker. If no tickers are given, it loads all the tickers.\n",
" | \n",
" | ----------------------------------------------------------------------\n",
" | Data descriptors defined here:\n",
" | \n",
" | __dict__\n",
" | dictionary for instance variables (if defined)\n",
" | \n",
" | __weakref__\n",
" | list of weak references to the object (if defined)\n",
" | \n",
" | data\n",
" | When not None, it contains a dictionary of DataFrames keyed by ticker. data = {\"SPY\": pd.DataFrame, ...}\n",
" | \n",
" | name\n",
" | The name of the Watchlist. Default: \"Watchlist: {Watchlist.tickers}\".\n",
" | \n",
" | strategy\n",
" | Pandas TA Strategy Class. Default: pandas_ta.AllStrategy\n",
" | \n",
" | tf\n",
" | Alias for timeframe. Default: 'D'\n",
" | \n",
" | tickers\n",
" | tickers\n",
" | \n",
" | If a string, it it converted to a list. Example: 'AAPL' -> ['AAPL']\n",
" | * Does not accept, comma seperated strings.\n",
" | If a list, checks if it is a list of strings.\n",
" | \n",
" | verbose\n",
" | Toggle the verbose property. Default: False\n",
"\n"
]
}
],
"source": [
"help(Watchlist)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Default Strategy is \"All\""
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[!] Loading All: SPY, IWM\n",
"\n",
"[+] Downloading['D']: SPY\n",
"[+] Strategy: All\n",
"[i] Indicators with the following arguments: {'append': True}\n",
"[i] Excluded[10]: above, above_value, below, below_value, cross, cross_value, long_run, short_run, trend_return, vp\n",
"[i] Total indicators: 101\n",
"[i] Columns added: 152\n",
"\n",
"[+] Downloading['D']: IWM\n",
"[+] Strategy: All\n",
"[i] Indicators with the following arguments: {'append': True}\n",
"[i] Excluded[10]: above, above_value, below, below_value, cross, cross_value, long_run, short_run, trend_return, vp\n",
"[i] Total indicators: 101\n",
"[i] Columns added: 152\n"
]
}
],
"source": [
"# No arguments loads all the tickers and applies the Strategy to each ticker.\n",
"# The result can be accessed with Watchlist's 'data' property which returns a dictionary keyed by ticker and DataFrames as values \n",
"watch.load(verbose=True, timed=False)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'SPY': open high low close volume ABER_ZG_5_15 \\\n",
" date \n",
" 1999-11-01 136.5000 137.0000 135.5625 135.5625 4006500.0 NaN \n",
" 1999-11-02 135.9687 137.2500 134.5937 134.5937 6516900.0 NaN \n",
" 1999-11-03 136.0000 136.3750 135.1250 135.5000 7222300.0 NaN \n",
" 1999-11-04 136.7500 137.3593 135.7656 136.5312 7907500.0 NaN \n",
" 1999-11-05 138.6250 139.1093 136.7812 137.8750 7431500.0 136.332267 \n",
" ... ... ... ... ... ... ... \n",
" 2020-07-20 321.4300 325.1300 320.6200 324.3200 56150230.0 320.673333 \n",
" 2020-07-21 326.4500 326.9300 323.9400 325.0100 57245315.0 322.353333 \n",
" 2020-07-22 324.6200 327.2000 324.5000 326.8600 57792915.0 323.313333 \n",
" 2020-07-23 326.4700 327.2300 321.4800 322.9600 75737989.0 324.014000 \n",
" 2020-07-24 320.9500 321.9900 319.2460 320.8800 73766597.0 323.886400 \n",
" \n",
" ABER_SG_5_15 ABER_XG_5_15 ABER_ATR_5_15 ACCBL_20 ... \\\n",
" date ... \n",
" 1999-11-01 NaN NaN NaN NaN ... \n",
" 1999-11-02 NaN NaN NaN NaN ... \n",
" 1999-11-03 NaN NaN NaN NaN ... \n",
" 1999-11-04 NaN NaN NaN NaN ... \n",
" 1999-11-05 NaN NaN NaN NaN ... \n",
" ... ... ... ... ... ... \n",
" 2020-07-20 326.296123 315.050544 5.622790 300.906776 ... \n",
" 2020-07-21 327.800604 316.906063 5.447270 301.895656 ... \n",
" 2020-07-22 328.577452 318.049214 5.264119 302.558926 ... \n",
" 2020-07-23 329.310511 318.717489 5.296511 303.787477 ... \n",
" 2020-07-24 329.077410 318.695390 5.191010 305.041909 ... \n",
" \n",
" VAR_30 VTXP_14 VTXM_14 VWAP VWMA_10 WCP \\\n",
" date \n",
" 1999-11-01 NaN NaN NaN 136.041667 NaN 135.921875 \n",
" 1999-11-02 NaN NaN NaN 135.693303 NaN 135.257775 \n",
" 1999-11-03 NaN NaN NaN 135.682462 NaN 135.625000 \n",
" 1999-11-04 NaN NaN NaN 135.950504 NaN 136.546825 \n",
" 1999-11-05 NaN NaN NaN 136.393305 NaN 137.910125 \n",
" ... ... ... ... ... ... ... \n",
" 2020-07-20 45.091757 1.223611 0.623952 153.261128 318.474591 323.597500 \n",
" 2020-07-21 46.469833 1.211493 0.661493 153.278065 319.600245 325.222500 \n",
" 2020-07-22 50.919143 1.153997 0.689436 153.295250 320.677611 326.355000 \n",
" 2020-07-23 52.999190 1.085706 0.763560 153.317466 321.522738 323.657500 \n",
" 2020-07-24 48.773943 1.027629 0.904621 153.338694 321.846761 320.749000 \n",
" \n",
" WILLR_14 WMA_10 ZL_EMA_10 Z_30 \n",
" date \n",
" 1999-11-01 NaN NaN NaN NaN \n",
" 1999-11-02 NaN NaN NaN NaN \n",
" 1999-11-03 NaN NaN NaN NaN \n",
" 1999-11-04 NaN NaN NaN NaN \n",
" 1999-11-05 NaN NaN NaN NaN \n",
" ... ... ... ... ... \n",
" 2020-07-20 -3.801032 320.096545 323.215081 1.680556 \n",
" 2020-07-21 -10.750280 321.291636 324.115975 1.747819 \n",
" 2020-07-22 -2.058111 322.618909 325.718525 1.900614 \n",
" 2020-07-23 -25.800604 323.042909 325.442430 1.309102 \n",
" 2020-07-24 -38.368580 322.932727 323.987442 0.970050 \n",
" \n",
" [5216 rows x 157 columns],\n",
" 'IWM': open high low close volume ABER_ZG_5_15 \\\n",
" date \n",
" 2000-05-26 91.06 91.440 90.63 91.44 37400.0 NaN \n",
" 2000-05-30 92.75 94.810 92.75 94.81 28800.0 NaN \n",
" 2000-05-31 95.13 96.380 95.13 95.75 18000.0 NaN \n",
" 2000-06-01 97.11 97.310 97.11 97.31 3500.0 NaN \n",
" 2000-06-02 101.70 102.400 101.70 102.40 14700.0 96.091333 \n",
" ... ... ... ... ... ... ... \n",
" 2020-07-20 146.12 146.850 145.15 145.96 19581689.0 145.160667 \n",
" 2020-07-21 147.47 149.160 147.20 148.03 24467065.0 146.623333 \n",
" 2020-07-22 147.09 148.670 147.03 148.11 24424808.0 146.904000 \n",
" 2020-07-23 147.98 150.200 146.70 148.26 21704889.0 147.400667 \n",
" 2020-07-24 147.29 147.665 145.56 146.08 20015547.0 147.375000 \n",
" \n",
" ABER_SG_5_15 ABER_XG_5_15 ABER_ATR_5_15 ACCBL_20 ... \\\n",
" date ... \n",
" 2000-05-26 NaN NaN NaN NaN ... \n",
" 2000-05-30 NaN NaN NaN NaN ... \n",
" 2000-05-31 NaN NaN NaN NaN ... \n",
" 2000-06-01 NaN NaN NaN NaN ... \n",
" 2000-06-02 NaN NaN NaN NaN ... \n",
" ... ... ... ... ... ... \n",
" 2020-07-20 149.115307 141.206027 3.954640 133.720919 ... \n",
" 2020-07-21 150.527664 142.719003 3.904331 134.312771 ... \n",
" 2020-07-22 150.657375 143.150625 3.753375 134.568274 ... \n",
" 2020-07-23 151.137150 143.664183 3.736483 135.260831 ... \n",
" 2020-07-24 151.042385 143.707615 3.667385 135.937695 ... \n",
" \n",
" VAR_30 VTXP_14 VTXM_14 VWAP VWMA_10 WCP \\\n",
" date \n",
" 2000-05-26 NaN NaN NaN 91.170000 NaN 91.23750 \n",
" 2000-05-30 NaN NaN NaN 92.454834 NaN 94.29500 \n",
" 2000-05-31 NaN NaN NaN 93.159976 NaN 95.75250 \n",
" 2000-06-01 NaN NaN NaN 93.322938 NaN 97.26000 \n",
" 2000-06-02 NaN NaN NaN 94.592497 NaN 102.22500 \n",
" ... ... ... ... ... ... ... \n",
" 2020-07-20 14.347839 1.085970 0.934117 88.365517 143.089584 145.98000 \n",
" 2020-07-21 11.515402 1.030077 0.909147 88.373544 143.813948 148.10500 \n",
" 2020-07-22 10.497958 1.013525 0.935595 88.381529 144.438962 147.98000 \n",
" 2020-07-23 11.200568 0.993994 0.920849 88.388676 145.342850 148.35500 \n",
" 2020-07-24 9.687226 0.945133 0.982616 88.395051 145.807709 146.34625 \n",
" \n",
" WILLR_14 WMA_10 ZL_EMA_10 Z_30 \n",
" date \n",
" 2000-05-26 NaN NaN NaN NaN \n",
" 2000-05-30 NaN NaN NaN NaN \n",
" 2000-05-31 NaN NaN NaN NaN \n",
" 2000-06-01 NaN NaN NaN NaN \n",
" 2000-06-02 NaN NaN NaN NaN \n",
" ... ... ... ... ... \n",
" 2020-07-20 -17.267552 144.240000 146.914980 0.906142 \n",
" 2020-07-21 -9.479866 145.149091 147.299529 1.671168 \n",
" 2020-07-22 -8.808725 145.942909 147.801433 1.797089 \n",
" 2020-07-23 -14.969136 146.651818 148.188445 1.763914 \n",
" 2020-07-24 -31.790123 146.797273 147.826909 1.077936 \n",
" \n",
" [5072 rows x 157 columns]}"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"watch.data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### "
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>open</th>\n",
" <th>high</th>\n",
" <th>low</th>\n",
" <th>close</th>\n",
" <th>volume</th>\n",
" <th>ABER_ZG_5_15</th>\n",
" <th>ABER_SG_5_15</th>\n",
" <th>ABER_XG_5_15</th>\n",
" <th>ABER_ATR_5_15</th>\n",
" <th>ACCBL_20</th>\n",
" <th>...</th>\n",
" <th>VAR_30</th>\n",
" <th>VTXP_14</th>\n",
" <th>VTXM_14</th>\n",
" <th>VWAP</th>\n",
" <th>VWMA_10</th>\n",
" <th>WCP</th>\n",
" <th>WILLR_14</th>\n",
" <th>WMA_10</th>\n",
" <th>ZL_EMA_10</th>\n",
" <th>Z_30</th>\n",
" </tr>\n",
" <tr>\n",
" <th>date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1999-11-01</th>\n",
" <td>136.5000</td>\n",
" <td>137.0000</td>\n",
" <td>135.5625</td>\n",
" <td>135.5625</td>\n",
" <td>4006500.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>136.041667</td>\n",
" <td>NaN</td>\n",
" <td>135.921875</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-02</th>\n",
" <td>135.9687</td>\n",
" <td>137.2500</td>\n",
" <td>134.5937</td>\n",
" <td>134.5937</td>\n",
" <td>6516900.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>135.693303</td>\n",
" <td>NaN</td>\n",
" <td>135.257775</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-03</th>\n",
" <td>136.0000</td>\n",
" <td>136.3750</td>\n",
" <td>135.1250</td>\n",
" <td>135.5000</td>\n",
" <td>7222300.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>135.682462</td>\n",
" <td>NaN</td>\n",
" <td>135.625000</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-04</th>\n",
" <td>136.7500</td>\n",
" <td>137.3593</td>\n",
" <td>135.7656</td>\n",
" <td>136.5312</td>\n",
" <td>7907500.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>135.950504</td>\n",
" <td>NaN</td>\n",
" <td>136.546825</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-05</th>\n",
" <td>138.6250</td>\n",
" <td>139.1093</td>\n",
" <td>136.7812</td>\n",
" <td>137.8750</td>\n",
" <td>7431500.0</td>\n",
" <td>136.332267</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>136.393305</td>\n",
" <td>NaN</td>\n",
" <td>137.910125</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-20</th>\n",
" <td>321.4300</td>\n",
" <td>325.1300</td>\n",
" <td>320.6200</td>\n",
" <td>324.3200</td>\n",
" <td>56150230.0</td>\n",
" <td>320.673333</td>\n",
" <td>326.296123</td>\n",
" <td>315.050544</td>\n",
" <td>5.622790</td>\n",
" <td>300.906776</td>\n",
" <td>...</td>\n",
" <td>45.091757</td>\n",
" <td>1.223611</td>\n",
" <td>0.623952</td>\n",
" <td>153.261128</td>\n",
" <td>318.474591</td>\n",
" <td>323.597500</td>\n",
" <td>-3.801032</td>\n",
" <td>320.096545</td>\n",
" <td>323.215081</td>\n",
" <td>1.680556</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-21</th>\n",
" <td>326.4500</td>\n",
" <td>326.9300</td>\n",
" <td>323.9400</td>\n",
" <td>325.0100</td>\n",
" <td>57245315.0</td>\n",
" <td>322.353333</td>\n",
" <td>327.800604</td>\n",
" <td>316.906063</td>\n",
" <td>5.447270</td>\n",
" <td>301.895656</td>\n",
" <td>...</td>\n",
" <td>46.469833</td>\n",
" <td>1.211493</td>\n",
" <td>0.661493</td>\n",
" <td>153.278065</td>\n",
" <td>319.600245</td>\n",
" <td>325.222500</td>\n",
" <td>-10.750280</td>\n",
" <td>321.291636</td>\n",
" <td>324.115975</td>\n",
" <td>1.747819</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-22</th>\n",
" <td>324.6200</td>\n",
" <td>327.2000</td>\n",
" <td>324.5000</td>\n",
" <td>326.8600</td>\n",
" <td>57792915.0</td>\n",
" <td>323.313333</td>\n",
" <td>328.577452</td>\n",
" <td>318.049214</td>\n",
" <td>5.264119</td>\n",
" <td>302.558926</td>\n",
" <td>...</td>\n",
" <td>50.919143</td>\n",
" <td>1.153997</td>\n",
" <td>0.689436</td>\n",
" <td>153.295250</td>\n",
" <td>320.677611</td>\n",
" <td>326.355000</td>\n",
" <td>-2.058111</td>\n",
" <td>322.618909</td>\n",
" <td>325.718525</td>\n",
" <td>1.900614</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-23</th>\n",
" <td>326.4700</td>\n",
" <td>327.2300</td>\n",
" <td>321.4800</td>\n",
" <td>322.9600</td>\n",
" <td>75737989.0</td>\n",
" <td>324.014000</td>\n",
" <td>329.310511</td>\n",
" <td>318.717489</td>\n",
" <td>5.296511</td>\n",
" <td>303.787477</td>\n",
" <td>...</td>\n",
" <td>52.999190</td>\n",
" <td>1.085706</td>\n",
" <td>0.763560</td>\n",
" <td>153.317466</td>\n",
" <td>321.522738</td>\n",
" <td>323.657500</td>\n",
" <td>-25.800604</td>\n",
" <td>323.042909</td>\n",
" <td>325.442430</td>\n",
" <td>1.309102</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-24</th>\n",
" <td>320.9500</td>\n",
" <td>321.9900</td>\n",
" <td>319.2460</td>\n",
" <td>320.8800</td>\n",
" <td>73766597.0</td>\n",
" <td>323.886400</td>\n",
" <td>329.077410</td>\n",
" <td>318.695390</td>\n",
" <td>5.191010</td>\n",
" <td>305.041909</td>\n",
" <td>...</td>\n",
" <td>48.773943</td>\n",
" <td>1.027629</td>\n",
" <td>0.904621</td>\n",
" <td>153.338694</td>\n",
" <td>321.846761</td>\n",
" <td>320.749000</td>\n",
" <td>-38.368580</td>\n",
" <td>322.932727</td>\n",
" <td>323.987442</td>\n",
" <td>0.970050</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5216 rows × 157 columns</p>\n",
"</div>"
],
"text/plain": [
" open high low close volume ABER_ZG_5_15 \\\n",
"date \n",
"1999-11-01 136.5000 137.0000 135.5625 135.5625 4006500.0 NaN \n",
"1999-11-02 135.9687 137.2500 134.5937 134.5937 6516900.0 NaN \n",
"1999-11-03 136.0000 136.3750 135.1250 135.5000 7222300.0 NaN \n",
"1999-11-04 136.7500 137.3593 135.7656 136.5312 7907500.0 NaN \n",
"1999-11-05 138.6250 139.1093 136.7812 137.8750 7431500.0 136.332267 \n",
"... ... ... ... ... ... ... \n",
"2020-07-20 321.4300 325.1300 320.6200 324.3200 56150230.0 320.673333 \n",
"2020-07-21 326.4500 326.9300 323.9400 325.0100 57245315.0 322.353333 \n",
"2020-07-22 324.6200 327.2000 324.5000 326.8600 57792915.0 323.313333 \n",
"2020-07-23 326.4700 327.2300 321.4800 322.9600 75737989.0 324.014000 \n",
"2020-07-24 320.9500 321.9900 319.2460 320.8800 73766597.0 323.886400 \n",
"\n",
" ABER_SG_5_15 ABER_XG_5_15 ABER_ATR_5_15 ACCBL_20 ... \\\n",
"date ... \n",
"1999-11-01 NaN NaN NaN NaN ... \n",
"1999-11-02 NaN NaN NaN NaN ... \n",
"1999-11-03 NaN NaN NaN NaN ... \n",
"1999-11-04 NaN NaN NaN NaN ... \n",
"1999-11-05 NaN NaN NaN NaN ... \n",
"... ... ... ... ... ... \n",
"2020-07-20 326.296123 315.050544 5.622790 300.906776 ... \n",
"2020-07-21 327.800604 316.906063 5.447270 301.895656 ... \n",
"2020-07-22 328.577452 318.049214 5.264119 302.558926 ... \n",
"2020-07-23 329.310511 318.717489 5.296511 303.787477 ... \n",
"2020-07-24 329.077410 318.695390 5.191010 305.041909 ... \n",
"\n",
" VAR_30 VTXP_14 VTXM_14 VWAP VWMA_10 WCP \\\n",
"date \n",
"1999-11-01 NaN NaN NaN 136.041667 NaN 135.921875 \n",
"1999-11-02 NaN NaN NaN 135.693303 NaN 135.257775 \n",
"1999-11-03 NaN NaN NaN 135.682462 NaN 135.625000 \n",
"1999-11-04 NaN NaN NaN 135.950504 NaN 136.546825 \n",
"1999-11-05 NaN NaN NaN 136.393305 NaN 137.910125 \n",
"... ... ... ... ... ... ... \n",
"2020-07-20 45.091757 1.223611 0.623952 153.261128 318.474591 323.597500 \n",
"2020-07-21 46.469833 1.211493 0.661493 153.278065 319.600245 325.222500 \n",
"2020-07-22 50.919143 1.153997 0.689436 153.295250 320.677611 326.355000 \n",
"2020-07-23 52.999190 1.085706 0.763560 153.317466 321.522738 323.657500 \n",
"2020-07-24 48.773943 1.027629 0.904621 153.338694 321.846761 320.749000 \n",
"\n",
" WILLR_14 WMA_10 ZL_EMA_10 Z_30 \n",
"date \n",
"1999-11-01 NaN NaN NaN NaN \n",
"1999-11-02 NaN NaN NaN NaN \n",
"1999-11-03 NaN NaN NaN NaN \n",
"1999-11-04 NaN NaN NaN NaN \n",
"1999-11-05 NaN NaN NaN NaN \n",
"... ... ... ... ... \n",
"2020-07-20 -3.801032 320.096545 323.215081 1.680556 \n",
"2020-07-21 -10.750280 321.291636 324.115975 1.747819 \n",
"2020-07-22 -2.058111 322.618909 325.718525 1.900614 \n",
"2020-07-23 -25.800604 323.042909 325.442430 1.309102 \n",
"2020-07-24 -38.368580 322.932727 323.987442 0.970050 \n",
"\n",
"[5216 rows x 157 columns]"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"watch.data['SPY']"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Easy to swap Strategies and run them"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Running Simple Strategy A"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Strategy(name='A', ta=[{'kind': 'sma', 'length': 50}, {'kind': 'sma', 'length': 200}], description=None, created='07/25/2020, 11:24:19', last_run=None, run_time=None)"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Load custom_a into Watchlist and verify\n",
"watch.strategy = custom_a\n",
"watch.strategy"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"[i] Loaded['D']: IWM_D.csv\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>open</th>\n",
" <th>high</th>\n",
" <th>low</th>\n",
" <th>close</th>\n",
" <th>volume</th>\n",
" <th>SMA_50</th>\n",
" <th>SMA_200</th>\n",
" </tr>\n",
" <tr>\n",
" <th>date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2000-05-26</th>\n",
" <td>91.06</td>\n",
" <td>91.440</td>\n",
" <td>90.63</td>\n",
" <td>91.44</td>\n",
" <td>37400.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2000-05-30</th>\n",
" <td>92.75</td>\n",
" <td>94.810</td>\n",
" <td>92.75</td>\n",
" <td>94.81</td>\n",
" <td>28800.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2000-05-31</th>\n",
" <td>95.13</td>\n",
" <td>96.380</td>\n",
" <td>95.13</td>\n",
" <td>95.75</td>\n",
" <td>18000.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2000-06-01</th>\n",
" <td>97.11</td>\n",
" <td>97.310</td>\n",
" <td>97.11</td>\n",
" <td>97.31</td>\n",
" <td>3500.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2000-06-02</th>\n",
" <td>101.70</td>\n",
" <td>102.400</td>\n",
" <td>101.70</td>\n",
" <td>102.40</td>\n",
" <td>14700.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-20</th>\n",
" <td>146.12</td>\n",
" <td>146.850</td>\n",
" <td>145.15</td>\n",
" <td>145.96</td>\n",
" <td>19581689.0</td>\n",
" <td>139.7062</td>\n",
" <td>145.93605</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-21</th>\n",
" <td>147.47</td>\n",
" <td>149.160</td>\n",
" <td>147.20</td>\n",
" <td>148.03</td>\n",
" <td>24467065.0</td>\n",
" <td>140.0196</td>\n",
" <td>145.93750</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-22</th>\n",
" <td>147.09</td>\n",
" <td>148.670</td>\n",
" <td>147.03</td>\n",
" <td>148.11</td>\n",
" <td>24424808.0</td>\n",
" <td>140.3478</td>\n",
" <td>145.93235</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-23</th>\n",
" <td>147.98</td>\n",
" <td>150.200</td>\n",
" <td>146.70</td>\n",
" <td>148.26</td>\n",
" <td>21704889.0</td>\n",
" <td>140.7736</td>\n",
" <td>145.92925</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-24</th>\n",
" <td>147.29</td>\n",
" <td>147.665</td>\n",
" <td>145.56</td>\n",
" <td>146.08</td>\n",
" <td>20015547.0</td>\n",
" <td>141.2408</td>\n",
" <td>145.92735</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5072 rows × 7 columns</p>\n",
"</div>"
],
"text/plain": [
" open high low close volume SMA_50 SMA_200\n",
"date \n",
"2000-05-26 91.06 91.440 90.63 91.44 37400.0 NaN NaN\n",
"2000-05-30 92.75 94.810 92.75 94.81 28800.0 NaN NaN\n",
"2000-05-31 95.13 96.380 95.13 95.75 18000.0 NaN NaN\n",
"2000-06-01 97.11 97.310 97.11 97.31 3500.0 NaN NaN\n",
"2000-06-02 101.70 102.400 101.70 102.40 14700.0 NaN NaN\n",
"... ... ... ... ... ... ... ...\n",
"2020-07-20 146.12 146.850 145.15 145.96 19581689.0 139.7062 145.93605\n",
"2020-07-21 147.47 149.160 147.20 148.03 24467065.0 140.0196 145.93750\n",
"2020-07-22 147.09 148.670 147.03 148.11 24424808.0 140.3478 145.93235\n",
"2020-07-23 147.98 150.200 146.70 148.26 21704889.0 140.7736 145.92925\n",
"2020-07-24 147.29 147.665 145.56 146.08 20015547.0 141.2408 145.92735\n",
"\n",
"[5072 rows x 7 columns]"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"watch.load('IWM')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Running Simple Strategy B"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Strategy(name='B', ta=[{'kind': 'ema', 'length': 8}, {'kind': 'ema', 'length': 21}, {'kind': 'log_return', 'cumulative': True}, {'kind': 'rsi'}, {'kind': 'supertrend'}], description=None, created='07/25/2020, 11:24:19', last_run=None, run_time=None)"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Load custom_b into Watchlist and verify\n",
"watch.strategy = custom_b\n",
"watch.strategy"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"[i] Loaded['D']: SPY_D.csv\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>open</th>\n",
" <th>high</th>\n",
" <th>low</th>\n",
" <th>close</th>\n",
" <th>volume</th>\n",
" <th>EMA_8</th>\n",
" <th>EMA_21</th>\n",
" <th>CUMLOGRET_1</th>\n",
" <th>RSI_14</th>\n",
" <th>SUPERT_7_3.0</th>\n",
" <th>SUPERTd_7_3.0</th>\n",
" <th>SUPERTl_7_3.0</th>\n",
" <th>SUPERTs_7_3.0</th>\n",
" </tr>\n",
" <tr>\n",
" <th>date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1999-11-01</th>\n",
" <td>136.5000</td>\n",
" <td>137.0000</td>\n",
" <td>135.5625</td>\n",
" <td>135.5625</td>\n",
" <td>4006500.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.000000</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-02</th>\n",
" <td>135.9687</td>\n",
" <td>137.2500</td>\n",
" <td>134.5937</td>\n",
" <td>134.5937</td>\n",
" <td>6516900.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>-0.007172</td>\n",
" <td>0.000000</td>\n",
" <td>NaN</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-03</th>\n",
" <td>136.0000</td>\n",
" <td>136.3750</td>\n",
" <td>135.1250</td>\n",
" <td>135.5000</td>\n",
" <td>7222300.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>-0.000461</td>\n",
" <td>50.185503</td>\n",
" <td>NaN</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-04</th>\n",
" <td>136.7500</td>\n",
" <td>137.3593</td>\n",
" <td>135.7656</td>\n",
" <td>136.5312</td>\n",
" <td>7907500.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.007120</td>\n",
" <td>69.153995</td>\n",
" <td>NaN</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-05</th>\n",
" <td>138.6250</td>\n",
" <td>139.1093</td>\n",
" <td>136.7812</td>\n",
" <td>137.8750</td>\n",
" <td>7431500.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.016915</td>\n",
" <td>79.896816</td>\n",
" <td>NaN</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-20</th>\n",
" <td>321.4300</td>\n",
" <td>325.1300</td>\n",
" <td>320.6200</td>\n",
" <td>324.3200</td>\n",
" <td>56150230.0</td>\n",
" <td>319.783320</td>\n",
" <td>315.076450</td>\n",
" <td>0.872298</td>\n",
" <td>63.569724</td>\n",
" <td>307.890439</td>\n",
" <td>1</td>\n",
" <td>307.890439</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-21</th>\n",
" <td>326.4500</td>\n",
" <td>326.9300</td>\n",
" <td>323.9400</td>\n",
" <td>325.0100</td>\n",
" <td>57245315.0</td>\n",
" <td>320.944805</td>\n",
" <td>315.979500</td>\n",
" <td>0.874423</td>\n",
" <td>64.179426</td>\n",
" <td>311.309662</td>\n",
" <td>1</td>\n",
" <td>311.309662</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-22</th>\n",
" <td>324.6200</td>\n",
" <td>327.2000</td>\n",
" <td>324.5000</td>\n",
" <td>326.8600</td>\n",
" <td>57792915.0</td>\n",
" <td>322.259293</td>\n",
" <td>316.968636</td>\n",
" <td>0.880099</td>\n",
" <td>65.830627</td>\n",
" <td>312.585425</td>\n",
" <td>1</td>\n",
" <td>312.585425</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-23</th>\n",
" <td>326.4700</td>\n",
" <td>327.2300</td>\n",
" <td>321.4800</td>\n",
" <td>322.9600</td>\n",
" <td>75737989.0</td>\n",
" <td>322.415005</td>\n",
" <td>317.513306</td>\n",
" <td>0.868096</td>\n",
" <td>59.594031</td>\n",
" <td>312.585425</td>\n",
" <td>1</td>\n",
" <td>312.585425</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-24</th>\n",
" <td>320.9500</td>\n",
" <td>321.9900</td>\n",
" <td>319.2460</td>\n",
" <td>320.8800</td>\n",
" <td>73766597.0</td>\n",
" <td>322.073893</td>\n",
" <td>317.819369</td>\n",
" <td>0.861634</td>\n",
" <td>56.518677</td>\n",
" <td>312.585425</td>\n",
" <td>1</td>\n",
" <td>312.585425</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5216 rows × 13 columns</p>\n",
"</div>"
],
"text/plain": [
" open high low close volume EMA_8 \\\n",
"date \n",
"1999-11-01 136.5000 137.0000 135.5625 135.5625 4006500.0 NaN \n",
"1999-11-02 135.9687 137.2500 134.5937 134.5937 6516900.0 NaN \n",
"1999-11-03 136.0000 136.3750 135.1250 135.5000 7222300.0 NaN \n",
"1999-11-04 136.7500 137.3593 135.7656 136.5312 7907500.0 NaN \n",
"1999-11-05 138.6250 139.1093 136.7812 137.8750 7431500.0 NaN \n",
"... ... ... ... ... ... ... \n",
"2020-07-20 321.4300 325.1300 320.6200 324.3200 56150230.0 319.783320 \n",
"2020-07-21 326.4500 326.9300 323.9400 325.0100 57245315.0 320.944805 \n",
"2020-07-22 324.6200 327.2000 324.5000 326.8600 57792915.0 322.259293 \n",
"2020-07-23 326.4700 327.2300 321.4800 322.9600 75737989.0 322.415005 \n",
"2020-07-24 320.9500 321.9900 319.2460 320.8800 73766597.0 322.073893 \n",
"\n",
" EMA_21 CUMLOGRET_1 RSI_14 SUPERT_7_3.0 SUPERTd_7_3.0 \\\n",
"date \n",
"1999-11-01 NaN NaN NaN 0.000000 1 \n",
"1999-11-02 NaN -0.007172 0.000000 NaN 1 \n",
"1999-11-03 NaN -0.000461 50.185503 NaN 1 \n",
"1999-11-04 NaN 0.007120 69.153995 NaN 1 \n",
"1999-11-05 NaN 0.016915 79.896816 NaN 1 \n",
"... ... ... ... ... ... \n",
"2020-07-20 315.076450 0.872298 63.569724 307.890439 1 \n",
"2020-07-21 315.979500 0.874423 64.179426 311.309662 1 \n",
"2020-07-22 316.968636 0.880099 65.830627 312.585425 1 \n",
"2020-07-23 317.513306 0.868096 59.594031 312.585425 1 \n",
"2020-07-24 317.819369 0.861634 56.518677 312.585425 1 \n",
"\n",
" SUPERTl_7_3.0 SUPERTs_7_3.0 \n",
"date \n",
"1999-11-01 NaN NaN \n",
"1999-11-02 NaN NaN \n",
"1999-11-03 NaN NaN \n",
"1999-11-04 NaN NaN \n",
"1999-11-05 NaN NaN \n",
"... ... ... \n",
"2020-07-20 307.890439 NaN \n",
"2020-07-21 311.309662 NaN \n",
"2020-07-22 312.585425 NaN \n",
"2020-07-23 312.585425 NaN \n",
"2020-07-24 312.585425 NaN \n",
"\n",
"[5216 rows x 13 columns]"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"watch.load('SPY')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Running Bad Strategy. (Misspelled indicator)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Strategy(name='Runtime Failure', ta=[{'kind': 'percet_return'}], description=None, created='07/25/2020, 11:24:19', last_run=None, run_time=None)"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Load custom_run_failure into Watchlist and verify\n",
"watch.strategy = custom_run_failure\n",
"watch.strategy"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"[i] Loaded['D']: IWM_D.csv\n",
"[X] Oops! 'AnalysisIndicators' object has no attribute 'percet_return'\n"
]
}
],
"source": [
"try:\n",
" iwm = watch.load('IWM')\n",
"except AttributeError as error:\n",
" print(f\"[X] Oops! {error}\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Indicator Composition/Chaining\n",
"- When you need an indicator to depend on the value of a prior indicator\n",
"- Utilitze _prefix_ or _suffix_ to help identify unique columns or avoid column name clashes."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Volume MAs and MA chains"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Strategy(name='Volume MAs and Price MA chain', ta=[{'kind': 'ema', 'close': 'volume', 'length': 10, 'prefix': 'VOLUME'}, {'kind': 'sma', 'close': 'volume', 'length': 20, 'prefix': 'VOLUME'}, {'kind': 'ema', 'length': 5}, {'kind': 'linreg', 'close': 'EMA_5', 'length': 8, 'prefix': 'EMA_5'}], description=None, created='07/25/2020, 11:24:19', last_run=None, run_time=None)"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Set EMA's and SMA's 'close' to 'volume' to create Volume MAs, prefix 'volume' MAs with 'VOLUME' so easy to identify the column\n",
"# Take a price EMA and apply LINREG from EMA's output\n",
"volmas_price_ma_chain = [\n",
" {\"kind\":\"ema\", \"close\": \"volume\", \"length\": 10, \"prefix\": \"VOLUME\"},\n",
" {\"kind\":\"sma\", \"close\": \"volume\", \"length\": 20, \"prefix\": \"VOLUME\"},\n",
" {\"kind\":\"ema\", \"length\": 5},\n",
" {\"kind\":\"linreg\", \"close\": \"EMA_5\", \"length\": 8, \"prefix\": \"EMA_5\"},\n",
"]\n",
"vp_ma_chain_ta = ta.Strategy(\"Volume MAs and Price MA chain\", volmas_price_ma_chain)\n",
"vp_ma_chain_ta"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Volume MAs and Price MA chain'"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Update the Watchlist\n",
"watch.strategy = vp_ma_chain_ta\n",
"watch.strategy.name"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"[i] Loaded['D']: SPY_D.csv\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>open</th>\n",
" <th>high</th>\n",
" <th>low</th>\n",
" <th>close</th>\n",
" <th>volume</th>\n",
" <th>VOLUME_EMA_10</th>\n",
" <th>VOLUME_SMA_20</th>\n",
" <th>EMA_5</th>\n",
" <th>EMA_5_LR_8</th>\n",
" </tr>\n",
" <tr>\n",
" <th>date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1999-11-01</th>\n",
" <td>136.5000</td>\n",
" <td>137.0000</td>\n",
" <td>135.5625</td>\n",
" <td>135.5625</td>\n",
" <td>4006500.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-02</th>\n",
" <td>135.9687</td>\n",
" <td>137.2500</td>\n",
" <td>134.5937</td>\n",
" <td>134.5937</td>\n",
" <td>6516900.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-03</th>\n",
" <td>136.0000</td>\n",
" <td>136.3750</td>\n",
" <td>135.1250</td>\n",
" <td>135.5000</td>\n",
" <td>7222300.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-04</th>\n",
" <td>136.7500</td>\n",
" <td>137.3593</td>\n",
" <td>135.7656</td>\n",
" <td>136.5312</td>\n",
" <td>7907500.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-05</th>\n",
" <td>138.6250</td>\n",
" <td>139.1093</td>\n",
" <td>136.7812</td>\n",
" <td>137.8750</td>\n",
" <td>7431500.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>136.012480</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-20</th>\n",
" <td>321.4300</td>\n",
" <td>325.1300</td>\n",
" <td>320.6200</td>\n",
" <td>324.3200</td>\n",
" <td>56150230.0</td>\n",
" <td>7.254859e+07</td>\n",
" <td>81019145.80</td>\n",
" <td>321.398416</td>\n",
" <td>320.058000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-21</th>\n",
" <td>326.4500</td>\n",
" <td>326.9300</td>\n",
" <td>323.9400</td>\n",
" <td>325.0100</td>\n",
" <td>57245315.0</td>\n",
" <td>6.976618e+07</td>\n",
" <td>80181050.95</td>\n",
" <td>322.602277</td>\n",
" <td>321.307000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-22</th>\n",
" <td>324.6200</td>\n",
" <td>327.2000</td>\n",
" <td>324.5000</td>\n",
" <td>326.8600</td>\n",
" <td>57792915.0</td>\n",
" <td>6.758922e+07</td>\n",
" <td>79667351.70</td>\n",
" <td>324.021518</td>\n",
" <td>322.687127</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-23</th>\n",
" <td>326.4700</td>\n",
" <td>327.2300</td>\n",
" <td>321.4800</td>\n",
" <td>322.9600</td>\n",
" <td>75737989.0</td>\n",
" <td>6.907082e+07</td>\n",
" <td>76850881.55</td>\n",
" <td>323.667679</td>\n",
" <td>323.406458</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-24</th>\n",
" <td>320.9500</td>\n",
" <td>321.9900</td>\n",
" <td>319.2460</td>\n",
" <td>320.8800</td>\n",
" <td>73766597.0</td>\n",
" <td>6.992459e+07</td>\n",
" <td>76090907.45</td>\n",
" <td>322.738452</td>\n",
" <td>323.487321</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5216 rows × 9 columns</p>\n",
"</div>"
],
"text/plain": [
" open high low close volume VOLUME_EMA_10 \\\n",
"date \n",
"1999-11-01 136.5000 137.0000 135.5625 135.5625 4006500.0 NaN \n",
"1999-11-02 135.9687 137.2500 134.5937 134.5937 6516900.0 NaN \n",
"1999-11-03 136.0000 136.3750 135.1250 135.5000 7222300.0 NaN \n",
"1999-11-04 136.7500 137.3593 135.7656 136.5312 7907500.0 NaN \n",
"1999-11-05 138.6250 139.1093 136.7812 137.8750 7431500.0 NaN \n",
"... ... ... ... ... ... ... \n",
"2020-07-20 321.4300 325.1300 320.6200 324.3200 56150230.0 7.254859e+07 \n",
"2020-07-21 326.4500 326.9300 323.9400 325.0100 57245315.0 6.976618e+07 \n",
"2020-07-22 324.6200 327.2000 324.5000 326.8600 57792915.0 6.758922e+07 \n",
"2020-07-23 326.4700 327.2300 321.4800 322.9600 75737989.0 6.907082e+07 \n",
"2020-07-24 320.9500 321.9900 319.2460 320.8800 73766597.0 6.992459e+07 \n",
"\n",
" VOLUME_SMA_20 EMA_5 EMA_5_LR_8 \n",
"date \n",
"1999-11-01 NaN NaN NaN \n",
"1999-11-02 NaN NaN NaN \n",
"1999-11-03 NaN NaN NaN \n",
"1999-11-04 NaN NaN NaN \n",
"1999-11-05 NaN 136.012480 NaN \n",
"... ... ... ... \n",
"2020-07-20 81019145.80 321.398416 320.058000 \n",
"2020-07-21 80181050.95 322.602277 321.307000 \n",
"2020-07-22 79667351.70 324.021518 322.687127 \n",
"2020-07-23 76850881.55 323.667679 323.406458 \n",
"2020-07-24 76090907.45 322.738452 323.487321 \n",
"\n",
"[5216 rows x 9 columns]"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spy = watch.load('SPY')\n",
"spy"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### MACD BBANDS"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Strategy(name='MACD BBands', ta=[{'kind': 'macd'}, {'kind': 'bbands', 'close': 'MACD_12_26_9', 'length': 20, 'prefix': 'MACD'}], description='BBANDS_20 applied to MACD', created='07/25/2020, 11:24:19', last_run=None, run_time=None)"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# MACD is the initial indicator that BBANDS depends on.\n",
"# Set BBANDS's 'close' to MACD's main signal, in this case 'MACD_12_26_9' and add a prefix (or suffix) so it's easier to identify\n",
"macd_bands_ta = [\n",
" {\"kind\":\"macd\"},\n",
" {\"kind\":\"bbands\", \"close\": \"MACD_12_26_9\", \"length\": 20, \"prefix\": \"MACD\"}\n",
"]\n",
"macd_bands_ta = ta.Strategy(\"MACD BBands\", macd_bands_ta, f\"BBANDS_{macd_bands_ta[1]['length']} applied to MACD\")\n",
"macd_bands_ta"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'MACD BBands'"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Update the Watchlist\n",
"watch.strategy = macd_bands_ta\n",
"watch.strategy.name"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"[i] Loaded['D']: SPY_D.csv\n",
"[i] Set 'df.ta.mp = True' to enable multiprocessing. This computer has 4 cores. Default: False\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>open</th>\n",
" <th>high</th>\n",
" <th>low</th>\n",
" <th>close</th>\n",
" <th>volume</th>\n",
" <th>MACD_12_26_9</th>\n",
" <th>MACDh_12_26_9</th>\n",
" <th>MACDs_12_26_9</th>\n",
" <th>MACD_BBL_20_2.0</th>\n",
" <th>MACD_BBM_20_2.0</th>\n",
" <th>MACD_BBU_20_2.0</th>\n",
" </tr>\n",
" <tr>\n",
" <th>date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1999-11-01</th>\n",
" <td>136.5000</td>\n",
" <td>137.0000</td>\n",
" <td>135.5625</td>\n",
" <td>135.5625</td>\n",
" <td>4006500.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-02</th>\n",
" <td>135.9687</td>\n",
" <td>137.2500</td>\n",
" <td>134.5937</td>\n",
" <td>134.5937</td>\n",
" <td>6516900.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-03</th>\n",
" <td>136.0000</td>\n",
" <td>136.3750</td>\n",
" <td>135.1250</td>\n",
" <td>135.5000</td>\n",
" <td>7222300.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-04</th>\n",
" <td>136.7500</td>\n",
" <td>137.3593</td>\n",
" <td>135.7656</td>\n",
" <td>136.5312</td>\n",
" <td>7907500.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-05</th>\n",
" <td>138.6250</td>\n",
" <td>139.1093</td>\n",
" <td>136.7812</td>\n",
" <td>137.8750</td>\n",
" <td>7431500.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-20</th>\n",
" <td>321.4300</td>\n",
" <td>325.1300</td>\n",
" <td>320.6200</td>\n",
" <td>324.3200</td>\n",
" <td>56150230.0</td>\n",
" <td>4.422827</td>\n",
" <td>0.713695</td>\n",
" <td>3.709131</td>\n",
" <td>1.351168</td>\n",
" <td>3.153296</td>\n",
" <td>4.955423</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-21</th>\n",
" <td>326.4500</td>\n",
" <td>326.9300</td>\n",
" <td>323.9400</td>\n",
" <td>325.0100</td>\n",
" <td>57245315.0</td>\n",
" <td>4.651974</td>\n",
" <td>0.754274</td>\n",
" <td>3.897700</td>\n",
" <td>1.341550</td>\n",
" <td>3.157320</td>\n",
" <td>4.973090</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-22</th>\n",
" <td>324.6200</td>\n",
" <td>327.2000</td>\n",
" <td>324.5000</td>\n",
" <td>326.8600</td>\n",
" <td>57792915.0</td>\n",
" <td>4.926070</td>\n",
" <td>0.822696</td>\n",
" <td>4.103374</td>\n",
" <td>1.279092</td>\n",
" <td>3.183563</td>\n",
" <td>5.088035</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-23</th>\n",
" <td>326.4700</td>\n",
" <td>327.2300</td>\n",
" <td>321.4800</td>\n",
" <td>322.9600</td>\n",
" <td>75737989.0</td>\n",
" <td>4.773569</td>\n",
" <td>0.536156</td>\n",
" <td>4.237413</td>\n",
" <td>1.215602</td>\n",
" <td>3.243110</td>\n",
" <td>5.270617</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-24</th>\n",
" <td>320.9500</td>\n",
" <td>321.9900</td>\n",
" <td>319.2460</td>\n",
" <td>320.8800</td>\n",
" <td>73766597.0</td>\n",
" <td>4.433763</td>\n",
" <td>0.157080</td>\n",
" <td>4.276683</td>\n",
" <td>1.211360</td>\n",
" <td>3.306770</td>\n",
" <td>5.402179</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5216 rows × 11 columns</p>\n",
"</div>"
],
"text/plain": [
" open high low close volume MACD_12_26_9 \\\n",
"date \n",
"1999-11-01 136.5000 137.0000 135.5625 135.5625 4006500.0 NaN \n",
"1999-11-02 135.9687 137.2500 134.5937 134.5937 6516900.0 NaN \n",
"1999-11-03 136.0000 136.3750 135.1250 135.5000 7222300.0 NaN \n",
"1999-11-04 136.7500 137.3593 135.7656 136.5312 7907500.0 NaN \n",
"1999-11-05 138.6250 139.1093 136.7812 137.8750 7431500.0 NaN \n",
"... ... ... ... ... ... ... \n",
"2020-07-20 321.4300 325.1300 320.6200 324.3200 56150230.0 4.422827 \n",
"2020-07-21 326.4500 326.9300 323.9400 325.0100 57245315.0 4.651974 \n",
"2020-07-22 324.6200 327.2000 324.5000 326.8600 57792915.0 4.926070 \n",
"2020-07-23 326.4700 327.2300 321.4800 322.9600 75737989.0 4.773569 \n",
"2020-07-24 320.9500 321.9900 319.2460 320.8800 73766597.0 4.433763 \n",
"\n",
" MACDh_12_26_9 MACDs_12_26_9 MACD_BBL_20_2.0 MACD_BBM_20_2.0 \\\n",
"date \n",
"1999-11-01 NaN NaN NaN NaN \n",
"1999-11-02 NaN NaN NaN NaN \n",
"1999-11-03 NaN NaN NaN NaN \n",
"1999-11-04 NaN NaN NaN NaN \n",
"1999-11-05 NaN NaN NaN NaN \n",
"... ... ... ... ... \n",
"2020-07-20 0.713695 3.709131 1.351168 3.153296 \n",
"2020-07-21 0.754274 3.897700 1.341550 3.157320 \n",
"2020-07-22 0.822696 4.103374 1.279092 3.183563 \n",
"2020-07-23 0.536156 4.237413 1.215602 3.243110 \n",
"2020-07-24 0.157080 4.276683 1.211360 3.306770 \n",
"\n",
" MACD_BBU_20_2.0 \n",
"date \n",
"1999-11-01 NaN \n",
"1999-11-02 NaN \n",
"1999-11-03 NaN \n",
"1999-11-04 NaN \n",
"1999-11-05 NaN \n",
"... ... \n",
"2020-07-20 4.955423 \n",
"2020-07-21 4.973090 \n",
"2020-07-22 5.088035 \n",
"2020-07-23 5.270617 \n",
"2020-07-24 5.402179 \n",
"\n",
"[5216 rows x 11 columns]"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spy = watch.load('SPY')\n",
"spy"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Comprehensive Strategy"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### MACD and RSI Momentum with BBANDS and SMAs and Cumulative Log Returns"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Strategy(name='Momo, Bands and SMAs and Cumulative Log Returns', ta=[{'kind': 'sma', 'length': 50}, {'kind': 'sma', 'length': 200}, {'kind': 'bbands', 'length': 20}, {'kind': 'macd'}, {'kind': 'rsi'}, {'kind': 'log_return', 'cumulative': True}, {'kind': 'sma', 'close': 'CUMLOGRET_1', 'length': 5, 'suffix': 'CUMLOGRET'}], description='MACD and RSI Momo with BBANDS and SMAs 50 & 200 and Cumulative Log Returns', created='07/25/2020, 11:24:19', last_run=None, run_time=None)"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"momo_bands_sma_ta = [\n",
" {\"kind\":\"sma\", \"length\": 50},\n",
" {\"kind\":\"sma\", \"length\": 200},\n",
" {\"kind\":\"bbands\", \"length\": 20},\n",
" {\"kind\":\"macd\"},\n",
" {\"kind\":\"rsi\"},\n",
" {\"kind\":\"log_return\", \"cumulative\": True},\n",
" {\"kind\":\"sma\", \"close\": \"CUMLOGRET_1\", \"length\": 5, \"suffix\": \"CUMLOGRET\"},\n",
"]\n",
"momo_bands_sma_strategy = ta.Strategy(\n",
" \"Momo, Bands and SMAs and Cumulative Log Returns\", # name\n",
" momo_bands_sma_ta, # ta\n",
" \"MACD and RSI Momo with BBANDS and SMAs 50 & 200 and Cumulative Log Returns\" # description\n",
")\n",
"momo_bands_sma_strategy"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Momo, Bands and SMAs and Cumulative Log Returns'"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Update the Watchlist\n",
"watch.strategy = momo_bands_sma_strategy\n",
"watch.strategy.name"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"[i] Loaded['D']: SPY_D.csv\n",
"[i] Runtime: 34.4336 ms (0.0344 s)\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>open</th>\n",
" <th>high</th>\n",
" <th>low</th>\n",
" <th>close</th>\n",
" <th>volume</th>\n",
" <th>SMA_50</th>\n",
" <th>SMA_200</th>\n",
" <th>BBL_20_2.0</th>\n",
" <th>BBM_20_2.0</th>\n",
" <th>BBU_20_2.0</th>\n",
" <th>MACD_12_26_9</th>\n",
" <th>MACDh_12_26_9</th>\n",
" <th>MACDs_12_26_9</th>\n",
" <th>RSI_14</th>\n",
" <th>CUMLOGRET_1</th>\n",
" <th>SMA_5_CUMLOGRET</th>\n",
" <th>0</th>\n",
" <th>30</th>\n",
" <th>70</th>\n",
" </tr>\n",
" <tr>\n",
" <th>date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1999-11-01</th>\n",
" <td>136.5000</td>\n",
" <td>137.0000</td>\n",
" <td>135.5625</td>\n",
" <td>135.5625</td>\n",
" <td>4006500.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-02</th>\n",
" <td>135.9687</td>\n",
" <td>137.2500</td>\n",
" <td>134.5937</td>\n",
" <td>134.5937</td>\n",
" <td>6516900.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.000000</td>\n",
" <td>-0.007172</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-03</th>\n",
" <td>136.0000</td>\n",
" <td>136.3750</td>\n",
" <td>135.1250</td>\n",
" <td>135.5000</td>\n",
" <td>7222300.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>50.185503</td>\n",
" <td>-0.000461</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-04</th>\n",
" <td>136.7500</td>\n",
" <td>137.3593</td>\n",
" <td>135.7656</td>\n",
" <td>136.5312</td>\n",
" <td>7907500.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>69.153995</td>\n",
" <td>0.007120</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-05</th>\n",
" <td>138.6250</td>\n",
" <td>139.1093</td>\n",
" <td>136.7812</td>\n",
" <td>137.8750</td>\n",
" <td>7431500.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>79.896816</td>\n",
" <td>0.016915</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-08</th>\n",
" <td>137.0000</td>\n",
" <td>138.3750</td>\n",
" <td>136.7500</td>\n",
" <td>138.0000</td>\n",
" <td>4649200.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>80.574537</td>\n",
" <td>0.017821</td>\n",
" <td>0.006845</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-09</th>\n",
" <td>138.5000</td>\n",
" <td>138.6875</td>\n",
" <td>136.2812</td>\n",
" <td>136.7031</td>\n",
" <td>4533700.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>58.528352</td>\n",
" <td>0.008379</td>\n",
" <td>0.009955</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-10</th>\n",
" <td>136.2500</td>\n",
" <td>138.3906</td>\n",
" <td>136.0781</td>\n",
" <td>137.7187</td>\n",
" <td>6405600.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>66.303684</td>\n",
" <td>0.015780</td>\n",
" <td>0.013203</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-11</th>\n",
" <td>138.1875</td>\n",
" <td>138.5000</td>\n",
" <td>137.4687</td>\n",
" <td>138.5000</td>\n",
" <td>4794100.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>70.833962</td>\n",
" <td>0.021438</td>\n",
" <td>0.016066</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-12</th>\n",
" <td>139.2500</td>\n",
" <td>139.9843</td>\n",
" <td>137.1250</td>\n",
" <td>139.7500</td>\n",
" <td>11802900.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>76.319408</td>\n",
" <td>0.030422</td>\n",
" <td>0.018768</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-15</th>\n",
" <td>139.8437</td>\n",
" <td>140.2500</td>\n",
" <td>139.4062</td>\n",
" <td>140.0781</td>\n",
" <td>2187500.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>77.514804</td>\n",
" <td>0.032767</td>\n",
" <td>0.021757</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-16</th>\n",
" <td>140.5625</td>\n",
" <td>143.0000</td>\n",
" <td>140.0937</td>\n",
" <td>141.2500</td>\n",
" <td>7544800.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>81.170904</td>\n",
" <td>0.041099</td>\n",
" <td>0.028301</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-17</th>\n",
" <td>142.2500</td>\n",
" <td>142.9375</td>\n",
" <td>141.3125</td>\n",
" <td>141.6250</td>\n",
" <td>9459000.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>82.169980</td>\n",
" <td>0.043750</td>\n",
" <td>0.033895</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-18</th>\n",
" <td>142.4375</td>\n",
" <td>143.0000</td>\n",
" <td>141.6250</td>\n",
" <td>142.6250</td>\n",
" <td>4491000.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>84.527630</td>\n",
" <td>0.050786</td>\n",
" <td>0.039765</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-19</th>\n",
" <td>142.4062</td>\n",
" <td>142.9687</td>\n",
" <td>142.0000</td>\n",
" <td>142.5000</td>\n",
" <td>4832100.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>83.049344</td>\n",
" <td>0.049909</td>\n",
" <td>0.043662</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-22</th>\n",
" <td>142.4375</td>\n",
" <td>143.0000</td>\n",
" <td>141.5000</td>\n",
" <td>142.4687</td>\n",
" <td>4155400.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>82.659517</td>\n",
" <td>0.049690</td>\n",
" <td>0.047047</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-23</th>\n",
" <td>142.8437</td>\n",
" <td>142.8437</td>\n",
" <td>140.3750</td>\n",
" <td>141.2187</td>\n",
" <td>5918000.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>68.775385</td>\n",
" <td>0.040877</td>\n",
" <td>0.047002</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-24</th>\n",
" <td>140.7500</td>\n",
" <td>142.4375</td>\n",
" <td>140.0000</td>\n",
" <td>141.9687</td>\n",
" <td>4459700.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>71.832489</td>\n",
" <td>0.046174</td>\n",
" <td>0.047487</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-26</th>\n",
" <td>142.4687</td>\n",
" <td>142.8750</td>\n",
" <td>141.2500</td>\n",
" <td>141.4375</td>\n",
" <td>1693900.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>66.840920</td>\n",
" <td>0.042425</td>\n",
" <td>0.045815</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-11-29</th>\n",
" <td>140.8750</td>\n",
" <td>141.9218</td>\n",
" <td>140.4375</td>\n",
" <td>140.9375</td>\n",
" <td>7348600.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>134.086598</td>\n",
" <td>139.34217</td>\n",
" <td>144.597742</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>62.442534</td>\n",
" <td>0.038884</td>\n",
" <td>0.043610</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" open high low close volume SMA_50 \\\n",
"date \n",
"1999-11-01 136.5000 137.0000 135.5625 135.5625 4006500.0 NaN \n",
"1999-11-02 135.9687 137.2500 134.5937 134.5937 6516900.0 NaN \n",
"1999-11-03 136.0000 136.3750 135.1250 135.5000 7222300.0 NaN \n",
"1999-11-04 136.7500 137.3593 135.7656 136.5312 7907500.0 NaN \n",
"1999-11-05 138.6250 139.1093 136.7812 137.8750 7431500.0 NaN \n",
"1999-11-08 137.0000 138.3750 136.7500 138.0000 4649200.0 NaN \n",
"1999-11-09 138.5000 138.6875 136.2812 136.7031 4533700.0 NaN \n",
"1999-11-10 136.2500 138.3906 136.0781 137.7187 6405600.0 NaN \n",
"1999-11-11 138.1875 138.5000 137.4687 138.5000 4794100.0 NaN \n",
"1999-11-12 139.2500 139.9843 137.1250 139.7500 11802900.0 NaN \n",
"1999-11-15 139.8437 140.2500 139.4062 140.0781 2187500.0 NaN \n",
"1999-11-16 140.5625 143.0000 140.0937 141.2500 7544800.0 NaN \n",
"1999-11-17 142.2500 142.9375 141.3125 141.6250 9459000.0 NaN \n",
"1999-11-18 142.4375 143.0000 141.6250 142.6250 4491000.0 NaN \n",
"1999-11-19 142.4062 142.9687 142.0000 142.5000 4832100.0 NaN \n",
"1999-11-22 142.4375 143.0000 141.5000 142.4687 4155400.0 NaN \n",
"1999-11-23 142.8437 142.8437 140.3750 141.2187 5918000.0 NaN \n",
"1999-11-24 140.7500 142.4375 140.0000 141.9687 4459700.0 NaN \n",
"1999-11-26 142.4687 142.8750 141.2500 141.4375 1693900.0 NaN \n",
"1999-11-29 140.8750 141.9218 140.4375 140.9375 7348600.0 NaN \n",
"\n",
" SMA_200 BBL_20_2.0 BBM_20_2.0 BBU_20_2.0 MACD_12_26_9 \\\n",
"date \n",
"1999-11-01 NaN NaN NaN NaN NaN \n",
"1999-11-02 NaN NaN NaN NaN NaN \n",
"1999-11-03 NaN NaN NaN NaN NaN \n",
"1999-11-04 NaN NaN NaN NaN NaN \n",
"1999-11-05 NaN NaN NaN NaN NaN \n",
"1999-11-08 NaN NaN NaN NaN NaN \n",
"1999-11-09 NaN NaN NaN NaN NaN \n",
"1999-11-10 NaN NaN NaN NaN NaN \n",
"1999-11-11 NaN NaN NaN NaN NaN \n",
"1999-11-12 NaN NaN NaN NaN NaN \n",
"1999-11-15 NaN NaN NaN NaN NaN \n",
"1999-11-16 NaN NaN NaN NaN NaN \n",
"1999-11-17 NaN NaN NaN NaN NaN \n",
"1999-11-18 NaN NaN NaN NaN NaN \n",
"1999-11-19 NaN NaN NaN NaN NaN \n",
"1999-11-22 NaN NaN NaN NaN NaN \n",
"1999-11-23 NaN NaN NaN NaN NaN \n",
"1999-11-24 NaN NaN NaN NaN NaN \n",
"1999-11-26 NaN NaN NaN NaN NaN \n",
"1999-11-29 NaN 134.086598 139.34217 144.597742 NaN \n",
"\n",
" MACDh_12_26_9 MACDs_12_26_9 RSI_14 CUMLOGRET_1 \\\n",
"date \n",
"1999-11-01 NaN NaN NaN NaN \n",
"1999-11-02 NaN NaN 0.000000 -0.007172 \n",
"1999-11-03 NaN NaN 50.185503 -0.000461 \n",
"1999-11-04 NaN NaN 69.153995 0.007120 \n",
"1999-11-05 NaN NaN 79.896816 0.016915 \n",
"1999-11-08 NaN NaN 80.574537 0.017821 \n",
"1999-11-09 NaN NaN 58.528352 0.008379 \n",
"1999-11-10 NaN NaN 66.303684 0.015780 \n",
"1999-11-11 NaN 0.0 70.833962 0.021438 \n",
"1999-11-12 NaN 0.0 76.319408 0.030422 \n",
"1999-11-15 NaN 0.0 77.514804 0.032767 \n",
"1999-11-16 NaN 0.0 81.170904 0.041099 \n",
"1999-11-17 NaN 0.0 82.169980 0.043750 \n",
"1999-11-18 NaN 0.0 84.527630 0.050786 \n",
"1999-11-19 NaN 0.0 83.049344 0.049909 \n",
"1999-11-22 NaN 0.0 82.659517 0.049690 \n",
"1999-11-23 NaN 0.0 68.775385 0.040877 \n",
"1999-11-24 NaN 0.0 71.832489 0.046174 \n",
"1999-11-26 NaN 0.0 66.840920 0.042425 \n",
"1999-11-29 NaN 0.0 62.442534 0.038884 \n",
"\n",
" SMA_5_CUMLOGRET 0 30 70 \n",
"date \n",
"1999-11-01 NaN 0 30 70 \n",
"1999-11-02 NaN 0 30 70 \n",
"1999-11-03 NaN 0 30 70 \n",
"1999-11-04 NaN 0 30 70 \n",
"1999-11-05 NaN 0 30 70 \n",
"1999-11-08 0.006845 0 30 70 \n",
"1999-11-09 0.009955 0 30 70 \n",
"1999-11-10 0.013203 0 30 70 \n",
"1999-11-11 0.016066 0 30 70 \n",
"1999-11-12 0.018768 0 30 70 \n",
"1999-11-15 0.021757 0 30 70 \n",
"1999-11-16 0.028301 0 30 70 \n",
"1999-11-17 0.033895 0 30 70 \n",
"1999-11-18 0.039765 0 30 70 \n",
"1999-11-19 0.043662 0 30 70 \n",
"1999-11-22 0.047047 0 30 70 \n",
"1999-11-23 0.047002 0 30 70 \n",
"1999-11-24 0.047487 0 30 70 \n",
"1999-11-26 0.045815 0 30 70 \n",
"1999-11-29 0.043610 0 30 70 "
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spy = watch.load('SPY', timed=True)\n",
"# Apply constants to the DataFrame for indicators\n",
"spy.ta.constants(True, 0, 0, 1) # 0\n",
"spy.ta.constants(True, 30, 30, 1) # 30\n",
"spy.ta.constants(True, 70, 70, 1) # 70\n",
"spy.head(20)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.8.2"
}
},
"nbformat": 4,
"nbformat_minor": 4
}