Files
pandas-ta/examples/PandasTA_Strategy_Examples.ipynb
T

2885 lines
207 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.81b0\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",
"from tqdm import tqdm\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\n",
"Default Values"
]
},
{
"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 = Wednesday May 26, 2021, NYSE: 10:57:12, Local: 14:57:12 PDT, Day 146/365 (40.00%)\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\n",
"Default Values"
]
},
{
"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 = Wednesday May 26, 2021, NYSE: 10:57:12, Local: 14:57:12 PDT, Day 146/365 (40.00%)\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\n",
"Strategies require a **name** and an array of dicts containing the \"kind\" of indicator (\"sma\") and other potential parameters for **ta**."
]
},
{
"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='Wednesday May 26, 2021, NYSE: 10:57:12, Local: 14:57:12 PDT, Day 146/365 (40.00%)')"
]
},
"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='Wednesday May 26, 2021, NYSE: 10:57:12, Local: 14:57:12 PDT, Day 146/365 (40.00%)')"
]
},
"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='Wednesday May 26, 2021, NYSE: 10:57:12, Local: 14:57:12 PDT, Day 146/365 (40.00%)')"
]
},
"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 and 8/8 cpus.\n",
"[i] Total indicators: 5\n",
"[i] Columns added: 5\n",
"[i] Last Run: Wednesday May 26, 2021, NYSE: 10:57:15, Local: 14:57:15 PDT, Day 146/365 (40.00%)\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 and 8/8 cpus.\n",
"[i] Total indicators: 5\n",
"[i] Columns added: 5\n",
"[i] Last Run: Wednesday May 26, 2021, NYSE: 10:57:32, Local: 14:57:32 PDT, Day 146/365 (40.00%)\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: (5427, 10), IWM: (5283, 10)'"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\", \".join([f\"{t}: {d.shape}\" for t,d in watch.data.items()])"
]
},
{
"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-05-20</th>\n",
" <td>411.8000</td>\n",
" <td>416.6250</td>\n",
" <td>411.6700</td>\n",
" <td>415.2800</td>\n",
" <td>78022218.0</td>\n",
" <td>414.014</td>\n",
" <td>415.7705</td>\n",
" <td>407.6032</td>\n",
" <td>371.10540</td>\n",
" <td>78769145.90</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-21</th>\n",
" <td>416.8700</td>\n",
" <td>418.2000</td>\n",
" <td>414.4500</td>\n",
" <td>414.9400</td>\n",
" <td>76578662.0</td>\n",
" <td>413.296</td>\n",
" <td>415.6805</td>\n",
" <td>408.0314</td>\n",
" <td>371.51955</td>\n",
" <td>78934269.25</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-24</th>\n",
" <td>417.3400</td>\n",
" <td>420.3200</td>\n",
" <td>417.0800</td>\n",
" <td>419.1700</td>\n",
" <td>51376702.0</td>\n",
" <td>413.419</td>\n",
" <td>415.7585</td>\n",
" <td>408.5336</td>\n",
" <td>371.94375</td>\n",
" <td>78893984.75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-25</th>\n",
" <td>420.3300</td>\n",
" <td>420.7100</td>\n",
" <td>417.6200</td>\n",
" <td>418.2400</td>\n",
" <td>57451396.0</td>\n",
" <td>413.822</td>\n",
" <td>415.7945</td>\n",
" <td>408.9702</td>\n",
" <td>372.36210</td>\n",
" <td>79201401.75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-26</th>\n",
" <td>418.8700</td>\n",
" <td>419.6100</td>\n",
" <td>417.7600</td>\n",
" <td>419.0700</td>\n",
" <td>42955732.0</td>\n",
" <td>415.188</td>\n",
" <td>415.8780</td>\n",
" <td>409.4334</td>\n",
" <td>372.77960</td>\n",
" <td>78787245.65</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5427 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-05-20 411.8000 416.6250 411.6700 415.2800 78022218.0 414.014 \n",
"2021-05-21 416.8700 418.2000 414.4500 414.9400 76578662.0 413.296 \n",
"2021-05-24 417.3400 420.3200 417.0800 419.1700 51376702.0 413.419 \n",
"2021-05-25 420.3300 420.7100 417.6200 418.2400 57451396.0 413.822 \n",
"2021-05-26 418.8700 419.6100 417.7600 419.0700 42955732.0 415.188 \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-05-20 415.7705 407.6032 371.10540 78769145.90 \n",
"2021-05-21 415.6805 408.0314 371.51955 78934269.25 \n",
"2021-05-24 415.7585 408.5336 371.94375 78893984.75 \n",
"2021-05-25 415.7945 408.9702 372.36210 79201401.75 \n",
"2021-05-26 415.8780 409.4334 372.77960 78787245.65 \n",
"\n",
"[5427 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-05-20</th>\n",
" <td>411.8000</td>\n",
" <td>416.6250</td>\n",
" <td>411.6700</td>\n",
" <td>415.2800</td>\n",
" <td>78022218.0</td>\n",
" <td>414.014</td>\n",
" <td>415.7705</td>\n",
" <td>407.6032</td>\n",
" <td>371.10540</td>\n",
" <td>78769145.90</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-21</th>\n",
" <td>416.8700</td>\n",
" <td>418.2000</td>\n",
" <td>414.4500</td>\n",
" <td>414.9400</td>\n",
" <td>76578662.0</td>\n",
" <td>413.296</td>\n",
" <td>415.6805</td>\n",
" <td>408.0314</td>\n",
" <td>371.51955</td>\n",
" <td>78934269.25</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-24</th>\n",
" <td>417.3400</td>\n",
" <td>420.3200</td>\n",
" <td>417.0800</td>\n",
" <td>419.1700</td>\n",
" <td>51376702.0</td>\n",
" <td>413.419</td>\n",
" <td>415.7585</td>\n",
" <td>408.5336</td>\n",
" <td>371.94375</td>\n",
" <td>78893984.75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-25</th>\n",
" <td>420.3300</td>\n",
" <td>420.7100</td>\n",
" <td>417.6200</td>\n",
" <td>418.2400</td>\n",
" <td>57451396.0</td>\n",
" <td>413.822</td>\n",
" <td>415.7945</td>\n",
" <td>408.9702</td>\n",
" <td>372.36210</td>\n",
" <td>79201401.75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-26</th>\n",
" <td>418.8700</td>\n",
" <td>419.6100</td>\n",
" <td>417.7600</td>\n",
" <td>419.0700</td>\n",
" <td>42955732.0</td>\n",
" <td>415.188</td>\n",
" <td>415.8780</td>\n",
" <td>409.4334</td>\n",
" <td>372.77960</td>\n",
" <td>78787245.65</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5427 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-05-20 411.8000 416.6250 411.6700 415.2800 78022218.0 414.014 \n",
"2021-05-21 416.8700 418.2000 414.4500 414.9400 76578662.0 413.296 \n",
"2021-05-24 417.3400 420.3200 417.0800 419.1700 51376702.0 413.419 \n",
"2021-05-25 420.3300 420.7100 417.6200 418.2400 57451396.0 413.822 \n",
"2021-05-26 418.8700 419.6100 417.7600 419.0700 42955732.0 415.188 \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-05-20 415.7705 407.6032 371.10540 78769145.90 \n",
"2021-05-21 415.6805 408.0314 371.51955 78934269.25 \n",
"2021-05-24 415.7585 408.5336 371.94375 78893984.75 \n",
"2021-05-25 415.7945 408.9702 372.36210 79201401.75 \n",
"2021-05-26 415.8780 409.4334 372.77960 78787245.65 \n",
"\n",
"[5427 rows x 10 columns]"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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derwxhtvFLUCL1q0iG8L59oEdu/ezRtvvAEcDqUArVq14ssvv2TAgAG88MILALRo0YLQ0FDunXwv2fnZXNXhKi5rd1n5CvzjPji4BEKawZkTqi6QrlsHF17oXD/avDlMnQrt21fN3xaRGiE3PZ09S5awe9Ei9ixaxO7Fi0nZvr3EYwLDw+l47bV0u/VWGnTvXivHKBARkZpPobQKlLf7LtSuuUqzsrK49957AXjuuedo0qQJ4ATNjRs38n//938AdO3aleXLl3Po0CEAevfufcTz9O/fn5deeoknnngCcLrurti3gjErxuDv48+o80aVr8C1o2Hzh+AbBGd9A4FVNP/eokVw8cVw4IAzvct330GsF+Y9FRGvsC4XOWlp5KSmHr6lpJCTmkpGUhJ7ly5lz6JFJK1di3X3ICnkHxJC/W7diGjenLCGDQlv2NC5b9SI8IYNCYmLw8e3HJcxiIiIVCGF0ipQ3u67ULtaSl9++WU2b95Mhw4deOCBB4rW9+rVi40bN7J9+3aMMYwbN47TTjuN7OxsmjRpQqNGjY56rscee4ylS5cyYcIEevfuzWO/PobFcnf3uzkl8pSyF7fmJVjxFGDgjA8hqlv5X2hZ/PILDBkCGRkwYAB8/TW4/9+LSO1grSV1504SVq4kYeVK9q9fT/q+fWQkJJCekEBmUtJRYfNYfPz8iO/alQZnnEFD9y2mbVuFThERqfEUSqtAebrv1rZQunHjRl5++WUA3n333SPma+3duzdjxowBoEePHrRv356rr76azz777Iiuu8UVhtfbb7+d/Mb5PPLVI4QHhjPi7BFlL271i7DyacBAz0+g+fVlf47y+PprGDoU8vLghhvgo4/Ag3lsRaR6yElNZf/69SStW0fqzp3kpKWR674VLuekpnJw0yay3T0/jicgLIzA8PCiW1Ddus5yRARxnTrR8IwziO/aFb+goKp5cSIiIlVIobQKlKf7bm26ptRayz333ENubi4333wzZ5111hHbi3fPHThwIAAjR44kNzeXxx577LjP6+/vz3nnnceZn5wJwCO9HyGmztFznZZo1fOw6jkwPtDzU2h+Q9mOL6ukJOd60e++g++/d+YIfPBBePVVjbArUk3l5+Swb/ly9i5ZQtK6dex339L27PH4OerExBDXpQtxnTsT2749YQ0aEBofT0hcHCGxsfgGBFTiKxAR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LHViYoq634qIiIiInCiF0gpS2vWkby96mxUJK2gV1YqxQ8Z6dH1lSXOVTpo0iVdffRU/Pz9+HfMQ4Zsfczb0Ggt1y39dZGEonTp1atG6GttS+sIL8MwzYIwzvUthEI2I8HZllaIgN5e9y5axc+5cds6bx865c0nft6/U48IaNKBx79406tWLRj17Et+tm0a/FREREZEqo1BaAdavX8/GjRuJjIykZ8+ex9yncI7PUeeNIiIowqPnPV5L6fr167n55ps5pR58+88z6HDgacBCp5HQeEi5Xwe4R+AF0tLSitbt3bv3uPvn5uayZo0zzK4nc7NWmZEj4dlnnUD66adw443erqjCZR44wK7589kxdy47585lz+LFR8z3CeAbGEhIbCzB0dFOi2d0NMHu+9j27WncuzfhjRur1VNEREREvEah9ATk5uby9ttv88ILLwDQv39//I5xXV1iRiILdi0gwDeAC1te6PHzH+ua0vT0dJ6862Levymdq3sZfMw8cAEt74SOI07sBcEx51ctqaV0/fr15Obm0rJlS8LCwk7471eI556D558HHx/47DMYOtTbFZVZQW4ue5cuZc+SJWQkJhYNMJSZlOQMOLR//zGnXYlp25bGffrQuE8fmvTpQ1SrVgqcIiIiIlKtKZSWg7WWSZMm8fjjj7N582YAzj33XEaPHn3M/f+38X9YLOc2O5fQgFCP/84RLaXWYhNnsfGLa/jm706XTGt8oflQaPfoCXXZLa54KI2JiWH//v0lhtJq1XXXWieQjhzpBNIxY+D6671dlUcy9+9n14IFzoBD8+eza+FC8rOySjzGLyiIBt27FwXQRr16UaeEqYNERERERKojhdIymj9/Pg8//DDz588HoF27drzyyitcfPHFx22RmrJhCgCXtr60TH/r8DWl6TD/Jsy2sXSLg4wcyGl8I1G9XoCQJifwao5WPJReeumlfPbZZyQlJZGbm0tAQMBR+1ebQY6sdbrrvvCCE0g//xyuvda7NRWTn5NDdnIyWQcPOrfkZNJ272bXggXsmj+fAxs2HHVMTLt2NOrVi/CGDQ8PNPSXQYd8/f298GpERERERCqOQqmHCgoKGDZsGJ9++ikAsbGxjBw5kmHDhh2zy26h7Pxsftr0EwCXtilfKO3o9wts+5H0bHj1Bzj1mo8YeP6t5XshpSi8phTgrLPO4qeffmLP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SEVERERERGoRhdLq7Ouv4a23nOlePvjAuRcREREREalFFEqrq/nz4cYbneXRo6FrV6+WIyIiIiIiUhkUSqujXbtg4EDIyYE773RG2hUREREREamFFEqrG2vhrrtg/3644AKn+64x3q5KRERERESkUiiUVjfjx8PUqc6UL59+Cn4aIFlERERERGovhdLq5MABuP9+Z/mVV6BBA+/WIyIiIiIiUskUSquTESMgKQn69oVhw7xdjYiIiIiISKVTKK0u1q8/PO3LO+/oOlIRERERETkpKJRWF088AQUFTgtpu3berkZERERERKRKKJRWB3PmwOTJEBICzz3n7WpERERERESqjEKpN2Vnw+jRMGCA8/gf/4D4eO/WJCIiIiIiUoU034g3WOtM/fL447B9u7PukkvgkUe8W5eIiIiIiEgVU0tpVZs/H3r3hmuvdQJpx47w008wZYrTfVdEREREROQkopbSqnLoENx5p9NCChAXBy+8ALfe6oy4KyIiIiIichJSKK0qjz3mBNLgYHj4YXj0UQgL83ZVIiIiIiIiXqVQWhW2boWPPwYfH1i4EDp18nZFIiIiIiIi1YKuKa0KL74I+fkwdKgCqYiIiIiISDEKpZVt0yb47DPnutGnn/Z2NSIiIiIiItWKQmlle/55KCiAG2+Eli29XY2IiIiIiEi1olBamVasgHHjwN9fraQiIiIiIiLHoFBamR5/HKyFu++G5s29XY2IiIiIiEi1o1BaWX7/HaZNc6Z9eeopb1cjIiIiIiJSLSmUVgZr4YknnOXHHoPYWO/WIyIiIiIiUk0plFaGhQth0SKIjoYHHvB2NSIiIiIiItVWqaHUGNPYGDPdGLPWGLPGGDPcvb6rMWaBMWa5MeYPY8wZ7vXGGPOmMWaTMWalMebUyn4R1c677zr3t90GISHerUVERERERKQa8/Ngn3zgYWvtUmNMGLDEGPML8H/A89baH40xF7sf9wX6A63ctx7Au+77k8P+/TB+PBgDd9zh7WpERERERESqtVJbSq21e621S93LacA6oCFggXD3bnWBPe7lQcAY61gARBhj6ld45dXVJ59ATg5cdBGccoq3qxEREREREanWjLXW852NaQbMAjriBNOfAIMTbntba7cbY6YCL1tr57iP+Q14zFr7x1+e63bgdoC4uLjTvvrqqxN/Nd7mctHjhhsI3rOHVS+9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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='Wednesday May 26, 2021, NYSE: 10:57:12, Local: 14:57:12 PDT, Day 146/365 (40.00%)')"
]
},
"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.6300</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.7500</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.1300</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.1100</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.7000</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-05-20</th>\n",
" <td>218.27</td>\n",
" <td>219.87</td>\n",
" <td>216.3300</td>\n",
" <td>219.40</td>\n",
" <td>24932752.0</td>\n",
" <td>222.9280</td>\n",
" <td>192.22100</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-21</th>\n",
" <td>221.33</td>\n",
" <td>222.37</td>\n",
" <td>219.3497</td>\n",
" <td>219.97</td>\n",
" <td>24213723.0</td>\n",
" <td>222.6830</td>\n",
" <td>192.55190</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-24</th>\n",
" <td>221.18</td>\n",
" <td>222.45</td>\n",
" <td>220.0000</td>\n",
" <td>221.40</td>\n",
" <td>18324181.0</td>\n",
" <td>222.4392</td>\n",
" <td>192.89025</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-25</th>\n",
" <td>222.23</td>\n",
" <td>223.71</td>\n",
" <td>219.1900</td>\n",
" <td>219.26</td>\n",
" <td>20514901.0</td>\n",
" <td>222.1360</td>\n",
" <td>193.20570</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-26</th>\n",
" <td>220.13</td>\n",
" <td>223.69</td>\n",
" <td>220.1200</td>\n",
" <td>223.35</td>\n",
" <td>20314326.0</td>\n",
" <td>221.9930</td>\n",
" <td>193.53350</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5283 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.6300 91.44 37400.0 NaN NaN\n",
"2000-05-30 92.75 94.81 92.7500 94.81 28800.0 NaN NaN\n",
"2000-05-31 95.13 96.38 95.1300 95.75 18000.0 NaN NaN\n",
"2000-06-01 97.11 97.31 97.1100 97.31 3500.0 NaN NaN\n",
"2000-06-02 101.70 102.40 101.7000 102.40 14700.0 NaN NaN\n",
"... ... ... ... ... ... ... ...\n",
"2021-05-20 218.27 219.87 216.3300 219.40 24932752.0 222.9280 192.22100\n",
"2021-05-21 221.33 222.37 219.3497 219.97 24213723.0 222.6830 192.55190\n",
"2021-05-24 221.18 222.45 220.0000 221.40 18324181.0 222.4392 192.89025\n",
"2021-05-25 222.23 223.71 219.1900 219.26 20514901.0 222.1360 193.20570\n",
"2021-05-26 220.13 223.69 220.1200 223.35 20314326.0 221.9930 193.53350\n",
"\n",
"[5283 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='Wednesday May 26, 2021, NYSE: 10:57:12, Local: 14:57:12 PDT, Day 146/365 (40.00%)')"
]
},
"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>0.000000</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-05-20</th>\n",
" <td>411.8000</td>\n",
" <td>416.6250</td>\n",
" <td>411.6700</td>\n",
" <td>415.2800</td>\n",
" <td>78022218.0</td>\n",
" <td>413.742645</td>\n",
" <td>413.643188</td>\n",
" <td>1.119520</td>\n",
" <td>53.190381</td>\n",
" <td>422.422132</td>\n",
" <td>-1</td>\n",
" <td>NaN</td>\n",
" <td>422.422132</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-21</th>\n",
" <td>416.8700</td>\n",
" <td>418.2000</td>\n",
" <td>414.4500</td>\n",
" <td>414.9400</td>\n",
" <td>76578662.0</td>\n",
" <td>414.008724</td>\n",
" <td>413.761080</td>\n",
" <td>1.118701</td>\n",
" <td>52.748699</td>\n",
" <td>422.422132</td>\n",
" <td>-1</td>\n",
" <td>NaN</td>\n",
" <td>422.422132</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-24</th>\n",
" <td>417.3400</td>\n",
" <td>420.3200</td>\n",
" <td>417.0800</td>\n",
" <td>419.1700</td>\n",
" <td>51376702.0</td>\n",
" <td>415.155674</td>\n",
" <td>414.252800</td>\n",
" <td>1.128844</td>\n",
" <td>57.479369</td>\n",
" <td>422.422132</td>\n",
" <td>-1</td>\n",
" <td>NaN</td>\n",
" <td>422.422132</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-25</th>\n",
" <td>420.3300</td>\n",
" <td>420.7100</td>\n",
" <td>417.6200</td>\n",
" <td>418.2400</td>\n",
" <td>57451396.0</td>\n",
" <td>415.841080</td>\n",
" <td>414.615272</td>\n",
" <td>1.126623</td>\n",
" <td>56.148383</td>\n",
" <td>422.422132</td>\n",
" <td>-1</td>\n",
" <td>NaN</td>\n",
" <td>422.422132</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-26</th>\n",
" <td>418.8700</td>\n",
" <td>419.6100</td>\n",
" <td>417.7600</td>\n",
" <td>419.0700</td>\n",
" <td>42955732.0</td>\n",
" <td>416.558618</td>\n",
" <td>415.020248</td>\n",
" <td>1.128605</td>\n",
" <td>57.103084</td>\n",
" <td>422.422132</td>\n",
" <td>-1</td>\n",
" <td>NaN</td>\n",
" <td>422.422132</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5427 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-05-20 411.8000 416.6250 411.6700 415.2800 78022218.0 413.742645 \n",
"2021-05-21 416.8700 418.2000 414.4500 414.9400 76578662.0 414.008724 \n",
"2021-05-24 417.3400 420.3200 417.0800 419.1700 51376702.0 415.155674 \n",
"2021-05-25 420.3300 420.7100 417.6200 418.2400 57451396.0 415.841080 \n",
"2021-05-26 418.8700 419.6100 417.7600 419.0700 42955732.0 416.558618 \n",
"\n",
" EMA_21 CUMLOGRET_1 RSI_14 SUPERT_7_3.0 SUPERTd_7_3.0 \\\n",
"date \n",
"1999-11-01 NaN 0.000000 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-05-20 413.643188 1.119520 53.190381 422.422132 -1 \n",
"2021-05-21 413.761080 1.118701 52.748699 422.422132 -1 \n",
"2021-05-24 414.252800 1.128844 57.479369 422.422132 -1 \n",
"2021-05-25 414.615272 1.126623 56.148383 422.422132 -1 \n",
"2021-05-26 415.020248 1.128605 57.103084 422.422132 -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-05-20 NaN 422.422132 \n",
"2021-05-21 NaN 422.422132 \n",
"2021-05-24 NaN 422.422132 \n",
"2021-05-25 NaN 422.422132 \n",
"2021-05-26 NaN 422.422132 \n",
"\n",
"[5427 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='Wednesday May 26, 2021, NYSE: 10:57:12, Local: 14:57:12 PDT, Day 146/365 (40.00%)')"
]
},
"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='Wednesday May 26, 2021, NYSE: 10:57:12, Local: 14:57:12 PDT, Day 146/365 (40.00%)')"
]
},
"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-05-20</th>\n",
" <td>411.8000</td>\n",
" <td>416.6250</td>\n",
" <td>411.6700</td>\n",
" <td>415.2800</td>\n",
" <td>78022218.0</td>\n",
" <td>8.461273e+07</td>\n",
" <td>78769145.90</td>\n",
" <td>413.514631</td>\n",
" <td>413.070731</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-21</th>\n",
" <td>416.8700</td>\n",
" <td>418.2000</td>\n",
" <td>414.4500</td>\n",
" <td>414.9400</td>\n",
" <td>76578662.0</td>\n",
" <td>8.315199e+07</td>\n",
" <td>78934269.25</td>\n",
" <td>413.989754</td>\n",
" <td>413.618305</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-24</th>\n",
" <td>417.3400</td>\n",
" <td>420.3200</td>\n",
" <td>417.0800</td>\n",
" <td>419.1700</td>\n",
" <td>51376702.0</td>\n",
" <td>7.737467e+07</td>\n",
" <td>78893984.75</td>\n",
" <td>415.716503</td>\n",
" <td>414.370775</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-25</th>\n",
" <td>420.3300</td>\n",
" <td>420.7100</td>\n",
" <td>417.6200</td>\n",
" <td>418.2400</td>\n",
" <td>57451396.0</td>\n",
" <td>7.375225e+07</td>\n",
" <td>79201401.75</td>\n",
" <td>416.557668</td>\n",
" <td>415.115397</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-26</th>\n",
" <td>418.8700</td>\n",
" <td>419.6100</td>\n",
" <td>417.7600</td>\n",
" <td>419.0700</td>\n",
" <td>42955732.0</td>\n",
" <td>6.815289e+07</td>\n",
" <td>78787245.65</td>\n",
" <td>417.395112</td>\n",
" <td>416.089074</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5427 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",
"2021-05-20 411.8000 416.6250 411.6700 415.2800 78022218.0 8.461273e+07 \n",
"2021-05-21 416.8700 418.2000 414.4500 414.9400 76578662.0 8.315199e+07 \n",
"2021-05-24 417.3400 420.3200 417.0800 419.1700 51376702.0 7.737467e+07 \n",
"2021-05-25 420.3300 420.7100 417.6200 418.2400 57451396.0 7.375225e+07 \n",
"2021-05-26 418.8700 419.6100 417.7600 419.0700 42955732.0 6.815289e+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",
"2021-05-20 78769145.90 413.514631 413.070731 \n",
"2021-05-21 78934269.25 413.989754 413.618305 \n",
"2021-05-24 78893984.75 415.716503 414.370775 \n",
"2021-05-25 79201401.75 416.557668 415.115397 \n",
"2021-05-26 78787245.65 417.395112 416.089074 \n",
"\n",
"[5427 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, 'ddof': 0, 'prefix': 'MACD'}], description='BBANDS_20 applied to MACD', created='Wednesday May 26, 2021, NYSE: 10:57:12, Local: 14:57:12 PDT, Day 146/365 (40.00%)')"
]
},
"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, \"ddof\": 0, \"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-05-20</th>\n",
" <td>411.8000</td>\n",
" <td>416.6250</td>\n",
" <td>411.6700</td>\n",
" <td>415.2800</td>\n",
" <td>78022218.0</td>\n",
" <td>1.189878</td>\n",
" <td>-1.043818</td>\n",
" <td>2.233696</td>\n",
" <td>7.451354</td>\n",
" <td>3.971502</td>\n",
" <td>0.491649</td>\n",
" <td>-175.241148</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-21</th>\n",
" <td>416.8700</td>\n",
" <td>418.2000</td>\n",
" <td>414.4500</td>\n",
" <td>414.9400</td>\n",
" <td>76578662.0</td>\n",
" <td>1.171810</td>\n",
" <td>-0.849509</td>\n",
" <td>2.021319</td>\n",
" <td>7.279997</td>\n",
" <td>3.729337</td>\n",
" <td>0.178677</td>\n",
" <td>-190.417786</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-24</th>\n",
" <td>417.3400</td>\n",
" <td>420.3200</td>\n",
" <td>417.0800</td>\n",
" <td>419.1700</td>\n",
" <td>51376702.0</td>\n",
" <td>1.481736</td>\n",
" <td>-0.431666</td>\n",
" <td>1.913402</td>\n",
" <td>7.021896</td>\n",
" <td>3.503329</td>\n",
" <td>-0.015238</td>\n",
" <td>-200.869906</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-25</th>\n",
" <td>420.3300</td>\n",
" <td>420.7100</td>\n",
" <td>417.6200</td>\n",
" <td>418.2400</td>\n",
" <td>57451396.0</td>\n",
" <td>1.633482</td>\n",
" <td>-0.223936</td>\n",
" <td>1.857418</td>\n",
" <td>6.714411</td>\n",
" <td>3.289206</td>\n",
" <td>-0.136000</td>\n",
" <td>-208.269455</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-26</th>\n",
" <td>418.8700</td>\n",
" <td>419.6100</td>\n",
" <td>417.7600</td>\n",
" <td>419.0700</td>\n",
" <td>42955732.0</td>\n",
" <td>1.799967</td>\n",
" <td>-0.045961</td>\n",
" <td>1.845928</td>\n",
" <td>6.374729</td>\n",
" <td>3.090622</td>\n",
" <td>-0.193485</td>\n",
" <td>-212.520806</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5427 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-05-20 411.8000 416.6250 411.6700 415.2800 78022218.0 1.189878 \n",
"2021-05-21 416.8700 418.2000 414.4500 414.9400 76578662.0 1.171810 \n",
"2021-05-24 417.3400 420.3200 417.0800 419.1700 51376702.0 1.481736 \n",
"2021-05-25 420.3300 420.7100 417.6200 418.2400 57451396.0 1.633482 \n",
"2021-05-26 418.8700 419.6100 417.7600 419.0700 42955732.0 1.799967 \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-05-20 -1.043818 2.233696 7.451354 3.971502 \n",
"2021-05-21 -0.849509 2.021319 7.279997 3.729337 \n",
"2021-05-24 -0.431666 1.913402 7.021896 3.503329 \n",
"2021-05-25 -0.223936 1.857418 6.714411 3.289206 \n",
"2021-05-26 -0.045961 1.845928 6.374729 3.090622 \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-05-20 0.491649 -175.241148 \n",
"2021-05-21 0.178677 -190.417786 \n",
"2021-05-24 -0.015238 -200.869906 \n",
"2021-05-25 -0.136000 -208.269455 \n",
"2021-05-26 -0.193485 -212.520806 \n",
"\n",
"[5427 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, 'ddof': 0}, {'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='Wednesday May 26, 2021, NYSE: 10:57:12, Local: 14:57:12 PDT, Day 146/365 (40.00%)')"
]
},
"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, \"ddof\": 0},\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-05-20</th>\n",
" <td>411.80</td>\n",
" <td>416.625</td>\n",
" <td>411.67</td>\n",
" <td>415.28</td>\n",
" <td>78022218.0</td>\n",
" <td>407.6032</td>\n",
" <td>371.10540</td>\n",
" <td>423.149919</td>\n",
" <td>415.7705</td>\n",
" <td>408.391081</td>\n",
" <td>-3.549756</td>\n",
" <td>1.189878</td>\n",
" <td>-1.043818</td>\n",
" <td>2.233696</td>\n",
" <td>53.190381</td>\n",
" <td>1.119520</td>\n",
" <td>1.116506</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-21</th>\n",
" <td>416.87</td>\n",
" <td>418.200</td>\n",
" <td>414.45</td>\n",
" <td>414.94</td>\n",
" <td>76578662.0</td>\n",
" <td>408.0314</td>\n",
" <td>371.51955</td>\n",
" <td>423.054331</td>\n",
" <td>415.6805</td>\n",
" <td>408.306669</td>\n",
" <td>-3.547836</td>\n",
" <td>1.171810</td>\n",
" <td>-0.849509</td>\n",
" <td>2.021319</td>\n",
" <td>52.748699</td>\n",
" <td>1.118701</td>\n",
" <td>1.115717</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-24</th>\n",
" <td>417.34</td>\n",
" <td>420.320</td>\n",
" <td>417.08</td>\n",
" <td>419.17</td>\n",
" <td>51376702.0</td>\n",
" <td>408.5336</td>\n",
" <td>371.94375</td>\n",
" <td>423.244472</td>\n",
" <td>415.7585</td>\n",
" <td>408.272528</td>\n",
" <td>-3.601115</td>\n",
" <td>1.481736</td>\n",
" <td>-0.431666</td>\n",
" <td>1.913402</td>\n",
" <td>57.479369</td>\n",
" <td>1.128844</td>\n",
" <td>1.117466</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-25</th>\n",
" <td>420.33</td>\n",
" <td>420.710</td>\n",
" <td>417.62</td>\n",
" <td>418.24</td>\n",
" <td>57451396.0</td>\n",
" <td>408.9702</td>\n",
" <td>372.36210</td>\n",
" <td>423.320826</td>\n",
" <td>415.7945</td>\n",
" <td>408.268174</td>\n",
" <td>-3.620214</td>\n",
" <td>1.633482</td>\n",
" <td>-0.223936</td>\n",
" <td>1.857418</td>\n",
" <td>56.148383</td>\n",
" <td>1.126623</td>\n",
" <td>1.120501</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-26</th>\n",
" <td>418.87</td>\n",
" <td>419.610</td>\n",
" <td>417.76</td>\n",
" <td>419.07</td>\n",
" <td>42955732.0</td>\n",
" <td>409.4334</td>\n",
" <td>372.77960</td>\n",
" <td>423.510034</td>\n",
" <td>415.8780</td>\n",
" <td>408.245966</td>\n",
" <td>-3.670324</td>\n",
" <td>1.799967</td>\n",
" <td>-0.045961</td>\n",
" <td>1.845928</td>\n",
" <td>57.103084</td>\n",
" <td>1.128605</td>\n",
" <td>1.124459</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 SMA_200 \\\n",
"date \n",
"2021-05-20 411.80 416.625 411.67 415.28 78022218.0 407.6032 371.10540 \n",
"2021-05-21 416.87 418.200 414.45 414.94 76578662.0 408.0314 371.51955 \n",
"2021-05-24 417.34 420.320 417.08 419.17 51376702.0 408.5336 371.94375 \n",
"2021-05-25 420.33 420.710 417.62 418.24 57451396.0 408.9702 372.36210 \n",
"2021-05-26 418.87 419.610 417.76 419.07 42955732.0 409.4334 372.77960 \n",
"\n",
" BBL_20_2.0 BBM_20_2.0 BBU_20_2.0 BBB_20_2.0 MACD_12_26_9 \\\n",
"date \n",
"2021-05-20 423.149919 415.7705 408.391081 -3.549756 1.189878 \n",
"2021-05-21 423.054331 415.6805 408.306669 -3.547836 1.171810 \n",
"2021-05-24 423.244472 415.7585 408.272528 -3.601115 1.481736 \n",
"2021-05-25 423.320826 415.7945 408.268174 -3.620214 1.633482 \n",
"2021-05-26 423.510034 415.8780 408.245966 -3.670324 1.799967 \n",
"\n",
" MACDh_12_26_9 MACDs_12_26_9 RSI_14 CUMLOGRET_1 \\\n",
"date \n",
"2021-05-20 -1.043818 2.233696 53.190381 1.119520 \n",
"2021-05-21 -0.849509 2.021319 52.748699 1.118701 \n",
"2021-05-24 -0.431666 1.913402 57.479369 1.128844 \n",
"2021-05-25 -0.223936 1.857418 56.148383 1.126623 \n",
"2021-05-26 -0.045961 1.845928 57.103084 1.128605 \n",
"\n",
" SMA_5_CUMLOGRET 0 30 70 \n",
"date \n",
"2021-05-20 1.116506 0 30 70 \n",
"2021-05-21 1.115717 0 30 70 \n",
"2021-05-24 1.117466 0 30 70 \n",
"2021-05-25 1.120501 0 30 70 \n",
"2021-05-26 1.124459 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='Wednesday May 26, 2021, NYSE: 10:57:12, Local: 14:57:12 PDT, Day 146/365 (40.00%)')"
]
},
"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-05-20</th>\n",
" <td>411.80</td>\n",
" <td>416.625</td>\n",
" <td>411.67</td>\n",
" <td>415.28</td>\n",
" <td>78022218.0</td>\n",
" <td>413.931044</td>\n",
" <td>-0.745073</td>\n",
" <td>418.481395</td>\n",
" <td>409.590605</td>\n",
" <td>0.012113</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-21</th>\n",
" <td>416.87</td>\n",
" <td>418.200</td>\n",
" <td>414.45</td>\n",
" <td>414.94</td>\n",
" <td>76578662.0</td>\n",
" <td>414.114490</td>\n",
" <td>-0.506287</td>\n",
" <td>417.556042</td>\n",
" <td>409.859958</td>\n",
" <td>-0.003945</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-24</th>\n",
" <td>417.34</td>\n",
" <td>420.320</td>\n",
" <td>417.08</td>\n",
" <td>419.17</td>\n",
" <td>51376702.0</td>\n",
" <td>415.033674</td>\n",
" <td>-0.003415</td>\n",
" <td>420.261736</td>\n",
" <td>408.614264</td>\n",
" <td>0.008746</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-25</th>\n",
" <td>420.33</td>\n",
" <td>420.710</td>\n",
" <td>417.62</td>\n",
" <td>418.24</td>\n",
" <td>57451396.0</td>\n",
" <td>415.616642</td>\n",
" <td>0.202577</td>\n",
" <td>421.540745</td>\n",
" <td>409.855255</td>\n",
" <td>0.015178</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-26</th>\n",
" <td>418.87</td>\n",
" <td>419.610</td>\n",
" <td>417.76</td>\n",
" <td>419.07</td>\n",
" <td>42955732.0</td>\n",
" <td>416.244526</td>\n",
" <td>0.362725</td>\n",
" <td>421.044635</td>\n",
" <td>413.635365</td>\n",
" <td>0.019785</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" open high low close volume EMA_10 \\\n",
"date \n",
"2021-05-20 411.80 416.625 411.67 415.28 78022218.0 413.931044 \n",
"2021-05-21 416.87 418.200 414.45 414.94 76578662.0 414.114490 \n",
"2021-05-24 417.34 420.320 417.08 419.17 51376702.0 415.033674 \n",
"2021-05-25 420.33 420.710 417.62 418.24 57451396.0 415.616642 \n",
"2021-05-26 418.87 419.610 417.76 419.07 42955732.0 416.244526 \n",
"\n",
" MACDh_9_19_10 LB UB LOGRET_5 \n",
"date \n",
"2021-05-20 -0.745073 418.481395 409.590605 0.012113 \n",
"2021-05-21 -0.506287 417.556042 409.859958 -0.003945 \n",
"2021-05-24 -0.003415 420.261736 408.614264 0.008746 \n",
"2021-05-25 0.202577 421.540745 409.855255 0.015178 \n",
"2021-05-26 0.362725 421.044635 413.635365 0.019785 "
]
},
"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
}