Time-series forecasting (Exponential Smoothing) with Darts Integration (#1851)

* Working exponential with bugs

* utilizing business datatime + fillers

* working figures

* expo with more functionality

* historical forcasting feat.

* numeric values for forcasted days

* print pretty predictions

* formatting

* code cleanup

* doc strings fix

* more docs

* quick fix

* refactoring

* poetry updates

* typo

* test script update

* update requirements.txt

* refactoring and Hugo website

* Update _index.md

* reverting poetry and requirements for now.

* minor mod and removal of space

* Update readme for forecasting

* removal of old TF version

* reqs and poetry

* linting

* merge main.yml from main

* supress warnings due to lib version change

* reverting main.yml

* retrying expo on main.yml

* fixing fundamentalanalysis version

* update poetry fundamentalanalysis

* type casting arg parse

* seasonal period default update

* update en.yml

Co-authored-by: didierlopes.eth <dro.lopes@campus.fct.unl.pt>
Co-authored-by: James Maslek <jmaslek11@gmail.com>
This commit is contained in:
martinb-bb
2022-05-24 17:33:56 -04:00
committed by GitHub
parent 707fd8f506
commit 5f8eb43620
16 changed files with 687 additions and 14 deletions

1
i18n/en.yml vendored
View File

@@ -486,6 +486,7 @@ en:
stocks/pred/lstm: Long-Short Term Memory
stocks/pred/conv1d: 1D Convolutional Neural Network
stocks/pred/mc: Monte-Carlo simulations
stocks/pred/expo: Probabilistic Exponential Smoothing
crypto/load: load a specific cryptocurrency for analysis
crypto/find: find coins
crypto/_coin: Coin

View File

@@ -186,17 +186,41 @@ Several features in this project utilize Machine Learning. Machine Learning Pyth
To enable the `prediction` menu install additional dependencies after installing main dependencies:
- On M1 mac
- On Intel mac
```bash
conda install -c conda-forge tensorflow==2.7.0
conda install -c conda-forge -c pytorch u8darts-torch
poetry install -E prediction
```
- On M1 mac (make sure you are using miniconda3 or miniforge3)
```bash
brew install cmake
brew install gcc
conda install -c apple tensorflow-deps
conda install -c apple tensorflow-deps==2.8.0
python -m pip install tensorflow-metal
conda update pip
conda update -c defaults numpy
export GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1
export GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1
wget https://raw.githubusercontent.com/Homebrew/homebrew-core/fb8323f2b170bd4ae97e1bac9bf3e2983af3fdb0/Formula/libomp.rb
brew unlink libomp
brew install libomp.rb
pip3 install -r requirements.txt
conda install -c conda-forge tensorflow==2.8.0
conda install -c conda-forge -c pytorch u8darts-torch
python3 -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"
```
- On all other systems
```bash
poetry install -E prediction
conda install -c conda-forge -c pytorch u8darts-torch
```
If you are having trouble with Poetry (e.g. on a Windows system), simply install requirements.txt with pip

View File

@@ -43,7 +43,7 @@ def display_exponential_smoothing(
n_predict: int,
trend: str = "N",
seasonal: str = "N",
seasonal_periods: int = 5,
seasonal_periods: int = 7,
s_end_date: str = "",
export: str = "",
time_res: str = "",

View File

@@ -0,0 +1,137 @@
"""Probabilistic Exponential Smoothing Model"""
__docformat__ = "numpy"
import logging
from typing import Any, Tuple, Union
import numpy as np
import pandas as pd
from darts import TimeSeries
from darts.models import ExponentialSmoothing
from darts.dataprocessing.transformers import MissingValuesFiller
from darts.utils.utils import ModelMode, SeasonalityMode
from darts.metrics import mape
from openbb_terminal.decorators import log_start_end
from openbb_terminal.rich_config import console
TRENDS = ["N", "A", "M"]
SEASONS = ["N", "A", "M"]
PERIODS = [4, 5, 7]
DAMPEN = ["T", "F"]
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def get_expo_data(
data: Union[pd.Series, pd.DataFrame],
trend: str = "A",
seasonal: str = "A",
seasonal_periods: int = 7,
dampen: str = "F",
n_predict: int = 30,
start_window: float = 0.65,
forecast_horizon: int = 3,
) -> Tuple[Any, Any, Any, Any, Any]:
"""Performs Probabilistic Exponential Smoothing forecasting
This is a wrapper around statsmodels Holt-Winters' Exponential Smoothing;
we refer to this link for the original and more complete documentation of the parameters.
https://unit8co.github.io/darts/generated_api/darts.models.forecasting.exponential_smoothing.html?highlight=exponential
Parameters
----------
data : Union[pd.Series, np.ndarray]
Input data.
trend: str
Trend component. One of [N, A, M]
Defaults to ADDITIVE.
seasonal: str
Seasonal component. One of [N, A, M]
Defaults to ADDITIVE.
seasonal_periods: int
Number of seasonal periods in a year (7 for daily data)
If not set, inferred from frequency of the series.
dampen: str
Dampen the function
n_predict: int
Number of days to forecast
start_window: float
Size of sliding window from start of timeseries and onwards
forecast_horizon: int
Number of days to forecast when backtesting and retraining historical
Returns
-------
List[float]
Adjusted Data series
List[float]
List of predicted values
Any
Fit Prob. Expo model object.
"""
filler = MissingValuesFiller()
data["date"] = data.index # add temp column since we need to use index col for date
ticker_series = TimeSeries.from_dataframe(
data,
time_col="date",
value_cols=["AdjClose"],
freq="B",
fill_missing_dates=True,
)
ticker_series = filler.transform(ticker_series)
ticker_series = ticker_series.astype(np.float32)
_, val = ticker_series.split_before(0.85)
if trend == "M":
trend = ModelMode.MULTIPLICATIVE
elif trend == "N":
trend = ModelMode.NONE
else: # Default
trend = ModelMode.ADDITIVE
if seasonal == "M":
seasonal = SeasonalityMode.MULTIPLICATIVE
elif seasonal == "N":
seasonal = SeasonalityMode.NONE
else: # Default
seasonal = SeasonalityMode.ADDITIVE
damped = True
if dampen == "F":
damped = False
# Model Init
model_es = ExponentialSmoothing(
trend=trend,
seasonal=seasonal,
seasonal_periods=int(seasonal_periods),
damped=damped,
random_state=42,
)
# Training model based on historical backtesting
historical_fcast_es = model_es.historical_forecasts(
ticker_series,
start=float(start_window),
forecast_horizon=int(forecast_horizon),
verbose=True,
)
# Show forecast over validation # and then +n_predict afterwards sampled 10 times per point
probabilistic_forecast = model_es.predict(int(n_predict), num_samples=500)
precision = mape(val, probabilistic_forecast) # mape = mean average precision error
console.print(f"model {model_es} obtains MAPE: {precision:.2f}% \n") # TODO
return (
ticker_series,
historical_fcast_es,
probabilistic_forecast,
precision,
model_es,
)

View File

@@ -0,0 +1,118 @@
"""Probabilistic Exponential Smoothing View"""
__docformat__ = "numpy"
import logging
import os
from typing import Union
import matplotlib.pyplot as plt
import pandas as pd
from openbb_terminal.config_terminal import theme
from openbb_terminal.common.prediction_techniques import expo_model
from openbb_terminal.config_plot import PLOT_DPI
from openbb_terminal.decorators import log_start_end
from openbb_terminal.helper_funcs import (
export_data,
plot_autoscale,
)
from openbb_terminal.rich_config import console
from openbb_terminal.common.prediction_techniques.pred_helper import (
print_pretty_prediction,
)
logger = logging.getLogger(__name__)
# pylint: disable=too-many-arguments
@log_start_end(log=logger)
def display_expo_forecast(
data: Union[pd.DataFrame, pd.Series],
ticker_name: str,
trend: str,
seasonal: str,
seasonal_periods: int,
dampen: str,
n_predict: int,
start_window: float,
forecast_horizon: int,
export: str = "",
):
"""Display Probabilistic Exponential Smoothing forecast
Parameters
----------
data : Union[pd.Series, np.array]
Data to forecast
trend: str
Trend component. One of [N, A, M]
Defaults to ADDITIVE.
seasonal: str
Seasonal component. One of [N, A, M]
Defaults to ADDITIVE.
seasonal_periods: int
Number of seasonal periods in a year
If not set, inferred from frequency of the series.
dampen: str
Dampen the function
n_predict: int
Number of days to forecast
start_window: float
Size of sliding window from start of timeseries and onwards
forecast_horizon: int
Number of days to forecast when backtesting and retraining historical
export: str
Format to export data
external_axes : Optional[List[plt.Axes]], optional
External axes (2 axis is expected in the list), by default None
"""
(
ticker_series,
historical_fcast_es,
predicted_values,
precision,
_,
) = expo_model.get_expo_data(
data,
trend,
seasonal,
seasonal_periods,
dampen,
n_predict,
start_window,
forecast_horizon,
)
# Plotting with Matplotlib
external_axes = None
if not external_axes:
fig, ax = plt.subplots(figsize=plot_autoscale(), dpi=PLOT_DPI)
else:
if len(external_axes) != 1:
logger.error("Expected list of one axis item.")
console.print("[red]Expected list of one axis item.\n[/red]")
return
ax = external_axes
# ax = fig.get_axes()[0] # fig gives list of axes (only one for this case)
ticker_series.plot(label="Actual AdjClose", figure=fig)
historical_fcast_es.plot(
label="Back-test 3-Days ahead forecast (Exp. Smoothing)", figure=fig
)
predicted_values.plot(
label="Probabilistic Forecast", low_quantile=0.1, high_quantile=0.9, figure=fig
)
ax.set_title(
f"PES for ${ticker_name} for next [{n_predict}] days (Model MAPE={round(precision,2)}%)"
)
ax.set_ylabel("Adj. Closing")
ax.set_xlabel("Date")
theme.style_primary_axis(ax)
if not external_axes:
theme.visualize_output()
numeric_forecast = predicted_values.quantile_df()["AdjClose_0.5"].tail(n_predict)
print_pretty_prediction(numeric_forecast, data["AdjClose"].iloc[-1])
export_data(export, os.path.dirname(os.path.abspath(__file__)), "expo")

View File

@@ -557,7 +557,6 @@ def lambda_price_prediction_color(val: float, last_val: float) -> str:
def print_pretty_prediction(df_pred: pd.DataFrame, last_price: float):
"""Print predictions"""
console.print("")
if rich_config.USE_COLOR:
df_pred = pd.DataFrame(df_pred)
df_pred.columns = ["pred"]

View File

@@ -35,5 +35,9 @@ from openbb_terminal.common.prediction_techniques.mc_view import (
display_mc_forecast as mc,
)
from openbb_terminal.common.prediction_techniques.expo_view import (
display_expo_forecast as expo,
)
# Models
models = _models(os.path.abspath(os.path.dirname(prediction_techniques.__file__)))

View File

@@ -22,6 +22,8 @@ from openbb_terminal.common.prediction_techniques import (
neural_networks_view,
pred_helper,
regression_view,
expo_view,
expo_model,
)
from openbb_terminal.decorators import log_start_end
from openbb_terminal.helper_funcs import (
@@ -54,6 +56,7 @@ class PredictionTechniquesController(BaseController):
"lstm",
"conv1d",
"mc",
"expo",
]
PATH = "/stocks/pred/"
@@ -90,6 +93,10 @@ class PredictionTechniquesController(BaseController):
choices["ets"]["-s"] = {c: {} for c in ets_model.SEASONS}
choices["arima"]["-i"] = {c: {} for c in arima_model.ICS}
choices["mc"]["--dist"] = {c: {} for c in mc_model.DISTRIBUTIONS}
choices["expo"]["-t"] = {c: {} for c in expo_model.TRENDS}
choices["expo"]["-s"] = {c: {} for c in expo_model.SEASONS}
choices["expo"]["-p"] = {c: {} for c in expo_model.PERIODS}
choices["expo"]["-dp"] = {c: {} for c in expo_model.DAMPEN}
self.completer = NestedCompleter.from_nested_dict(choices)
def print_help(self):
@@ -119,6 +126,7 @@ class PredictionTechniquesController(BaseController):
mt.add_cmd("lstm")
mt.add_cmd("conv1d")
mt.add_cmd("mc")
mt.add_cmd("expo")
console.print(text=mt.menu_text, menu="Stocks - Prediction Techniques")
def custom_reset(self):
@@ -713,3 +721,99 @@ class PredictionTechniquesController(BaseController):
use_log=ns_parser.dist == "lognormal",
export=ns_parser.export,
)
@log_start_end(log=logger)
def call_expo(self, other_args: List[str]):
"""Process expo command"""
parser = argparse.ArgumentParser(
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
add_help=False,
prog="expo",
description="""
Perform Probabilistic Exponential Smoothing forecast
Trend: N: None, A: Additive, M: Multiplicative
Seasonality: N: None, A: Additive, M: Multiplicative
Dampen: T: True, F: False
""",
)
parser.add_argument(
"-n",
"--n_days",
action="store",
dest="n_days",
type=check_positive,
default=5,
help="prediction days.",
)
parser.add_argument(
"-t",
"--trend",
action="store",
dest="trend",
choices=expo_model.TRENDS,
default="A",
help="Trend: N: None, A: Additive, M: Multiplicative.",
)
parser.add_argument(
"-s",
"--seasonal",
action="store",
dest="seasonal",
choices=expo_model.SEASONS,
default="A",
help="Seasonality: N: None, A: Additive, M: Multiplicative.",
)
parser.add_argument(
"-p",
"--periods",
action="store",
dest="seasonal_periods",
type=check_positive,
default=7,
help="Seasonal periods: 4: Quarterly, 7: Daily",
)
parser.add_argument(
"-d",
"--dampen",
action="store",
dest="dampen",
default="F",
help="Dampening",
)
parser.add_argument(
"-w",
"--window",
action="store",
dest="start_window",
default=0.65,
help="Start point for rolling training and forecast window. 0.0-1.0",
)
parser.add_argument(
"-f",
"--forecasthorizon",
action="store",
dest="forecast_horizon",
default=3,
help="Days/Points to forecast when training and performing historical back-testing",
)
ns_parser = parse_known_args_and_warn(
parser, other_args, export_allowed=EXPORT_ONLY_FIGURES_ALLOWED
)
if ns_parser:
if self.target != "AdjClose":
console.print("Expo Prediction designed for AdjClose prices\n")
expo_view.display_expo_forecast(
data=self.stock,
ticker_name=self.ticker,
n_predict=ns_parser.n_days,
trend=ns_parser.trend,
seasonal=ns_parser.seasonal,
seasonal_periods=ns_parser.seasonal_periods,
dampen=ns_parser.dampen,
start_window=ns_parser.start_window,
forecast_horizon=ns_parser.forecast_horizon,
export=ns_parser.export,
)

View File

@@ -5,6 +5,7 @@ import logging
import os
from datetime import datetime, timedelta, date
from typing import List, Union, Optional, Iterable
import warnings
import financedatabase as fd
import matplotlib.pyplot as plt
@@ -1064,6 +1065,7 @@ def additional_info_about_ticker(ticker: str) -> str:
extra_info += "\n[param]Currency: [/param]USD"
extra_info += "\n[param]Market: [/param]"
calendar = mcal.get_calendar("NYSE")
warnings.filterwarnings("ignore")
sch = calendar.schedule(
start_date=(datetime.now() - timedelta(days=3)).strftime("%Y-%m-%d"),
end_date=(datetime.now() + timedelta(days=3)).strftime("%Y-%m-%d"),

233
poetry.lock generated vendored
View File

@@ -1768,6 +1768,22 @@ category = "main"
optional = true
python-versions = "*"
[[package]]
name = "lightgbm"
version = "3.3.2"
description = "LightGBM Python Package"
category = "main"
optional = false
python-versions = "*"
[package.dependencies]
numpy = "*"
scikit-learn = "!=0.22.0"
scipy = "*"
[package.extras]
dask = ["dask[array] (>=2.0.0)", "dask[dataframe] (>=2.0.0)", "dask[distributed] (>=2.0.0)", "pandas"]
[[package]]
name = "linearmodels"
version = "4.26"
@@ -1789,6 +1805,14 @@ scipy = ">=1.2"
setuptools-scm = ">=6.4.2,<7.0.0"
statsmodels = ">=0.11"
[[package]]
name = "llvmlite"
version = "0.38.1"
description = "lightweight wrapper around basic LLVM functionality"
category = "main"
optional = false
python-versions = ">=3.7,<3.11"
[[package]]
name = "lxml"
version = "4.8.0"
@@ -2132,6 +2156,19 @@ doc = ["sphinx (>=4.5)", "pydata-sphinx-theme (>=0.8.1)", "sphinx-gallery (>=0.1
extra = ["lxml (>=4.6)", "pygraphviz (>=1.9)", "pydot (>=1.4.2)", "sympy (>=1.10)"]
test = ["pytest (>=7.1)", "pytest-cov (>=3.0)", "codecov (>=2.1)"]
[[package]]
name = "nfoursid"
version = "1.0.0"
description = "Implementation of N4SID, Kalman filtering and state-space models"
category = "main"
optional = false
python-versions = ">=3.7"
[package.dependencies]
matplotlib = ">=3.3"
numpy = ">=1.19"
pandas = ">=1.1"
[[package]]
name = "nodeenv"
version = "1.6.0"
@@ -2184,6 +2221,18 @@ jupyter-server = ">=1.8,<2.0"
[package.extras]
test = ["pytest", "pytest-tornasync", "pytest-console-scripts"]
[[package]]
name = "numba"
version = "0.55.1"
description = "compiling Python code using LLVM"
category = "main"
optional = false
python-versions = ">=3.7,<3.11"
[package.dependencies]
llvmlite = ">=0.38.0rc1,<0.39"
numpy = ">=1.18,<1.22"
[[package]]
name = "numpy"
version = "1.21.2"
@@ -3830,6 +3879,24 @@ anyio = ">=3.0.0,<4"
[package.extras]
full = ["itsdangerous", "jinja2", "python-multipart", "pyyaml", "requests"]
[[package]]
name = "statsforecast"
version = "0.5.5"
description = "Time series forecasting suite using statistical models"
category = "main"
optional = false
python-versions = ">=3.6"
[package.dependencies]
numba = "*"
numpy = "*"
pandas = "*"
scipy = "*"
statsmodels = "*"
[package.extras]
ray = ["ray"]
[[package]]
name = "statsmodels"
version = "0.13.2"
@@ -4083,6 +4150,17 @@ category = "main"
optional = false
python-versions = ">=3.5"
[[package]]
name = "torch"
version = "1.11.0"
description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration"
category = "main"
optional = false
python-versions = ">=3.7.0"
[package.dependencies]
typing-extensions = "*"
[[package]]
name = "tornado"
version = "6.1"
@@ -4264,6 +4342,37 @@ tzdata = {version = "*", markers = "platform_system == \"Windows\""}
devenv = ["black", "pyroma", "pytest-cov", "zest.releaser"]
test = ["pytest-mock (>=3.3)", "pytest (>=4.3)"]
[[package]]
name = "u8darts"
version = "0.19.0"
description = "A python library for easy manipulation and forecasting of time series."
category = "main"
optional = false
python-versions = ">=3.7"
[package.dependencies]
holidays = ">=0.11.1"
ipython = ">=7.0.0"
joblib = ">=0.16.0"
lightgbm = ">=2.2.3"
matplotlib = ">=3.3.0"
nfoursid = ">=1.0.0"
numpy = ">=1.19.0"
pandas = ">=1.0.5"
requests = ">=2.22.0"
scikit-learn = ">=1.0.1"
scipy = ">=1.3.2"
statsforecast = ">=0.5.2"
statsmodels = ">=0.13.0"
tqdm = ">=4.60.0"
xarray = ">=0.17.0"
[package.extras]
all = ["holidays (>=0.11.1)", "ipython (>=7.0.0)", "joblib (>=0.16.0)", "lightgbm (>=2.2.3)", "matplotlib (>=3.3.0)", "nfoursid (>=1.0.0)", "numpy (>=1.19.0)", "pandas (>=1.0.5)", "requests (>=2.22.0)", "scikit-learn (>=1.0.1)", "scipy (>=1.3.2)", "statsforecast (>=0.5.2)", "statsmodels (>=0.13.0)", "tqdm (>=4.60.0)", "xarray (>=0.17.0)", "pmdarima (>=1.8.0)", "tbats (>=1.1.0)", "pytorch-lightning (>=1.5.0)", "torch (>=1.8.0)", "prophet (>=1.0.0)", "pystan (>=2.19.1.1,<3.0.0.0)"]
pmdarima = ["pmdarima (>=1.8.0)", "tbats (>=1.1.0)"]
prophet = ["prophet (>=1.0.0)", "pystan (>=2.19.1.1,<3.0.0.0)"]
torch = ["pytorch-lightning (>=1.5.0)", "torch (>=1.8.0)"]
[[package]]
name = "ujson"
version = "5.2.0"
@@ -4507,6 +4616,27 @@ python-versions = ">=3.7.0"
[package.dependencies]
h11 = ">=0.9.0,<1"
[[package]]
name = "xarray"
version = "2022.3.0"
description = "N-D labeled arrays and datasets in Python"
category = "main"
optional = false
python-versions = ">=3.8"
[package.dependencies]
numpy = ">=1.18"
packaging = ">=20.0"
pandas = ">=1.1"
[package.extras]
accel = ["scipy", "bottleneck", "numbagg"]
complete = ["netcdf4", "h5netcdf", "scipy", "pydap", "zarr", "fsspec", "cftime", "rasterio", "cfgrib", "pooch", "bottleneck", "numbagg", "dask", "matplotlib", "seaborn", "nc-time-axis"]
docs = ["netcdf4", "h5netcdf", "scipy", "pydap", "zarr", "fsspec", "cftime", "rasterio", "cfgrib", "pooch", "bottleneck", "numbagg", "dask", "matplotlib", "seaborn", "nc-time-axis", "sphinx-autosummary-accessors", "sphinx-rtd-theme", "ipython", "ipykernel", "jupyter-client", "nbsphinx", "scanpydoc"]
io = ["netcdf4", "h5netcdf", "scipy", "pydap", "zarr", "fsspec", "cftime", "rasterio", "cfgrib", "pooch"]
parallel = ["dask"]
viz = ["matplotlib", "seaborn", "nc-time-axis"]
[[package]]
name = "xlsxwriter"
version = "3.0.3"
@@ -4576,7 +4706,7 @@ prediction = ["tensorflow"]
[metadata]
lock-version = "1.1"
python-versions = "^3.8,<3.10"
content-hash = "00f97c4c48a0181981e02ef5002d7f4f97ee8d81c02d4b6ede9918dc29b849fd"
content-hash = "160f2dde26257f63f0eb4335e1d31aa95e24070fac8afd8f50cef3986cb6e52f"
[metadata.files]
absl-py = [
@@ -5702,6 +5832,13 @@ libclang = [
{file = "libclang-11.1.0-py2.py3-none-manylinux2014_aarch64.whl", hash = "sha256:39d07c8965a3c963fb2686496339b6dbacf42acbd32e4bc7361373a45e98cebe"},
{file = "libclang-11.1.0-py2.py3-none-win_amd64.whl", hash = "sha256:8cb0082a30b9e1e615d7f4211b0c428b607a9bd1e43ddc6c0cabdd9ea5b244bf"},
]
lightgbm = [
{file = "lightgbm-3.3.2-py3-none-macosx_10_14_x86_64.macosx_10_15_x86_64.macosx_11_0_x86_64.whl", hash = "sha256:2e94bd1b3ab29d173102c9c1d80db2e27ad7e43b8ff5a74c5cb7984b37d19f45"},
{file = "lightgbm-3.3.2-py3-none-manylinux1_x86_64.whl", hash = "sha256:f4cba3b4f29336ad7e801cb32d9b948ea4cc5300dda650b78bcdfe36b3e2c4b2"},
{file = "lightgbm-3.3.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8e788c56853316fc5d35db726d81bd002c721038c856853952287f68082e0158"},
{file = "lightgbm-3.3.2-py3-none-win_amd64.whl", hash = "sha256:e4f1529cad416066964f9af0efad208787861e9f2181b7f9ee7fc9bacc082d4f"},
{file = "lightgbm-3.3.2.tar.gz", hash = "sha256:5d25d16e77c844c297ece2044df57651139bc3c8ad8c4108916374267ac68b64"},
]
linearmodels = [
{file = "linearmodels-4.26-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9511653d58a213ad611680b826e7dcdfc03131b5db722390aa9fb50b0395b3af"},
{file = "linearmodels-4.26-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:52ac13bfa5765155a03f3bbc9bd68f8f9991ed58a75a53951a8767df87906b2c"},
@@ -5722,6 +5859,36 @@ linearmodels = [
{file = "linearmodels-4.26-cp39-cp39-win_amd64.whl", hash = "sha256:2a00b73dabde87949bc221c5f080371ada62604976fa119381d542cbf6bb83ee"},
{file = "linearmodels-4.26.tar.gz", hash = "sha256:687194fc9a51d9119c32a94b5a1061dfc13398eac3d25e086bd06f80d8fda76b"},
]
llvmlite = [
{file = "llvmlite-0.38.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a7dd2bd1d6406e7789273e3f8a304ed5d9adcfaa5768052fca7dc233a857be98"},
{file = "llvmlite-0.38.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a5e0ed215a576f0f872f47a70b8cb49864e0aefc8586aff5ce83e3bff47bc23"},
{file = "llvmlite-0.38.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:633c9026eb43b9903cc4ffbc1c7d5293b2e3ad95d06fa9eab0f6ce6ff6ea15b3"},
{file = "llvmlite-0.38.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b98da8436dbc29013ea301f1fdb0d596ab53bf0ab65c976d96d00bb6faa0b479"},
{file = "llvmlite-0.38.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0adce1793d66d009c554809f27baeb6258bf13f6fbaa12eff7443500caec25"},
{file = "llvmlite-0.38.1-cp310-cp310-win32.whl", hash = "sha256:8c64c90a8b0b7b7e1ed1912ba82c1a3f43cf25affbe06aa3c56c84050edee8ac"},
{file = "llvmlite-0.38.1-cp310-cp310-win_amd64.whl", hash = "sha256:ab070266f0f51304789a6c20d4be91a9e69683ad9bd4861eb89980e8eb613b3a"},
{file = "llvmlite-0.38.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ed7528b8b85de930b76407e44b080e4f376b7a007c2879749599ff8e2fe32753"},
{file = "llvmlite-0.38.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7db018da2863034ad9c73c946625637f3a89635bc70576068bab4bd085eea90d"},
{file = "llvmlite-0.38.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c1e5805c92e049b4956ed01204c6647de6160ab9aefb0d67ea83ca02a1d889a"},
{file = "llvmlite-0.38.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5559e46c79b4017c3c25edc3b9512d11adc3689b9046120c685b0905c08d48a5"},
{file = "llvmlite-0.38.1-cp37-cp37m-win32.whl", hash = "sha256:ef9aa574eff2e15f8c47b255da0db5dab326dc7f76384c307ae35490e2d2489a"},
{file = "llvmlite-0.38.1-cp37-cp37m-win_amd64.whl", hash = "sha256:84d5a0163c172db2b2ae561d2fc0866fbd9f716cf13f92c0d41ca4338e682672"},
{file = "llvmlite-0.38.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a263252a68d85450110ec1f2b406c0414e49b04a4d216d31c0515ea1d59c3882"},
{file = "llvmlite-0.38.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:de8bd61480173930f2a029673e7cd0738fbbb5171dfe490340839ad7301d4cf0"},
{file = "llvmlite-0.38.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fbfbe546394c39db39a6898a51972aa131c8d6b0628517728b350552f58bdc19"},
{file = "llvmlite-0.38.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c4f26c6c370e134a909ac555a671fa1376e74c69af0208f25c0979472577a9d"},
{file = "llvmlite-0.38.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f95f455697c44d7c04ef95fdfce04629f48df08a832d0a0d9eb2363186dbb969"},
{file = "llvmlite-0.38.1-cp38-cp38-win32.whl", hash = "sha256:41e638a71c85a9a4a33f279c4cd812bc2f84122505b1f6ab8984ec7debb8548b"},
{file = "llvmlite-0.38.1-cp38-cp38-win_amd64.whl", hash = "sha256:5c07d63df4578f31b39b764d3b4291f70157af7f42e171a8884ae7aaf989d1f7"},
{file = "llvmlite-0.38.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4e11bd9929dcbd55d5eb5cd7b08bf71b0097ea48cc192b69d102a90dd6e9816f"},
{file = "llvmlite-0.38.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:edfa2c761cfa56cf76e783290d82e117f829bb691d8d90aa375505204888abac"},
{file = "llvmlite-0.38.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e609f7312a439b53b6f622d99180c3ff6a3e1e4ceca4d18aca1c5b46f4e3664"},
{file = "llvmlite-0.38.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9f53c3448410cc84d0e1af84dbc0d60ad32779853d40bcc8b1ee3c67ebbe94b1"},
{file = "llvmlite-0.38.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c8fac4edbadefa4dddf5dc6cca76bc2ae81df211dcd16a6638d60cc41249e56"},
{file = "llvmlite-0.38.1-cp39-cp39-win32.whl", hash = "sha256:3d76c0fa42390bef56979ed213fbf0150c3fef36f5ea68d3d780d5d725da8c01"},
{file = "llvmlite-0.38.1-cp39-cp39-win_amd64.whl", hash = "sha256:66462d768c30d5f648ca3361d657b434efa8b09f6cf04d6b6eae66e62e993644"},
{file = "llvmlite-0.38.1.tar.gz", hash = "sha256:0622a86301fcf81cc50d7ed5b4bebe992c030580d413a8443b328ed4f4d82561"},
]
lxml = [
{file = "lxml-4.8.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:e1ab2fac607842ac36864e358c42feb0960ae62c34aa4caaf12ada0a1fb5d99b"},
{file = "lxml-4.8.0-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28d1af847786f68bec57961f31221125c29d6f52d9187c01cd34dc14e2b29430"},
@@ -6026,6 +6193,10 @@ networkx = [
{file = "networkx-2.8-py3-none-any.whl", hash = "sha256:1a1e8fe052cc1b4e0339b998f6795099562a264a13a5af7a32cad45ab9d4e126"},
{file = "networkx-2.8.tar.gz", hash = "sha256:4a52cf66aed221955420e11b3e2e05ca44196b4829aab9576d4d439212b0a14f"},
]
nfoursid = [
{file = "nfoursid-1.0.0-py3-none-any.whl", hash = "sha256:5714b25a978b4505b818ec79e1e69aa3c41664f4687e176ae49ae125771eabf0"},
{file = "nfoursid-1.0.0.tar.gz", hash = "sha256:9dc20edeaf0203ebbff9ef6ccad6ff125d9ab73d6c1ab48934fdb24b37f5f097"},
]
nodeenv = [
{file = "nodeenv-1.6.0-py2.py3-none-any.whl", hash = "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7"},
{file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"},
@@ -6038,6 +6209,33 @@ notebook-shim = [
{file = "notebook_shim-0.1.0-py3-none-any.whl", hash = "sha256:02432d55a01139ac16e2100888aa2b56c614720cec73a27e71f40a5387e45324"},
{file = "notebook_shim-0.1.0.tar.gz", hash = "sha256:7897e47a36d92248925a2143e3596f19c60597708f7bef50d81fcd31d7263e85"},
]
numba = [
{file = "numba-0.55.1-1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:be56fb78303973e6c19c7c2759996a5863bac69ca87570543d9f18f2f287a441"},
{file = "numba-0.55.1-1-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ee71407be9cba09b4f68afa668317e97d66d5f83c37ab4caa20d8abcf5fad32b"},
{file = "numba-0.55.1-1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:39a109efc317e8eb786feff0a29476036971ce08e3280be8153c3b6c1ccba415"},
{file = "numba-0.55.1-1-cp37-cp37m-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0dc8294b2b6b2dbe3a709787bbb1e6f9dcef62197429de8daaa714d77052eefe"},
{file = "numba-0.55.1-1-cp37-cp37m-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:bcd5e09dba5e19ff7a1b9716a1ce58f0931cec09515683011e57415c6a33ac3d"},
{file = "numba-0.55.1-1-cp37-cp37m-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:64209d71b1e33415d5b1b177ed218d679062f844667dd279ee9094c4e3e2babc"},
{file = "numba-0.55.1-1-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff5ed5c7665f8a5405af53332d224caca68358909abde9ca8dfef3495cdea789"},
{file = "numba-0.55.1-1-cp38-cp38-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:d80afc5618e66af2d101eff0e6214acb865136ae886d8b01414ca3dedd9166d6"},
{file = "numba-0.55.1-1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6d0042371880fa56ed58be27502b11a08bff0b6335f0ebde82af1a7aef5e1287"},
{file = "numba-0.55.1-1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4a5cb8930e729aeed96809524ca4df41b6f2432b379f220014ef4fdff21dbfe6"},
{file = "numba-0.55.1-1-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:fee529ddc9c0584b932f7885735162e52344eded8c01c78c17e2768aa6787780"},
{file = "numba-0.55.1-1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:230e542649c7087454bc851d2e22b5e15694b6cf0549a27234d1baea6c2e0a87"},
{file = "numba-0.55.1-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:adc88fe64f5235c8b1e7230ae29476a08ffb61a65e9f79f745bd357f215e2d52"},
{file = "numba-0.55.1-cp310-cp310-win32.whl", hash = "sha256:a5af7f1d30f56029d1b9ea288372f924f9dcb322f0e6358f6d5203b20eb6f7a0"},
{file = "numba-0.55.1-cp310-cp310-win_amd64.whl", hash = "sha256:71815c501b2f6309c432e98ff93a582a9bfb61da943e0cb9a52595fadbb1131d"},
{file = "numba-0.55.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:53909143917ea4962cfbfae7038ac882987ff54cb2c408538ce71f83b356f106"},
{file = "numba-0.55.1-cp37-cp37m-win32.whl", hash = "sha256:cddc13939e2b27782258826686800ae9c2e90b35c36ef1ab5ccfae7cedca0516"},
{file = "numba-0.55.1-cp37-cp37m-win_amd64.whl", hash = "sha256:ac6ae19ff5093a42bf8b365550322a2e39650d608daa379dff71571272d88d93"},
{file = "numba-0.55.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:77187ed09e6b25ae24b840e1acc4b5f9886b551cdc5f919ddad8e5933a6027d5"},
{file = "numba-0.55.1-cp38-cp38-win32.whl", hash = "sha256:53ee562b873e00eaa26390690ac5d36b706782d429e5a18b255161f607f13c17"},
{file = "numba-0.55.1-cp38-cp38-win_amd64.whl", hash = "sha256:02fb0ecd218ab1e1171cbaee11235a3a1f7dcf79dee3fa786243a2a6411f2fea"},
{file = "numba-0.55.1-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:6aa8f18a003a0e4876826fe080e6038fc6da083899873b77172ec29c32e49b56"},
{file = "numba-0.55.1-cp39-cp39-win32.whl", hash = "sha256:d5ee721ce884f8313802295633fdd3e7c83541e0917bafea2bdfed6aabab93bf"},
{file = "numba-0.55.1-cp39-cp39-win_amd64.whl", hash = "sha256:b72350160eb9a73a36aa17d808f954353a263a0295d495497c87439d79bdaec7"},
{file = "numba-0.55.1.tar.gz", hash = "sha256:03e9069a2666d1c84f93b00dbd716fb8fedde8bb2c6efafa2f04842a46442ea3"},
]
numpy = [
{file = "numpy-1.21.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52a664323273c08f3b473548bf87c8145b7513afd63e4ebba8496ecd3853df13"},
{file = "numpy-1.21.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a7b9db0a2941434cd930dacaafe0fc9da8f3d6157f9d12f761bbde93f46218"},
@@ -7212,6 +7410,10 @@ starlette = [
{file = "starlette-0.17.1-py3-none-any.whl", hash = "sha256:26a18cbda5e6b651c964c12c88b36d9898481cd428ed6e063f5f29c418f73050"},
{file = "starlette-0.17.1.tar.gz", hash = "sha256:57eab3cc975a28af62f6faec94d355a410634940f10b30d68d31cb5ec1b44ae8"},
]
statsforecast = [
{file = "statsforecast-0.5.5-py3-none-any.whl", hash = "sha256:f04affa6fcae9d9fae0be74f19bef043c18d80483060971c72975c9bfcdbd63d"},
{file = "statsforecast-0.5.5.tar.gz", hash = "sha256:6a81ae36568f12aa64f862bdff5518da43e1a1fc14ced9b5d6917259fa9a362f"},
]
statsmodels = [
{file = "statsmodels-0.13.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3e7ca5b7e678c0bb7a24f5c735d58ac104a50eb61b17c484cce0e221a095560f"},
{file = "statsmodels-0.13.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:066a75d5585378b2df972f81a90b9a3da5e567b7d4833300c1597438c1a35e29"},
@@ -7338,6 +7540,27 @@ toolz = [
{file = "toolz-0.11.2-py3-none-any.whl", hash = "sha256:a5700ce83414c64514d82d60bcda8aabfde092d1c1a8663f9200c07fdcc6da8f"},
{file = "toolz-0.11.2.tar.gz", hash = "sha256:6b312d5e15138552f1bda8a4e66c30e236c831b612b2bf0005f8a1df10a4bc33"},
]
torch = [
{file = "torch-1.11.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:62052b50fffc29ca7afc0c04ef8206b6f1ca9d10629cb543077e12967e8d0398"},
{file = "torch-1.11.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:866bfba29ac98dec35d893d8e17eaec149d0ac7a53be7baae5c98069897db667"},
{file = "torch-1.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:951640fb8db308a59d9b510e7d1ad910aff92913323bbe4bc75435347ddd346d"},
{file = "torch-1.11.0-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:5d77b5ece78fdafa5c7f42995ff9474399d22571cd6b2de21a5d666306a2ff8c"},
{file = "torch-1.11.0-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:b5a38682769b544c875ecc34bcb81fbad5c922139b61319aacffcfd8a32f528c"},
{file = "torch-1.11.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:f82d77695a60626f2b7382d85bc566de8a6b3e50d32080755abc040db802e419"},
{file = "torch-1.11.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b96654d42566080a134e784705f33f8536b3b95b5dcde357ed7879b1692a5f78"},
{file = "torch-1.11.0-cp37-cp37m-win_amd64.whl", hash = "sha256:8ee7c2e8d7f7020d5bfbc1bb91b9591044c26bbd0cee5e4f694cfd7ed8649260"},
{file = "torch-1.11.0-cp37-none-macosx_10_9_x86_64.whl", hash = "sha256:6860b1d1bf0bb0b67a6bd47f85a0e4c825b518eea13b5d6101999dbbcbd5bc0c"},
{file = "torch-1.11.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:4322aa29f50da7f404db06cdf30896ea67b09f673af4a985afc7162bc897864d"},
{file = "torch-1.11.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:e4d2e0ddd652f30e94cff750220324ec45705d4ecc69658f773b3cb1c7a28dd0"},
{file = "torch-1.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:34ce5ea4d8d85da32cdbadb50d4585106901e9f8a3527991daa70c13a09de1f7"},
{file = "torch-1.11.0-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:0ccc85cd06227a3edf809e2c795fd5762c3d4e8a38b5c9f744c6e7cf841361bb"},
{file = "torch-1.11.0-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:c1554e49d74f1b2c3e7202d77056ba2dd7465437585bac64062b580f714a44e9"},
{file = "torch-1.11.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:58c7814502b1c129a650d7092033bbb0bbd64faf1a7941631aaa1aeaddc37570"},
{file = "torch-1.11.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:831cf588f01dda9409e75576741d2823453990dee2983d670f2584b37a01adf7"},
{file = "torch-1.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:44a1d02fd20f827f0f36dc26fdcfc45e793806a6ad52769a22260655a77a4369"},
{file = "torch-1.11.0-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:50fd9bf85c578c871c28f1cb0ace9dfc6024401c7f399b174fb0f370899f4454"},
{file = "torch-1.11.0-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:0e48af66ad755f0f9c5f2664028a414f57c49d6adc37e77e06fe0004da4edb61"},
]
tornado = [
{file = "tornado-6.1-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:d371e811d6b156d82aa5f9a4e08b58debf97c302a35714f6f45e35139c332e32"},
{file = "tornado-6.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:0d321a39c36e5f2c4ff12b4ed58d41390460f798422c4504e09eb5678e09998c"},
@@ -7445,6 +7668,10 @@ tzlocal = [
{file = "tzlocal-4.2-py3-none-any.whl", hash = "sha256:89885494684c929d9191c57aa27502afc87a579be5cdd3225c77c463ea043745"},
{file = "tzlocal-4.2.tar.gz", hash = "sha256:ee5842fa3a795f023514ac2d801c4a81d1743bbe642e3940143326b3a00addd7"},
]
u8darts = [
{file = "u8darts-0.19.0-py3-none-any.whl", hash = "sha256:8b9073afa0bf36ec4036ca176fbe5426772475455e6cba46be1f63cb2197f953"},
{file = "u8darts-0.19.0.tar.gz", hash = "sha256:9cb55ab1ed8d634d93348ae046beadea4bdd12f2b2e49f1d1829841994d200ca"},
]
ujson = [
{file = "ujson-5.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:754e9da96a24535ae5ab2a52e1d1dfc65a6a717c14063855b83f327fdf2173ea"},
{file = "ujson-5.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6227597d0201ceadc902d1a8edaffaeb244050b197368ed25e6f6be0df170a6f"},
@@ -7680,6 +7907,10 @@ wsproto = [
{file = "wsproto-1.1.0-py3-none-any.whl", hash = "sha256:2218cb57952d90b9fca325c0dcfb08c3bda93e8fd8070b0a17f048e2e47a521b"},
{file = "wsproto-1.1.0.tar.gz", hash = "sha256:a2e56bfd5c7cd83c1369d83b5feccd6d37798b74872866e62616e0ecf111bda8"},
]
xarray = [
{file = "xarray-2022.3.0-py3-none-any.whl", hash = "sha256:560f36eaabe7a989d5583d37ec753dd737357aa6a6453e55c80bb4f92291a69e"},
{file = "xarray-2022.3.0.tar.gz", hash = "sha256:398344bf7d170477aaceff70210e11ebd69af6b156fe13978054d25c48729440"},
]
xlsxwriter = [
{file = "XlsxWriter-3.0.3-py3-none-any.whl", hash = "sha256:df0aefe5137478d206847eccf9f114715e42aaea077e6a48d0e8a2152e983010"},
{file = "XlsxWriter-3.0.3.tar.gz", hash = "sha256:e89f4a1d2fa2c9ea15cde77de95cd3fd8b0345d0efb3964623f395c8c4988b7f"},

6
pyproject.toml vendored
View File

@@ -14,6 +14,7 @@ openbb = 'terminal:terminal'
[tool.poetry.dependencies]
python = "^3.8,<3.10"
iso8601 = "^0.1.14"
FundamentalAnalysis = "^0.2.6"
requests = "^2.25.1"
alpha-vantage = "^2.3.1"
finviz = "^1.3.4"
@@ -102,7 +103,10 @@ Jinja2 = "3.0.3" # Remove pinned version when Voila supports 3.1
click = "8.0.1" # Remove pinned version when Black supports 8.1
kaleido = {version = "<=0.2.1", optional = true, extras = ["bots"]}
Riskfolio-Lib = "^3.1.1"
fundamentalanalysis = "^0.2.14"
llvmlite = {version = "^0.38.1", extras = ["prediction"]}
torch = {version = "^1.11.0", extras = ["prediction"]}
u8darts = {extras = ["prediction"], version = "^0.19.0"}
fundamentalanalysis = {version = "^0.2.14", extras = ["prediction"]}
[tool.poetry.dev-dependencies]

16
requirements-full.txt vendored
View File

@@ -36,7 +36,7 @@ cfgv==3.3.1; python_full_version >= "3.6.1" and python_version >= "3.7"
charset-normalizer==2.0.12; python_full_version >= "3.7.1" and python_version >= "3.8" and python_version < "4.0" and python_full_version < "4.0.0" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7") and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
click==8.0.1; python_version >= "3.6"
codespell==2.1.0; python_version >= "3.5"
colorama==0.4.4; python_full_version >= "3.6.2" and python_full_version < "4.0.0" and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5") and platform_system == "Windows" and python_version >= "3.8" and (python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.5.0") and sys_platform == "win32" and (python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.7" and python_full_version >= "3.5.0") and (python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or python_full_version >= "3.5.0" and platform_system == "Windows" and python_version >= "3.6") and (python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.5.0")
colorama==0.4.4; python_full_version >= "3.6.2" and python_full_version < "4.0.0" and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5") and platform_system == "Windows" and python_version >= "3.8" and (python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.5.0") and sys_platform == "win32" and (python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.7" and python_full_version >= "3.5.0") and (python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.5.0")
commonmark==0.9.1; python_full_version >= "3.6.2" and python_full_version < "4.0.0"
convertdate==2.4.0; python_version >= "3.7" and python_version < "4"
coverage==6.3.2; python_version >= "3.7"
@@ -88,7 +88,7 @@ google-pasta==0.2.0
grpcio==1.45.0; python_full_version >= "3.7.1" and python_full_version < "4.0.0" and python_version >= "3.6"
h11==0.13.0; python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.7.0"
h5py==3.6.0; python_version >= "3.7"
hijri-converter==2.2.3; python_version >= "3.6"
hijri-converter==2.2.3; python_version >= "3.7"
holidays==0.11.3.1; python_version >= "3.6"
identify==2.4.12; python_version >= "3.7"
idna==3.3; python_full_version >= "3.7.1" and python_version >= "3.8" and python_version < "4" and python_full_version < "4.0.0" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7") and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
@@ -125,7 +125,9 @@ kiwisolver==1.4.2; python_version >= "3.7"
korean-lunar-calendar==0.2.1; python_version >= "3.7" and python_full_version >= "3.7.0"
lazy-object-proxy==1.7.1; python_version >= "3.6" and python_full_version >= "3.6.2"
libclang==11.1.0
lightgbm==3.3.2; python_version >= "3.7"
linearmodels==4.26; python_version >= "3.8"
llvmlite==0.38.1; python_version >= "3.7" and python_version < "3.11"
lxml==4.8.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7"
markdown-it-py==1.1.0; python_version >= "3.6" and python_version < "4.0"
markdown==3.3.6; python_version >= "3.6"
@@ -149,9 +151,11 @@ nbconvert==6.5.0; python_version >= "3.7"
nbformat==5.3.0; python_full_version >= "3.7.0" and python_version >= "3.7"
nest-asyncio==1.5.5; python_full_version >= "3.7.0" and python_version >= "3.7"
networkx==2.8; python_version >= "3.8"
nfoursid==1.0.0; python_version >= "3.7"
nodeenv==1.6.0; python_version >= "3.7"
notebook-shim==0.1.0; python_version >= "3.7"
notebook==6.4.11; python_version >= "3.7"
numba==0.55.1; python_version >= "3.7" and python_version < "3.11"
numpy==1.21.2; python_version >= "3.7" and python_version < "3.11"
oandapyv20==0.6.3
oauthlib==3.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
@@ -270,6 +274,7 @@ sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.6"
squarify==0.4.3
sseclient==0.0.27
stack-data==0.2.0; python_full_version >= "3.6.2" and python_version >= "3.8"
statsforecast==0.5.5; python_version >= "3.7"
statsmodels==0.13.2; python_version >= "3.7"
stevedore==3.5.0; python_version >= "3.7"
tabulate==0.8.9; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
@@ -291,8 +296,9 @@ tokenize-rt==4.2.1; python_full_version >= "3.6.2" and python_version >= "3.7"
toml==0.10.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.7"
tomli==2.0.1; python_version >= "3.8" and python_full_version >= "3.6.2" and python_version < "3.11"
toolz==0.11.2; python_version >= "3.7" and python_full_version >= "3.7.0"
torch==1.11.0; python_full_version >= "3.7.0"
tornado==6.1; python_full_version >= "3.7.0" and python_version >= "3.7"
tqdm==4.64.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
tqdm==4.64.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
tradingview-ta==3.2.10; python_version >= "3.6"
traitlets==5.1.1; python_full_version >= "3.7.0" and python_version >= "3.8"
trio-websocket==0.9.2; python_version >= "3.7" and python_version < "4.0"
@@ -304,9 +310,10 @@ types-requests==2.27.20
types-setuptools==57.4.14
types-six==1.16.15
types-urllib3==1.26.13
typing-extensions==4.2.0; python_version < "3.10" and python_full_version >= "3.6.2" and python_version >= "3.7"
typing-extensions==4.2.0; python_version < "3.10" and python_full_version >= "3.7.0" and python_version >= "3.7"
tzdata==2022.1; platform_system == "Windows" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
tzlocal==4.2; python_version >= "3.6"
u8darts==0.19.0; python_version >= "3.7"
ujson==5.2.0; python_version >= "3.7"
unidecode==1.3.4; python_version >= "3.7"
update-checker==0.18.0; python_version >= "3.6" and python_version < "4.0"
@@ -325,6 +332,7 @@ werkzeug==2.1.1; python_version >= "3.7"
widgetsnbextension==3.6.0
wrapt==1.14.0; python_full_version >= "3.7.1" and python_full_version < "4.0.0" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0") and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5") and python_version >= "3.8"
wsproto==1.1.0; python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.7.0"
xarray==2022.3.0; python_version >= "3.8"
xlsxwriter==3.0.3; python_version >= "3.7"
yarl==1.7.2; python_version >= "3.6"
yfinance==0.1.70

16
requirements.txt vendored
View File

@@ -27,7 +27,7 @@ certifi==2021.10.8; python_full_version >= "3.7.1" and python_version < "4" and
cffi==1.15.0; python_version >= "3.7"
charset-normalizer==2.0.12; python_full_version >= "3.7.1" and python_version >= "3.8" and python_version < "4.0" and python_full_version < "4.0.0" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7")
click==8.0.1; python_version >= "3.6"
colorama==0.4.4; python_full_version >= "3.6.2" and python_full_version < "4.0.0" and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5") and platform_system == "Windows" and python_version >= "3.8" and (python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or python_full_version >= "3.5.0" and platform_system == "Windows" and python_version >= "3.6") and sys_platform == "win32"
colorama==0.4.4; python_full_version >= "3.6.2" and python_full_version < "4.0.0" and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5") and platform_system == "Windows" and python_version >= "3.8" and (python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or python_full_version >= "3.5.0" and platform_system == "Windows" and python_version >= "3.7") and sys_platform == "win32"
commonmark==0.9.1; python_full_version >= "3.6.2" and python_full_version < "4.0.0"
convertdate==2.4.0; python_version >= "3.7" and python_version < "4"
cryptography==36.0.2; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.7"
@@ -67,7 +67,7 @@ gitdb==4.0.9; python_version >= "3.7"
gitpython==3.1.27; python_version >= "3.7"
grpcio==1.45.0; python_full_version >= "3.7.1" and python_full_version < "4.0.0" and python_version >= "3.6"
h11==0.13.0; python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.7.0"
hijri-converter==2.2.3; python_version >= "3.6"
hijri-converter==2.2.3; python_version >= "3.7"
holidays==0.11.3.1; python_version >= "3.6"
idna==3.3; python_full_version >= "3.7.1" and python_version >= "3.8" and python_version < "4" and python_full_version < "4.0.0" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7")
importlib-metadata==4.11.3; python_version < "3.10" and python_version >= "3.7"
@@ -96,7 +96,9 @@ jupyterlab-widgets==1.1.0; python_version >= "3.6"
jupyterlab==3.3.4; python_version >= "3.7"
kiwisolver==1.4.2; python_version >= "3.7"
korean-lunar-calendar==0.2.1; python_version >= "3.7" and python_full_version >= "3.7.0"
lightgbm==3.3.2; python_version >= "3.7"
linearmodels==4.26; python_version >= "3.8"
llvmlite==0.38.1; python_version >= "3.7" and python_version < "3.11"
lxml==4.8.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7"
markupsafe==2.1.1; python_version >= "3.7"
matplotlib-inline==0.1.3; python_full_version >= "3.6.2" and python_version >= "3.8"
@@ -114,8 +116,10 @@ nbconvert==6.5.0; python_version >= "3.7"
nbformat==5.3.0; python_full_version >= "3.7.0" and python_version >= "3.7"
nest-asyncio==1.5.5; python_full_version >= "3.7.0" and python_version >= "3.7"
networkx==2.8; python_version >= "3.8"
nfoursid==1.0.0; python_version >= "3.7"
notebook-shim==0.1.0; python_version >= "3.7"
notebook==6.4.11; python_version >= "3.7"
numba==0.55.1; python_version >= "3.7" and python_version < "3.11"
numpy==1.21.2; python_version >= "3.7" and python_version < "3.11"
oandapyv20==0.6.3
oauthlib==3.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
@@ -211,6 +215,7 @@ soupsieve==2.3.2.post1; python_version >= "3.6" and python_full_version >= "3.6.
squarify==0.4.3
sseclient==0.0.27
stack-data==0.2.0; python_full_version >= "3.6.2" and python_version >= "3.8"
statsforecast==0.5.5; python_version >= "3.7"
statsmodels==0.13.2; python_version >= "3.7"
tabulate==0.8.9; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
temporal-cache==0.1.4
@@ -222,15 +227,17 @@ threadpoolctl==3.1.0; python_version >= "3.7" and python_full_version < "3.0.0"
tinycss2==1.1.1; python_version >= "3.7"
tomli==2.0.1; python_version >= "3.8" and python_full_version >= "3.6.2"
toolz==0.11.2; python_version >= "3.7" and python_full_version >= "3.7.0"
torch==1.11.0; python_full_version >= "3.7.0"
tornado==6.1; python_full_version >= "3.7.0" and python_version >= "3.7"
tqdm==4.64.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
tqdm==4.64.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
tradingview-ta==3.2.10; python_version >= "3.6"
traitlets==5.1.1; python_full_version >= "3.7.0" and python_version >= "3.8"
trio-websocket==0.9.2; python_version >= "3.7" and python_version < "4.0"
trio==0.20.0; python_version >= "3.7" and python_version < "4.0"
typing-extensions==4.2.0; python_version < "3.10" and python_full_version >= "3.6.2" and python_version >= "3.7"
typing-extensions==4.2.0; python_version < "3.10" and python_full_version >= "3.7.0" and python_version >= "3.7"
tzdata==2022.1; platform_system == "Windows" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
tzlocal==4.2; python_version >= "3.6"
u8darts==0.19.0; python_version >= "3.7"
ujson==5.2.0; python_version >= "3.7"
unidecode==1.3.4; python_version >= "3.7"
update-checker==0.18.0; python_version >= "3.6" and python_version < "4.0"
@@ -246,6 +253,7 @@ websockets==10.3; python_version >= "3.7"
widgetsnbextension==3.6.0
wrapt==1.14.0; python_full_version >= "3.7.1" and python_full_version < "4.0.0" and python_version >= "3.8"
wsproto==1.1.0; python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.7.0"
xarray==2022.3.0; python_version >= "3.8"
xlsxwriter==3.0.3; python_version >= "3.7"
yarl==1.7.2; python_version >= "3.6"
yfinance==0.1.70

View File

@@ -11,4 +11,5 @@ rnn
lstm
conv1d
mc
expo
exit

View File

@@ -0,0 +1,30 @@
```
usage: ets [-n N_DAYS] [-t TREND] [-s SEASONAL] [-p SEASONAL_PERIODS] [-e S_END_DATE] [-d DAMPED][-w START_WINDOW][-f FORECAST_HORIZON][-h]
```
Performs Probabalistic Exponential Smoothing forecasting. This is a wrapper around statsmodels Holt-Winters' Exponential Smoothing;
https://unit8co.github.io/darts/generated_api/darts.models.forecasting.exponential_smoothing.html
```
optional arguments:
-n N_DAYS, --n_days N_DAYS
prediction days. (default: 5)
-t {N,A,M}, --trend {N,A,M}
Trend: N: None, A: Additive, M: Multiplicative. (default: A)
-s {N,A,M}, --seasonal {N,A,M}
Seasonality: N: None, A: Additive, M: Multiplicative. (default: A)
-p SEASONAL_PERIODS, --periods SEASONAL_PERIODS
Seasonal periods: 4: Quarters, 5: Business Days, 7: Weekly (default: 5)
-d DAMPED, --damped DAMPED
Dampening (default: F)
-w START_WINDOW, --window START_WINDOW
Start point for rolling training and forecast window. 0.0-1.0 (default: 0.65)
-f FORECAST_HORIZON, --forecasthorizon FORECAST_HORIZON
Days/Points to forecast when training and performing historical back-testing
(default: 3)
-h, --help show this help message (default: False)
--export EXPORT Export figure into png, jpg, pdf, svg (default: )
```
![EXPO](https://user-images.githubusercontent.com/105685594/169634909-30864d44-e607-4e6f-8d59-ac49dafa2e2c.png)

View File

@@ -660,6 +660,8 @@ main:
ref: "/terminal/common/prediction_techniques/conv1d"
- name: mc
ref: "/terminal/common/prediction_techniques/mc"
- name: expo
ref: "/terminal/common/prediction_techniques/expo"
- name: Cryptocurrency
ref: "/terminal/cryptocurrency"
sub:
@@ -1654,4 +1656,4 @@ main:
- name: "Slack"
ref: "/bots/slack"
- name: "GroupMe"
ref: "/bots/groupme"
ref: "/bots/groupme"