mirror of
https://github.com/wassname/pandas-ta.git
synced 2026-10-02 12:30:41 +08:00
ENH strategy col_names support ENH classic linreg util TST strategies update
This commit is contained in:
1 parent
591d5a474d
commit
3eee8901bf
11 files changed
+515
-272
No files matched your search
@@ -128,6 +128,7 @@ data/tulip.csv
|
||||
|
||||
examples/cache.sqlite
|
||||
examples/taplot.py
|
||||
examples/alpaca_trader.py
|
||||
examples/ChartTA.ipynb
|
||||
examples/charting.ipynb
|
||||
examples/ib_trader.ipynb
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
"Numpy v1.18.3\n",
|
||||
"Pandas v1.1.0\n",
|
||||
"mplfinance v0.12.6a3\n",
|
||||
"Pandas TA v0.2.08b\n"
|
||||
"Pandas TA v0.2.12b\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -91,7 +91,7 @@
|
||||
" # All Data: 0, Last Four Years: 0.25, Last Two Years: 0.5, This Year: 1, Last Half Year: 2, Last Quarter: 4\n",
|
||||
" yearly_divisor = {\"all\": 0, \"10y\": 0.1, \"5y\": 0.2, \"4y\": 0.25, \"3y\": 1./3, \"2y\": 0.5, \"1y\": 1, \"6mo\": 2, \"3mo\": 4}\n",
|
||||
" yd = yearly_divisor[tf] if tf in yearly_divisor.keys() else 0\n",
|
||||
" return int(ta.TRADING_DAYS_PER_YEAR / yd) if yd > 0 else df.shape[0]"
|
||||
" return int(ta.RATE[\"TRADING_DAYS_PER_YEAR\"] / yd) if yd > 0 else df.shape[0]"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -112,13 +112,13 @@
|
||||
"text": [
|
||||
"[!] Loading All: SPY, QQQ, AAPL, TSLA\n",
|
||||
"[i] Loaded['D']: SPY_D.csv\n",
|
||||
"[i] Runtime: 812.7898 ms (0.8128 s)\n",
|
||||
"[i] Runtime: 1812.7836 ms (1.8128 s)\n",
|
||||
"[i] Loaded['D']: QQQ_D.csv\n",
|
||||
"[i] Runtime: 818.7984 ms (0.8188 s)\n",
|
||||
"[i] Runtime: 1747.0058 ms (1.7470 s)\n",
|
||||
"[i] Loaded['D']: AAPL_D.csv\n",
|
||||
"[i] Runtime: 1227.1223 ms (1.2271 s)\n",
|
||||
"[i] Runtime: 1105.7967 ms (1.1058 s)\n",
|
||||
"[i] Loaded['D']: TSLA_D.csv\n",
|
||||
"[i] Runtime: 1858.9133 ms (1.8589 s)\n"
|
||||
"[i] Runtime: 906.7782 ms (0.9068 s)\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -353,7 +353,7 @@
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<matplotlib.axes._subplots.AxesSubplot at 0x11196a5b0>"
|
||||
"<matplotlib.axes._subplots.AxesSubplot at 0x11a0cc880>"
|
||||
]
|
||||
},
|
||||
"execution_count": 9,
|
||||
@@ -396,7 +396,7 @@
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<matplotlib.axes._subplots.AxesSubplot at 0x11d8d3fd0>"
|
||||
"<matplotlib.axes._subplots.AxesSubplot at 0x11a779940>"
|
||||
]
|
||||
},
|
||||
"execution_count": 10,
|
||||
@@ -441,7 +441,7 @@
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<matplotlib.axes._subplots.AxesSubplot at 0x11d9e70d0>"
|
||||
"<matplotlib.axes._subplots.AxesSubplot at 0x10e090670>"
|
||||
]
|
||||
},
|
||||
"execution_count": 11,
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
"text": [
|
||||
"name = All\n",
|
||||
"description = All the indicators with their default settings. Pandas TA default.\n",
|
||||
"created = 09/13/2020, 15:34:25\n",
|
||||
"created = 09/25/2020, 07:53:11\n",
|
||||
"ta = None\n"
|
||||
]
|
||||
}
|
||||
@@ -116,7 +116,7 @@
|
||||
"text": [
|
||||
"name = Common Price and Volume SMAs\n",
|
||||
"description = Common Price SMAs: 10, 20, 50, 200 and Volume SMA: 20.\n",
|
||||
"created = 09/13/2020, 15:34:25\n",
|
||||
"created = 09/25/2020, 07:53:11\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"
|
||||
]
|
||||
}
|
||||
@@ -158,7 +158,7 @@
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"Strategy(name='A', ta=[{'kind': 'sma', 'length': 50}, {'kind': 'sma', 'length': 200}], description=None, created='09/13/2020, 15:34:25', last_run=None, run_time=None)"
|
||||
"Strategy(name='A', ta=[{'kind': 'sma', 'length': 50}, {'kind': 'sma', 'length': 200}], description=None, created='09/25/2020, 07:53:11')"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
@@ -186,7 +186,7 @@
|
||||
{
|
||||
"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='09/13/2020, 15:34:25', last_run=None, run_time=None)"
|
||||
"Strategy(name='B', ta=[{'kind': 'ema', 'length': 8}, {'kind': 'ema', 'length': 21}, {'kind': 'log_return', 'cumulative': True}, {'kind': 'rsi'}, {'kind': 'supertrend'}], description=None, created='09/25/2020, 07:53:11')"
|
||||
]
|
||||
},
|
||||
"execution_count": 5,
|
||||
@@ -214,7 +214,7 @@
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"Strategy(name='Runtime Failure', ta=[{'kind': 'percet_return'}], description=None, created='09/13/2020, 15:34:25', last_run=None, run_time=None)"
|
||||
"Strategy(name='Runtime Failure', ta=[{'kind': 'percet_return'}], description=None, created='09/25/2020, 07:53:11')"
|
||||
]
|
||||
},
|
||||
"execution_count": 6,
|
||||
@@ -348,20 +348,23 @@
|
||||
"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",
|
||||
" | # Watchlist Class (** This is subject to change! **)\n",
|
||||
" | A simple Class to load/download financial market data and automatically\n",
|
||||
" | apply Technical Analysis indicators with a Pandas TA Strategy. Default\n",
|
||||
" | Strategy: pandas_ta.AllStrategy.\n",
|
||||
" | apply Technical Analysis indicators with a Pandas TA Strategy.\n",
|
||||
" | \n",
|
||||
" | Requirements:\n",
|
||||
" | Default Strategy: pandas_ta.AllStrategy.\n",
|
||||
" | \n",
|
||||
" | ## Package Support:\n",
|
||||
" | ### Data Source (Default: AlphaVantage)\n",
|
||||
" | - AlphaVantage (pip install alphaVantage-api).\n",
|
||||
" | - Python Binance (pip install python-binance). # Future Support\n",
|
||||
" | - Yahoo Finance (pip install yfinance). # Almost Supported\n",
|
||||
" | \n",
|
||||
" | # Technical Analysis:\n",
|
||||
" | - Pandas TA (pip install pandas_ta)\n",
|
||||
" | - 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",
|
||||
" | ## Required Arguments:\n",
|
||||
" | - tickers: A list of strings containing tickers. Example: ['SPY', 'AAPL']\n",
|
||||
" | ============================================================================\n",
|
||||
" | \n",
|
||||
" | Methods defined here:\n",
|
||||
" | \n",
|
||||
@@ -435,12 +438,42 @@
|
||||
"text": [
|
||||
"[!] Loading All: SPY, IWM\n",
|
||||
"[i] Loaded['D']: SPY_D.csv\n",
|
||||
" open high low close volume\n",
|
||||
"date \n",
|
||||
"1999-11-01 136.5000 137.0000 135.5625 135.5625 4006500.0\n",
|
||||
"1999-11-02 135.9687 137.2500 134.5937 134.5937 6516900.0\n",
|
||||
"1999-11-03 136.0000 136.3750 135.1250 135.5000 7222300.0\n",
|
||||
"1999-11-04 136.7500 137.3593 135.7656 136.5312 7907500.0\n",
|
||||
"1999-11-05 138.6250 139.1093 136.7812 137.8750 7431500.0\n",
|
||||
"... ... ... ... ... ...\n",
|
||||
"2020-08-24 342.1200 343.0000 339.4504 342.9200 48588662.0\n",
|
||||
"2020-08-25 343.5300 344.2100 342.2700 344.1200 38463381.0\n",
|
||||
"2020-08-26 344.7600 347.8600 344.1700 347.5700 50790237.0\n",
|
||||
"2020-08-27 348.5100 349.9000 346.5300 348.3300 58034142.0\n",
|
||||
"2020-08-28 349.4400 350.7200 348.1500 350.5800 48588940.0\n",
|
||||
"\n",
|
||||
"[5241 rows x 5 columns]\n",
|
||||
"[+] Strategy: Common Price and Volume SMAs\n",
|
||||
"[i] Indicator arguments: {'timed': False, 'append': True}\n",
|
||||
"[i] Multiprocessing: 4 of 4 cores.\n",
|
||||
"[i] Total indicators: 5\n",
|
||||
"[i] Columns added: 5\n",
|
||||
"[i] Loaded['D']: IWM_D.csv\n",
|
||||
" open high low close volume\n",
|
||||
"date \n",
|
||||
"2000-05-26 91.06 91.44 90.630 91.44 37400.0\n",
|
||||
"2000-05-30 92.75 94.81 92.750 94.81 28800.0\n",
|
||||
"2000-05-31 95.13 96.38 95.130 95.75 18000.0\n",
|
||||
"2000-06-01 97.11 97.31 97.110 97.31 3500.0\n",
|
||||
"2000-06-02 101.70 102.40 101.700 102.40 14700.0\n",
|
||||
"... ... ... ... ... ...\n",
|
||||
"2020-08-31 157.19 157.37 155.300 155.43 17051511.0\n",
|
||||
"2020-09-01 155.22 157.31 154.450 157.21 15654144.0\n",
|
||||
"2020-09-02 157.96 158.98 156.175 158.46 16763449.0\n",
|
||||
"2020-09-03 158.12 158.29 152.960 153.78 32117585.0\n",
|
||||
"2020-09-04 155.71 155.89 149.290 152.80 30618783.0\n",
|
||||
"\n",
|
||||
"[5102 rows x 5 columns]\n",
|
||||
"[+] Strategy: Common Price and Volume SMAs\n",
|
||||
"[i] Indicator arguments: {'timed': False, 'append': True}\n",
|
||||
"[i] Multiprocessing: 4 of 4 cores.\n",
|
||||
@@ -810,7 +843,7 @@
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"Strategy(name='A', ta=[{'kind': 'sma', 'length': 50}, {'kind': 'sma', 'length': 200}], description=None, created='09/13/2020, 15:34:25', last_run=None, run_time=None)"
|
||||
"Strategy(name='A', ta=[{'kind': 'sma', 'length': 50}, {'kind': 'sma', 'length': 200}], description=None, created='09/25/2020, 07:53:11')"
|
||||
]
|
||||
},
|
||||
"execution_count": 14,
|
||||
@@ -834,7 +867,22 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[i] Loaded['D']: IWM_D.csv\n"
|
||||
"[i] Loaded['D']: IWM_D.csv\n",
|
||||
" open high low close volume\n",
|
||||
"date \n",
|
||||
"2000-05-26 91.06 91.44 90.630 91.44 37400.0\n",
|
||||
"2000-05-30 92.75 94.81 92.750 94.81 28800.0\n",
|
||||
"2000-05-31 95.13 96.38 95.130 95.75 18000.0\n",
|
||||
"2000-06-01 97.11 97.31 97.110 97.31 3500.0\n",
|
||||
"2000-06-02 101.70 102.40 101.700 102.40 14700.0\n",
|
||||
"... ... ... ... ... ...\n",
|
||||
"2020-08-31 157.19 157.37 155.300 155.43 17051511.0\n",
|
||||
"2020-09-01 155.22 157.31 154.450 157.21 15654144.0\n",
|
||||
"2020-09-02 157.96 158.98 156.175 158.46 16763449.0\n",
|
||||
"2020-09-03 158.12 158.29 152.960 153.78 32117585.0\n",
|
||||
"2020-09-04 155.71 155.89 149.290 152.80 30618783.0\n",
|
||||
"\n",
|
||||
"[5102 rows x 5 columns]\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1035,7 +1083,7 @@
|
||||
{
|
||||
"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='09/13/2020, 15:34:25', last_run=None, run_time=None)"
|
||||
"Strategy(name='B', ta=[{'kind': 'ema', 'length': 8}, {'kind': 'ema', 'length': 21}, {'kind': 'log_return', 'cumulative': True}, {'kind': 'rsi'}, {'kind': 'supertrend'}], description=None, created='09/25/2020, 07:53:11')"
|
||||
]
|
||||
},
|
||||
"execution_count": 16,
|
||||
@@ -1058,7 +1106,22 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[i] Loaded['D']: SPY_D.csv\n"
|
||||
"[i] Loaded['D']: SPY_D.csv\n",
|
||||
" open high low close volume\n",
|
||||
"date \n",
|
||||
"1999-11-01 136.5000 137.0000 135.5625 135.5625 4006500.0\n",
|
||||
"1999-11-02 135.9687 137.2500 134.5937 134.5937 6516900.0\n",
|
||||
"1999-11-03 136.0000 136.3750 135.1250 135.5000 7222300.0\n",
|
||||
"1999-11-04 136.7500 137.3593 135.7656 136.5312 7907500.0\n",
|
||||
"1999-11-05 138.6250 139.1093 136.7812 137.8750 7431500.0\n",
|
||||
"... ... ... ... ... ...\n",
|
||||
"2020-08-24 342.1200 343.0000 339.4504 342.9200 48588662.0\n",
|
||||
"2020-08-25 343.5300 344.2100 342.2700 344.1200 38463381.0\n",
|
||||
"2020-08-26 344.7600 347.8600 344.1700 347.5700 50790237.0\n",
|
||||
"2020-08-27 348.5100 349.9000 346.5300 348.3300 58034142.0\n",
|
||||
"2020-08-28 349.4400 350.7200 348.1500 350.5800 48588940.0\n",
|
||||
"\n",
|
||||
"[5241 rows x 5 columns]\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1365,7 +1428,7 @@
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"Strategy(name='Runtime Failure', ta=[{'kind': 'percet_return'}], description=None, created='09/13/2020, 15:34:25', last_run=None, run_time=None)"
|
||||
"Strategy(name='Runtime Failure', ta=[{'kind': 'percet_return'}], description=None, created='09/25/2020, 07:53:11')"
|
||||
]
|
||||
},
|
||||
"execution_count": 18,
|
||||
@@ -1389,6 +1452,21 @@
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[i] Loaded['D']: IWM_D.csv\n",
|
||||
" open high low close volume\n",
|
||||
"date \n",
|
||||
"2000-05-26 91.06 91.44 90.630 91.44 37400.0\n",
|
||||
"2000-05-30 92.75 94.81 92.750 94.81 28800.0\n",
|
||||
"2000-05-31 95.13 96.38 95.130 95.75 18000.0\n",
|
||||
"2000-06-01 97.11 97.31 97.110 97.31 3500.0\n",
|
||||
"2000-06-02 101.70 102.40 101.700 102.40 14700.0\n",
|
||||
"... ... ... ... ... ...\n",
|
||||
"2020-08-31 157.19 157.37 155.300 155.43 17051511.0\n",
|
||||
"2020-09-01 155.22 157.31 154.450 157.21 15654144.0\n",
|
||||
"2020-09-02 157.96 158.98 156.175 158.46 16763449.0\n",
|
||||
"2020-09-03 158.12 158.29 152.960 153.78 32117585.0\n",
|
||||
"2020-09-04 155.71 155.89 149.290 152.80 30618783.0\n",
|
||||
"\n",
|
||||
"[5102 rows x 5 columns]\n",
|
||||
"[X] Oops! 'AnalysisIndicators' object has no attribute 'percet_return'\n"
|
||||
]
|
||||
}
|
||||
@@ -1431,7 +1509,7 @@
|
||||
{
|
||||
"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='09/13/2020, 15:34:25', last_run=None, run_time=None)"
|
||||
"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='09/25/2020, 07:53:11')"
|
||||
]
|
||||
},
|
||||
"execution_count": 20,
|
||||
@@ -1483,7 +1561,22 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[i] Loaded['D']: SPY_D.csv\n"
|
||||
"[i] Loaded['D']: SPY_D.csv\n",
|
||||
" open high low close volume\n",
|
||||
"date \n",
|
||||
"1999-11-01 136.5000 137.0000 135.5625 135.5625 4006500.0\n",
|
||||
"1999-11-02 135.9687 137.2500 134.5937 134.5937 6516900.0\n",
|
||||
"1999-11-03 136.0000 136.3750 135.1250 135.5000 7222300.0\n",
|
||||
"1999-11-04 136.7500 137.3593 135.7656 136.5312 7907500.0\n",
|
||||
"1999-11-05 138.6250 139.1093 136.7812 137.8750 7431500.0\n",
|
||||
"... ... ... ... ... ...\n",
|
||||
"2020-08-24 342.1200 343.0000 339.4504 342.9200 48588662.0\n",
|
||||
"2020-08-25 343.5300 344.2100 342.2700 344.1200 38463381.0\n",
|
||||
"2020-08-26 344.7600 347.8600 344.1700 347.5700 50790237.0\n",
|
||||
"2020-08-27 348.5100 349.9000 346.5300 348.3300 58034142.0\n",
|
||||
"2020-08-28 349.4400 350.7200 348.1500 350.5800 48588940.0\n",
|
||||
"\n",
|
||||
"[5241 rows x 5 columns]\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1732,7 +1825,7 @@
|
||||
{
|
||||
"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='09/13/2020, 15:34:25', last_run=None, run_time=None)"
|
||||
"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='09/25/2020, 07:53:11')"
|
||||
]
|
||||
},
|
||||
"execution_count": 23,
|
||||
@@ -1782,7 +1875,22 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[i] Loaded['D']: SPY_D.csv\n"
|
||||
"[i] Loaded['D']: SPY_D.csv\n",
|
||||
" open high low close volume\n",
|
||||
"date \n",
|
||||
"1999-11-01 136.5000 137.0000 135.5625 135.5625 4006500.0\n",
|
||||
"1999-11-02 135.9687 137.2500 134.5937 134.5937 6516900.0\n",
|
||||
"1999-11-03 136.0000 136.3750 135.1250 135.5000 7222300.0\n",
|
||||
"1999-11-04 136.7500 137.3593 135.7656 136.5312 7907500.0\n",
|
||||
"1999-11-05 138.6250 139.1093 136.7812 137.8750 7431500.0\n",
|
||||
"... ... ... ... ... ...\n",
|
||||
"2020-08-24 342.1200 343.0000 339.4504 342.9200 48588662.0\n",
|
||||
"2020-08-25 343.5300 344.2100 342.2700 344.1200 38463381.0\n",
|
||||
"2020-08-26 344.7600 347.8600 344.1700 347.5700 50790237.0\n",
|
||||
"2020-08-27 348.5100 349.9000 346.5300 348.3300 58034142.0\n",
|
||||
"2020-08-28 349.4400 350.7200 348.1500 350.5800 48588940.0\n",
|
||||
"\n",
|
||||
"[5241 rows x 5 columns]\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -2078,7 +2186,7 @@
|
||||
{
|
||||
"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='09/13/2020, 15:34:25', last_run=None, run_time=None)"
|
||||
"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='09/25/2020, 07:53:11')"
|
||||
]
|
||||
},
|
||||
"execution_count": 26,
|
||||
@@ -2136,7 +2244,22 @@
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[i] Loaded['D']: SPY_D.csv\n",
|
||||
"[i] Runtime: 782.4791 ms (0.7825 s)\n"
|
||||
" open high low close volume\n",
|
||||
"date \n",
|
||||
"1999-11-01 136.5000 137.0000 135.5625 135.5625 4006500.0\n",
|
||||
"1999-11-02 135.9687 137.2500 134.5937 134.5937 6516900.0\n",
|
||||
"1999-11-03 136.0000 136.3750 135.1250 135.5000 7222300.0\n",
|
||||
"1999-11-04 136.7500 137.3593 135.7656 136.5312 7907500.0\n",
|
||||
"1999-11-05 138.6250 139.1093 136.7812 137.8750 7431500.0\n",
|
||||
"... ... ... ... ... ...\n",
|
||||
"2020-08-24 342.1200 343.0000 339.4504 342.9200 48588662.0\n",
|
||||
"2020-08-25 343.5300 344.2100 342.2700 344.1200 38463381.0\n",
|
||||
"2020-08-26 344.7600 347.8600 344.1700 347.5700 50790237.0\n",
|
||||
"2020-08-27 348.5100 349.9000 346.5300 348.3300 58034142.0\n",
|
||||
"2020-08-28 349.4400 350.7200 348.1500 350.5800 48588940.0\n",
|
||||
"\n",
|
||||
"[5241 rows x 5 columns]\n",
|
||||
"[i] Runtime: 927.2966 ms (0.9273 s)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -2396,7 +2519,7 @@
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"Strategy(name='EMA, MACD History, Log Returns', ta=[{'kind': 'ema', 'params': (10,)}, {'kind': 'macd', 'params': (9, 19, 10), 'col_numbers': (1,)}, {'kind': 'log_return', 'params': (5, False)}], description='EMA, MACD History, and Log Returns Strategy', created='09/13/2020, 15:34:25', last_run=None, run_time=None)"
|
||||
"Strategy(name='EMA, MACD History, Outter BBands, Log Returns', ta=[{'kind': 'ema', 'params': (10,)}, {'kind': 'macd', 'params': (9, 19, 10), 'col_numbers': (1,)}, {'kind': 'bbands', 'col_numbers': (0, 2), 'col_names': ('LB', 'UB')}, {'kind': 'log_return', 'params': (5, False)}], description='EMA, MACD History, BBands(LB, UB), and Log Returns Strategy', created='09/25/2020, 07:53:11')"
|
||||
]
|
||||
},
|
||||
"execution_count": 29,
|
||||
@@ -2410,12 +2533,14 @@
|
||||
" # params sets MACD's keyword arguments: fast=9, slow=19, signal=10\n",
|
||||
" # and returning the 2nd column: histogram\n",
|
||||
" {\"kind\":\"macd\", \"params\": (9, 19, 10), \"col_numbers\": (1,)},\n",
|
||||
" # Selects the Lower and Upper Bands and renames them LB and UB, ignoring the MB\n",
|
||||
" {\"kind\":\"bbands\", \"col_numbers\": (0,2), \"col_names\": (\"LB\", \"UB\")},\n",
|
||||
" {\"kind\":\"log_return\", \"params\": (5, False)},\n",
|
||||
"]\n",
|
||||
"params_ta_strategy = ta.Strategy(\n",
|
||||
" \"EMA, MACD History, Log Returns\", # name\n",
|
||||
" \"EMA, MACD History, Outter BBands, Log Returns\", # name\n",
|
||||
" params_ta, # ta\n",
|
||||
" \"EMA, MACD History, and Log Returns Strategy\" # description\n",
|
||||
" \"EMA, MACD History, BBands(LB, UB), and Log Returns Strategy\" # description\n",
|
||||
")\n",
|
||||
"params_ta_strategy"
|
||||
]
|
||||
@@ -2428,7 +2553,7 @@
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"'EMA, MACD History, Log Returns'"
|
||||
"'EMA, MACD History, Outter BBands, Log Returns'"
|
||||
]
|
||||
},
|
||||
"execution_count": 30,
|
||||
@@ -2452,7 +2577,22 @@
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[i] Loaded['D']: SPY_D.csv\n",
|
||||
"[i] Runtime: 685.6862 ms (0.6857 s)\n"
|
||||
" open high low close volume\n",
|
||||
"date \n",
|
||||
"1999-11-01 136.5000 137.0000 135.5625 135.5625 4006500.0\n",
|
||||
"1999-11-02 135.9687 137.2500 134.5937 134.5937 6516900.0\n",
|
||||
"1999-11-03 136.0000 136.3750 135.1250 135.5000 7222300.0\n",
|
||||
"1999-11-04 136.7500 137.3593 135.7656 136.5312 7907500.0\n",
|
||||
"1999-11-05 138.6250 139.1093 136.7812 137.8750 7431500.0\n",
|
||||
"... ... ... ... ... ...\n",
|
||||
"2020-08-24 342.1200 343.0000 339.4504 342.9200 48588662.0\n",
|
||||
"2020-08-25 343.5300 344.2100 342.2700 344.1200 38463381.0\n",
|
||||
"2020-08-26 344.7600 347.8600 344.1700 347.5700 50790237.0\n",
|
||||
"2020-08-27 348.5100 349.9000 346.5300 348.3300 58034142.0\n",
|
||||
"2020-08-28 349.4400 350.7200 348.1500 350.5800 48588940.0\n",
|
||||
"\n",
|
||||
"[5241 rows x 5 columns]\n",
|
||||
"[i] Runtime: 180.5198 ms (0.1805 s)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -2483,6 +2623,8 @@
|
||||
" <th>volume</th>\n",
|
||||
" <th>EMA_10</th>\n",
|
||||
" <th>MACDh_9_19_10</th>\n",
|
||||
" <th>LB</th>\n",
|
||||
" <th>UB</th>\n",
|
||||
" <th>LOGRET_5</th>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
@@ -2495,6 +2637,8 @@
|
||||
" <th></th>\n",
|
||||
" <th></th>\n",
|
||||
" <th></th>\n",
|
||||
" <th></th>\n",
|
||||
" <th></th>\n",
|
||||
" </tr>\n",
|
||||
" </thead>\n",
|
||||
" <tbody>\n",
|
||||
@@ -2507,6 +2651,8 @@
|
||||
" <td>48588662.0</td>\n",
|
||||
" <td>337.797677</td>\n",
|
||||
" <td>-0.000276</td>\n",
|
||||
" <td>334.962909</td>\n",
|
||||
" <td>343.657091</td>\n",
|
||||
" <td>0.014718</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
@@ -2518,6 +2664,8 @@
|
||||
" <td>38463381.0</td>\n",
|
||||
" <td>338.947190</td>\n",
|
||||
" <td>0.165373</td>\n",
|
||||
" <td>334.441244</td>\n",
|
||||
" <td>346.370756</td>\n",
|
||||
" <td>0.016053</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
@@ -2529,6 +2677,8 @@
|
||||
" <td>50790237.0</td>\n",
|
||||
" <td>340.514974</td>\n",
|
||||
" <td>0.469555</td>\n",
|
||||
" <td>335.028792</td>\n",
|
||||
" <td>349.919208</td>\n",
|
||||
" <td>0.030201</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
@@ -2540,6 +2690,8 @@
|
||||
" <td>58034142.0</td>\n",
|
||||
" <td>341.935888</td>\n",
|
||||
" <td>0.613083</td>\n",
|
||||
" <td>337.277495</td>\n",
|
||||
" <td>351.690505</td>\n",
|
||||
" <td>0.029276</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
@@ -2551,6 +2703,8 @@
|
||||
" <td>48588940.0</td>\n",
|
||||
" <td>343.507545</td>\n",
|
||||
" <td>0.771996</td>\n",
|
||||
" <td>340.426029</td>\n",
|
||||
" <td>352.981971</td>\n",
|
||||
" <td>0.032174</td>\n",
|
||||
" </tr>\n",
|
||||
" </tbody>\n",
|
||||
@@ -2566,13 +2720,13 @@
|
||||
"2020-08-27 348.51 349.90 346.5300 348.33 58034142.0 341.935888 \n",
|
||||
"2020-08-28 349.44 350.72 348.1500 350.58 48588940.0 343.507545 \n",
|
||||
"\n",
|
||||
" MACDh_9_19_10 LOGRET_5 \n",
|
||||
"date \n",
|
||||
"2020-08-24 -0.000276 0.014718 \n",
|
||||
"2020-08-25 0.165373 0.016053 \n",
|
||||
"2020-08-26 0.469555 0.030201 \n",
|
||||
"2020-08-27 0.613083 0.029276 \n",
|
||||
"2020-08-28 0.771996 0.032174 "
|
||||
" MACDh_9_19_10 LB UB LOGRET_5 \n",
|
||||
"date \n",
|
||||
"2020-08-24 -0.000276 334.962909 343.657091 0.014718 \n",
|
||||
"2020-08-25 0.165373 334.441244 346.370756 0.016053 \n",
|
||||
"2020-08-26 0.469555 335.028792 349.919208 0.030201 \n",
|
||||
"2020-08-27 0.613083 337.277495 351.690505 0.029276 \n",
|
||||
"2020-08-28 0.771996 340.426029 352.981971 0.032174 "
|
||||
]
|
||||
},
|
||||
"execution_count": 31,
|
||||
@@ -2584,13 +2738,6 @@
|
||||
"spy = watch.load(\"SPY\", timed=True)\n",
|
||||
"spy.tail()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
|
||||
+143
-167
@@ -56,10 +56,10 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Pandas TA - Technical Analysis Indicators - v0.2.08b\n",
|
||||
"Total Indicators: 121\n",
|
||||
"Pandas TA - Technical Analysis Indicators - v0.2.12b\n",
|
||||
"Total Indicators: 122\n",
|
||||
"Abbreviations:\n",
|
||||
" aberration, above, above_value, accbands, ad, adosc, adx, amat, ao, aobv, apo, aroon, atr, bbands, below, below_value, bias, bop, brar, cci, cdl_doji, cdl_inside, cg, chop, cksp, cmf, cmo, coppock, cross, cross_value, decay, decreasing, dema, donchian, dpo, efi, ema, entropy, eom, er, eri, fisher, fwma, ha, hilo, hl2, hlc3, hma, ichimoku, increasing, inertia, kama, kc, kdj, kst, kurtosis, linreg, log_return, long_run, macd, mad, massi, median, mfi, midpoint, midprice, mom, natr, nvi, obv, ohlc4, pdist, percent_return, pgo, ppo, psar, psl, pvi, pvo, pvol, pvt, pwma, qstick, quantile, rma, roc, rsi, rvgi, rvi, short_run, sinwma, skew, slope, sma, smi, squeeze, stdev, stoch, stochrsi, supertrend, swma, t3, tema, trend_return, trima, trix, true_range, tsi, ttm_trend, ui, uo, variance, vortex, vp, vwap, vwma, wcp, willr, wma, zlma, zscore\n"
|
||||
" aberration, above, above_value, accbands, ad, adosc, adx, amat, ao, aobv, apo, aroon, atr, bbands, below, below_value, bias, bop, brar, cci, cdl_doji, cdl_inside, cfo, cg, chop, cksp, cmf, cmo, coppock, cross, cross_value, decay, decreasing, dema, donchian, dpo, efi, ema, entropy, eom, er, eri, fisher, fwma, ha, hilo, hl2, hlc3, hma, ichimoku, increasing, inertia, kama, kc, kdj, kst, kurtosis, linreg, log_return, long_run, macd, mad, massi, median, mfi, midpoint, midprice, mom, natr, nvi, obv, ohlc4, pdist, percent_return, pgo, ppo, psar, psl, pvi, pvo, pvol, pvt, pwma, qstick, quantile, rma, roc, rsi, rvgi, rvi, short_run, sinwma, skew, slope, sma, smi, squeeze, stdev, stoch, stochrsi, supertrend, swma, t3, tema, trend_return, trima, trix, true_range, tsi, ttm_trend, ui, uo, variance, vortex, vp, vwap, vwma, wcp, willr, wma, zlma, zscore\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -177,9 +177,15 @@
|
||||
"price_size = (16, 8)\n",
|
||||
"ind_size = (16, 3.25)\n",
|
||||
"ticker = \"SPY\"\n",
|
||||
"# All Data: 0, Last Four Years: 0.25, Last Two Years: 0.5, This Year: 1, Last Half Year: 2, Last Quarter: 3\n",
|
||||
"yearly_divisor = 1\n",
|
||||
"recent = int(ta.TRADING_DAYS_PER_YEAR / yearly_divisor) if yearly_divisor > 0 else df.shape[0]"
|
||||
"# # All Data: 0, Last Four Years: 0.25, Last Two Years: 0.5, This Year: 1, Last Half Year: 2, Last Quarter: 3\n",
|
||||
"# yearly_divisor = 1\n",
|
||||
"# recent = int(ta.RATE[\"TRADING_DAYS_PER_YEAR\"] / yearly_divisor) if yearly_divisor > 0 else df.shape[0]\n",
|
||||
"# print(recent)\n",
|
||||
"def recent_bars(df, tf: str = \"1y\"):\n",
|
||||
" # All Data: 0, Last Four Years: 0.25, Last Two Years: 0.5, This Year: 1, Last Half Year: 2, Last Quarter: 4\n",
|
||||
" yearly_divisor = {\"all\": 0, \"10y\": 0.1, \"5y\": 0.2, \"4y\": 0.25, \"3y\": 1./3, \"2y\": 0.5, \"1y\": 1, \"6mo\": 2, \"3mo\": 4}\n",
|
||||
" yd = yearly_divisor[tf] if tf in yearly_divisor.keys() else 0\n",
|
||||
" return int(ta.RATE[\"TRADING_DAYS_PER_YEAR\"] / yd) if yd > 0 else df.shape[0]"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -198,26 +204,26 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"SPY(5250, 7) from 1999-11-01 00:00:00 to 2020-09-11 00:00:00\n",
|
||||
"SPY(5259, 6) from 1999-11-01 00:00:00 to 2020-09-24 00:00:00\n",
|
||||
" open high low close adj_close \\\n",
|
||||
"count 5250.000000 5250.000000 5250.000000 5250.000000 5250.000000 \n",
|
||||
"mean 162.536632 163.498417 161.465172 162.533567 138.609095 \n",
|
||||
"std 63.510375 63.701597 63.293436 63.521877 71.070742 \n",
|
||||
"min 67.950000 70.000000 67.100000 68.110000 53.914200 \n",
|
||||
"25% 116.500000 117.400000 115.580000 116.542500 87.510800 \n",
|
||||
"50% 138.352500 139.320000 137.225000 138.183750 106.456300 \n",
|
||||
"75% 204.762500 206.070000 203.917500 204.970000 185.195375 \n",
|
||||
"max 355.870000 358.750000 353.430000 357.700000 357.700000 \n",
|
||||
"count 5259.000000 5259.000000 5259.000000 5259.000000 5259.000000 \n",
|
||||
"mean 162.824636 163.786606 161.760947 162.822990 138.379707 \n",
|
||||
"std 63.849124 64.042411 63.611713 63.853704 71.174504 \n",
|
||||
"min 67.950000 70.000000 67.100000 68.110000 53.696800 \n",
|
||||
"25% 116.500000 117.410000 115.595000 116.555000 87.157500 \n",
|
||||
"50% 138.437500 139.406200 137.328100 138.250000 106.138700 \n",
|
||||
"75% 204.975000 206.255000 204.130000 205.210000 184.669600 \n",
|
||||
"max 355.870000 358.750000 353.430000 357.700000 356.257100 \n",
|
||||
"\n",
|
||||
" volume \n",
|
||||
"count 5.250000e+03 \n",
|
||||
"mean 1.112000e+08 \n",
|
||||
"std 9.800456e+07 \n",
|
||||
"min 6.790000e+04 \n",
|
||||
"25% 4.760167e+07 \n",
|
||||
"50% 8.220760e+07 \n",
|
||||
"75% 1.490664e+08 \n",
|
||||
"max 8.708580e+08 \n"
|
||||
"count 5.259000e+03 \n",
|
||||
"mean 1.112084e+08 \n",
|
||||
"std 9.791131e+07 \n",
|
||||
"min 1.708170e+05 \n",
|
||||
"25% 4.766386e+07 \n",
|
||||
"50% 8.224770e+07 \n",
|
||||
"75% 1.486532e+08 \n",
|
||||
"max 8.710263e+08 \n"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -241,7 +247,6 @@
|
||||
" <thead>\n",
|
||||
" <tr style=\"text-align: right;\">\n",
|
||||
" <th></th>\n",
|
||||
" <th>date</th>\n",
|
||||
" <th>open</th>\n",
|
||||
" <th>high</th>\n",
|
||||
" <th>low</th>\n",
|
||||
@@ -257,58 +262,52 @@
|
||||
" <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>1999-11-01</td>\n",
|
||||
" <td>136.5000</td>\n",
|
||||
" <td>137.0000</td>\n",
|
||||
" <td>135.5625</td>\n",
|
||||
" <td>135.5625</td>\n",
|
||||
" <td>91.9725</td>\n",
|
||||
" <td>91.5996</td>\n",
|
||||
" <td>4006500.0</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>1999-11-02</th>\n",
|
||||
" <td>1999-11-02</td>\n",
|
||||
" <td>135.9687</td>\n",
|
||||
" <td>137.2500</td>\n",
|
||||
" <td>134.5937</td>\n",
|
||||
" <td>134.5937</td>\n",
|
||||
" <td>91.3152</td>\n",
|
||||
" <td>90.9450</td>\n",
|
||||
" <td>6516900.0</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>1999-11-03</th>\n",
|
||||
" <td>1999-11-03</td>\n",
|
||||
" <td>136.0000</td>\n",
|
||||
" <td>136.3750</td>\n",
|
||||
" <td>135.1250</td>\n",
|
||||
" <td>135.5000</td>\n",
|
||||
" <td>91.9301</td>\n",
|
||||
" <td>91.5574</td>\n",
|
||||
" <td>7222300.0</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>1999-11-04</th>\n",
|
||||
" <td>1999-11-04</td>\n",
|
||||
" <td>136.7500</td>\n",
|
||||
" <td>137.3593</td>\n",
|
||||
" <td>135.7656</td>\n",
|
||||
" <td>136.5312</td>\n",
|
||||
" <td>92.6297</td>\n",
|
||||
" <td>92.2542</td>\n",
|
||||
" <td>7907500.0</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>1999-11-05</th>\n",
|
||||
" <td>1999-11-05</td>\n",
|
||||
" <td>138.6250</td>\n",
|
||||
" <td>139.1093</td>\n",
|
||||
" <td>136.7812</td>\n",
|
||||
" <td>137.8750</td>\n",
|
||||
" <td>93.5414</td>\n",
|
||||
" <td>93.1622</td>\n",
|
||||
" <td>7431500.0</td>\n",
|
||||
" </tr>\n",
|
||||
" </tbody>\n",
|
||||
@@ -316,21 +315,13 @@
|
||||
"</div>"
|
||||
],
|
||||
"text/plain": [
|
||||
" date open high low close adj_close \\\n",
|
||||
"date \n",
|
||||
"1999-11-01 1999-11-01 136.5000 137.0000 135.5625 135.5625 91.9725 \n",
|
||||
"1999-11-02 1999-11-02 135.9687 137.2500 134.5937 134.5937 91.3152 \n",
|
||||
"1999-11-03 1999-11-03 136.0000 136.3750 135.1250 135.5000 91.9301 \n",
|
||||
"1999-11-04 1999-11-04 136.7500 137.3593 135.7656 136.5312 92.6297 \n",
|
||||
"1999-11-05 1999-11-05 138.6250 139.1093 136.7812 137.8750 93.5414 \n",
|
||||
"\n",
|
||||
" volume \n",
|
||||
"date \n",
|
||||
"1999-11-01 4006500.0 \n",
|
||||
"1999-11-02 6516900.0 \n",
|
||||
"1999-11-03 7222300.0 \n",
|
||||
"1999-11-04 7907500.0 \n",
|
||||
"1999-11-05 7431500.0 "
|
||||
" open high low close adj_close volume\n",
|
||||
"date \n",
|
||||
"1999-11-01 136.5000 137.0000 135.5625 135.5625 91.5996 4006500.0\n",
|
||||
"1999-11-02 135.9687 137.2500 134.5937 134.5937 90.9450 6516900.0\n",
|
||||
"1999-11-03 136.0000 136.3750 135.1250 135.5000 91.5574 7222300.0\n",
|
||||
"1999-11-04 136.7500 137.3593 135.7656 136.5312 92.2542 7907500.0\n",
|
||||
"1999-11-05 138.6250 139.1093 136.7812 137.8750 93.1622 7431500.0"
|
||||
]
|
||||
},
|
||||
"execution_count": 6,
|
||||
@@ -354,26 +345,26 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"SPY(252, 7) from 2019-09-13 00:00:00 to 2020-09-11 00:00:00\n",
|
||||
"SPY(252, 6) from 2019-09-26 00:00:00 to 2020-09-24 00:00:00\n",
|
||||
" open high low close adj_close \\\n",
|
||||
"count 5250.000000 5250.000000 5250.000000 5250.000000 5250.000000 \n",
|
||||
"mean 162.536632 163.498417 161.465172 162.533567 138.609095 \n",
|
||||
"std 63.510375 63.701597 63.293436 63.521877 71.070742 \n",
|
||||
"min 67.950000 70.000000 67.100000 68.110000 53.914200 \n",
|
||||
"25% 116.500000 117.400000 115.580000 116.542500 87.510800 \n",
|
||||
"50% 138.352500 139.320000 137.225000 138.183750 106.456300 \n",
|
||||
"75% 204.762500 206.070000 203.917500 204.970000 185.195375 \n",
|
||||
"max 355.870000 358.750000 353.430000 357.700000 357.700000 \n",
|
||||
"count 5259.000000 5259.000000 5259.000000 5259.000000 5259.000000 \n",
|
||||
"mean 162.824636 163.786606 161.760947 162.822990 138.379707 \n",
|
||||
"std 63.849124 64.042411 63.611713 63.853704 71.174504 \n",
|
||||
"min 67.950000 70.000000 67.100000 68.110000 53.696800 \n",
|
||||
"25% 116.500000 117.410000 115.595000 116.555000 87.157500 \n",
|
||||
"50% 138.437500 139.406200 137.328100 138.250000 106.138700 \n",
|
||||
"75% 204.975000 206.255000 204.130000 205.210000 184.669600 \n",
|
||||
"max 355.870000 358.750000 353.430000 357.700000 356.257100 \n",
|
||||
"\n",
|
||||
" volume \n",
|
||||
"count 5.250000e+03 \n",
|
||||
"mean 1.112000e+08 \n",
|
||||
"std 9.800456e+07 \n",
|
||||
"min 6.790000e+04 \n",
|
||||
"25% 4.760167e+07 \n",
|
||||
"50% 8.220760e+07 \n",
|
||||
"75% 1.490664e+08 \n",
|
||||
"max 8.708580e+08 \n"
|
||||
"count 5.259000e+03 \n",
|
||||
"mean 1.112084e+08 \n",
|
||||
"std 9.791131e+07 \n",
|
||||
"min 1.708170e+05 \n",
|
||||
"25% 4.766386e+07 \n",
|
||||
"50% 8.224770e+07 \n",
|
||||
"75% 1.486532e+08 \n",
|
||||
"max 8.710263e+08 \n"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -397,7 +388,6 @@
|
||||
" <thead>\n",
|
||||
" <tr style=\"text-align: right;\">\n",
|
||||
" <th></th>\n",
|
||||
" <th>date</th>\n",
|
||||
" <th>open</th>\n",
|
||||
" <th>high</th>\n",
|
||||
" <th>low</th>\n",
|
||||
@@ -413,80 +403,66 @@
|
||||
" <th></th>\n",
|
||||
" <th></th>\n",
|
||||
" <th></th>\n",
|
||||
" <th></th>\n",
|
||||
" </tr>\n",
|
||||
" </thead>\n",
|
||||
" <tbody>\n",
|
||||
" <tr>\n",
|
||||
" <th>2019-09-13</th>\n",
|
||||
" <td>2019-09-13</td>\n",
|
||||
" <td>301.78</td>\n",
|
||||
" <td>302.1700</td>\n",
|
||||
" <td>300.6800</td>\n",
|
||||
" <td>301.09</td>\n",
|
||||
" <td>295.1126</td>\n",
|
||||
" <td>62053458.0</td>\n",
|
||||
" <th>2019-09-26</th>\n",
|
||||
" <td>297.63</td>\n",
|
||||
" <td>297.86</td>\n",
|
||||
" <td>295.45</td>\n",
|
||||
" <td>297.00</td>\n",
|
||||
" <td>291.2744</td>\n",
|
||||
" <td>58594707.0</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2019-09-16</th>\n",
|
||||
" <td>2019-09-16</td>\n",
|
||||
" <td>299.84</td>\n",
|
||||
" <td>301.1378</td>\n",
|
||||
" <td>299.4500</td>\n",
|
||||
" <td>300.16</td>\n",
|
||||
" <td>294.2011</td>\n",
|
||||
" <td>57934320.0</td>\n",
|
||||
" <th>2019-09-27</th>\n",
|
||||
" <td>297.83</td>\n",
|
||||
" <td>297.95</td>\n",
|
||||
" <td>293.69</td>\n",
|
||||
" <td>295.40</td>\n",
|
||||
" <td>289.7052</td>\n",
|
||||
" <td>84755721.0</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2019-09-17</th>\n",
|
||||
" <td>2019-09-17</td>\n",
|
||||
" <td>299.94</td>\n",
|
||||
" <td>301.0200</td>\n",
|
||||
" <td>299.7500</td>\n",
|
||||
" <td>300.92</td>\n",
|
||||
" <td>294.9460</td>\n",
|
||||
" <td>42770135.0</td>\n",
|
||||
" <th>2019-09-30</th>\n",
|
||||
" <td>295.97</td>\n",
|
||||
" <td>297.55</td>\n",
|
||||
" <td>295.92</td>\n",
|
||||
" <td>296.77</td>\n",
|
||||
" <td>291.0488</td>\n",
|
||||
" <td>52438861.0</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2019-09-18</th>\n",
|
||||
" <td>2019-09-18</td>\n",
|
||||
" <td>300.49</td>\n",
|
||||
" <td>301.2200</td>\n",
|
||||
" <td>298.2400</td>\n",
|
||||
" <td>301.10</td>\n",
|
||||
" <td>295.1224</td>\n",
|
||||
" <td>73875018.0</td>\n",
|
||||
" <th>2019-10-01</th>\n",
|
||||
" <td>297.74</td>\n",
|
||||
" <td>298.46</td>\n",
|
||||
" <td>293.00</td>\n",
|
||||
" <td>293.24</td>\n",
|
||||
" <td>287.5869</td>\n",
|
||||
" <td>89425082.0</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2019-09-19</th>\n",
|
||||
" <td>2019-09-19</td>\n",
|
||||
" <td>301.53</td>\n",
|
||||
" <td>302.6300</td>\n",
|
||||
" <td>300.7103</td>\n",
|
||||
" <td>301.08</td>\n",
|
||||
" <td>295.1028</td>\n",
|
||||
" <td>77933334.0</td>\n",
|
||||
" <th>2019-10-02</th>\n",
|
||||
" <td>291.50</td>\n",
|
||||
" <td>291.51</td>\n",
|
||||
" <td>286.64</td>\n",
|
||||
" <td>288.06</td>\n",
|
||||
" <td>282.5067</td>\n",
|
||||
" <td>124208927.0</td>\n",
|
||||
" </tr>\n",
|
||||
" </tbody>\n",
|
||||
"</table>\n",
|
||||
"</div>"
|
||||
],
|
||||
"text/plain": [
|
||||
" date open high low close adj_close \\\n",
|
||||
"date \n",
|
||||
"2019-09-13 2019-09-13 301.78 302.1700 300.6800 301.09 295.1126 \n",
|
||||
"2019-09-16 2019-09-16 299.84 301.1378 299.4500 300.16 294.2011 \n",
|
||||
"2019-09-17 2019-09-17 299.94 301.0200 299.7500 300.92 294.9460 \n",
|
||||
"2019-09-18 2019-09-18 300.49 301.2200 298.2400 301.10 295.1224 \n",
|
||||
"2019-09-19 2019-09-19 301.53 302.6300 300.7103 301.08 295.1028 \n",
|
||||
"\n",
|
||||
" volume \n",
|
||||
"date \n",
|
||||
"2019-09-13 62053458.0 \n",
|
||||
"2019-09-16 57934320.0 \n",
|
||||
"2019-09-17 42770135.0 \n",
|
||||
"2019-09-18 73875018.0 \n",
|
||||
"2019-09-19 77933334.0 "
|
||||
" open high low close adj_close volume\n",
|
||||
"date \n",
|
||||
"2019-09-26 297.63 297.86 295.45 297.00 291.2744 58594707.0\n",
|
||||
"2019-09-27 297.83 297.95 293.69 295.40 289.7052 84755721.0\n",
|
||||
"2019-09-30 295.97 297.55 295.92 296.77 291.0488 52438861.0\n",
|
||||
"2019-10-01 297.74 298.46 293.00 293.24 287.5869 89425082.0\n",
|
||||
"2019-10-02 291.50 291.51 286.64 288.06 282.5067 124208927.0"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
@@ -496,10 +472,10 @@
|
||||
],
|
||||
"source": [
|
||||
"# Recent Data\n",
|
||||
"recent_startdate = df.tail(recent).index[0]\n",
|
||||
"recent_enddate = df.tail(recent).index[-1]\n",
|
||||
"print(f\"{df.name}{df.tail(recent).shape} from {recent_startdate} to {recent_enddate}\\n{df.describe()}\")\n",
|
||||
"df.tail(recent).head()"
|
||||
"recent_startdate = df.tail(recent_bars(df)).index[0]\n",
|
||||
"recent_enddate = df.tail(recent_bars(df)).index[-1]\n",
|
||||
"print(f\"{df.name}{df.tail(recent_bars(df)).shape} from {recent_startdate} to {recent_enddate}\\n{df.describe()}\")\n",
|
||||
"df.tail(recent_bars(df)).head()"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -536,7 +512,7 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Columns: date, open, high, low, close, adj_close, volume, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, -100, -90, -80, -70, -50, -30, -20, -10, 10, 20, 30, 50, 70, 80, 90, 100\n"
|
||||
"Columns: open, high, low, close, adj_close, volume, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, -100, -90, -80, -70, -50, -30, -20, -10, 10, 20, 30, 50, 70, 80, 90, 100\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -609,7 +585,7 @@
|
||||
" def _validate_chart_kwargs(self, **kwargs):\n",
|
||||
" \"\"\"Chart Settings\"\"\"\n",
|
||||
" self.config = {}\n",
|
||||
" self.config[\"last\"] = kwargs.pop(\"last\", recent)\n",
|
||||
" self.config[\"last\"] = kwargs.pop(\"last\", recent_bars(self.df))\n",
|
||||
" self.config[\"rpad\"] = kwargs.pop(\"rpad\", 10)\n",
|
||||
" self.config[\"title\"] = kwargs.pop(\"title\", \"Asset\")\n",
|
||||
" self.config[\"volume\"] = kwargs.pop(\"volume\", True)\n",
|
||||
@@ -942,7 +918,7 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[i] Loaded SPY(5250, 34)\n",
|
||||
"[i] Loaded SPY(5259, 33)\n",
|
||||
"[+] Strategy: Common Price and Volume SMAs\n",
|
||||
"[i] Indicator arguments: {'append': True}\n",
|
||||
"[i] Multiprocessing: 4 of 4 cores.\n",
|
||||
@@ -952,7 +928,7 @@
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<Figure size 1200x1000 with 10 Axes>"
|
||||
]
|
||||
@@ -967,7 +943,7 @@
|
||||
"\n",
|
||||
"Pandas v: 1.1.0 [pip install pandas] https://github.com/pandas-dev/pandas\n",
|
||||
"Data from AlphaVantage v: 1.0.19 [pip install alphaVantage-api] http://www.alphavantage.co https://github.com/twopirllc/AlphaVantageAPI\n",
|
||||
"Technical Analysis with Pandas TA v: 0.2.08b [pip install pandas_ta] https://github.com/twopirllc/pandas-ta\n",
|
||||
"Technical Analysis with Pandas TA v: 0.2.12b [pip install pandas_ta] https://github.com/twopirllc/pandas-ta\n",
|
||||
"Charts by Matplotlib Finance v: 0.12.6a3 [pip install mplfinance] https://github.com/matplotlib/mplfinance\n",
|
||||
"\n"
|
||||
]
|
||||
@@ -975,7 +951,7 @@
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<__main__.Chart at 0x11348ee20>"
|
||||
"<__main__.Chart at 0x11d92d130>"
|
||||
]
|
||||
},
|
||||
"execution_count": 11,
|
||||
@@ -991,7 +967,7 @@
|
||||
"Chart(df,\n",
|
||||
" # style: which mplfinance chart style to use. Added \"random\" as an option.\n",
|
||||
" # rpad: how many bars to leave empty on the right of the chart\n",
|
||||
" style=\"yahoo\", title=ticker, last=recent, rpad=10,\n",
|
||||
" style=\"yahoo\", title=ticker, last=recent_bars(df), rpad=10,\n",
|
||||
" \n",
|
||||
" # Overlap Indicators\n",
|
||||
" linreg=True, midpoint=False, ohlc4=False, archermas=True,\n",
|
||||
@@ -1044,7 +1020,7 @@
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<matplotlib.axes._subplots.AxesSubplot at 0x116d6ab20>"
|
||||
"<matplotlib.axes._subplots.AxesSubplot at 0x11e1472b0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 12,
|
||||
@@ -1053,7 +1029,7 @@
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAABQsAAAFNCAYAAACnjTmhAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdd1gUx/8H8PcecPQqRRClSBdBJbYoYAOsaBQbdondqKhRiQVbxN57Q8USNNYY/BrECJZo7JGIYkNUikgRkX43vz/I7Y/jDjhsiH5ez7MP3Ozs7Mzsru59mJ3lGGMMhBBCCCGEEEIIIYSQr56guitACCGEEEIIIYQQQgj5PFCwkBBCCCGEEEIIIYQQAoCChYQQQgghhBBCCCGEkP9QsJAQQgghhBBCCCGEEAKAgoWEEEIIIYQQQgghhJD/ULCQEEIIIYQQQgghhBACgIKFhBBCCCGEEEIIIYSQ/1CwkBBCCCGEEEIIIYQQAoCChYQQQgghhBBCCCGEkP9QsJAQQgj5yqSmpsLPzw+1atUCx3FYvXp1dVeJEEIIkevZs2dQU1PDxYsXq7sqAICioiLUrVsXGzdurO6qEELIR0PBQkII+Qju3LkDPz8/WFhYQE1NDXXq1IGXlxfWrVsnlc/S0hIcx/GLsbEx3N3dcfToUQDA4sWLwXEcTp8+LXc/nTt3hq6uLpKSkqpUv9TUVEydOhUODg7Q0NCApqYm3NzcsHDhQmRlZUnVr2vXrnLLuHbtGjiOw65du/i0uXPnguM4CAQCPHv2TGab7OxsqKurg+M4jB8/nk9PSEgAx3FYvnx5pXW/ePEivvvuO5iYmEBVVRWWlpYYNWoUEhMTy93mn3/+wbBhw2BlZQU1NTVoaWmhUaNGmDZtGh4/fiyVd+jQoVLHRFVVFXZ2dpgzZw7y8/Nlyi6dt+wyevRonDt3rsI8pRdFhYeHY+DAgbC1tQXHcWjTpo3C2wJAYGAgTp8+jaCgIISFhaFjx45V2v5TevbsGebNm4dmzZpBX18fhoaGaNOmDc6cOSM3f1ZWFkaOHAkjIyNoamqibdu2uHHjhky+qvTh9evX0bFjR+jo6EBbWxve3t64detWldpx4sQJNGnSBGpqaqhXrx6Cg4NRXFwsky8yMhKtW7eGhoYG9PX14efnh4SEBIX2UdW+AoAzZ86gXbt20NXVhba2Ntzc3BAeHq7Q/uLi4tCxY0doaWnBwMAAgwYNQlpamkw+sViMpUuX8tefi4sLDhw4oNA+JBTtP0WPf3mqUldF219Wbm4u5s6di3PnzilcL0XQtULXCvBlXSsS8+fPR/PmzdGqVSs+7ciRI+jbty+sra2hoaEBe3t7TJkyReoeRqLsvVbp/6NLi4qKwvDhw2FnZwcNDQ1YW1vj+++/R3JyslQ+FRUVTJ48GT///LPc+wJCCPkiMEIIIR/UxYsXmVAoZDY2NmzBggVs27ZtbM6cOczb25vVr19fKq+FhQVr1KgRCwsLY2FhYWzJkiXM2tqaAWCbNm1ihYWFrGHDhsza2prl5uZKbXvw4EEGgG3YsKFK9fv777+ZoaEhU1NTY99//z3btGkT27RpEwsICGCamprMy8tLqn5dunSRW87Vq1cZABYaGsqnBQcHMwBMTU2NLVmyRGab0NBQpqamxgCwcePG8elPnjxhANiyZcsqrPvatWsZx3Gsfv36bMGCBWz79u1sypQpTFdXl+nq6rKLFy/KbLN161ampKTETExM2OTJk9nWrVvZxo0b2dixY5mJiQlTUVFhxcXFfP4hQ4YwVVVV/pisX7+eeXl5MQDM399fpnwAzMvLi89ferly5QpLSUmRSTc3N2cODg4y6Yry9PRkWlparG3btkxfX595enoqvC1jjJmYmLABAwZUaZvqsm7dOqaurs769+/P1q9fz1avXs2aNGnCALCdO3dK5RWJROzbb79lmpqabO7cuWz9+vXMycmJaWtrs/j4eKm8ivbh9evXmZqaGrO1tWXLly9nS5cuZZaWlkxHR4fdu3dPoTZEREQwjuNY27Zt2datW9kPP/zABAIBGz16tFS+3377jQkEAvbNN9+wNWvWsAULFjBDQ0NWp04d9vLlyw/aV4wxtnPnTsZxHPP29mbr169nmzZtYpMmTar0OmSMsWfPnjFDQ0NWv359tmbNGvbzzz8zfX195urqygoKCqTyzpgxgwFgI0aMYFu3bmVdunRhANiBAwcq3Q9jivdfVY5/eRSta1XaX1ZaWhoDwIKDgxWqk6LoWqFr5Uu7Vhhj7OXLl0xFRYXt379fKr1WrVqsYcOGbPbs2Wzbtm1swoQJTCgUMgcHB5n7pbL3WqX/jy7Nzc2NWVlZsWnTprFt27axoKAgpq2tzUxMTFhycrJU3szMTCYUCtmOHTsU6i9CCKlpKFhICCEfWOfOnZmRkRHLzMyUWZeamir1WV4wLjk5mWlqajI7OzvGGGN//fUXEwgELCgoiM+TnZ3NzMzMWIsWLZhIJFK4bpmZmaxOnTrMxMSExcXFyaxPSUlhCxYsqLB+EhUFC3v27MkaNWoks42Xlxfr1avXOwULL1y4wAQCAXN3d2dv376VWvfw4UNmYmLCTE1NWUZGBp9+8eJFpqSkxDw8PFh2drZMmXl5eWzWrFkywUJNTU2pfGKxmLVo0YJxHMdSUlKk1pVtiyIaNGhQ5QBfaYmJifxxf5eyOI5TqM45OTnvUr0PKjY2lqWlpUml5efnMwcHB2Zubi6VHh4ezgCwQ4cO8WkvX75kenp6rH///lJ5Fe3Dzp07M319ffbq1Ss+LSkpiWlpabGePXsq1AYnJyfm6urKioqK+LSZM2cyjuOkrkMnJydmY2Mj9QX61q1bTCAQsMmTJ1e6n6r01ZMnT5i6ujqbMGGCQm0oa8yYMUxdXZ09ffqUT4uMjGQA2JYtW/i058+fMxUVFanzTSwWM3d3d2Zubi517ZVH0f6ryvGXpyp1VbT98nysYCFdK3StfGnXCmOMrVy5kqmrq7M3b95Ipf/5558yeXfv3s0AsG3btkmlV3QvU1p0dLTMPVV0dDQDwGbOnCmTv2vXrszd3b3ScgkhpCaiYCEhhHxg9vb2rE2bNgrlLe8G9ptvvmEqKir857FjxzIVFRX277//MsYYmzBhAlNWVmb//PMPY6wkWPbw4cNK97d48WIGgO3bt++96sdYxcHCX3/9lQGQ+nKSnJzMlJSU2OHDh98pWOjj48OUlJTY48eP5a6XfEkICQnh07y9vZmysjJ79uyZQu1lTH6wkDHGpk6dygCwS5cuSaVXR7DwXcsKDQ1lAGSW0uvOnTvHxowZw4yMjJienh6/7YYNG5iTkxMTCoXM1NSUjR07ViYg7unpyRo0aMBu377NPDw8mLq6Oqtfvz7/hfTcuXOsWbNmTE1NjdnZ2bHIyMh3bvfkyZMZAKkgcO/evZmJiYnMl72RI0cyDQ0Nlp+fL7esivpQW1ub9e7dWya9S5cuTCgUynyBLevff/+VOwL4xYsXDAAfnE9PT2cA2I8//ii3fmZmZhXupyLy+mr69OlMKBSyrKwsxhhjb968YWKxWOEyjY2N5faLnZ0da9++Pf95w4YNDAD/b5fE/v37GQB2/vx5Pi0rK4vFxcXxdWJM8f5jrGrHPykpicXFxbHCwsJ3qqui7S9L8m9d2aV04DAqKoq1bt2aaWhoMF1dXebr68vu3r1bbpmVoWtFcXStfD7XioSHh4fC91TZ2dkMgEzAWHIvU1BQ8E5/BDMwMJAb8F6zZg3jOI6lp6dXuUxCCPnc0ZyFhBDygVlYWOD69euIjY19p+2Liorw7Nkz1KpVi08LCQmBkZERRo0ahevXr2PDhg2YOnUqGjZsCABo37492rdvX2nZJ06cgLq6Ovz8/N6pbory8PCAubk59u/fz6eFh4dDS0sLXbp0qXJ5ubm5iIqKgru7O6ysrOTm6du3L1RVVXHy5El+m7Nnz6JNmzYwNzd/t4aUIpkLS19fX2Zdfn4+Xr16JbMUFha+934/JA8PD4SFhQEAvLy8EBYWxn+WGDt2LO7evYs5c+ZgxowZAErmohw3bhzMzMywYsUK9OrVC1u2bIG3tzeKioqkts/MzETXrl3RvHlzLF26FKqqqujXrx/Cw8PRr18/dO7cGYsXL8bbt2/h5+eHN2/evFNbUlJSoKGhAQ0NDT7t5s2baNKkCQQC6dubZs2aITc3F/Hx8VXeT0FBAdTV1WXSNTQ0UFhYWOl1fvPmTQDAN998I5VuZmYGc3Nzfn1BQQEAlLuvpKQkpKSkVLn+gPy+OnPmDBwcHBAREQFzc3Noa2ujVq1amD17NsRicYXlvXjxAi9fvpRpE1DS15I2ASXt19TUhKOjo0w+yXqJo0ePwtHRkZ+ztfT6yvpPklfR4x8UFARHR0e8ePGiynWtSvvLMjIywqZNmwAA3333HX8N9uzZE0DJcfHx8cHLly8xd+5cTJ48GZcuXUKrVq0Uno+vLLpWFEfXyudzrQAl90NXr15FkyZNKswnITnuhoaGMuvOnj0LDQ0NaGlpwdLSEmvWrFGozJycHOTk5Mgt083NDYwxXLp0SaGyCCGkJlGu7goQQsiXZurUqejUqRMaNWqEZs2awd3dHe3bt0fbtm2hoqIik7+oqAivXr0CACQlJSEkJASpqan44Ycf+Dw6OjpYu3Yt/Pz84O3tDQsLC8yZM6fKdYuLi4OdnR2EQuG7N1ABHMehX79+OHDgAObPnw8A2LdvH3r27AlVVdUql/fgwQMUFxfD1dW13Dyqqqqwt7dHXFwcAODhw4coLi6Gs7OzTN6MjAypL3k6OjoyfSI5Jq9fv8axY8dw+PBhODs7w97eXqa8HTt2YMeOHTLpBw4cQL9+/RRr5CdgbW0Na2trDBo0CHZ2dhg4cKBMHgMDA0RFRUFJSQkAkJaWhpCQEHh7e+PUqVP8l0sHBweMHz8ee/fuxbBLine truncated
|
||||
"text/plain": [
|
||||
"<Figure size 1600x325 with 1 Axes>"
|
||||
]
|
||||
@@ -1066,8 +1042,8 @@
|
||||
"clr_ma_length = 8\n",
|
||||
"clrdf = df.ta.log_return(cumulative=True, append=True)\n",
|
||||
"clrmadf = ta.ema(clrdf, length=clr_ma_length)\n",
|
||||
"qqdf = pd.DataFrame({f\"{clrdf.name}\": clrdf, f\"{clrmadf.name}({clrdf.name})\": clrmadf})\n",
|
||||
"qqdf.tail(recent).plot(figsize=ind_size, color=colors(\"BkBl\"), linewidth=1, title=ctitle(clrdf.name, ticker=ticker, length=recent), grid=True)"
|
||||
"clrxdf = pd.DataFrame({f\"{clrdf.name}\": clrdf, f\"{clrmadf.name}({clrdf.name})\": clrmadf})\n",
|
||||
"clrxdf.tail(recent_bars(df)).plot(figsize=ind_size, color=colors(\"BkBl\"), linewidth=1, title=ctitle(clrdf.name, ticker=ticker, length=recent_bars(df)), grid=True)"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1085,7 +1061,7 @@
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<matplotlib.lines.Line2D at 0x117267250>"
|
||||
"<matplotlib.lines.Line2D at 0x1213067c0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 13,
|
||||
@@ -1094,7 +1070,7 @@
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<Figure size 1600x325 with 1 Axes>"
|
||||
]
|
||||
@@ -1105,8 +1081,8 @@
|
||||
],
|
||||
"source": [
|
||||
"macddf = df.ta.macd(fast=8, slow=21, signal=9, min_periods=None, append=True)\n",
|
||||
"macddf[[macddf.columns[0], macddf.columns[2]]].tail(recent).plot(figsize=(16, 2), color=colors(\"BkBl\"), linewidth=1.3)\n",
|
||||
"macddf[macddf.columns[1]].tail(recent).plot.area(figsize=ind_size, stacked=False, color=[\"silver\"], linewidth=1, title=ctitle(macddf.name, ticker=ticker, length=recent), grid=True).axhline(y=0, color=\"black\", lw=1.1)"
|
||||
"macddf[[macddf.columns[0], macddf.columns[2]]].tail(recent_bars(df)).plot(figsize=(16, 2), color=colors(\"BkBl\"), linewidth=1.3)\n",
|
||||
"macddf[macddf.columns[1]].tail(recent_bars(df)).plot.area(figsize=ind_size, stacked=False, color=[\"silver\"], linewidth=1, title=ctitle(macddf.name, ticker=ticker, length=recent_bars(df)), grid=True).axhline(y=0, color=\"black\", lw=1.1)"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1124,7 +1100,7 @@
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<matplotlib.lines.Line2D at 0x1167a4a00>"
|
||||
"<matplotlib.lines.Line2D at 0x1217aafd0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 14,
|
||||
@@ -1133,7 +1109,7 @@
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAABREAAAFNCAYAAACXASiAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdd1xT1/8/8FcYYSOIiCiKAgqIiNoiVmUoiriw7r2rVnG1rg9ua92jasU96kfrHtXWCY66t2JVHDg+KAqICwtCMDm/P/yRr5EACSBBeT0fDx4PcnJy7/vee+5N8s6550iEEAJERERERERERERE2dDTdQBERERERERERERUtDGJSERERERERERERDliEpGIiIiIiIiIiIhyxCQiERERERERERER5YhJRCIiIiIiIiIiIsoRk4hERERERERERESUIyYRiYiIiIiIiIiIKEdMIhIREREREREREVGOmEQkIiIiIiIiIiKiHDGJSEREVAgSEhLQrl072NjYQCKRYMGCBboOiYiISC2FQoFq1aph2rRpug5FqVOnTujQoYOuwyAiKtaYRCQioiz++ecftGvXDo6OjjA2Nka5cuXQuHFj/Prrryr1KlasCIlEovwrXbo0fH19sWvXLgDAzJkzIZFIcPDgQbXradasGUqUKIEnT55oFNfH61P316tXL4238/jx4wgJCUH58uVhbGyMMmXKIDg4GKdOnVJb//Tp06hfvz5MTU1RpkwZDB06FP/++69G6/rhhx9w8OBBhIWFYf369QgODtY4zsL26NEjTJkyBbVr14a1tTVKlSqFgIAAREZGqq3/6tUr9O/fH7a2tjAzM0ODBg1w+fLlLPW2bNmCbt26oXLlypBIJAgICMg2hkuXLiE4OBiWlpawsLBAUFAQrl69qtV27NmzB7Vq1YKxsTEqVKiASZMm4d27d1nqRUREKI+rtbU12rVrh4cPH2q8nqVLl6J9+/aoUKFCjm1Q2/amTlxcHDp06AArKytYWlqiVatWuH//vtq6q1evhru7O4yNjVG5cuUs529uNG3v6enpGDNmDMqWLQsTExP4+PggIiJCq3VpGqs22/+x6dOn448//tAqrtw8f/4cc+bMgZ+fH2xtbWFlZYU6depgy5Ytautruq8OHTqEvn37olq1atDX10fFihWzjSEmJgbt2rWD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 truncated
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<Figure size 1600x325 with 1 Axes>"
|
||||
]
|
||||
@@ -1145,8 +1121,8 @@
|
||||
"source": [
|
||||
"zscoredf = df.ta.zscore(length=30, append=True)\n",
|
||||
"zcolors = [\"darkgreen\", \"green\", \"silver\", \"silver\", \"red\", \"maroon\", \"black\"]\n",
|
||||
"zcols = df[[\"-4\", \"-3\", \"-2\", \"2\", \"3\", \"4\", zscoredf.name]].tail(recent)\n",
|
||||
"zcols.plot(figsize=ind_size, color=zcolors, linewidth=1.2, title=ctitle(zscoredf.name, ticker=ticker, length=recent), grid=True).axhline(y=0, color=\"black\", lw=1.1)"
|
||||
"zcols = df[[\"-4\", \"-3\", \"-2\", \"2\", \"3\", \"4\", zscoredf.name]].tail(recent_bars(df))\n",
|
||||
"zcols.plot(figsize=ind_size, color=zcolors, linewidth=1.2, title=ctitle(zscoredf.name, ticker=ticker, length=recent_bars(df)), grid=True).axhline(y=0, color=\"black\", lw=1.1)"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1157,7 +1133,7 @@
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<matplotlib.lines.Line2D at 0x1175b2730>"
|
||||
"<matplotlib.lines.Line2D at 0x1219de9d0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 15,
|
||||
@@ -1166,7 +1142,7 @@
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAABQoAAAFNCAYAAABIT1KfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdeXhTVfoH8O9t2nRJN1q6Q8vSshRKq7L/BEUEZB0ZVFRAxB0QHRFkEBQc3ACVUVnUzggOggIKgiIKiCMKCMjOsBZp6Ub3PWmTJuf3R72xIWmbdEvafD/P0wd6c3LOe2/uTZP3nkUSQggQERERERERERGRU3OxdwBERERERERERERkf0wUEhEREREREREREROFRERERERERERExEQhERERERERERERgYlCIiIiIiIiIiIiAhOFREREREREREREBCYKiYiIiIiIiIiICEwUEhEREREREREREZgoJCIiIiIiIiIiIjBRSERE5LCOHj2KgQMHQqVSQZIknDx50t4hERERWbR582YEBASgtLTU3qEAAM6dOwdXV1ecPXvW3qEQEbUoTBQSETm4M2fO4J577kFUVBQ8PDwQERGBYcOG4f333zcp16FDB0iSZPwJDg7GoEGDsG3bNgDAm2++CUmS8P3331tsZ9SoUfDz80NGRkadMT3zzDOQJAlJSUk1llmwYAEkScLp06eN2/Ly8jB37lx07doVHh4eCAgIwIgRI/DNN9+YPT85ORmSJOGtt96qM56ayHXU9bNu3Tqr60xMTMRtt92GkJAQuLu7o2PHjpg2bRqSk5Mtlv/3v/+N7t27w8PDAzExMWavW010Oh3uvfde5OfnY8WKFVi/fj2ioqKsjrO5HT16FE8//TR69OgBlUqFyMhI3Hfffbh06ZLF8ufPn8ddd90Fb29vBAQEYMqUKcjJyTEr99prr2HcuHEICQmBJElYvHhxjTF8/vnnuPnmm+Hh4YGgoCA8+uijyM3NtXofDAYDli1bho4dO8LDwwO9evXCZ599ZrHsypUr0b17d7i7uyMiIgKzZ89GWVmZVe3YeqwMBgPWrFmDhIQEeHp6IjAwEHfccQdOnTplVXs7duwwHpfIyEgsWrQIlZWVZuUKCwvxxBNPICgoCCqVCkOGDMHx48etakOO09rjZ+3rXxNbYrV2/2907tw5LF68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 truncated
|
||||
"text/plain": [
|
||||
"<Figure size 1600x325 with 1 Axes>"
|
||||
]
|
||||
@@ -1179,8 +1155,8 @@
|
||||
"# Now Volume Z Score\n",
|
||||
"zvscoredf = df.ta.zscore(close=\"volume\", length=30, prefix=\"VOL\", append=True)\n",
|
||||
"zcolors = [\"darkgreen\", \"green\", \"silver\", \"silver\", \"red\", \"maroon\", \"black\"]\n",
|
||||
"zvcols = df[[\"-4\", \"-3\", \"-2\", \"2\", \"3\", \"4\", zvscoredf.name]].tail(recent)\n",
|
||||
"zvcols.plot(figsize=ind_size, color=zcolors, linewidth=1.2, title=ctitle(zvscoredf.name, ticker=ticker, length=recent), grid=True).axhline(y=0, color=\"black\", lw=1.1)"
|
||||
"zvcols = df[[\"-4\", \"-3\", \"-2\", \"2\", \"3\", \"4\", zvscoredf.name]].tail(recent_bars(df))\n",
|
||||
"zvcols.plot(figsize=ind_size, color=zcolors, linewidth=1.2, title=ctitle(zvscoredf.name, ticker=ticker, length=recent_bars(df)), grid=True).axhline(y=0, color=\"black\", lw=1.1)"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1214,7 +1190,7 @@
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAABJgAAANeCAYAAABeQrSXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdZ3gV1fr38e/s2QmEhAQIJQiEXqRFROxiEpEmIAoCiiBY/h6wHzuWGMuxHeUcEdFHwIIICCIoCEhJCCD9AFKkg3QCBFJIQrL3zPMisklCAmmQ9vtcF5d7r1mz5p6YkeU9qxi2bduIiIiIiIiIiIgUkKO4AxARERERERERkdJNCSYRERERERERESkUJZhERERERERERKRQlGASEREREREREZFCUYJJREREREREREQKRQkmEREREREREREpFCWYRERERERERESkUJRgEhERERERERGRQlGCSURERERERERECkUJJhERERERERERKRQlmERERMqR6dOn06NHD2rXro23tzeVK1cmODiY66+/nkceeYQvvvgiS/3Q0FAMwzjvj2maVKlShWuvvZbIyEhOnjzpOadbt25Z6n755Zc5xjJw4MAs9d57771Leu8iIiIicukYtm3bxR2EiIiIXHoPP/ww48aNu2CdgIAATp065fkeGhrK4sWLL9p2UFAQCxcupGXLlhw6dIjWrVt7kk7+/v5s2rSJevXqeerPnDmT3r17e77feOONLFmyBIdD775ERERESiMlmERERMqB3377jS5duni+t2vXji5duhAQEEBcXBwbN25k6dKlmKZ5wQTThx9+CEBCQgIzZ87kjz/+8Bxr3749a9asAWDSpEncd999nmNdunRh7ty5AMTFxdGqVSuOHDkCgK+vLxs2bKBx48aX4M5FRERE5HJwFncAIiIicumdTe4ANG7cmNWrV2OaZpY66enpLFq06ILtPPfcc57PI0aMoGXLluzZsweAtWvXsmfPHho2bMi9997LTz/9xNSpUwGYN28e48aN46GHHuLJJ5/0JJcgI2ml5JKIiIhI6aZx6CIiIuWA2+32fD516hS7d+8+r46Xl1eWUU4XU7FiRdq3b5+l7PDhw57PY8aMISgoyPP92Wef5bPPPmPixImesi5dujBs2LA8X1NERERESiYlmERERMqBq6++2vP5xIkTNG/enJCQEB566CE+/fRTNmzYkO82U1NTWbt2bZay2rVrez4HBgYyduxYz/f4+Hgee+wxz/eqVatedE0oERERESkdtAaTiIhIOeByubj55ptZuXJlrnWaN2/Oe++9l2Xx7YKuwZTZI488kiXRdNbEiROzrNMkIiIiIqWXEkwiIiLlxOnTp/nwww8ZN24cBw4cyLGOYRjMnDmTnj17AnnfRa5mzZosXLiQ1q1bn3csKSmJtm3betZqArjnnnv44YcfCngnIiIiIlLSaIqciIhIOeHr68sbb7zB/v372bZtG99++y2PPvooNWvW9NSxbZuPP/74om0ZhoG/vz/XXHMNr7/+Olu2bMkxuQTg5+fHoEGDspRp3SURERGRskW7yImIiJRDzZo1o1mzZgwaNIgPP/yQFi1acOjQIQD++uuvXM8r6MBnwzAu+F1ERERESjclmERERMqBb775htOnT3PfffdRpUqVLMcqVKiAt7e353tgYODlDk9ERERESjklmERERMqBPXv2EBkZydNPP81NN91Eu3btqFGjBomJicyePZu9e/d66nbv3r34AhURERGRUkkJJhERkXIkPT2d6OhooqOjczx+zTXX8Nxzz13eoERERESk1FOCSUREpBx4+umnCQkJITo6mtWrV3PkyBFiY2NJS0ujatWqtGrVij59+vDII49kmS4nIiIiIpIXhl3Q1TpFREREREREREQAR3EHICIiIiIiIiIipZsSTCIiIiIiIiIiUihKMImIiIiIiIiISKEowSQiIiIiIiIiIoWiBJOIiIiIiIiISAGNGzeOm266ieDgYIKDg+ncuTPz58/PUmfVqlX06tWLOnXqEBwcTPfu3UlJSfEcP3nyJI888gjBwcHUr1+fJ554gqSkpMt9K4WiXeRERERERERERApozpw5mKZJ48aNsW2bSZMmMWrUKBYvXsyVV17JqlWr6Nu3L8888wxdu3bF6XSyadMmunfvToUKFQDo27cvR48eZeTIkaSnp/P444/Trl07xo4dW8x3l3dKMImIiIiIiIiIFKGGDRvy5ptvMmjQIG6//XZCQ0N55ZVXcqy7bds2rr/+ehYtWkS7du0AWLBgAf369WPz5s3Url37coZeYM7iDuBysCzL89kwjGKMRERERERERERKMtu2OXPmDGlpaVlyCBUqVPCMOMqN2+1mxowZJCcn06FDB44dO8aaNWu455576Ny5M3v37qVp06a8+uqr3HDDDQCsXr2agIAAT3IJIDQ0FIfDwdq1a+nRo8eludEiVi4STACJiYnFHYKIiIiIiIiIlBLXXXcdR48e9Xx/8cUXeemll3Ksu3nzZrp06UJqaiq+vr5MmDCBFi1asHr1agDee+893nrrLdq0acPkyZPp3bs3v//+O40bN+bo0aPUqFEjS3tOp5OqVatmuX5JV24STAAOh4M9e/bQqFEjTNMs7nBESgW3283u3bv13Ijkk54dkYLRsyNSMHp2RPIvt+fGtm3S09NZuXLleSOYctO0aVNiYmJISEhg5syZDB8+nFmzZnlmVA0ZMoSBAwcC0LZtWxYvXsx3331HRETEJbq7y69cJJjO/kI4nU5s28bpdOo/uiJ5ZBiGnhuRAtCzI1IwenZECkbPjkj+5fbcnE0w+fv753mZHW9vbxo1agTAVVddxbp16/j888955plnAGjevHmW+s2bN+fAgQMA1KpVi2PHjmU57nK5OHnyJLVq1Srw/V1ujuIOQERERERERESkLLEsi7S0NIKDg6lduzY7d+7Mcnznzp3Uq1cPgA4dOhAfH8/69es9x2NiYrAsi/bt21/WuAujXIxgEhEREREREZHcRUVFERYWVtxhlEqRkZF06tSJevXqkZiYyLRp01i6dCk//vgjhmHwxBNP8O6779K6dWvatGnDpEmT2LFjB9988w2QMZrptttu46mnnuLjjz8mPT2dF154gbvvvrvU7CAHSjCJiIiIiIiIlHvR0dFKMBXQ8ePHGTZsGEePHsXf359WrVrx448/en6ew4YNIzU1lREjRnDq1ClatWrF9OnTadiwoaeNL7/8kueff57evXtjGAa9evXivffeK65bKhAlmERERERERERECmjUqFEXrfPMM8941mPKSdWqVRk7dmxRhnXZaQ0mEREREREREREpFCWYRERERERERMqxkJgIFgTFERITUdyhSCmmKXIiIiIiIiIi5diJtCRONauIOy2puEORUkwjmEREREREREREpFCUYBIRERERERERkUJRgklEREREREREsoiKiiruEKSUUYJJRERERERERLKIjo4u7hCklNEi3yIiIiIiIiLiYfYfQLjbjdm1GwQE4J4yubhDklJACSYREREREREROSc+nnCHCQ4T4uOLOxopJTRFTkRERERERERECkUJJhERERERERERKRQlmERERERERETKsUBvP+puTyXQ26+4Q5FSTAkmERERERERkXJsQ8dIOh2pxoaOkcUdipRiSjCJiIiIiIiIiEihKMEkIiIiIiIiIiKFogSTiIiIiIiISDkXGhpa3CFIKacEk4iIiIiIiEg5FxYWVtwhSCmnBJOIiIiIiIhIORMVFVXcIUgZ4yzuAERERERERETk8gmJicBvaxxJZrR2jpMiowSTiIiIiIiISDlyIi2JU80q4k5LKu5QpAzRFDkRERERERERESkUJZhERERERERERKRQlGASERERERERKeO0qLdcakowiYiIiIiIiJRx0dHRxR2ClHFa5FtERERERESkDAmJieBEWhKB3n7aJU4uG41gEhERERERESlDTqQlYRoOTvy9S5zZfwDhm7dg9h8AQKC3H3W3pxLo7VecYUoZowSTiIiIiIiISCl3wTWW4uMJT06B+HgANnSMpNORahrdJEVKCSYRERERERGRUk5rLElxU4JJREREREREpAw5bwpcQACLKvlAQEDxBiZlmhJMIiIiIiIiImVI9ilw7imTsR4bjnvKZE+d0NDQYopOyiolmERERERERETKuLCwsAt+FyksJZhERERERERESrHsu8QVFRcWqyrH89GKjxj+63AW/7W4SNuXssVZ3AGIiIiIiIiISNEq6BQ427b5tepxRtc5yFL/kyQ53bBoDQDjN4wn8tZInr/heRyGxqtIVvqNEBERERERESlloqKiPJ/dUyazqFXLLGssFWQK3KbYTfSY3IOebTYwt9pxkpxuqqQ7uaPpHdzV/C4s2+K16NfoO60vp1JPFcl9SNmhEUwiIiIiIiIipUhITAR+W+NIMqM9C3kXRlxKHK9Hv87Y9WOxbAtvy+CJQ8Hcd6w2bRIrQcRPAPSO7M3CiguZtWMW14+/nv92+S+3NbwNp0OpBdEIJhEREREREZFS5URaEgeaVeREWlKh27Jsi7um3sX/W/f/Mj43v4tNa67ng73Nueq0PyaGp26IFcLiwYtpENCA3ad203NKTxp80oCn5j3Fsv3LsGyr0PFI6aUEk4iIiIiIiEg59fWGr1l+YDl+3n4sGLiAKX2m0Di1Uq71r659NSseXMGw9sMI9AkkNjmWMWvHEDYhjC4Tu5CcnnwZo5eSRAkmERERERERkXLoePJxRkSNACCiYwQd63fM03nVfKrx3y7/Zd+T+/il/y8MajOISl6VWLxvMffPuB+X5bqUYUsJpQSTiIiIiIiISClXkF3jXl70MnEpcbSt2ZbHrnks3+d7mV50adyFcT3HMXvAbCo6KzJrxyyenPsktm3nuz0p3ZRgEhERERERESnl8rtr3LL9y/jmj28Line truncated
|
||||
"image/png": "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CxcSFxdHhw4dOHnyJOvXr2fgwIH06tWL/fv307BhQ5577jluuOEGANatW4evr687uQQQGBiIaZps2LCB22+/PW8uLpcVmwQTwMGDBykGA7ZEREREREREJJsMw8Df35/mzZunqoP01FNP8fTTT6d7TEREBL179yY+Ph5vb28+++wzmjRpwrp16wB47bXXeOmll2jRogVz5syhX79+rF69mvr163P8+HEqVaqUqj8PDw/Kly/P8ePH8+5Cc1mxSDBdyDjWrVuXPXv20KBBAyzLKuCoRIoG27bZvXu37huRLNK9I5I9undEskf3jkjWXem+cRyHxMREtm3bdtkIpitp2LAh4eHhxMTEsGjRIsaNG8eSJUvcJXtGjhzJvffeC0DLli35+eef+fzzzwkKCsqjq8t/xSLBdMGFXxjLsvQfXZEs0n0jkj26d0SyR/eOSPbo3hHJurT3zYWZT2XLls10HWcvLy/q1asHQOvWrdm4cSPTp0/nkUceAaBx48ap9m/cuDGHDh0CoEqVKpw8eTLV9uTkZKKioqhSpUr2LqoAZK9alYiIiIiIiIiIpMvlcpGYmIi/vz/VqlVj9+7dqbbv3r2bWrVqAdChQweio6PZtGmTe3t4eDgul4t27drla9w5UaxGMImIiIiIiIgUtNDQULp161bQYUguCQ4OpmfPntSqVYuzZ8/y9ddfs3LlSubPn49hGDz00EO8+uqrNG/enBYtWjB79mz+/PNPPv30UyBlNFOPHj0YP348b731FklJSTz55JP079+/yKwgB0owiYiIiIiIiOSrsLAwJZiuIadOnWLs2LEcP36csmXLEhAQwPz5891/x2PHjiU+Pp4JEyZw5swZAgIC+Oabb6hbt667jw8//JAnnniCfv36YRgGd9xxB6+99lpBXVK2KMEkIiIiIiIiIpJNU6ZMyXCfRx55xF2PKT3ly5dnxowZuRlWvlMNJhEREREREZF80io8iOVVT9Mq/NpZPUwENIJJREREREREJN9EJsZyplFJ7MTYgg5FJFdpBJOIiIiIiIiIiOSIEkwiIiIiIiIiIpIjSjCJiIiIiIiIiEiOKMEkIiIiIiIiUoBCQ0MLOgSRHFOCSURERERERKSAWIOHYE59D2vwkIIORSRHtIqciIiIiIiISEGJjqa7aYHLLuhIRHJEI5hERERERERERCRHlGASEREREREREZEcUYJJREREREREJJ/4eflQc1c8fl4+BR2KSK5SgklEREREREQkn2zuGkzPYxXY3DW4oEMRyVVKMImIiIiIiIiISI4owSQiIiIiIiIiIjmiBJOIiIiIiIiIiOSIEkwiIiIiIiIi+SgwMLCgQxDJdUowiYiIiIiIiOSjbt26FXQIIrnOo6ADEBEREREREblWtQoPIjIxFj8vH60cJ9c0jWASERERERERySORibFYhklkYmxBhyKSp5RgEhERERERERGRHFGCSUREREREREREckQJJhERERERERERyRElmERERERERERyUWhoaEGHIJLvlGASERERERERyYG0CaWwsLCCCUSkAHkUdAAiIiIiIiIiRVWr8CB8dpwm1gpjc9fggg5HpMBoBJOIiIiIiIhINkUmxnKoUUkiE2MBsAYPoXvEdqzBQwDw8/Kh5q54/Lx8CjJMkTynBJOIiIiIiIhIFly1xlJ0NN3jzkN0NACbuwbT81gFjW6Sa54STCIiIiIiIiJZoBpLIpdTgklEREREREQkmy6bAufrS0jpUuDr694nMDCwYIITyUdKMImIiIiIiIhkU9opcPbcObgeGIc9d457n27duhVUeCL5RgkmERERERERkVykhJIUR0owiYiIiIiIiGSCMe9rrMFDqHHgAMa8r3Ot37NWMsvKR/Js6LN0/bQrLd5vwZyIORkfKFKIeBR0ACIiIiIiIiJFgTNwAPbAARwOCsIZOMDdnt0aS3ui9vBs0y0sqngK23BgzSb3thGLRvDroV95o+cbeFleOQ1dJM9pBJOIiIiIiIjIFYSGhma4T1anxEXHR/P0iqdp+X5Lvql0EttwqHu+JCNajmDG7TMYXGMwAO9teI+en/fkUMyhbMUukp80gklEREREREQkHa3Cg/DZcZoD9hL8vHzchbxzYm7EXB758RFOnT8FQK/TFXhjf2NaxJbGfmkGAHvm72HBsAWM+nYUvx7+lY4fdeSRjo8wsNlAavvWznEMInlBI5hERERERERE0hGZGMuhRiWxDJPIxNgc97flxBZGLh7JqfOnaOLXhMWDF7N0WxtaxJW5bN/bGt7Gr6N+pVWVVpyMO8mE0Ak0nNqQm2bdxNR1U4nNhXhEcpMSTCIiIiIiIiJ5zOW4eGjZQ9iOTd9GfdkwegN96ve56jH1ytcjfEQ4793yHoG1AzEwWHNoDY/89Ag9Pu9BdHx0PkUvkjElmERERERERESyIDtFvWdtmcWaQ2vw9vTm7V5v42l5Zuq4Up6lGN1mND/e+yP7HtrHmz3fpGKpimw8tpG75t1FXFJclmMRyQtKMImIiIiIiIhkQVaLekfGRfJMyDMATOwykVpla2XrvNXLVOeh6x7iu6HfUbZEWVbLine truncated
|
||||
"text/plain": [
|
||||
"<Figure size 1200x1000 with 8 Axes>"
|
||||
]
|
||||
@@ -1229,7 +1205,7 @@
|
||||
"\n",
|
||||
"Pandas v: 1.1.0 [pip install pandas] https://github.com/pandas-dev/pandas\n",
|
||||
"Data from AlphaVantage v: 1.0.19 [pip install alphaVantage-api] http://www.alphavantage.co https://github.com/twopirllc/AlphaVantageAPI\n",
|
||||
"Technical Analysis with Pandas TA v: 0.2.08b [pip install pandas_ta] https://github.com/twopirllc/pandas-ta\n",
|
||||
"Technical Analysis with Pandas TA v: 0.2.12b [pip install pandas_ta] https://github.com/twopirllc/pandas-ta\n",
|
||||
"Charts by Matplotlib Finance v: 0.12.6a3 [pip install mplfinance] https://github.com/matplotlib/mplfinance\n",
|
||||
"\n"
|
||||
]
|
||||
@@ -1237,7 +1213,7 @@
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<__main__.Chart at 0x1175701f0>"
|
||||
"<__main__.Chart at 0x121d32a90>"
|
||||
]
|
||||
},
|
||||
"execution_count": 17,
|
||||
@@ -1247,7 +1223,7 @@
|
||||
],
|
||||
"source": [
|
||||
"Chart(df, style=\"yahoo\", title=ticker, verbose=False,\n",
|
||||
" last=recent, rpad=10, clr=True, squeeze=True,\n",
|
||||
" last=recent_bars(df), rpad=10, clr=True, squeeze=True,\n",
|
||||
" show_nontrading=False, # Intraday use if needed\n",
|
||||
")"
|
||||
]
|
||||
@@ -1266,7 +1242,7 @@
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAABIYAAANeCAYAAABnJQXMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdZ3QW1dqH8Wtm0iAJLdKk9yYGBERQ6YKgcEBBULGDir0dC3qMWPHF3o8CHkUFRDAoXUhCQJQuVZqA9JaQQEifmfdD5IGEhHTS/r+1WOTZs2fPPSFjtvfsYriu6yIiIiIiIiIiImWOWdQBiIiIiIiIiIhI0VBiSERERERERESkjFJiSERERERERESkjFJiSERERERERESkjFJiSERERERERESkjFJiSERERERERESkjFJiSERERERERESkjFJiSERERERERESkjFJiSERERERERESkjFJiSERERERERESkjFJiSEREpJSYMWMG119/PTVr1sTHx4fAwEDq1q3LFVdcwciRI/nvf/+brn63bt0wDOOcP5ZlUalSJS6//HLGjBnD8ePHPef07ds3Xd0vvvgi01huvfXWdPXGjh1bqPcuIiIiInljuK7rFnUQIiIikj8jRoxgwoQJ561TsWJFYmJiPJ+7devG4sWLs227Ro0aLFq0iJYtW3LgwAEuueQST7KoQoUKbNy4kTp16njqz5w5k4EDB3o+d+7cmSVLlmCaeh8lIiIiUtwoMSQiIlLCLViwgD59+ng+t23blj59+lCxYkWio6PZsGEDS5cuxbKs8yaGxo0bB8CJEyeYOXMm69ev9xxr164dq1atAmDy5MnccsstnmN9+vRh3rx5AERHR9OqVSsOHToEgL+/P+vWraNRo0aFcOciIiIikl9eRR2AiIiI5M/ppAxAo0aNWLlyJZZlpauTkpJCWFjYedt56qmnPF+PHj2ali1bsmvXLgBWr17Nrl27aNCgATfffDM//vgj06ZNA2D+/PlMmDCBe+65h0ceecSTFIK0ZJOSQiIiIiLFl8Z0i4iIlHC2bXu+jomJYefOnefU8fb2TjeqKDt+fn60a9cuXdnBgwc9X3/66afUqFHD8/nJJ5/kk08+4dtvv/WU9enTh1GjRuX4miIiIiJy4SkxJCIiUsJddtllnq+joqJo1qwZwcHB3HPPPXz00UesW7cu120mJiayevXqdGU1a9b0fB0UFMT48eM9n2NjY3nwwQc9nytXrpztmkciIiIiUvS0xpCIiEgJl5qaylVXXcXy5cuzrNOsWTPGjh2bblHovK4xdLaRI0emSxCd9u2336Zbh0hEREREiiclhkREREqBU6dOMW7cOCZMmMC+ffsyrWMYBjNnzqR///5Aznclq1atGosWLeKSSy4551hcXByXXnqpZy0igCFDhvD999/n8U5ERERE5ELSVDIREZFSwN/fn5deeom9e/eydetWvv76a+677z6qVavmqeO6Lu+88062bRmGQYUKFWjfvj0vvvgimzdvzjQpBBAQEMBtt92WrkzrComIiIiUHNqVTEREpJRp2rQpTZs25bbbbmPcuHE0b96cAwcOAPD3339neV5eBxEbhnHezyIiIiJSfCkxJCIiUsJ99dVXnDp1iltuuYVKlSqlO+br64uPj4/nc1BQ0IUOT0RERESKMSWGRERESrhdu3YxZswYHnvsMa688kratm1L1apVOXnyJLNnz2b37t2euv369Su6QEVERESk2FFiSEREpJRISUkhIiKCiIiITI+3b9+ep5566sIGJSIiIiLFmhJDIiIiJdxjjz1GcHAwERERrFy5kkOHDnHkyBGSk5OpXLkyrVq14sYbb2TkyJHpppWJiIiIiGi7ehERERERERGRMkrb1YuIiIiIiIiIlFFKDImIiIiIiIiIlFFKDImIiIiIiIiIlFFKDImIiIiIiIiIlFFKDImIiIiIiIiIZGLChAlceeWV1K1bl7p169K7d29++eWXdHVWrFjBgAEDqFWrFnXr1qVfv34kJCR4jh8/fpyRI0dSt25d6tWrx8MPP0xcXNyFvpUsaVcyEREREREREZFMzJ07F8uyaNSoEa7rMnnyZD788EMWL15MixYtWLFiBYMHD+bxxx/n2muvxcvLi40bN9KvXz98fX0BGDx4MIcPH+bdd98lJSWFhx56iLZt2zJ+/Pgivrs0SgyJiIiIiIiIiORQgwYNePnll7ntttu45ppr6NatG88//3ymdbdu3coVV1xBWFgYbdu2BWDhwoXcdNNNbNq0iZo1a17I0DPlVdQB5JfjOJ6vDcMowkhEREREREREpDhzXZekpCSSk5PT5RB8fX09I3yyYts2oaGhxMfH06FDB44ePcqqVasYMmQIvXv3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 truncated
|
||||
"image/png": "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sGEDAwYMoHv37hw8eJCbb76ZV199lbZt2wKwfv16AgMD3UkhgNDQUGw2Gxs3bqR37955c3FZcEMkhgAOHz5MER/8JCIiIiIiIiJ5yDAMgoODadKkSao6Py+99BJjxoxJ95gdO3bQo0cPEhIS8PPz44svvqBBgwasX78egPHjx/PPf/6Tpk2bMnv2bPr27cu6deuoU6cOp06dokKFCqn68/LyomzZspw6dSrvLjQLinxi6EqGr1atWvzxxx/UrVsX0zQLOCqRosHpdLJv3z7dNyJZpHtHJHt074hkj+4dkazL6L6xLAu73c727duvGTGUkZtvvpno6GguXLjAwoULeeKJJ1i0aJG7tM2DDz7I/fffD0CzZs1YtWoVs2bNIiwsLI+uLncV+cTQFVe+0aZp6i9LkSzSfSOSPbp3RLJH945I9ujeEcm6tPfNlZlGAQEBHtcp9vHxoXbt2gA0b96cTZs2MXXqVJ555hkA6tevn2r/+vXrc/ToUQAqVarE6dOnU213OBycO3eOSpUqZe+icpmWqxcRERERERER8ZDL5cJutxMcHEyVKlXYt29fqu379u2jRo0aALRu3ZrY2Fg2b97s3h4dHY3L5aJly5b5GndGbpgRQyIiIiIiIiIFLTIykk6dOhV0GJJLwsPD6dq1KzVq1ODixYvMmzePNWvW8O2332IYBqNGjeKtt96iSZMmNG3alK+//pq9e/fy+eefA8mjh7p06cJTTz3FxIkTSUpK4sUXX+S+++4rFCuSgRJDIiIiIiIiIrkmKipKiaEbyJkzZxg5ciSnTp0iICCAxo0b8+2337q/xyNHjiQhIYGxY8dy/vx5GjduzPz586lVq5a7j48//pgXXniBvn37YhgGffr0Yfz48QV1SddQYkhEREREREREJB3vv/9+pvs888wz7npD6SlbtizTp0/PzbBylWoMiYiIiIiIiOSCkOgwfqx8lpDoorEalQhoxJCIiIiIiIhIroixx3G+Xgmc9riCDkXEYxoxJCIiIiIiIiJSTCkxJCIiIiIiIiJSTCkxJCIiIiIiIiJSTCkxJCIiIiIiIpJHIiMjCzoEketSYkhEREREREQkD5iDBmObPAVz0OCCDkUkQ1qVTERERERERCQvxMbS2WaCy1nQkYhkSCOGRERERERERESKKSWGRERERERERESKKSWGRERERERERHJBkI8/1fckEOTjX9ChiHhMiSERERERERGRXLClYzhdT5ZjS8fwgg5FxGNKDImIiIiIiIiIFFNKDImIiIiIiIiIFFNKDImIiIiIiIiIFFNKDImIiIiIiIjkktDQ0IIOQSRLlBgSERERERERySWdOnUq6BBEssSroAMQERERERERKYpCosOIsccR5OOvlcikyNKIIREREREREZFsiLHHYRo2YuxxBR2KSLYpMSQiIiIiIiIiUkwpMSQiIiIiIiIiUkwpMSQiIiIiIiIiUkwpMSQiIiIiIiLiocjIyIIOQSRXKTEkIiIiIiIikoG0iaCoqKiCCUQkj2i5ehEREREREZF0hESH4b/rLHFmlJajlxuWRgyJiIiIiIiIpCPGHsfReiXcy9GbgwbTecdOzEGDAQjy8af6ngSCfPwLMkyRHFFiSEREREREROQv160hFBtL5/jLEBsLwJaO4XQ9WU6jiaRIU2JIRERERERE5C+qISTFjRJDIiIiIiIiIum4ZqpYYCARpUpCYKB7n9DQ0IIJTiSXKDEkIiIiIiIiko60U8Wcc2bjevIJnHNmu/fp1KlTQYUnkiuUGBIRERERERHxkBJBcqNRYkhEREREREQEML6ZR7VDhzC+mZdrfV62OYkKPMc/V/+T7l92p9GHjZj06yQsy8q1c4jkhFdBByAiIiIiIiJSGFgD+nNs+zasAf3dbdmtIXQy7iThN//OF5VOYLdZsPo397YXfnyBn47+xMd3fUxp39I5DVskRzRiSERERERERIqt6y5PT9anjiU4Enh73ds0mtqIGVWOY7dZVEn0YWCjgXxw5weMqDkCb5s383fNp+2nbdl5emdOwhfJMY0YEhERERERkWInJDqMGHscNffaiTOj3AWmcyLiQASP/e8xDsUeAqDNhQAmHKxP+/OlcYXPAiBsYRgRf4tgyPwh7Dm7h/afteepNk8xqPEgGpZvmOMYRLJKI4ZERERERESk2Imxx2EaNo7WK0GMPS7H/Z2IO8HA+QM5FHuI6qWr81mfz1i7uRUdLpTFwEi1763VbuWXh3+h802duZR0iTfXvknIRyG0mt6Kd9a9w+lLp3Mcj4inlBgSERERERERyaGXVr7EhcQLtKzSku2Pb2dok6HY0iSEUqrgV4HFgxfz+T2f06tuL7xsXmz9cyuvRr1Ku8/acfTC0XyMXoozJYZERERERERE/pKdYtMRByKYvWM2BgaT75xMKe9SHh1n2kyGNB7CgoELOPrUUab2mkqtMrU4FHuInl/31MghyRdKDImIiIiIiIj8JavFphMdiYxeNhqAx1s+zi1VbsnWecuVLMfDzR9m+f3LqV66OrtjdtN7Tm9iE2Kz1Z+Ip5QYEhEREREREcmmib9MZM/ZPVTLine truncated
|
||||
"text/plain": [
|
||||
"<Figure size 1200x1000 with 8 Axes>"
|
||||
]
|
||||
@@ -1281,7 +1257,7 @@
|
||||
"\n",
|
||||
"Pandas v: 1.1.0 [pip install pandas] https://github.com/pandas-dev/pandas\n",
|
||||
"Data from AlphaVantage v: 1.0.19 [pip install alphaVantage-api] http://www.alphavantage.co https://github.com/twopirllc/AlphaVantageAPI\n",
|
||||
"Technical Analysis with Pandas TA v: 0.2.08b [pip install pandas_ta] https://github.com/twopirllc/pandas-ta\n",
|
||||
"Technical Analysis with Pandas TA v: 0.2.12b [pip install pandas_ta] https://github.com/twopirllc/pandas-ta\n",
|
||||
"Charts by Matplotlib Finance v: 0.12.6a3 [pip install mplfinance] https://github.com/matplotlib/mplfinance\n",
|
||||
"\n"
|
||||
]
|
||||
@@ -1289,7 +1265,7 @@
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<__main__.Chart at 0x114347e20>"
|
||||
"<__main__.Chart at 0x120d32e20>"
|
||||
]
|
||||
},
|
||||
"execution_count": 18,
|
||||
@@ -1299,7 +1275,7 @@
|
||||
],
|
||||
"source": [
|
||||
"Chart(df, style=\"yahoo\", title=ticker, verbose=False,\n",
|
||||
" last=recent, rpad=10, clr=True, squeeze=True, lazybear=True,\n",
|
||||
" last=recent_bars(df), rpad=10, clr=True, squeeze=True, lazybear=True,\n",
|
||||
" show_nontrading=False, # Intraday use if needed\n",
|
||||
")"
|
||||
]
|
||||
@@ -1320,7 +1296,7 @@
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAABH8AAANeCAYAAACLfKKfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdd3wUdf7H8dfMbAokIUDoJZTQpBgQsYBCQARFVEQQRFHv1FNsp2c5f54aOe9+5++wnBUs6CEqKEVAUFRKiIhIEVBAQaqEEiAhjZTN7s7vj8CaQEiyySbZhPfz8UB3Z77z/X6GbcNnvsWwbdtGRERERERERERqJbO6AxARERERERERkcqj5I+IiIiIiIiISC2m5I+IiIiIiIiISC2m5I+IiIiIiIiISC2m5I+IiIiIiIiISC2m5I+IiIiIiIiISC2m5I+IiIiIiIiISC2m5I+IiIiIiIiISC2m5I+IiIiIiIiISC2m5I+IiIiIiIiISC2m5I+IiEgNNHfuXIYPH07z5s0JDg4mIiKC6OhoLrroIu68807efPPNIuXj4uIwDOO0P5ZlUb9+fS644AImTpzIsWPHvMdceeWVRcq+/fbbxcZy0003FSn33HPPVeq5i4iIiIhvDNu27eoOQkRERMrujjvuYOrUqSWWiYyMJC0tzfs8Li6OFStWlFp3s2bNWLp0KV27duXAgQN0797dmxCqV68emzdvpnXr1t7y8+fPZ8SIEd7nffv25ZtvvsE0dX9JREREJFAo+SMiIlKDfPXVVwwdOtT7vFevXgwdOpTIyEhSU1P56aefWLlyJZZllZj8mTRpEgAZGRnMnz+fH3/80buvd+/erFu3DoAZM2Ywbtw4776hQ4eyePFiAFJTU+nWrRuHDh0CICwsjE2bNhETE1MJZy4iIiIi5eWo7gBERESk7E4mXgBiYmJYu3YtlmUVKZOfn8+yZctKrOeRRx7xPn7iiSfo2rUru3fvBmD9+vXs3r2bdu3aceONN/Lpp58ya9YsAL788kumTp3K7bffzgMPPOBN/EBBQkmJHxEREZHAoz7ZIiIiNYjb7fY+TktLY9euXaeVCQoKKtI7qDShoaH07t27yLaDBw96H0+ePJlmzZp5nz/88MO88cYbfPjhh95tQ4cOZcKECWVuU0RERESqjpI/IiIiNch5553nfZySkkLnzp2JjY3l9ttv57XXXmPTpk0+15mbm8v69euLbGvevLn3cVRUFO+88473eXp6Ovfee6/3eYMGDUqdg0hEREREqo/m/BEREalBXC4Xl1xyCd9///0Zy3Tu3JnnnnuuyETM5Z3zp7A777yzSBLopA8//LDIvEAiIiIiEliU/BEREalhjh8/zqRJk5g6dSpJSUnFljEMg/nz53P11VcDZV/tq0mTJixdupTu3bufti8rK4tzzz3XOzcQwOjRo/nkk0/KeSYiIiIiUhU07EtERKSGCQsL45lnnmHfvn1s27aN999/n7vuuosmTZp4y9i2zYsvvlhqXYZhUK9ePc4//3yefvpptm7dWmziByA8PJzx48cX2aZ5fkREREQCn1b7EhERqcE6depEp06dGD9+PJMmTaJLly4cOHAAgL17957xuPJ2/DUMo8TnIiIiIhJ4lPwRERGpQaZNm8bx48cZN24c9evXL7IvJCSE4OBg7/OoqKiqDk9EREREApCSPyIiIjXI7t27mThxIg8++CD9+vWjV69eNG7cmMzMTBYtWsSePXu8ZYcNG1Z9gYqIiIhIwFDyR0REpAbKz88nISGBhISEYveff/75PPLII1UblIiIiIgEJCV/REREapAHH3yQ2NhYEhISWLt2LYcOHeLw4cM4nU4aNGhAt27duP7667nzzjuLDAETERERkbOXlnoXEREREREREanFtNS7iIiIiIiIiEgtpuSPiIiIiIiIiEgtpuSPiIiIiIiIiEgtpuSPiIiIiIiIiEgtpuSPiIiIiIiIiAgwdepU+vXrR3R0NNHR0QwZMoSvv/66SJk1a9ZwzTXX0LJlS6Kjoxk2bBg5OTne/ceOHePOO+8kOjqaNm3acP/995OVlVXVp1KEVvsSEREREREREQG++OILLMsiJiYG27aZMWMGr776KitWrOCcc85hzZo1jBo1ioceeogrrrgCh8PB5s2bGTZsGCEhIQCMGjWK5ORkXnrpJfLz87nvvvvo1asX77zzTrWdl5I/IiIiIiIiIiJn0K5dO/7+978zfvx4Lr/8cuLi4vjb3/5WbNlt27Zx0UUXsWzZMnr16gXAkiVLuOGGG9iyZQvNmzevytC9HNXSajl5PB7vY8MwqjESEREREREREQl0tm2Tl5eH0+kskkcICQnx9tQ5E7fbzbx588jOzqZPnz4cOXKEdevWMXr0aIYMGcKePXvo2LEjTz75JBdffDEAa9euJTIy0pv4AYiLi8M0TdavX8/w4cMr50RLUaOSPwCZmZnVHYKIiIiIiIiI1CAXXnghycnJ3ud//etfefzxx4stu2XLFoYOHUpubi5hYWFMnz6dLl26sHbtWgCee+45nn32WXr06MHMmTMZMWIEq1atIiYmhuTkZBo3blykPofDQYMGDYq0X9VqXPIHwDRNdu/eTfv27bEsq7rDEakx3G43u3bt0mdHxEf67Ij4Tp8bkfLRZ0ekfM702bFtm/z8fL7//vvTev6cSceOHUlMTCQjI4P58+dzzz33sHDhQu9opNtuu42bbroJgHPPPZcVK1bwwQcfEB8fX0lnV3E1Kvlz8oVyOBzYto3D4dAXoogPDMPQZ0ekHPTZEfGdPjci5aPPjkj5nOmzczL5U69evTJPHxMcHEz79u0B6NmzJxs2bGDKlCk89NBDAHTu3LlI+c6dO5OUlARA06ZNOXLkSJH9LpeLY8eO0bRp03KfX0VpqXcRERERERERkTPweDw4nU6io6Np3rw5O3bsKLJ/x44dtG7dGoA+ffqQnp7Oxo0bvfsTExPxeDz07t27SuMurEb1/BERERERERERqSwTJ05k8ODBtG7dmszMTGbPns3KlSuZM2cOhmFw//33869//Yvu3bvTo0cPZsyYwa+//sq0adOAgl5Al112GX/+85958cUXyc/P57HHHmPkyJHVttIX1NTkz6FDOA4fhogI8LUrZIsWcOBA6WUKK618aceLVFRZ3rOnltH7UEpSnu+1s/W78MABcLvL/7tTUeX5u68tbfr7PXS2fJcGwjmc+rk5cTe00tssSW15fatCVXzfV8X1uK9tnK3O1t/3Wm758uUMHDjw9B0V/X0/C75Ljx49yoQJE0hOTqZevXp069aNOXPmeP8+J0yYQG5uLk888QRpaWl069aNuXPn0q5dO28db7/9No8++igjRozAMAyuueYannvuueo6JaCmJn9EREREREREpFgJCQnFJ3+kVK+++mqpZR566CHv/D/FadCgAe+8844/w6owzfkjIiIiIiIiIlKLKfkjIiIiIiIiIlKLKfkjIiIiIiIiUkvEJsazpFkqsYnx1R2KBBDN+SMiIiIiIiJSS6Q4s0jrFIrbmVXdoUgAUc8fEREREREREZFaTMkfEREREREREZFaTMkfEREREREREZFaTMkfERERERERkVps+fLl1R2CVDMlf0RERERERERqsYSEhOoOQaqZkj8iIiIiIiIitZQ1ZiyDtmzFGjO2ukORaqSl3kVERERERERqq/R0BpkWeNzVHYlUI/X8ERERERERERGpxZT8ERERERERERGpxZT8ERERERERERGpxZT8EREREREREaklooLDabU9l6jg8OoORQKIkj8iIiIiIiIitcSm/hMZfKghm/pPrO5QJIAo+SMiIiIiIiIiUosp+SMiIiIiIiIiUosp+SMiIiIiIiIiUosp+SMiIiIiIiJSi8TFxVV3CBJglPwRERERERERqUUGDhxY3SFIgFHyR0RERERERESkFnNUdwAiIiIiIiIiUj6xifGkOLOICg7X8u5yRur5IyIiIiIiIlJDpTizsAyTFGdWdYciAUzJHxERERERERGRWkzJHxERERERERGRWkzJHxERERERERGRWkzJHxEREREREZEaZPny5dUdgtQwSv6IiIiIiIiI1CAJCQnVHYLUMEr+iIiIiIiIiAQo9fIRf3BUdwAiIiIiIiIicrrYxHjCf0kly0pgU/+J1R2O1GDq+SMiIiIiIiISgFKcWSR1CiXFmQWANWYs1hVXMmjLVqwxYwGICg6n1fZcooLDqzNUCXBK/oiIiIiIiIjUBOnpYFoMys4peAxs6j+RwYcaqmeQlEjJHxEREREREZEAoTl+pDIo+SMiIiIiIiISIAqv5KUhXeIvSv6IiIiIiIiIBKDThnRFRoLHzbK6dQoenxAXF1c9AUqNodW+RERERERERGoA98czAfAsX4574EDv9oGFHosURz1/RERERERERGoQJXvEV0r+iIiIiIiIiAQAa8zYIsu4+9vOjL288fM0pu+Yg23bldKGBCYN+xIREREREREJUBWdz+e7iHRmNTnMFw2Osn3uAO/2tUc38tIFz2CZVgUjlJpAPX9EREREREREqknhpd3dH89kWbeu3rl9oPxDvNJz0/nToj9xSa91vNzyN7bXzcZhOLiwcS8MDKb8Mp3xiQ+Q586r8DlI4FPyR0RERERERKSaFF7a3V++3vU1vd7uxX83/RfDhnGHm/PJ1h4cvPEHvrnqU55qfh9BZhCz9yxixJLbyczP8nsMEliU/BERERERERGpBrGJ8SxplkpsYrxf6nN5XNz7xb1cNfMqkjKTaF+/Pct+PI/p23tw/dEmRAbXAyD0J5t5l00lzFGXpQdXMuiLG1jw21e4PC6/xCGBR8kfERERERERkWqQ4swiqVMoKU7/9Lx5Z8M7vL3hbQDuPf9e1t+xnv7pDYote3nL/nw19COiQhqwKXUro5b9iU6zL+UfG1/mQHayX+KRwKHkj4iLine truncated
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAABIMAAANgCAYAAAC/fKhVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdd3wUdf7H8dfsbgqkAaGX0AlSRaQXAVEQEVFBUMTTUxBsJ8rpHRaMeurvsNzZ0BNOURAQqQeKBRJCExERKdJr6ARSIWV35vdHYCWQkOxm09/PxyOanfnOdz6T3dkZPvMthmVZFiIiIiIiIiIiUi7YijsAEREREREREREpOkoGiYiIiIiIiIiUI0oGiYiIiIiIiIiUI0oGiYiIiIiIiIiUI0oGiYiIiIiIiIiUI0oGiYiIiIiIiIiUI0oGiYiIiIiIiIiUI0oGiYiIiIiIiIiUI0oGiYiIiIiIiIiUI0oGiYiIiIiIiIiUI0oGiYiIlAHz5s1j4MCB1KpVC39/f0JCQoiIiKBz586MGjWKjz76KFv5Xr16YRjGZT92u51KlSrRsWNHoqKiOHPmjHubm266KVvZjz/+OMdYRowYka3c66+/XqjHLiIiIiKeMSzLsoo7CBEREfHegw8+yNSpU69YJiwsjISEBPfrXr16sWLFijzrrlmzJsuWLaNFixYcOXKEVq1auRNEoaGhbNmyhXr16rnLL1y4kMGDB7tfd+3alZUrV2Kz6fmTiIiISEmhZJCIiEgp9t1339GvXz/363bt2tGvXz/CwsI4ffo0mzdvZtWqVdjt9ismgyZNmgRAUlISCxcu5LfffnOva9++PT///DMAM2fO5O6773av69evH0uXLgXg9OnTtGzZkmPHjgEQFBTEpk2baNy4cSEcuYiIiIh4y1HcAYiIiIj3LiRiABo3bsz69eux2+3ZymRmZrJ8+fIr1jN+/Hj37xMmTKBFixbs27cPgA0bNrBv3z4aNmzIXXfdxfz585kzZw4A3377LVOnTuWBBx7g8ccfdyeCICvBpESQiIiISMmjNtsiIiKlmMvlcv+ekJDA3r17Lyvj5+eXrfVQXgIDA2nfvn22ZUePHnX/PnnyZGrWrOl+/dRTT/HBBx8wY8YM97J+/foxduzYfO9TRERERIqOkkEiIiKl2DXXXOP+PT4+nsjISNq2bcsDDzzAe++9x6ZNmzyuMy0tjQ0bNmRbVqtWLffv4eHhTJkyxf06MTGRRx55xP26cuXKeY5hJCIiIiLFR2MGiYiIlGJOp5Pu3buzbt26XMtERkby+uuvZxvY2dsxgy42atSobEmhC2bMmJFtXCERERERKVmUDBIRESnlUlNTmTRpElOnTiUuLi7HMoZhsHDhQm655RYg/7OJVa9enWXLltGqVavL1qWkpNCmTRv32EIAQ4cO5csvv/TySERERESkKKibmIiISCkXFBTEiy++yKFDh9ixYwefffYZDz30ENWrV3eXsSyLt956K8+6DMMgNDSUa6+9lhdeeIFt27blmAgCCA4OZuTIkdmWaZwgERERkZJPs4mJiIiUIc2aNaNZs2aMHDmSSZMm0bx5c44cOQLAgQMHct3O24bChmFc8bWIiIiIlDxKBomIiJRi06ZNIzU1lbvvvptKlSplWxcQEIC/v7/7dXh4eFGHJyIiIiIlkJJBIiIipdi+ffuIioriiSeeoFu3brRr145q1aqRnJzMkiVL2L9/v7vsgAEDii9QERERESkxlAwSEREpAzIzM4mJiSEmJibH9ddeey3jx48v2qBEREREpERSMkhERKQUe+KJJ2jbti0xMTGsX7+eY8eOceLECTIyMqhcuTItW7bkjjvuYNSoUdm6jImIiIhI+aWp5UVEREREREREyhFNLS8iIiIiIiIiUo4oGSQiIiIiIiIiUo4oGSQiIiIiIiIiUo4oGSQiIiIiIiIiUo4oGSQiIiIiIiIikoOpU6fSrVs3IiIiiIiI4MYbb+T777/PVuann35i0KBB1KlTh4iICAYMGMC5c+fc68+cOcOoUaOIiIigfv36PPbYY6SkpBT1oWSj2cRERERERERERHLwzTffYLfbady4MZZlMXPmTN59911WrFjBVVddxU8//cSQIUMYN24c/fv3x+FwsGXLFgYMGEBAQAAAQ4YM4fjx47z99ttkZmby6KOP0q5dO6ZMmVJsx1Wqk0Gmabp/NwyjGCMRERERERERkZLu4hSIzeZdZ6mGDRvy0ksvMXLkSG644QZ69erFs88+m2PZHTt20LlzZ5YvX067du0A+OGHH7jzzjvZunUrtWrV8iqGgnIUy159KDk5ubhDEBEREREREZFS5uJGJQEBAe6WPLlxuVwsWLCAs2fP0qFDB06ePMnPP//M0KFDufHGG9m/fz9Nmzblueeeo0uXLgCsX7+esLAwdyIIoFevXthsNjZs2MDAgQML5+DyUOqTQQAHDx6kFDdwEhEREREREZEiYBgGERERtGrVKtu4Pc888wx/+9vfctxm69at9OvXj7S0NIKCgvj8889p3rw569evB+D111/n5ZdfpnXr1syaNYvBgwezZs0aGjduzPHjx6lWrVq2+hwOB5UrV+b48eOFd6B5KNXJoAtZvIYNG7Jnzx6aNGmC3W4v5qhESg+Xy8Xu3bt17oh4SOeOiHd07oh4TueNiHdyO3csyyIjI4MtW7Zc1jIoN02bNiU2NpakpCQWLlzIww8/zOLFi91D19x3332MGDECgDZt2rBixQqmT5/OxIkTC+noCq5UJ4MuuPDG2u12fUGKeEHnjoh3dO6IeEfnjojndN6IeOfSc+dCr6LQ0NB8jz3s7+9Po0aNALj66qvZuHEjH374IePGjQMgMjIyW/nIyEji4uIAqFGjBidPnsy23ul0cubMGWrUqOHdQfmAppYXEREREREREckn0zTJyMggIiKCWrVqsXv37mzrd+/eTb169QDo0KEDiYmJ/Prrr+71sbGxmKZJ+/btizTui5WJlkEiIiIiIiIiIr4WFRVF3759qVevHsnJyXz11VesWrWKuXPnYhgGjz32GK+99hqtWrWidevWzJw5k127djFt2jQgq5XQ9ddfz1/+8hfeeustMjMzefrpp7n99tuLbSYxKCvJoGPHcJw4ASEhcD77JuIzR45ceX3t2peXqV278OKR0i+vz9SlcvqM5WebssDT4y6o/P6tXa4/rjsFbbLvzfvra0XxPZZT/fn5fi1tSsL1oDhiyO+18uJzR/dsOSuK73tPz73CuG6VxvO7MHh6zdF5UypER0fTu3fvy1cUxT1gTnUUdQxl7Pw+deoUY8eO5fjx44SGhtKyZUvmzp3rfo/Hjh1LWloaEyZMICEhgZYtWzJv3jwaNmzoruPjjz/mr3/9K4MHD8YwDAYNGsTrr79eXIcElJVkkIiIiIiIiEgJEBMTk3MySEqld999N88y48aNc48flJPKlSszZcoUX4ZVYBozSERERERERESkHFEySERERERERESkHFEySERERERERMQH2sZO5Ieap2kbO7G4QxG5Io0ZJCIiIiIiIuID8RkpJDQLxJWRUtyhiFyRWgaJiIiIiIiIiJQjSgaJiIiIiIiIiJQjSgaJiIiIiIiIiJQjSgaJiIiIiIiIFJLo6OjiDkHkMkoGiYiIiIiIiBSSmJiY4g5B5DJKBomIiIiIiIgUAvuw4fTZug37sOHFHYpINppaXkRERERERKQwJCbSx2YH01XckYhko5ZBIiIiIiIiIiLliJJBIiIiIiIiIiLliJJBIiIiIiIiIiLliJJBIiIiIiIiIj4Q7h9M3Z1phPsHF3coIlekZJCIiIiIiIiID2zqGUXfY1XY1DOquEMRuSIlg0REREREREREyhElg0REREREREREyhElg0REREREREREyhElg0RERERERER8pFevXsUdgkielAwSERERERER8ZHevXsXdwgieVIySERERERERMRL0dHRxR2CiMccxR2AiIiIiIiISGnUNnYiwdtPk2KP0XTyUqooGSQiIiIiIiLihfiMFBKaBeLKSCnuUEQ8om5iIiIiIiIiIiLliJJBIiIiIiIiIiLliJJBIiIiIiIiIiLliJJBIiIiIiIiIvmk2cOkLFAySERERERERCSfYmJiijsEkQJTMkhEREREREQkB2oFJGWVppYXERERERERuUTb2IkEbz/NAddiwv2D2dQzqrhDEvEZtQwSERERERERuUR8RgpxzQKxGzbiM1KwDxuOvf9N9Nm6Dfuw4QCE+wdTd2ca4f7BxRytiGeUDBIREREREREhj25hiYlgs9Pn7Lms34FNPaPoe6yKWg1JqaNkkIiIiIiIiAgaHFrKDyWDRERERERERC5xoQuYyzLVDUzKHCWDRERERERERC5xoQtYXN83s7qBhYWB6WJ5xQpZv5/Xq1ev4gtSxEuaTUxEREREREQkD67ZswAwo6Nx9e7tXt77ot9FSgu1DBIRERERERHJJyV/pCxQMkhERERERETKPWPOV9Q5cABjzlc+r/uofzqf7vqSYdFjuSvmEU6lnfb5PkQ8oW5iIiIiIiIiUu5ZQ4dweMtmrKFD3MsKMh5QpiuTf9c5wMwax/klOBlWr3Kv23JmO0tu+IyI4DoFCVnEa2oZJCIiIiIiIuVSdHT0Fdd72yXstxO/0e3Tbvy18e6sRBBwbdW2/L3NY1RzVGFH4h56fT2E3xN2e1W/SEGpZZCIiIiIiIiUO21jJxK8/TQp9pis2cJ8INOVyT/X/pNXV71KpplJlUwHLx9oym0nw6n60XQAXDFJLGy4ih2Je+j9zRAW9f2EjtXa+WT/IvmllkEiIiIiIiJS7sRnpBDXLJD4jBSf1JeSkUKvz3sRFRtFppnJoGaD2PxzZ8Ycq0eNzAB3uUpmCNE3zaFD1bacTk+g79LhjF3zdzbGb/FJHCL5oWSQiIiIiIiISAG9u/5d1h9ZT6XLine truncated
|
||||
"text/plain": [
|
||||
"<Figure size 1200x1000 with 6 Axes>"
|
||||
]
|
||||
@@ -1335,7 +1311,7 @@
|
||||
"\n",
|
||||
"Pandas v: 1.1.0 [pip install pandas] https://github.com/pandas-dev/pandas\n",
|
||||
"Data from AlphaVantage v: 1.0.19 [pip install alphaVantage-api] http://www.alphavantage.co https://github.com/twopirllc/AlphaVantageAPI\n",
|
||||
"Technical Analysis with Pandas TA v: 0.2.08b [pip install pandas_ta] https://github.com/twopirllc/pandas-ta\n",
|
||||
"Technical Analysis with Pandas TA v: 0.2.12b [pip install pandas_ta] https://github.com/twopirllc/pandas-ta\n",
|
||||
"Charts by Matplotlib Finance v: 0.12.6a3 [pip install mplfinance] https://github.com/matplotlib/mplfinance\n",
|
||||
"\n"
|
||||
]
|
||||
@@ -1343,7 +1319,7 @@
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<__main__.Chart at 0x117cfcbe0>"
|
||||
"<__main__.Chart at 0x12278a400>"
|
||||
]
|
||||
},
|
||||
"execution_count": 19,
|
||||
@@ -1353,7 +1329,7 @@
|
||||
],
|
||||
"source": [
|
||||
"Chart(df, style=\"yahoo\", title=ticker, verbose=False,\n",
|
||||
" last=recent, rpad=10,\n",
|
||||
" last=recent_bars(df), rpad=10,\n",
|
||||
" volume=True, midpoint=False, ohlc4=False,\n",
|
||||
" rsi=False, clr=True, macd=False, zscore=False, squeeze=False, lazybear=False,\n",
|
||||
" archermas=True, archerobv=False,\n",
|
||||
@@ -1378,7 +1354,7 @@
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAABH8AAANeCAYAAACLfKKfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdd3gWVdrH8e/MpJKEGCK9dwUkFFFEliWANBVRQVCEVwVUsKwuurpYYnYt7GIv2AALIr0tCBYgMWKjCAgoTYoESIAEUgjhSWbm/SPyQCCBJIQ0f5/ryu7znDlz5p7IyPGeUwzXdV1ERERERERERKRCMks7ABERERERERERuXCU/BERERERERERqcCU/BERERERERERqcCU/BERERERERERqcCU/BERERERERERqcCU/BERERERERERqcCU/BERERERERERqcCU/BERERERERERqcCU/BERERERERERqcCU/BERERERERERqcCU/BERESmH5s6dy3XXXUfNmjXx8/MjJCSEevXq0bFjR0aOHMm7776bq37Xrl0xDOOMH8uyuOiii7jiiiuIjo7m8OHD3nP69OmTq+7777+fZyxDhgzJVW/cuHEX9N5FREREpHAM13Xd0g5CRERECm7EiBFMmjTprHVCQ0M5cuSI93vXrl35+uuvz9l2jRo1WLZsGS1atGDfvn20atXKmxCqXLkyGzdupG7dut76CxYsoH///t7vnTp14ptvvsE09X5JREREpKxQ8kdERKQc+fLLL+nVq5f3e9u2benVqxehoaEkJyezYcMGVqxYgWVZZ03+jB8/HoDU1FQWLFjAzz//7D3Wvn17Vq9eDcC0adO47bbbvMd69erF559/DkBycjItW7YkISEBgKCgINavX0/jxo0vwJ2LiIiISFH5lHYAIiIiUnAnEi8AjRs3ZtWqVViWlatOVlYWy5cvP2s7jzzyiPfz2LFjadGiBTt37gRgzZo17Ny5k4YNG3Lrrbcyb948Zs2aBcAXX3zBpEmTGD58OA8++KA38QM5CSUlfkRERETKHo3JFhERKUds2/Z+PnLkCDt27Dijjq+vb67RQecSEBBA+/btc5Xt37/f+/ntt9+mRo0a3u9jxoxhwoQJTJ061VvWq1cvRo0aVeBrioiIiEjJUfJHRESkHGnXrp33c1JSEs2bNyciIoLhw4fz5ptvsn79+kK3mZmZyZo1a3KV1axZ0/s5PDyciRMner+npKRw3333eb+HhYWdcw0iERERESk9WvNHRESkHMnOzqZz5878+OOP+dZp3rw548aNy7UQc1HX/DnVyJEjcyWBTpg6dWqudYFEREREpGxR8kdERKScOXr0KOPHj2fSpEnEx8fnWccwDBYsWMD1118PFHy3r2rVqrFs2TJatWp1xrH09HRat27tXRsIYODAgcycObOIdyIiIiIiJUHTvkRERMqZoKAgnnnmGfbs2cOWLVv4+OOPueeee6hWrZq3juu6vPzyy+dsyzAMKleuzOWXX87TTz/NL7/8kmfiByA4OJihQ4fmKtM6PyIiIiJln3b7EhERKceaNWtGs2bNGDp0KOPHj+eSSy5h3759AOzevTvf84o68NcwjLN+FxEREZGyR8kfERGRcuSjjz7i6NGj3HbbbVx00UW5jvn7++Pn5+f9Hh4eXtLhiYiIiEgZpOSPiIhIObJz506io6N56KGHuPrqq2nbti1Vq1YlLS2Nzz77jF27dnnr9u3bt/QCFREREZEyQ8kfERGRcigrK4vY2FhiY2PzPH755ZfzyCOPlGxQIiIiIlImKfkjIiJSjjz00ENEREQQGxvLqlWrSEhI4MCBA3g8HsLCwmjZsiU333wzI0eOzDUFTERERET+vLTVu4iIiIiIiIhIBaat3kVEREREREREKjAlf0REREREREREKjAlf0REREREREREKjAlf0REREREREREKjAlf0REREREREREgEmTJnH11VdTr1496tWrR8+ePfnqq69y1Vm5ciX9+vWjdu3a1KtXj759+3Ls2DHv8cOHDzNy5Ejq1atH/fr1eeCBB0hPTy/pW8lFu32JiIiIiIiIiABLlizBsiwaN26M67pMmzaNN954g6+//ppLL72UlStXMmDAAB5++GF69+6Nj48PGzdupG/fvvj7+wMwYMAAEhMTeeWVV8jKyuL++++nbdu2TJw4sdTuS8kfEREREREREZF8NGzYkH/9618MHTqUa665hq5du/LEE0/kWXfLli107NiR5cuX07ZtWwCWLl3KLbfcwqZNm6hZs2ZJhu7lUypXLSLHcbyfDcMoxUhEREREREREpKxzXZfjx4/j8Xhy5RH8/f29I3XyY9s28+fPJyMjgw4dOnDw4EFWr17NwIED6dmzJ7t27aJp06Y8+eSTXHXVVQCsWrWK0NBQb+IHoGvXrpimyZo1a7juuusuzI2eQ7lK/gCkpaWVdggiIiIiIiIiUo5ceeWVJCYmer8/9thjPP7443nW3bRpE7169SIzM5OgoCCmTJnCJZdcwqpVqwAYN24c//73v7nsssuYPn06/fv357vvvqNx48YkJiZStWrVXO35+PgQFhaW6/olrdwlfwBM02Tnzp00atQIy7JKOxyRcsO2bXbs2KFnR6SQ9OyIFJ6eG5Gi0bMjUjT5PTuu65KVlcWPP/54xsif/DRt2pS4uDhSU1NZsGABo0ePZtGiRd7ZSHfccQdDhgwBoHXr1nz99dd88sknREVFXaC7O3/lKvlz4h+Uj48Pruvi4+OjfyGKFIJhGHp2RIpAz45I4em5ESkaPTsiRZPfs3Mi+VO5cuUCLx/j5+dHo0aNAGjTpg1r167lnXfe4eGHHwagefPmueo3b96c+Ph4AKpXr87BgwdzHc/Ozubw4cNUr169yPd3vrTVu4iIiIiIiIhIPhzHwePxUK9ePWrWrMn27dtzHd++fTt169YFoEOHDqSkpLBu3Trv8bi4OBzHoX379iUa96nK1cgfERERERERETm7mJgYIiMjSzuMcik6OpoePXpQt25d0tLSmD17NitWrGDOnDkYhsEDDzzACy+8QKtWrbjsssuYNm0a27Zt46OPPgJyRgF1796dv/3tb7z88stkZWXxj3/8g5tuuqnUdvoCJX9EREREREREKpTY2Fglf4ro0KFDjBo1isTERCpXrkzLli2ZM2eO9/c5atQoMjMzGTt2LEeOHKFly5bMnTuXhg0bett4//33efTRR+nfvz+GYdCvXz/GjRtXWrcEKPkjIiIiIiIiIgLAG2+8cc46Dz/8sHf9n7yEhYUxceLE4gzrvGnNHxERERERERGRCkzJHxEREREREZEKIiIuiqU1komIK7vbjkvJ07QvERERERERkQoiyZPOkWYB2J700g5FyhCN/BERERERERERqcCU/BERERERERERqcCU/BERERERERGpwGJiYko7BCllSv6IiIiIiIiIVGCxsbGlHYKUMiV/RERERERERCooa9Bgum36BWvQ4NIORUqRdvsSERERERERqahSUuhmWuDYpR2JlCKN/BERERERERERqcCU/BERERERERERqcCU/BERERERERGpIML9gqmzNZNwv+DSDkXKECV/RERERERERCqI9V2i6ZFQhfVdoks7FClDlPwREREREREREanAlPwREREREREREanAlPwRERERERERqUC6du1a2iFIGaPkj4iIiIiIiEgFEhkZWdohSBmj5I+IiIiIiIhIORYTE1PaIUgZ51PaAYiIiIiIiIhI0UTERRG8OZl0K1Y7fEm+lPwRERERERERKaeSPOkcaRaA7Ukv7VCkDNO0LxERERERERGRCkzJHxERERERERGRCkzJHxEREREREZFyRAs8S2Ep+SMiIiIiIiJSjsTGxpZ2CFLOaMFnERERERERkTIoIi6KJE864X7B2slLzotG/oiIiIiIiIiUQUmedCzDJOmPnbysQYOxeveh26ZfsAYNBiDcL5g6WzMJ9wsuzVCljFPyR0RERERERKSMOOt6PikpYFp0yziW8xlY3yWaHglVNDJIzkrJHxEREREREZEyQuv5yIWg5I+IiIiIiIhIGXTGlK7QUHBsllcKzPksUkBK/oiIiIiIiIiUQadP6bJnTMf+fAnOfaOxZ0z31uvatWspRSjlhZI/IiIiIiIiIuVIZGTkWb+LnE5bvYuIiIiIiIiUAdagwXSzbaxBg3ON7CkOCb7HifllJt/u+ZbqQdV5+MqHCfQNLNZrSNml5I+IiIiIiIhIGXU+U7oOHD3Ai422srhKElsrZcD8Fd5j87fMZ/pN02kU1qgYopSyTtO+RERERERERErJqVu72zOms7xli1yjfooypet49nFe/P5FWrzTglfr7GFrpQwMFyKqR3Bvu3sJ9QllXeI6On7QkcXbFxfLfUjZppE/IiIiIiIiIqUgIi6K4M3JpFux3kWdz9eCLQt4bNlj7DiyA4D2aSH8M74RXQ+HUnnRUgCs7y1WNVzFyn0r6T+zP2M6juHBKx6kZnDNYolByh6N/BEREREREREpBUmedOKbBZDkSS+W9v639X8MnDOQHUd2UDO4JhOvm8gPaztwY1J1wrJ9vfUqU5nlQ5czuv1oAF764SUavN6AnlN7MmntJJIykoolHik7lPwRERERERERKefSPek8/OXDAPxf6/9j072bGNZ6GCZGnvX9LD9e7fUq026cRsfaHXFxid0dy6glo2j0ZiOWbF9SkuHLBabkj4iIiIiIiEg599yK59iTuocGoQ14rddrBPsFF+i8my+9mbj/i2Pr6K08F/kcLau25Fj2MW6ddyur9q26wFFLSVHyR0RERERERKSMKMruXhsPbOS1la8B8ErPV6jkW6nQbTS4qAGPXvUoK+9aSc9GPcnIyuCGGTewNWlroduSskfJHxEREREREZEyorC7e7muy4NfPEi2k02/Zv24tum1Z61vDRpMt02Line truncated
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAABIMAAANgCAYAAAC/fKhVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdeVwW5frH8c/MIKCgqLjhgvuuoaWWaSZqbmWaS5Jm28nKVtvNFqRzKsuWc45Z+VM7aYuauZWZ5gJSarlvaJr7kvuCIiI8z8zvD/IRFNkRkO/79TKfueeee64BJsZr7sVwHMdBRERERERERESKBDO/AxARERERERERkatHySARERERERERkSJEySARERERERERkSJEySARERERERERkSJEySARERERERERkSJEySARERERERERkSJEySARERERERERkSJEySARERERERERkSJEySARERERERERkSJEySARERERERERkSJEySAREZFrwIwZM7jjjjsICgrC29ubkiVLEhwczE033cTgwYMZO3Zsqvrt27fHMIzL/liWRenSpWnVqhURERGcPHnSc0y3bt1S1R03blyasQwcODBVvZEjR+bptYuIiIhI1hiO4zj5HYSIiIhk38MPP8yECRPSrRMQEMCpU6c82+3bt2fJkiUZtl2pUiUWLVpEo0aN+Ouvv2jSpIknQVSqVCk2bdpEtWrVPPVnz55Nr169PNs333wzv/zyC6ap908iIiIiBYWSQSIiIoXYzz//TJcuXTzbzZs3p0uXLgQEBHDixAk2btzIr7/+imVZ6SaDRo0aBcDp06eZPXs2GzZs8Oy74YYbWLVqFQCTJ09mwIABnn1dunRh3rx5AJw4cYLGjRtz6NAhAPz8/Fi/fj21a9fOgysXERERkezyyu8AREREJPsuJGIAateuzcqVK7EsK1WdpKQkFi9enG47L7zwgufz8OHDadSoEbt27QJg9erV7Nq1i5o1a3LPPfcwc+ZMpk2bBsD8+fOZMGEC//jHP3j66ac9iSBITjApESQiIiJS8KjPtoiISCHmdrs9n0+dOsXOnTsvq1OsWLFUvYcy4uvryw033JCq7ODBg57Pn376KZUqVfJsP//883zyySd8/fXXnrIuXbowZMiQTJ9TRERERK4eJYNEREQKseuvv97z+fjx49Sv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 truncated
|
||||
"text/plain": [
|
||||
"<Figure size 1200x1000 with 8 Axes>"
|
||||
]
|
||||
@@ -1393,7 +1369,7 @@
|
||||
"\n",
|
||||
"Pandas v: 1.1.0 [pip install pandas] https://github.com/pandas-dev/pandas\n",
|
||||
"Data from AlphaVantage v: 1.0.19 [pip install alphaVantage-api] http://www.alphavantage.co https://github.com/twopirllc/AlphaVantageAPI\n",
|
||||
"Technical Analysis with Pandas TA v: 0.2.08b [pip install pandas_ta] https://github.com/twopirllc/pandas-ta\n",
|
||||
"Technical Analysis with Pandas TA v: 0.2.12b [pip install pandas_ta] https://github.com/twopirllc/pandas-ta\n",
|
||||
"Charts by Matplotlib Finance v: 0.12.6a3 [pip install mplfinance] https://github.com/matplotlib/mplfinance\n",
|
||||
"\n"
|
||||
]
|
||||
@@ -1401,7 +1377,7 @@
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<__main__.Chart at 0x116ce9820>"
|
||||
"<__main__.Chart at 0x1213aa1f0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 20,
|
||||
@@ -1411,7 +1387,7 @@
|
||||
],
|
||||
"source": [
|
||||
"Chart(df, style=\"yahoo\", title=ticker, verbose=False,\n",
|
||||
" last=recent, rpad=10,\n",
|
||||
" last=recent_bars(df), rpad=10,\n",
|
||||
" volume=True, midpoint=False, ohlc4=False,\n",
|
||||
" rsi=False, clr=True, macd=False, zscore=False, squeeze=False, lazybear=False,\n",
|
||||
" archermas=False, archerobv=True,\n",
|
||||
|
||||
+11
-10
@@ -8,7 +8,7 @@ import pandas as pd # pip install pandas
|
||||
import yfinance as yf
|
||||
# yf.pdr_override() # <== that's all it takes :-)
|
||||
|
||||
from alphaVantageAPI.alphavantage import AlphaVantage # pip install alphaVantage-api
|
||||
import alphaVantageAPI as AV # pip install alphaVantage-api
|
||||
import pandas_ta as ta # pip install pandas_ta
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ class Watchlist(object):
|
||||
A simple Class to load/download financial market data and automatically
|
||||
apply Technical Analysis indicators with a Pandas TA Strategy.
|
||||
|
||||
Default Strategy: pandas_ta.AllStrategy.
|
||||
Default Strategy: pandas_ta.CommonStrategy
|
||||
|
||||
## Package Support:
|
||||
### Data Source (Default: AlphaVantage)
|
||||
@@ -67,7 +67,7 @@ class Watchlist(object):
|
||||
- Pandas TA (pip install pandas_ta)
|
||||
|
||||
## Required Arguments:
|
||||
- tickers: A list of strings containing tickers. Example: ['SPY', 'AAPL']
|
||||
- tickers: A list of strings containing tickers. Example: ["SPY", "AAPL"]
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
@@ -78,11 +78,12 @@ class Watchlist(object):
|
||||
ds: object = None,
|
||||
**kwargs
|
||||
):
|
||||
self.tickers = tickers
|
||||
self.tf = tf
|
||||
self.verbose = kwargs.pop("verbose", False)
|
||||
self.debug = kwargs.pop("debug", False)
|
||||
self.name = name
|
||||
|
||||
self.tickers = tickers
|
||||
self.tf = tf
|
||||
self.name = name if isinstance(name, str) else f"Watch: {', '.join(tickers)}"
|
||||
self.data = None
|
||||
self.kwargs = kwargs
|
||||
self.strategy = strategy
|
||||
@@ -92,9 +93,9 @@ class Watchlist(object):
|
||||
elif isinstance(ds, str) and ds.lower() == "yahoo":
|
||||
self.ds = yf
|
||||
else:
|
||||
AVkwargs = {"api_key": "YOUR API KEY","clean": True, "export": True, "export_path": ".", "output_size": "full", "premium": False}
|
||||
AVkwargs = {"api_key": "YOUR API KEY", "clean": True, "export": True, "export_path": ".", "output_size": "full", "premium": False}
|
||||
av_kwargs = kwargs.pop("av_kwargs", AVkwargs)
|
||||
self.ds = AlphaVantage(**av_kwargs)
|
||||
self.ds = AV.AlphaVantage(**av_kwargs)
|
||||
|
||||
|
||||
def _drop_columns(self, df: pd.DataFrame, cols: list = ["Unnamed: 0", "date", "split_coefficient", "dividend"]):
|
||||
@@ -145,8 +146,8 @@ class Watchlist(object):
|
||||
print(f"[i] Loaded['{tf}']: {filename_}")
|
||||
else:
|
||||
print(f"[+] Downloading['{tf}']: {ticker}")
|
||||
if isinstance(self.ds, AlphaVantage):
|
||||
df = self.ds.data(tf, ticker)
|
||||
if isinstance(self.ds, AV.AlphaVantage):
|
||||
df = self.ds.data(ticker, tf)
|
||||
if not df.ta.datetime_ordered:
|
||||
df = df.set_index(pd.DatetimeIndex(df[index]))
|
||||
elif isinstance(self.ds, yfinance):
|
||||
|
||||
@@ -18,6 +18,14 @@ except DistributionNotFound:
|
||||
else:
|
||||
__version__ = _dist.version
|
||||
|
||||
from importlib.util import find_spec
|
||||
Imports = {
|
||||
"scipy": find_spec("scipy") is not None,
|
||||
"sklearn": find_spec("sklearn") is not None,
|
||||
"alphaVantage-api ": find_spec("alphaVantageAPI") is not None,
|
||||
"yfinance": find_spec("yfinance") is not None
|
||||
}
|
||||
|
||||
# Not ideal and not dynamic but it works.
|
||||
# Will find a dynamic solution later.
|
||||
Category = {
|
||||
@@ -46,4 +54,20 @@ Category = {
|
||||
"volume": ["ad", "adosc", "aobv", "cmf", "efi", "eom", "mfi", "nvi", "obv", "pvi", "pvol", "pvt"],
|
||||
}
|
||||
|
||||
# https://www.worldtimezone.com/markets24.php
|
||||
EXCHANGE_TZ = {
|
||||
"NZSX": 12, "ASX": 11,
|
||||
"TSE": 9, "HKE": 8, "SSE": 8, "SGX": 8,
|
||||
"NSE": 5.5, "DIFX": 4, "RTS": 3,
|
||||
"JSE": 2, "FWB": 1, "LSE": 1,
|
||||
"BMF": -2, "NYSE": -4, "TSX": -4
|
||||
}
|
||||
|
||||
RATE = {
|
||||
"TRADING_DAYS_PER_YEAR": 252, # Keep even
|
||||
"TRADING_HOURS_PER_DAY": 6.5,
|
||||
"MINUTES_PER_HOUR": 60
|
||||
}
|
||||
|
||||
|
||||
from pandas_ta.core import *
|
||||
+23
-17
@@ -23,7 +23,7 @@ from pandas_ta.volatility import *
|
||||
from pandas_ta.volume import *
|
||||
from pandas_ta.utils import *
|
||||
|
||||
version = ".".join(("0", "2", "11b"))
|
||||
version = ".".join(("0", "2", "12b"))
|
||||
|
||||
|
||||
# Strategy DataClass
|
||||
@@ -350,18 +350,18 @@ class AnalysisIndicators(BasePandasObject):
|
||||
else:
|
||||
if isinstance(result, pd.DataFrame):
|
||||
# If specified in kwargs, rename the columns. If not, use the default names.
|
||||
if 'col_names' in kwargs and isinstance(kwargs['col_names'], tuple):
|
||||
if len(kwargs['col_names'])>=len(result.columns):
|
||||
for col, ind_name in zip(result.columns, kwargs['col_names']):
|
||||
if "col_names" in kwargs and isinstance(kwargs["col_names"], tuple):
|
||||
if len(kwargs["col_names"])>=len(result.columns):
|
||||
for col, ind_name in zip(result.columns, kwargs["col_names"]):
|
||||
df[ind_name] = result.loc[:,col]
|
||||
else:
|
||||
print(f'Not enough col_names were specified : got {len(kwargs["col_names"])}, expected {len(result.columns)}.')
|
||||
print(f"Not enough col_names were specified : got {len(kwargs['col_names'])}, expected {len(result.columns)}.")
|
||||
return
|
||||
else:
|
||||
for i, column in enumerate(result.columns):
|
||||
df[column] = result.iloc[:,i]
|
||||
else:
|
||||
ind_name = kwargs['col_names'][0] if 'col_names' in kwargs and isinstance(kwargs['col_names'], tuple) else result.name
|
||||
ind_name = kwargs["col_names"][0] if "col_names" in kwargs and isinstance(kwargs["col_names"], tuple) else result.name
|
||||
df[ind_name] = result
|
||||
|
||||
|
||||
@@ -587,25 +587,31 @@ class AnalysisIndicators(BasePandasObject):
|
||||
excluded_str = ", ".join(excluded)
|
||||
print(f"[i] Excluded[{len(excluded)}]: {excluded_str}")
|
||||
|
||||
if verbose:
|
||||
print(f"[i] Multiprocessing: {self.cores} of {cpu_count()} cores.")
|
||||
|
||||
timed = kwargs.pop("timed", False)
|
||||
results = []
|
||||
pool = Pool(self.cores)
|
||||
if timed: stime = perf_counter()
|
||||
if mode["custom"]:
|
||||
has_col_names = True if len([True for x in ta if 'col_names' in x and isinstance(x['col_names'], tuple)]) else False
|
||||
custom_ta = [(ind["kind"], ind["params"] if "params" in ind and isinstance(ind["params"], tuple) else (), {**ind, **kwargs}) for ind in ta]
|
||||
|
||||
# Custom multiprocessing pool. Must be ordered for Chained Strategies
|
||||
# May fix this to cpus if Chaining/Composition if it remains inconsistent
|
||||
results = pool.imap(self._mp_worker, custom_ta, self.cores)#, cpus)
|
||||
|
||||
# Without multiprocessing :
|
||||
for ind in ta:
|
||||
params = ind["params"] if "params" in ind and isinstance(ind["params"], tuple) else tuple()
|
||||
getattr(self, ind["kind"])(*params, **{**ind, **kwargs})
|
||||
if has_col_names:
|
||||
if verbose: print(f"[i] No mulitproccessing support for 'col_names' option.")
|
||||
# Without multiprocessing:
|
||||
for ind in ta:
|
||||
params = ind["params"] if "params" in ind and isinstance(ind["params"], tuple) else tuple()
|
||||
getattr(self, ind["kind"])(*params, **{**ind, **kwargs})
|
||||
else:
|
||||
if verbose:
|
||||
print(f"[i] Multiprocessing: {self.cores} of {cpu_count()} cores.")
|
||||
|
||||
# Custom multiprocessing pool. Must be ordered for Chained Strategies
|
||||
# May fix this to cpus if Chaining/Composition if it remains inconsistent
|
||||
results = pool.imap(self._mp_worker, custom_ta, self.cores)
|
||||
|
||||
else:
|
||||
if verbose:
|
||||
print(f"[i] Multiprocessing: {self.cores} of {cpu_count()} cores.")
|
||||
default_ta = [(ind, tuple(), kwargs) for ind in ta]
|
||||
# All and Categorical multiprocessing pool. Speed over Order.
|
||||
results = pool.imap_unordered(self._mp_worker, default_ta, self.cores)
|
||||
|
||||
@@ -75,7 +75,9 @@ def linreg(close, length=None, offset=None, **kwargs):
|
||||
linreg.__doc__ = \
|
||||
"""Linear Regression Moving Average (linreg)
|
||||
|
||||
Linear Regression Moving Average
|
||||
Linear Regression Moving Average (LINREG). This is a simplified version of a
|
||||
Standard Linear Regression. LINREG is a rolling regression of one variable. A
|
||||
Standard Linear Regression is between two or more variables.
|
||||
|
||||
Source: TA Lib
|
||||
|
||||
|
||||
+66
-18
@@ -1,7 +1,13 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import math
|
||||
import sys
|
||||
|
||||
from datetime import datetime
|
||||
from functools import reduce
|
||||
# from importlib.util import find_spec
|
||||
from operator import mul
|
||||
from pathlib import Path
|
||||
from sys import float_info as sflt
|
||||
from time import perf_counter
|
||||
|
||||
from numpy import argmax, argmin, dot, ones, triu
|
||||
@@ -9,27 +15,17 @@ from numpy import append as npAppend
|
||||
from numpy import array as npArray
|
||||
from numpy import ndarray as npNdArray
|
||||
from numpy import sum as npSum
|
||||
|
||||
# from numpy import std as npStd
|
||||
from numpy import sqrt as npSqrt
|
||||
from numpy import corrcoef as npCorrcoef
|
||||
from numpy import seterr
|
||||
from pandas import DataFrame, Series
|
||||
from pandas.api.types import is_datetime64_any_dtype
|
||||
|
||||
from functools import reduce
|
||||
from operator import mul
|
||||
from sys import float_info as sflt
|
||||
|
||||
TRADING_DAYS_PER_YEAR = 252 # Keep even
|
||||
TRADING_HOURS_PER_DAY = 6.5
|
||||
MINUTES_PER_HOUR = 60
|
||||
from pandas_ta import Imports, EXCHANGE_TZ, RATE
|
||||
|
||||
|
||||
# https://www.worldtimezone.com/markets24.php
|
||||
EXCHANGE_TZ = {
|
||||
"NZSX": 12, "ASX": 11,
|
||||
"TSE": 9, "HKE": 8, "SSE": 8, "SGX": 8,
|
||||
"NSE": 5.5, "DIFX": 4, "RTS": 3,
|
||||
"JSE": 2, "FWB": 1, "LSE": 1,
|
||||
"BMF": -2, "NYSE": -4, "TSX": -4
|
||||
}
|
||||
seterr(divide="ignore", invalid="ignore")
|
||||
|
||||
|
||||
def _above_below(
|
||||
@@ -318,6 +314,59 @@ def get_time(exchange: str = "NYSE", to_string:bool = False) -> (None, str):
|
||||
return s if to_string else print(s)
|
||||
|
||||
|
||||
def _linear_regression_np(x: Series, y: Series) -> dict:
|
||||
"""Simple Linear Regression in Numpy for two 1d arrays for environments
|
||||
without the sklearn package."""
|
||||
m = x.size
|
||||
x_sum = x.sum()
|
||||
y_sum = y.sum()
|
||||
|
||||
# 1st row, 2nd col value corr(x, y)
|
||||
r = npCorrcoef(x, y)[0,1]
|
||||
|
||||
r_mixture = m * (x * y).sum() - x_sum * y_sum
|
||||
b = r_mixture / (m * (x * x).sum() - x_sum * x_sum)
|
||||
a = y.mean() - b * x.mean()
|
||||
line = a + b * x
|
||||
|
||||
return {
|
||||
"a": a, "b": b, "r": r,
|
||||
"t": r / npSqrt((1 - r * r) / (m - 2)),
|
||||
"line": line
|
||||
}
|
||||
|
||||
def _linear_regression_sklearn(x, y):
|
||||
"""Simple Linear Regression in Scikit Learn for two 1d arrays for
|
||||
environments with the sklearn package."""
|
||||
from sklearn.linear_model import LinearRegression
|
||||
|
||||
regression = LinearRegression().fit(DataFrame(x), y=y)
|
||||
r = regression.score(DataFrame(x), y=y)
|
||||
|
||||
a, b = regression.intercept_, regression.coef_[0]
|
||||
|
||||
return {
|
||||
"a": a, "b": b, "r": r,
|
||||
"t": r / npSqrt((1 - r * r) / (x.size - 2)),
|
||||
"line": a + b * x
|
||||
}
|
||||
|
||||
def linear_regression(x: Series, y: Series) -> dict:
|
||||
"""Classic Linear Regression in Numpy or Scikit-Learn"""
|
||||
x = verify_series(x)
|
||||
y = verify_series(y)
|
||||
|
||||
m, n = x.size, y.size
|
||||
if m != n:
|
||||
print(f"[X] Linear Regression X and y observations do not match: {m} != {n}")
|
||||
return
|
||||
|
||||
if Imports["sklearn"]:
|
||||
return _linear_regression_sklearn(x, y)
|
||||
else:
|
||||
return _linear_regression_np(x, y)
|
||||
|
||||
|
||||
def is_percent(x: int or float) -> bool:
|
||||
if isinstance(x, (int, float)):
|
||||
return x is not None and x >= 0 and x <= 100
|
||||
@@ -325,8 +374,7 @@ def is_percent(x: int or float) -> bool:
|
||||
|
||||
|
||||
def non_zero_range(high: Series, low: Series) -> Series:
|
||||
"""Returns the difference of two series and adds epsilon to any zero values. This occurs commonly in crypto data when
|
||||
high = low.
|
||||
"""Returns the difference of two series and adds epsilon to any zero values. This occurs commonly in crypto data when 'high' = 'low'.
|
||||
"""
|
||||
diff = high - low
|
||||
if diff.eq(0).any().any():
|
||||
|
||||
+31
-6
@@ -99,9 +99,9 @@ class TestStrategyMethods(TestCase):
|
||||
]
|
||||
|
||||
custom = pandas_ta.Strategy(
|
||||
"Momo, Bands and SMAs and Cumulative Log Returns", # name
|
||||
"Commons with Cumulative Log Return EMA Chain", # name
|
||||
momo_bands_sma_ta, # ta
|
||||
"MACD and RSI Momo with BBANDS and SMAs 50 & 200 and Cumulative Log Returns" # description
|
||||
"Common indicators with specific lengths and a chained indicator" # description
|
||||
)
|
||||
self.data.ta.strategy(custom, verbose=verbose, timed=strategy_timed)
|
||||
|
||||
@@ -110,15 +110,40 @@ class TestStrategyMethods(TestCase):
|
||||
self.category = "Custom B"
|
||||
|
||||
custom_args_ta = [
|
||||
{"kind":"fisher", "params": (13, 7)},
|
||||
{"kind":"macd", "params": (9, 19, 7), "col_numbers": (1,)},
|
||||
{"kind":"ema", "params": (5,)},
|
||||
{"kind":"linreg", "close": "EMA_5", "length": 8, "suffix": "EMA_5"}
|
||||
{"kind":"fisher", "params": (13, 7)},
|
||||
]
|
||||
|
||||
custom = pandas_ta.Strategy(
|
||||
"Custom Args Tuple", custom_args_ta,
|
||||
"Allow for easy filling in indicator arguments without naming them"
|
||||
"Allow for easy filling in indicator arguments by argument placement."
|
||||
)
|
||||
self.data.ta.strategy(custom, verbose=verbose, timed=strategy_timed)
|
||||
|
||||
def test_custom_col_names_tuple(self):
|
||||
self.category = "Custom C"
|
||||
|
||||
custom_args_ta = [
|
||||
{"kind":"bbands", "col_names": ("LB", "MB", "UB")}
|
||||
]
|
||||
|
||||
custom = pandas_ta.Strategy(
|
||||
"Custom Col Numbers Tuple", custom_args_ta,
|
||||
"Allow for easy renaming of resultant columns"
|
||||
)
|
||||
self.data.ta.strategy(custom, verbose=verbose, timed=strategy_timed)
|
||||
|
||||
# @skip
|
||||
def test_custom_col_numbers_tuple(self):
|
||||
self.category = "Custom D"
|
||||
|
||||
custom_args_ta = [
|
||||
{"kind":"macd", "col_numbers": (1,)}
|
||||
]
|
||||
|
||||
custom = pandas_ta.Strategy(
|
||||
"Custom Col Numbers Tuple", custom_args_ta,
|
||||
"Allow for easy selection of resultant columns"
|
||||
)
|
||||
self.data.ta.strategy(custom, verbose=verbose, timed=strategy_timed)
|
||||
|
||||
|
||||
@@ -161,6 +161,19 @@ class TestUtilities(TestCase):
|
||||
self.assertEqual(self.utils.EXCHANGE_TZ["NYSE"], -4)
|
||||
self.assertIsInstance(result, str)
|
||||
|
||||
def test_linear_regression(self):
|
||||
x = Series([1, 2, 3, 4, 5])
|
||||
y = Series([1.8, 2.1, 2.7, 3.2, 4])
|
||||
# r = {"a": 1.1099999999999985, "b": 0.5500000000000006}
|
||||
|
||||
result = self.utils.linear_regression(x, y)
|
||||
self.assertIsInstance(result, dict)
|
||||
self.assertIsInstance(result["a"], float)
|
||||
self.assertIsInstance(result["b"], float)
|
||||
self.assertIsInstance(result["r"], float)
|
||||
self.assertIsInstance(result["t"], float)
|
||||
self.assertIsInstance(result["line"], Series)
|
||||
|
||||
def test_pascals_triangle(self):
|
||||
self.assertIsNone(self.utils.pascals_triangle(inverse=True), None)
|
||||
|
||||
|
||||
Reference in new issue
Block a user