{ "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) -> \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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
openhighlowclosevolumeABER_ZG_5_15ABER_SG_5_15ABER_XG_5_15ABER_ATR_5_15ACCBL_20...VAR_30VTXP_14VTXM_14VWAPVWMA_10WCPWILLR_14WMA_10ZL_EMA_10Z_30
date
1999-11-01136.5000137.0000135.5625135.56254006500.0NaNNaNNaNNaNNaN...NaNNaNNaN136.041667NaN135.921875NaNNaNNaNNaN
1999-11-02135.9687137.2500134.5937134.59376516900.0NaNNaNNaNNaNNaN...NaNNaNNaN135.693303NaN135.257775NaNNaNNaNNaN
1999-11-03136.0000136.3750135.1250135.50007222300.0NaNNaNNaNNaNNaN...NaNNaNNaN135.682462NaN135.625000NaNNaNNaNNaN
1999-11-04136.7500137.3593135.7656136.53127907500.0NaNNaNNaNNaNNaN...NaNNaNNaN135.950504NaN136.546825NaNNaNNaNNaN
1999-11-05138.6250139.1093136.7812137.87507431500.0136.332267NaNNaNNaNNaN...NaNNaNNaN136.393305NaN137.910125NaNNaNNaNNaN
..................................................................
2020-07-20321.4300325.1300320.6200324.320056150230.0320.673333326.296123315.0505445.622790300.906776...45.0917571.2236110.623952153.261128318.474591323.597500-3.801032320.096545323.2150811.680556
2020-07-21326.4500326.9300323.9400325.010057245315.0322.353333327.800604316.9060635.447270301.895656...46.4698331.2114930.661493153.278065319.600245325.222500-10.750280321.291636324.1159751.747819
2020-07-22324.6200327.2000324.5000326.860057792915.0323.313333328.577452318.0492145.264119302.558926...50.9191431.1539970.689436153.295250320.677611326.355000-2.058111322.618909325.7185251.900614
2020-07-23326.4700327.2300321.4800322.960075737989.0324.014000329.310511318.7174895.296511303.787477...52.9991901.0857060.763560153.317466321.522738323.657500-25.800604323.042909325.4424301.309102
2020-07-24320.9500321.9900319.2460320.880073766597.0323.886400329.077410318.6953905.191010305.041909...48.7739431.0276290.904621153.338694321.846761320.749000-38.368580322.932727323.9874420.970050
\n", "

5216 rows × 157 columns

\n", "
" ], "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
openhighlowclosevolumeSMA_50SMA_200
date
2000-05-2691.0691.44090.6391.4437400.0NaNNaN
2000-05-3092.7594.81092.7594.8128800.0NaNNaN
2000-05-3195.1396.38095.1395.7518000.0NaNNaN
2000-06-0197.1197.31097.1197.313500.0NaNNaN
2000-06-02101.70102.400101.70102.4014700.0NaNNaN
........................
2020-07-20146.12146.850145.15145.9619581689.0139.7062145.93605
2020-07-21147.47149.160147.20148.0324467065.0140.0196145.93750
2020-07-22147.09148.670147.03148.1124424808.0140.3478145.93235
2020-07-23147.98150.200146.70148.2621704889.0140.7736145.92925
2020-07-24147.29147.665145.56146.0820015547.0141.2408145.92735
\n", "

5072 rows × 7 columns

\n", "
" ], "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
openhighlowclosevolumeEMA_8EMA_21CUMLOGRET_1RSI_14SUPERT_7_3.0SUPERTd_7_3.0SUPERTl_7_3.0SUPERTs_7_3.0
date
1999-11-01136.5000137.0000135.5625135.56254006500.0NaNNaNNaNNaN0.0000001NaNNaN
1999-11-02135.9687137.2500134.5937134.59376516900.0NaNNaN-0.0071720.000000NaN1NaNNaN
1999-11-03136.0000136.3750135.1250135.50007222300.0NaNNaN-0.00046150.185503NaN1NaNNaN
1999-11-04136.7500137.3593135.7656136.53127907500.0NaNNaN0.00712069.153995NaN1NaNNaN
1999-11-05138.6250139.1093136.7812137.87507431500.0NaNNaN0.01691579.896816NaN1NaNNaN
..........................................
2020-07-20321.4300325.1300320.6200324.320056150230.0319.783320315.0764500.87229863.569724307.8904391307.890439NaN
2020-07-21326.4500326.9300323.9400325.010057245315.0320.944805315.9795000.87442364.179426311.3096621311.309662NaN
2020-07-22324.6200327.2000324.5000326.860057792915.0322.259293316.9686360.88009965.830627312.5854251312.585425NaN
2020-07-23326.4700327.2300321.4800322.960075737989.0322.415005317.5133060.86809659.594031312.5854251312.585425NaN
2020-07-24320.9500321.9900319.2460320.880073766597.0322.073893317.8193690.86163456.518677312.5854251312.585425NaN
\n", "

5216 rows × 13 columns

\n", "
" ], "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
openhighlowclosevolumeVOLUME_EMA_10VOLUME_SMA_20EMA_5EMA_5_LR_8
date
1999-11-01136.5000137.0000135.5625135.56254006500.0NaNNaNNaNNaN
1999-11-02135.9687137.2500134.5937134.59376516900.0NaNNaNNaNNaN
1999-11-03136.0000136.3750135.1250135.50007222300.0NaNNaNNaNNaN
1999-11-04136.7500137.3593135.7656136.53127907500.0NaNNaNNaNNaN
1999-11-05138.6250139.1093136.7812137.87507431500.0NaNNaN136.012480NaN
..............................
2020-07-20321.4300325.1300320.6200324.320056150230.07.254859e+0781019145.80321.398416320.058000
2020-07-21326.4500326.9300323.9400325.010057245315.06.976618e+0780181050.95322.602277321.307000
2020-07-22324.6200327.2000324.5000326.860057792915.06.758922e+0779667351.70324.021518322.687127
2020-07-23326.4700327.2300321.4800322.960075737989.06.907082e+0776850881.55323.667679323.406458
2020-07-24320.9500321.9900319.2460320.880073766597.06.992459e+0776090907.45322.738452323.487321
\n", "

5216 rows × 9 columns

\n", "
" ], "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
openhighlowclosevolumeMACD_12_26_9MACDh_12_26_9MACDs_12_26_9MACD_BBL_20_2.0MACD_BBM_20_2.0MACD_BBU_20_2.0
date
1999-11-01136.5000137.0000135.5625135.56254006500.0NaNNaNNaNNaNNaNNaN
1999-11-02135.9687137.2500134.5937134.59376516900.0NaNNaNNaNNaNNaNNaN
1999-11-03136.0000136.3750135.1250135.50007222300.0NaNNaNNaNNaNNaNNaN
1999-11-04136.7500137.3593135.7656136.53127907500.0NaNNaNNaNNaNNaNNaN
1999-11-05138.6250139.1093136.7812137.87507431500.0NaNNaNNaNNaNNaNNaN
....................................
2020-07-20321.4300325.1300320.6200324.320056150230.04.4228270.7136953.7091311.3511683.1532964.955423
2020-07-21326.4500326.9300323.9400325.010057245315.04.6519740.7542743.8977001.3415503.1573204.973090
2020-07-22324.6200327.2000324.5000326.860057792915.04.9260700.8226964.1033741.2790923.1835635.088035
2020-07-23326.4700327.2300321.4800322.960075737989.04.7735690.5361564.2374131.2156023.2431105.270617
2020-07-24320.9500321.9900319.2460320.880073766597.04.4337630.1570804.2766831.2113603.3067705.402179
\n", "

5216 rows × 11 columns

\n", "
" ], "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
openhighlowclosevolumeSMA_50SMA_200BBL_20_2.0BBM_20_2.0BBU_20_2.0MACD_12_26_9MACDh_12_26_9MACDs_12_26_9RSI_14CUMLOGRET_1SMA_5_CUMLOGRET03070
date
1999-11-01136.5000137.0000135.5625135.56254006500.0NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN03070
1999-11-02135.9687137.2500134.5937134.59376516900.0NaNNaNNaNNaNNaNNaNNaNNaN0.000000-0.007172NaN03070
1999-11-03136.0000136.3750135.1250135.50007222300.0NaNNaNNaNNaNNaNNaNNaNNaN50.185503-0.000461NaN03070
1999-11-04136.7500137.3593135.7656136.53127907500.0NaNNaNNaNNaNNaNNaNNaNNaN69.1539950.007120NaN03070
1999-11-05138.6250139.1093136.7812137.87507431500.0NaNNaNNaNNaNNaNNaNNaNNaN79.8968160.016915NaN03070
1999-11-08137.0000138.3750136.7500138.00004649200.0NaNNaNNaNNaNNaNNaNNaNNaN80.5745370.0178210.00684503070
1999-11-09138.5000138.6875136.2812136.70314533700.0NaNNaNNaNNaNNaNNaNNaNNaN58.5283520.0083790.00995503070
1999-11-10136.2500138.3906136.0781137.71876405600.0NaNNaNNaNNaNNaNNaNNaNNaN66.3036840.0157800.01320303070
1999-11-11138.1875138.5000137.4687138.50004794100.0NaNNaNNaNNaNNaNNaNNaN0.070.8339620.0214380.01606603070
1999-11-12139.2500139.9843137.1250139.750011802900.0NaNNaNNaNNaNNaNNaNNaN0.076.3194080.0304220.01876803070
1999-11-15139.8437140.2500139.4062140.07812187500.0NaNNaNNaNNaNNaNNaNNaN0.077.5148040.0327670.02175703070
1999-11-16140.5625143.0000140.0937141.25007544800.0NaNNaNNaNNaNNaNNaNNaN0.081.1709040.0410990.02830103070
1999-11-17142.2500142.9375141.3125141.62509459000.0NaNNaNNaNNaNNaNNaNNaN0.082.1699800.0437500.03389503070
1999-11-18142.4375143.0000141.6250142.62504491000.0NaNNaNNaNNaNNaNNaNNaN0.084.5276300.0507860.03976503070
1999-11-19142.4062142.9687142.0000142.50004832100.0NaNNaNNaNNaNNaNNaNNaN0.083.0493440.0499090.04366203070
1999-11-22142.4375143.0000141.5000142.46874155400.0NaNNaNNaNNaNNaNNaNNaN0.082.6595170.0496900.04704703070
1999-11-23142.8437142.8437140.3750141.21875918000.0NaNNaNNaNNaNNaNNaNNaN0.068.7753850.0408770.04700203070
1999-11-24140.7500142.4375140.0000141.96874459700.0NaNNaNNaNNaNNaNNaNNaN0.071.8324890.0461740.04748703070
1999-11-26142.4687142.8750141.2500141.43751693900.0NaNNaNNaNNaNNaNNaNNaN0.066.8409200.0424250.04581503070
1999-11-29140.8750141.9218140.4375140.93757348600.0NaNNaN134.086598139.34217144.597742NaNNaN0.062.4425340.0388840.04361003070
\n", "
" ], "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 }