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