Files
pandas-ta/examples/PandasTA_Strategy_Examples.ipynb
T

2937 lines
208 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",
" - **NOTE:** The **watchlist** module is independent of Pandas TA. To easily use it, copy it from your local pandas_ta installation directory into your project directory.\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": [
"\n",
"Pandas TA v0.2.49b0\n",
"To install the Latest Version:\n",
"$ pip install -U git+https://github.com/twopirllc/pandas-ta\n",
"\n",
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"%matplotlib inline\n",
"import datetime as dt\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 # Is this failing? If so, copy it locally. See above.\n",
"\n",
"print(f\"\\nPandas TA v{ta.version}\\nTo install the Latest Version:\\n$ pip install -U git+https://github.com/twopirllc/pandas-ta\\n\")\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 = Saturday March 20, 2021, NYSE: 13:13:10, Local: 17:13:10 PDT, Day 79/365 (22.0%)\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 = Saturday March 20, 2021, NYSE: 13:13:10, Local: 17:13:10 PDT, Day 79/365 (22.0%)\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='TA Description', created='Saturday March 20, 2021, NYSE: 13:13:10, Local: 17:13:10 PDT, Day 79/365 (22.0%)')"
]
},
"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='TA Description', created='Saturday March 20, 2021, NYSE: 13:13:10, Local: 17:13:10 PDT, Day 79/365 (22.0%)')"
]
},
"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='TA Description', created='Saturday March 20, 2021, NYSE: 13:13:10, Local: 17:13:10 PDT, Day 79/365 (22.0%)')"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Misspelled indicator, will fail later when ran with Pandas TA\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": [
"data_source = \"av\" # Default\n",
"# data_source = \"yahoo\"\n",
"watch = Watchlist([\"SPY\", \"IWM\"], ds_name=data_source, timed=False)"
]
},
{
"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='Watch: SPY, IWM', ds_name='av', tickers[2]='SPY, IWM', tf='D', strategy[5]='Common Price and Volume SMAs')"
]
},
"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_name: str = 'av', **kwargs)\n",
" | \n",
" | # Watchlist Class (** This is subject to change! **)\n",
" | A simple Class to load/download financial market data and automatically\n",
" | apply Technical Analysis indicators with a Pandas TA Strategy.\n",
" | \n",
" | Default Strategy: pandas_ta.CommonStrategy\n",
" | \n",
" | ## Package Support:\n",
" | ### Data Source (Default: AlphaVantage)\n",
" | - AlphaVantage (pip install alphaVantage-api).\n",
" | - Python Binance (pip install python-binance). # Future Support\n",
" | - Yahoo Finance (pip install yfinance). # Almost Supported\n",
" | \n",
" | # Technical Analysis:\n",
" | - Pandas TA (pip install pandas_ta)\n",
" | \n",
" | ## Required Arguments:\n",
" | - tickers: A list of strings containing tickers. Example: [\"SPY\", \"AAPL\"]\n",
" | \n",
" | Methods defined here:\n",
" | \n",
" | __init__(self, tickers: list, tf: str = None, name: str = None, strategy: pandas_ta.core.Strategy = None, ds_name: str = 'av', **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 = [], plot: bool = False, **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",
" | Sets a valid Strategy. Default: pandas_ta.CommonStrategy\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 \"Common\""
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[!] Loading All: SPY, IWM\n",
"[+] Downloading[av]: SPY[D]\n",
"[+] Strategy: Common Price and Volume SMAs\n",
"[i] Indicator arguments: {'timed': False, 'append': True}\n",
"[i] Multiprocessing 5 indicators with 7 chunks over 8/8 cpus.\n",
"[i] Total indicators: 5\n",
"[i] Columns added: 5\n",
"[i] Last Run: Saturday March 20, 2021, NYSE: 13:13:13, Local: 17:13:13 PDT, Day 79/365 (22.0%)\n",
"[+] Downloading[av]: IWM[D]\n",
"[+] Strategy: Common Price and Volume SMAs\n",
"[i] Indicator arguments: {'timed': False, 'append': True}\n",
"[i] Multiprocessing 5 indicators with 7 chunks over 8/8 cpus.\n",
"[i] Total indicators: 5\n",
"[i] Columns added: 5\n",
"[i] Last Run: Saturday March 20, 2021, NYSE: 13:13:30, Local: 17:13:30 PDT, Day 79/365 (22.0%)\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 \n",
"# dictionary keyed by ticker and DataFrames as values \n",
"watch.load(verbose=True)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'SPY': open high low close volume SMA_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",
" 2021-03-15 394.3300 396.6850 392.0300 396.4100 73592302.0 387.076 \n",
" 2021-03-16 397.0700 397.8300 395.0800 395.9100 73722506.0 388.013 \n",
" 2021-03-17 394.5300 398.1200 393.3000 397.2600 97959265.0 389.597 \n",
" 2021-03-18 394.4750 396.7200 390.7500 391.4800 115349101.0 391.075 \n",
" 2021-03-19 389.8800 391.5690 387.1500 389.4800 113624490.0 391.660 \n",
" \n",
" SMA_20 SMA_50 SMA_200 VOL_SMA_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",
" 2021-03-15 387.7385 383.6352 349.25675 9.988408e+07 \n",
" 2021-03-16 387.9190 384.0758 349.71470 1.010216e+08 \n",
" 2021-03-17 388.1625 384.6452 350.17325 1.033322e+08 \n",
" 2021-03-18 388.2005 385.0482 350.59025 1.061140e+08 \n",
" 2021-03-19 388.1730 385.3668 350.97675 1.076332e+08 \n",
" \n",
" [5380 rows x 10 columns],\n",
" 'IWM': open high low close volume SMA_10 SMA_20 \\\n",
" date \n",
" 2000-05-26 91.06 91.44 90.63 91.44 37400.0 NaN NaN \n",
" 2000-05-30 92.75 94.81 92.75 94.81 28800.0 NaN NaN \n",
" 2000-05-31 95.13 96.38 95.13 95.75 18000.0 NaN NaN \n",
" 2000-06-01 97.11 97.31 97.11 97.31 3500.0 NaN NaN \n",
" 2000-06-02 101.70 102.40 101.70 102.40 14700.0 NaN NaN \n",
" ... ... ... ... ... ... ... ... \n",
" 2021-03-15 233.34 234.53 231.91 234.42 21543170.0 224.147 223.6310 \n",
" 2021-03-16 234.02 234.09 229.12 230.50 24675008.0 225.025 223.8645 \n",
" 2021-03-17 228.97 232.82 227.36 232.31 29422584.0 226.324 224.2770 \n",
" 2021-03-18 230.80 232.93 224.61 225.24 35726301.0 227.529 224.5095 \n",
" 2021-03-19 224.57 228.60 222.95 226.94 40855626.0 228.452 224.5970 \n",
" \n",
" SMA_50 SMA_200 VOL_SMA_20 \n",
" date \n",
" 2000-05-26 NaN NaN NaN \n",
" 2000-05-30 NaN NaN NaN \n",
" 2000-05-31 NaN NaN NaN \n",
" 2000-06-01 NaN NaN NaN \n",
" 2000-06-02 NaN NaN NaN \n",
" ... ... ... ... \n",
" 2021-03-15 217.0930 173.82090 33326068.35 \n",
" 2021-03-16 217.7818 174.27890 33409843.35 \n",
" 2021-03-17 218.5580 174.73930 33633447.20 \n",
" 2021-03-18 219.1330 175.15855 34194686.80 \n",
" 2021-03-19 219.5812 175.56925 34675560.35 \n",
" \n",
" [5236 rows x 10 columns]}"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"watch.data"
]
},
{
"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>SMA_10</th>\n",
" <th>SMA_20</th>\n",
" <th>SMA_50</th>\n",
" <th>SMA_200</th>\n",
" <th>VOL_SMA_20</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",
" </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",
" </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",
" </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",
" </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",
" </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",
" </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",
" </tr>\n",
" <tr>\n",
" <th>2021-03-15</th>\n",
" <td>394.3300</td>\n",
" <td>396.6850</td>\n",
" <td>392.0300</td>\n",
" <td>396.4100</td>\n",
" <td>73592302.0</td>\n",
" <td>387.076</td>\n",
" <td>387.7385</td>\n",
" <td>383.6352</td>\n",
" <td>349.25675</td>\n",
" <td>9.988408e+07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-16</th>\n",
" <td>397.0700</td>\n",
" <td>397.8300</td>\n",
" <td>395.0800</td>\n",
" <td>395.9100</td>\n",
" <td>73722506.0</td>\n",
" <td>388.013</td>\n",
" <td>387.9190</td>\n",
" <td>384.0758</td>\n",
" <td>349.71470</td>\n",
" <td>1.010216e+08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-17</th>\n",
" <td>394.5300</td>\n",
" <td>398.1200</td>\n",
" <td>393.3000</td>\n",
" <td>397.2600</td>\n",
" <td>97959265.0</td>\n",
" <td>389.597</td>\n",
" <td>388.1625</td>\n",
" <td>384.6452</td>\n",
" <td>350.17325</td>\n",
" <td>1.033322e+08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-18</th>\n",
" <td>394.4750</td>\n",
" <td>396.7200</td>\n",
" <td>390.7500</td>\n",
" <td>391.4800</td>\n",
" <td>115349101.0</td>\n",
" <td>391.075</td>\n",
" <td>388.2005</td>\n",
" <td>385.0482</td>\n",
" <td>350.59025</td>\n",
" <td>1.061140e+08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-19</th>\n",
" <td>389.8800</td>\n",
" <td>391.5690</td>\n",
" <td>387.1500</td>\n",
" <td>389.4800</td>\n",
" <td>113624490.0</td>\n",
" <td>391.660</td>\n",
" <td>388.1730</td>\n",
" <td>385.3668</td>\n",
" <td>350.97675</td>\n",
" <td>1.076332e+08</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5380 rows × 10 columns</p>\n",
"</div>"
],
"text/plain": [
" open high low close volume SMA_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",
"2021-03-15 394.3300 396.6850 392.0300 396.4100 73592302.0 387.076 \n",
"2021-03-16 397.0700 397.8300 395.0800 395.9100 73722506.0 388.013 \n",
"2021-03-17 394.5300 398.1200 393.3000 397.2600 97959265.0 389.597 \n",
"2021-03-18 394.4750 396.7200 390.7500 391.4800 115349101.0 391.075 \n",
"2021-03-19 389.8800 391.5690 387.1500 389.4800 113624490.0 391.660 \n",
"\n",
" SMA_20 SMA_50 SMA_200 VOL_SMA_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",
"2021-03-15 387.7385 383.6352 349.25675 9.988408e+07 \n",
"2021-03-16 387.9190 384.0758 349.71470 1.010216e+08 \n",
"2021-03-17 388.1625 384.6452 350.17325 1.033322e+08 \n",
"2021-03-18 388.2005 385.0482 350.59025 1.061140e+08 \n",
"2021-03-19 388.1730 385.3668 350.97675 1.076332e+08 \n",
"\n",
"[5380 rows x 10 columns]"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"watch.data[\"SPY\"]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[i] Loaded SPY[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>SMA_10</th>\n",
" <th>SMA_20</th>\n",
" <th>SMA_50</th>\n",
" <th>SMA_200</th>\n",
" <th>VOL_SMA_20</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",
" </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",
" </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",
" </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",
" </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",
" </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",
" </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",
" </tr>\n",
" <tr>\n",
" <th>2021-03-15</th>\n",
" <td>394.3300</td>\n",
" <td>396.6850</td>\n",
" <td>392.0300</td>\n",
" <td>396.4100</td>\n",
" <td>73592302.0</td>\n",
" <td>387.076</td>\n",
" <td>387.7385</td>\n",
" <td>383.6352</td>\n",
" <td>349.25675</td>\n",
" <td>9.988408e+07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-16</th>\n",
" <td>397.0700</td>\n",
" <td>397.8300</td>\n",
" <td>395.0800</td>\n",
" <td>395.9100</td>\n",
" <td>73722506.0</td>\n",
" <td>388.013</td>\n",
" <td>387.9190</td>\n",
" <td>384.0758</td>\n",
" <td>349.71470</td>\n",
" <td>1.010216e+08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-17</th>\n",
" <td>394.5300</td>\n",
" <td>398.1200</td>\n",
" <td>393.3000</td>\n",
" <td>397.2600</td>\n",
" <td>97959265.0</td>\n",
" <td>389.597</td>\n",
" <td>388.1625</td>\n",
" <td>384.6452</td>\n",
" <td>350.17325</td>\n",
" <td>1.033322e+08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-18</th>\n",
" <td>394.4750</td>\n",
" <td>396.7200</td>\n",
" <td>390.7500</td>\n",
" <td>391.4800</td>\n",
" <td>115349101.0</td>\n",
" <td>391.075</td>\n",
" <td>388.2005</td>\n",
" <td>385.0482</td>\n",
" <td>350.59025</td>\n",
" <td>1.061140e+08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-19</th>\n",
" <td>389.8800</td>\n",
" <td>391.5690</td>\n",
" <td>387.1500</td>\n",
" <td>389.4800</td>\n",
" <td>113624490.0</td>\n",
" <td>391.660</td>\n",
" <td>388.1730</td>\n",
" <td>385.3668</td>\n",
" <td>350.97675</td>\n",
" <td>1.076332e+08</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5380 rows × 10 columns</p>\n",
"</div>"
],
"text/plain": [
" open high low close volume SMA_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",
"2021-03-15 394.3300 396.6850 392.0300 396.4100 73592302.0 387.076 \n",
"2021-03-16 397.0700 397.8300 395.0800 395.9100 73722506.0 388.013 \n",
"2021-03-17 394.5300 398.1200 393.3000 397.2600 97959265.0 389.597 \n",
"2021-03-18 394.4750 396.7200 390.7500 391.4800 115349101.0 391.075 \n",
"2021-03-19 389.8800 391.5690 387.1500 389.4800 113624490.0 391.660 \n",
"\n",
" SMA_20 SMA_50 SMA_200 VOL_SMA_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",
"2021-03-15 387.7385 383.6352 349.25675 9.988408e+07 \n",
"2021-03-16 387.9190 384.0758 349.71470 1.010216e+08 \n",
"2021-03-17 388.1625 384.6452 350.17325 1.033322e+08 \n",
"2021-03-18 388.2005 385.0482 350.59025 1.061140e+08 \n",
"2021-03-19 388.1730 385.3668 350.97675 1.076332e+08 \n",
"\n",
"[5380 rows x 10 columns]"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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eY8y4WUKsLQiIiIiIiJFh1pKfaRvvb7ORiPo1KkT1lqstdmea63ljUVvcO0X17L92HZiysUw5bYpfD3wawVSEREREREpVhRKfaROch0AgpoGUbJUSUb8OoIy/yrDuth1Wc5LSU/hnsn3MHLGSDJsBqOuHsW6+9fRp0EfjDH+KLqIiIiIiIjfKJT6SOyqWDgBaeFpvDD3Bd5c8ibxyfE8OuPRs+fEJcXR8389Gb9qPGFBYXx707eM7jZaExqJiIiIiEixpTGlPrJgwQLnt9kBRs8fDYDBMHPnTH7d/ivVSlaj39f92HViF1WiqvDTrT/Rpkob/xZaRERERETEzxRKfSAtLY1FixZBBaCDs69DtQ70j+nPU7Of4v6p9xOXFMfJlJO0qdKGSYMmaXZdERERERERFEp9YuvWrZw6dYpa0bXIKJVBXFIcn/T/hFqla/He8vfYdWIXALc0uYVP+n9CieASfi6xiIiIiIhI0aAxpT4QHx8PQHSFaBYPXczGBzbSsHxDwoLCGNd7HJUjKzO662i+GfiNAqmIiIiIiEgmain1gVOnTgEQERFB5ajKWY71adCHA48e8EexREREREREijy1lPpA5lAqIiIiIiIinlMo9QGFUhEREREREe8olPqAQqmIiIiIiIh3FEp9QKFURERERETEOwqlPqBQKiIiIiIi4h2FUh9QKBUREREREfGOQqkPKJSKiIiIiIh4R6HUBxRKRUREREREvKNQ6gMKpSIiIiIiIt5RKPUBhVIRERERERHvKJT6gEKpiIiIiIiIdxRKfcAdSiMjI/1cEhERERERkUuLQqkPJCYmAmopFRERERERySuFUh9Q910RERERERHvKJT6gEKpiIiIiIiIdxRKfUChVERERERExDsKpfmUkZFBUlISACVKlPBzaURERERERC4tCqX5dPr0aQDCw8MJCNCvU0REREREJC+UovJJXXdFRERERES8p1CaTwqlIiIiIiIi3lMozSeFUhEREREREe8plOaTQqmIiIiIiIj3FErzSaFURERERETEewql+aRQKiIiIiIi4j2F0nxSKBUREREREfGeQmk+uUNpZGSkn0siIiIiIiJy6VEozSe1lIqIiIiIiHhPoTSfFEpFRERERES8p1CaT4mJiYBCqYiIiIiIiDcUSvNJLaUiIiIiIiLeUyjNJ4VSERERERER7ymU5pNC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\n",
"text/plain": [
"<Figure size 1152x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"watch.load(\"SPY\", plot=True, mas=True)"
]
},
{
"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": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Strategy(name='A', ta=[{'kind': 'sma', 'length': 50}, {'kind': 'sma', 'length': 200}], description='TA Description', created='Saturday March 20, 2021, NYSE: 13:13:10, Local: 17:13:10 PDT, Day 79/365 (22.0%)')"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Load custom_a into Watchlist and verify\n",
"watch.strategy = custom_a\n",
"# watch.debug = True\n",
"watch.strategy"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[i] Loaded IWM[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.44</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.81</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.38</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.31</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.40</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>2021-03-15</th>\n",
" <td>233.34</td>\n",
" <td>234.53</td>\n",
" <td>231.91</td>\n",
" <td>234.42</td>\n",
" <td>21543170.0</td>\n",
" <td>217.0930</td>\n",
" <td>173.82090</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-16</th>\n",
" <td>234.02</td>\n",
" <td>234.09</td>\n",
" <td>229.12</td>\n",
" <td>230.50</td>\n",
" <td>24675008.0</td>\n",
" <td>217.7818</td>\n",
" <td>174.27890</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-17</th>\n",
" <td>228.97</td>\n",
" <td>232.82</td>\n",
" <td>227.36</td>\n",
" <td>232.31</td>\n",
" <td>29422584.0</td>\n",
" <td>218.5580</td>\n",
" <td>174.73930</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-18</th>\n",
" <td>230.80</td>\n",
" <td>232.93</td>\n",
" <td>224.61</td>\n",
" <td>225.24</td>\n",
" <td>35726301.0</td>\n",
" <td>219.1330</td>\n",
" <td>175.15855</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-19</th>\n",
" <td>224.57</td>\n",
" <td>228.60</td>\n",
" <td>222.95</td>\n",
" <td>226.94</td>\n",
" <td>40855626.0</td>\n",
" <td>219.5812</td>\n",
" <td>175.56925</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5236 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.44 90.63 91.44 37400.0 NaN NaN\n",
"2000-05-30 92.75 94.81 92.75 94.81 28800.0 NaN NaN\n",
"2000-05-31 95.13 96.38 95.13 95.75 18000.0 NaN NaN\n",
"2000-06-01 97.11 97.31 97.11 97.31 3500.0 NaN NaN\n",
"2000-06-02 101.70 102.40 101.70 102.40 14700.0 NaN NaN\n",
"... ... ... ... ... ... ... ...\n",
"2021-03-15 233.34 234.53 231.91 234.42 21543170.0 217.0930 173.82090\n",
"2021-03-16 234.02 234.09 229.12 230.50 24675008.0 217.7818 174.27890\n",
"2021-03-17 228.97 232.82 227.36 232.31 29422584.0 218.5580 174.73930\n",
"2021-03-18 230.80 232.93 224.61 225.24 35726301.0 219.1330 175.15855\n",
"2021-03-19 224.57 228.60 222.95 226.94 40855626.0 219.5812 175.56925\n",
"\n",
"[5236 rows x 7 columns]"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"watch.load(\"IWM\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Running Simple Strategy B"
]
},
{
"cell_type": "code",
"execution_count": 17,
"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='TA Description', created='Saturday March 20, 2021, NYSE: 13:13:10, Local: 17:13:10 PDT, Day 79/365 (22.0%)')"
]
},
"execution_count": 17,
"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": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[i] Loaded SPY[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>NaN</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>NaN</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>NaN</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>NaN</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>2021-03-15</th>\n",
" <td>394.3300</td>\n",
" <td>396.6850</td>\n",
" <td>392.0300</td>\n",
" <td>396.4100</td>\n",
" <td>73592302.0</td>\n",
" <td>390.405499</td>\n",
" <td>387.590872</td>\n",
" <td>1.073016</td>\n",
" <td>61.444065</td>\n",
" <td>398.910421</td>\n",
" <td>-1</td>\n",
" <td>NaN</td>\n",
" <td>398.910421</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-16</th>\n",
" <td>397.0700</td>\n",
" <td>397.8300</td>\n",
" <td>395.0800</td>\n",
" <td>395.9100</td>\n",
" <td>73722506.0</td>\n",
" <td>391.628722</td>\n",
" <td>388.347156</td>\n",
" <td>1.071754</td>\n",
" <td>60.730184</td>\n",
" <td>398.910421</td>\n",
" <td>-1</td>\n",
" <td>NaN</td>\n",
" <td>398.910421</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-17</th>\n",
" <td>394.5300</td>\n",
" <td>398.1200</td>\n",
" <td>393.3000</td>\n",
" <td>397.2600</td>\n",
" <td>97959265.0</td>\n",
" <td>392.880117</td>\n",
" <td>389.157415</td>\n",
" <td>1.075158</td>\n",
" <td>62.013471</td>\n",
" <td>398.910421</td>\n",
" <td>-1</td>\n",
" <td>NaN</td>\n",
" <td>398.910421</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-18</th>\n",
" <td>394.4750</td>\n",
" <td>396.7200</td>\n",
" <td>390.7500</td>\n",
" <td>391.4800</td>\n",
" <td>115349101.0</td>\n",
" <td>392.568980</td>\n",
" <td>389.368559</td>\n",
" <td>1.060502</td>\n",
" <td>53.893084</td>\n",
" <td>398.910421</td>\n",
" <td>-1</td>\n",
" <td>NaN</td>\n",
" <td>398.910421</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-19</th>\n",
" <td>389.8800</td>\n",
" <td>391.5690</td>\n",
" <td>387.1500</td>\n",
" <td>389.4800</td>\n",
" <td>113624490.0</td>\n",
" <td>391.882540</td>\n",
" <td>389.378690</td>\n",
" <td>1.055380</td>\n",
" <td>51.385705</td>\n",
" <td>398.910421</td>\n",
" <td>-1</td>\n",
" <td>NaN</td>\n",
" <td>398.910421</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5380 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",
"2021-03-15 394.3300 396.6850 392.0300 396.4100 73592302.0 390.405499 \n",
"2021-03-16 397.0700 397.8300 395.0800 395.9100 73722506.0 391.628722 \n",
"2021-03-17 394.5300 398.1200 393.3000 397.2600 97959265.0 392.880117 \n",
"2021-03-18 394.4750 396.7200 390.7500 391.4800 115349101.0 392.568980 \n",
"2021-03-19 389.8800 391.5690 387.1500 389.4800 113624490.0 391.882540 \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 NaN NaN 1 \n",
"1999-11-03 NaN -0.000461 NaN NaN 1 \n",
"1999-11-04 NaN 0.007120 NaN NaN 1 \n",
"1999-11-05 NaN 0.016915 NaN NaN 1 \n",
"... ... ... ... ... ... \n",
"2021-03-15 387.590872 1.073016 61.444065 398.910421 -1 \n",
"2021-03-16 388.347156 1.071754 60.730184 398.910421 -1 \n",
"2021-03-17 389.157415 1.075158 62.013471 398.910421 -1 \n",
"2021-03-18 389.368559 1.060502 53.893084 398.910421 -1 \n",
"2021-03-19 389.378690 1.055380 51.385705 398.910421 -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",
"2021-03-15 NaN 398.910421 \n",
"2021-03-16 NaN 398.910421 \n",
"2021-03-17 NaN 398.910421 \n",
"2021-03-18 NaN 398.910421 \n",
"2021-03-19 NaN 398.910421 \n",
"\n",
"[5380 rows x 13 columns]"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"watch.load(\"SPY\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Running Bad Strategy. (Misspelled indicator)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Strategy(name='Runtime Failure', ta=[{'kind': 'percet_return'}], description='TA Description', created='Saturday March 20, 2021, NYSE: 13:13:10, Local: 17:13:10 PDT, Day 79/365 (22.0%)')"
]
},
"execution_count": 19,
"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": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[i] Loaded IWM[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": 21,
"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='TA Description', created='Saturday March 20, 2021, NYSE: 13:13:10, Local: 17:13:10 PDT, Day 79/365 (22.0%)')"
]
},
"execution_count": 21,
"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": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Volume MAs and Price MA chain'"
]
},
"execution_count": 22,
"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": 23,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[i] Loaded SPY[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>2021-03-15</th>\n",
" <td>394.3300</td>\n",
" <td>396.6850</td>\n",
" <td>392.0300</td>\n",
" <td>396.4100</td>\n",
" <td>73592302.0</td>\n",
" <td>9.820634e+07</td>\n",
" <td>9.988408e+07</td>\n",
" <td>392.322958</td>\n",
" <td>389.839335</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-16</th>\n",
" <td>397.0700</td>\n",
" <td>397.8300</td>\n",
" <td>395.0800</td>\n",
" <td>395.9100</td>\n",
" <td>73722506.0</td>\n",
" <td>9.375474e+07</td>\n",
" <td>1.010216e+08</td>\n",
" <td>393.518638</td>\n",
" <td>391.802334</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-17</th>\n",
" <td>394.5300</td>\n",
" <td>398.1200</td>\n",
" <td>393.3000</td>\n",
" <td>397.2600</td>\n",
" <td>97959265.0</td>\n",
" <td>9.451920e+07</td>\n",
" <td>1.033322e+08</td>\n",
" <td>394.765759</td>\n",
" <td>393.574453</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-18</th>\n",
" <td>394.4750</td>\n",
" <td>396.7200</td>\n",
" <td>390.7500</td>\n",
" <td>391.4800</td>\n",
" <td>115349101.0</td>\n",
" <td>9.830645e+07</td>\n",
" <td>1.061140e+08</td>\n",
" <td>393.670506</td>\n",
" <td>394.215707</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-19</th>\n",
" <td>389.8800</td>\n",
" <td>391.5690</td>\n",
" <td>387.1500</td>\n",
" <td>389.4800</td>\n",
" <td>113624490.0</td>\n",
" <td>1.010915e+08</td>\n",
" <td>1.076332e+08</td>\n",
" <td>392.273671</td>\n",
" <td>393.946701</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5380 rows × 9 columns</p>\n",
"</div>"
],
"text/plain": [
" open high low close volume \\\n",
"date \n",
"1999-11-01 136.5000 137.0000 135.5625 135.5625 4006500.0 \n",
"1999-11-02 135.9687 137.2500 134.5937 134.5937 6516900.0 \n",
"1999-11-03 136.0000 136.3750 135.1250 135.5000 7222300.0 \n",
"1999-11-04 136.7500 137.3593 135.7656 136.5312 7907500.0 \n",
"1999-11-05 138.6250 139.1093 136.7812 137.8750 7431500.0 \n",
"... ... ... ... ... ... \n",
"2021-03-15 394.3300 396.6850 392.0300 396.4100 73592302.0 \n",
"2021-03-16 397.0700 397.8300 395.0800 395.9100 73722506.0 \n",
"2021-03-17 394.5300 398.1200 393.3000 397.2600 97959265.0 \n",
"2021-03-18 394.4750 396.7200 390.7500 391.4800 115349101.0 \n",
"2021-03-19 389.8800 391.5690 387.1500 389.4800 113624490.0 \n",
"\n",
" VOLUME_EMA_10 VOLUME_SMA_20 EMA_5 EMA_5_LR_8 \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 136.012480 NaN \n",
"... ... ... ... ... \n",
"2021-03-15 9.820634e+07 9.988408e+07 392.322958 389.839335 \n",
"2021-03-16 9.375474e+07 1.010216e+08 393.518638 391.802334 \n",
"2021-03-17 9.451920e+07 1.033322e+08 394.765759 393.574453 \n",
"2021-03-18 9.830645e+07 1.061140e+08 393.670506 394.215707 \n",
"2021-03-19 1.010915e+08 1.076332e+08 392.273671 393.946701 \n",
"\n",
"[5380 rows x 9 columns]"
]
},
"execution_count": 23,
"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": 24,
"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='Saturday March 20, 2021, NYSE: 13:13:10, Local: 17:13:10 PDT, Day 79/365 (22.0%)')"
]
},
"execution_count": 24,
"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": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'MACD BBands'"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Update the Watchlist\n",
"watch.strategy = macd_bands_ta\n",
"watch.strategy.name"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[i] Loaded SPY[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>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",
" <th>MACD_BBB_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",
" <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",
" </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",
" </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",
" </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",
" </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",
" </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",
" </tr>\n",
" <tr>\n",
" <th>2021-03-15</th>\n",
" <td>394.3300</td>\n",
" <td>396.6850</td>\n",
" <td>392.0300</td>\n",
" <td>396.4100</td>\n",
" <td>73592302.0</td>\n",
" <td>2.268812</td>\n",
" <td>0.874720</td>\n",
" <td>1.394091</td>\n",
" <td>-0.900289</td>\n",
" <td>2.241715</td>\n",
" <td>5.383720</td>\n",
" <td>280.321462</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-16</th>\n",
" <td>397.0700</td>\n",
" <td>397.8300</td>\n",
" <td>395.0800</td>\n",
" <td>395.9100</td>\n",
" <td>73722506.0</td>\n",
" <td>2.643863</td>\n",
" <td>0.999818</td>\n",
" <td>1.644046</td>\n",
" <td>-0.810546</td>\n",
" <td>2.142097</td>\n",
" <td>5.094740</td>\n",
" <td>275.677819</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-17</th>\n",
" <td>394.5300</td>\n",
" <td>398.1200</td>\n",
" <td>393.3000</td>\n",
" <td>397.2600</td>\n",
" <td>97959265.0</td>\n",
" <td>3.015270</td>\n",
" <td>1.096979</td>\n",
" <td>1.918291</td>\n",
" <td>-0.690283</td>\n",
" <td>2.059061</td>\n",
" <td>4.808406</td>\n",
" <td>267.048329</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-18</th>\n",
" <td>394.4750</td>\n",
" <td>396.7200</td>\n",
" <td>390.7500</td>\n",
" <td>391.4800</td>\n",
" <td>115349101.0</td>\n",
" <td>2.810813</td>\n",
" <td>0.714018</td>\n",
" <td>2.096795</td>\n",
" <td>-0.562339</td>\n",
" <td>1.973571</td>\n",
" <td>4.509482</td>\n",
" <td>256.986903</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-19</th>\n",
" <td>389.8800</td>\n",
" <td>391.5690</td>\n",
" <td>387.1500</td>\n",
" <td>389.4800</td>\n",
" <td>113624490.0</td>\n",
" <td>2.459050</td>\n",
" <td>0.289804</td>\n",
" <td>2.169246</td>\n",
" <td>-0.435212</td>\n",
" <td>1.881908</td>\n",
" <td>4.199027</td>\n",
" <td>246.252186</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5380 rows × 12 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",
"2021-03-15 394.3300 396.6850 392.0300 396.4100 73592302.0 2.268812 \n",
"2021-03-16 397.0700 397.8300 395.0800 395.9100 73722506.0 2.643863 \n",
"2021-03-17 394.5300 398.1200 393.3000 397.2600 97959265.0 3.015270 \n",
"2021-03-18 394.4750 396.7200 390.7500 391.4800 115349101.0 2.810813 \n",
"2021-03-19 389.8800 391.5690 387.1500 389.4800 113624490.0 2.459050 \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",
"2021-03-15 0.874720 1.394091 -0.900289 2.241715 \n",
"2021-03-16 0.999818 1.644046 -0.810546 2.142097 \n",
"2021-03-17 1.096979 1.918291 -0.690283 2.059061 \n",
"2021-03-18 0.714018 2.096795 -0.562339 1.973571 \n",
"2021-03-19 0.289804 2.169246 -0.435212 1.881908 \n",
"\n",
" MACD_BBU_20_2.0 MACD_BBB_20_2.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",
"2021-03-15 5.383720 280.321462 \n",
"2021-03-16 5.094740 275.677819 \n",
"2021-03-17 4.808406 267.048329 \n",
"2021-03-18 4.509482 256.986903 \n",
"2021-03-19 4.199027 246.252186 \n",
"\n",
"[5380 rows x 12 columns]"
]
},
"execution_count": 26,
"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": 27,
"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='Saturday March 20, 2021, NYSE: 13:13:10, Local: 17:13:10 PDT, Day 79/365 (22.0%)')"
]
},
"execution_count": 27,
"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": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Momo, Bands and SMAs and Cumulative Log Returns'"
]
},
"execution_count": 28,
"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": 29,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[i] Loaded SPY[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>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>BBB_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",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2021-03-15</th>\n",
" <td>394.330</td>\n",
" <td>396.685</td>\n",
" <td>392.03</td>\n",
" <td>396.41</td>\n",
" <td>73592302.0</td>\n",
" <td>383.6352</td>\n",
" <td>349.25675</td>\n",
" <td>377.450608</td>\n",
" <td>387.7385</td>\n",
" <td>398.026392</td>\n",
" <td>5.306614</td>\n",
" <td>2.268812</td>\n",
" <td>0.874720</td>\n",
" <td>1.394091</td>\n",
" <td>61.444065</td>\n",
" <td>1.073016</td>\n",
" <td>1.062176</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-16</th>\n",
" <td>397.070</td>\n",
" <td>397.830</td>\n",
" <td>395.08</td>\n",
" <td>395.91</td>\n",
" <td>73722506.0</td>\n",
" <td>384.0758</td>\n",
" <td>349.71470</td>\n",
" <td>377.199689</td>\n",
" <td>387.9190</td>\n",
" <td>398.638311</td>\n",
" <td>5.526572</td>\n",
" <td>2.643863</td>\n",
" <td>0.999818</td>\n",
" <td>1.644046</td>\n",
" <td>60.730184</td>\n",
" <td>1.071754</td>\n",
" <td>1.066640</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-17</th>\n",
" <td>394.530</td>\n",
" <td>398.120</td>\n",
" <td>393.30</td>\n",
" <td>397.26</td>\n",
" <td>97959265.0</td>\n",
" <td>384.6452</td>\n",
" <td>350.17325</td>\n",
" <td>376.843518</td>\n",
" <td>388.1625</td>\n",
" <td>399.481482</td>\n",
" <td>5.832084</td>\n",
" <td>3.015270</td>\n",
" <td>1.096979</td>\n",
" <td>1.918291</td>\n",
" <td>62.013471</td>\n",
" <td>1.075158</td>\n",
" <td>1.070545</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-18</th>\n",
" <td>394.475</td>\n",
" <td>396.720</td>\n",
" <td>390.75</td>\n",
" <td>391.48</td>\n",
" <td>115349101.0</td>\n",
" <td>385.0482</td>\n",
" <td>350.59025</td>\n",
" <td>376.842394</td>\n",
" <td>388.2005</td>\n",
" <td>399.558606</td>\n",
" <td>5.851670</td>\n",
" <td>2.810813</td>\n",
" <td>0.714018</td>\n",
" <td>2.096795</td>\n",
" <td>53.893084</td>\n",
" <td>1.060502</td>\n",
" <td>1.069500</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-19</th>\n",
" <td>389.880</td>\n",
" <td>391.569</td>\n",
" <td>387.15</td>\n",
" <td>389.48</td>\n",
" <td>113624490.0</td>\n",
" <td>385.3668</td>\n",
" <td>350.97675</td>\n",
" <td>376.830092</td>\n",
" <td>388.1730</td>\n",
" <td>399.515908</td>\n",
" <td>5.844254</td>\n",
" <td>2.459050</td>\n",
" <td>0.289804</td>\n",
" <td>2.169246</td>\n",
" <td>51.385705</td>\n",
" <td>1.055380</td>\n",
" <td>1.067162</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",
"2021-03-15 394.330 396.685 392.03 396.41 73592302.0 383.6352 \n",
"2021-03-16 397.070 397.830 395.08 395.91 73722506.0 384.0758 \n",
"2021-03-17 394.530 398.120 393.30 397.26 97959265.0 384.6452 \n",
"2021-03-18 394.475 396.720 390.75 391.48 115349101.0 385.0482 \n",
"2021-03-19 389.880 391.569 387.15 389.48 113624490.0 385.3668 \n",
"\n",
" SMA_200 BBL_20_2.0 BBM_20_2.0 BBU_20_2.0 BBB_20_2.0 \\\n",
"date \n",
"2021-03-15 349.25675 377.450608 387.7385 398.026392 5.306614 \n",
"2021-03-16 349.71470 377.199689 387.9190 398.638311 5.526572 \n",
"2021-03-17 350.17325 376.843518 388.1625 399.481482 5.832084 \n",
"2021-03-18 350.59025 376.842394 388.2005 399.558606 5.851670 \n",
"2021-03-19 350.97675 376.830092 388.1730 399.515908 5.844254 \n",
"\n",
" MACD_12_26_9 MACDh_12_26_9 MACDs_12_26_9 RSI_14 \\\n",
"date \n",
"2021-03-15 2.268812 0.874720 1.394091 61.444065 \n",
"2021-03-16 2.643863 0.999818 1.644046 60.730184 \n",
"2021-03-17 3.015270 1.096979 1.918291 62.013471 \n",
"2021-03-18 2.810813 0.714018 2.096795 53.893084 \n",
"2021-03-19 2.459050 0.289804 2.169246 51.385705 \n",
"\n",
" CUMLOGRET_1 SMA_5_CUMLOGRET 0 30 70 \n",
"date \n",
"2021-03-15 1.073016 1.062176 0 30 70 \n",
"2021-03-16 1.071754 1.066640 0 30 70 \n",
"2021-03-17 1.075158 1.070545 0 30 70 \n",
"2021-03-18 1.060502 1.069500 0 30 70 \n",
"2021-03-19 1.055380 1.067162 0 30 70 "
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spy = watch.load(\"SPY\")\n",
"# Apply constants to the DataFrame for indicators\n",
"spy.ta.constants(True, [0, 30, 70])\n",
"spy.tail()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Additional Strategy Options"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The ```params``` keyword takes a _tuple_ as a shorthand to the parameter arguments in order.\n",
"* **Note**: If the indicator arguments change, so will results. Breaking Changes will **always** be posted on the README.\n",
"\n",
"The ```col_numbers``` keyword takes a _tuple_ specifying which column to return if the result is a DataFrame."
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Strategy(name='EMA, MACD History, Outter BBands, Log Returns', ta=[{'kind': 'ema', 'params': (10,)}, {'kind': 'macd', 'params': (9, 19, 10), 'col_numbers': (1,)}, {'kind': 'bbands', 'col_numbers': (0, 2), 'col_names': ('LB', 'UB')}, {'kind': 'log_return', 'params': (5, False)}], description='EMA, MACD History, BBands(LB, UB), and Log Returns Strategy', created='Saturday March 20, 2021, NYSE: 13:13:10, Local: 17:13:10 PDT, Day 79/365 (22.0%)')"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"params_ta = [\n",
" {\"kind\":\"ema\", \"params\": (10,)},\n",
" # params sets MACD's keyword arguments: fast=9, slow=19, signal=10\n",
" # and returning the 2nd column: histogram\n",
" {\"kind\":\"macd\", \"params\": (9, 19, 10), \"col_numbers\": (1,)},\n",
" # Selects the Lower and Upper Bands and renames them LB and UB, ignoring the MB\n",
" {\"kind\":\"bbands\", \"col_numbers\": (0,2), \"col_names\": (\"LB\", \"UB\")},\n",
" {\"kind\":\"log_return\", \"params\": (5, False)},\n",
"]\n",
"params_ta_strategy = ta.Strategy(\n",
" \"EMA, MACD History, Outter BBands, Log Returns\", # name\n",
" params_ta, # ta\n",
" \"EMA, MACD History, BBands(LB, UB), and Log Returns Strategy\" # description\n",
")\n",
"params_ta_strategy"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'EMA, MACD History, Outter BBands, Log Returns'"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Update the Watchlist\n",
"watch.strategy = params_ta_strategy\n",
"watch.strategy.name"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[i] Loaded SPY[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_10</th>\n",
" <th>MACDh_9_19_10</th>\n",
" <th>LB</th>\n",
" <th>UB</th>\n",
" <th>LOGRET_5</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",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2021-03-15</th>\n",
" <td>394.330</td>\n",
" <td>396.685</td>\n",
" <td>392.03</td>\n",
" <td>396.41</td>\n",
" <td>73592302.0</td>\n",
" <td>389.640175</td>\n",
" <td>1.360361</td>\n",
" <td>385.510398</td>\n",
" <td>398.789602</td>\n",
" <td>0.037762</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-16</th>\n",
" <td>397.070</td>\n",
" <td>397.830</td>\n",
" <td>395.08</td>\n",
" <td>395.91</td>\n",
" <td>73722506.0</td>\n",
" <td>390.780143</td>\n",
" <td>1.425897</td>\n",
" <td>389.067672</td>\n",
" <td>398.728328</td>\n",
" <td>0.022323</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-17</th>\n",
" <td>394.530</td>\n",
" <td>398.120</td>\n",
" <td>393.30</td>\n",
" <td>397.26</td>\n",
" <td>97959265.0</td>\n",
" <td>391.958299</td>\n",
" <td>1.461750</td>\n",
" <td>392.601825</td>\n",
" <td>398.266175</td>\n",
" <td>0.019522</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-18</th>\n",
" <td>394.475</td>\n",
" <td>396.720</td>\n",
" <td>390.75</td>\n",
" <td>391.48</td>\n",
" <td>115349101.0</td>\n",
" <td>391.871336</td>\n",
" <td>0.889025</td>\n",
" <td>390.906241</td>\n",
" <td>399.141759</td>\n",
" <td>-0.005223</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-03-19</th>\n",
" <td>389.880</td>\n",
" <td>391.569</td>\n",
" <td>387.15</td>\n",
" <td>389.48</td>\n",
" <td>113624490.0</td>\n",
" <td>391.436547</td>\n",
" <td>0.302361</td>\n",
" <td>387.988766</td>\n",
" <td>400.227234</td>\n",
" <td>-0.011691</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" open high low close volume EMA_10 \\\n",
"date \n",
"2021-03-15 394.330 396.685 392.03 396.41 73592302.0 389.640175 \n",
"2021-03-16 397.070 397.830 395.08 395.91 73722506.0 390.780143 \n",
"2021-03-17 394.530 398.120 393.30 397.26 97959265.0 391.958299 \n",
"2021-03-18 394.475 396.720 390.75 391.48 115349101.0 391.871336 \n",
"2021-03-19 389.880 391.569 387.15 389.48 113624490.0 391.436547 \n",
"\n",
" MACDh_9_19_10 LB UB LOGRET_5 \n",
"date \n",
"2021-03-15 1.360361 385.510398 398.789602 0.037762 \n",
"2021-03-16 1.425897 389.067672 398.728328 0.022323 \n",
"2021-03-17 1.461750 392.601825 398.266175 0.019522 \n",
"2021-03-18 0.889025 390.906241 399.141759 -0.005223 \n",
"2021-03-19 0.302361 387.988766 400.227234 -0.011691 "
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spy = watch.load(\"SPY\")\n",
"spy.tail()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Disclaimer\n",
"* All investments involve risk, and the past performance of a security, industry, sector, market, financial product, trading strategy, or individuals trading does not guarantee future results or returns. Investors are fully responsible for any investment decisions they make. Such decisions should be based solely on an evaluation of their financial circumstances, investment objectives, risk tolerance, and liquidity needs.\n",
"\n",
"* Any opinions, news, research, analyses, prices, or other information offered is provided as general market commentary, and does not constitute investment advice. I will not accept liability for any loss or damage, including without limitation any loss of profit, which may arise directly or indirectly from use of or reliance on such information."
]
}
],
"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.9.1"
}
},
"nbformat": 4,
"nbformat_minor": 4
}