From d7bb5a9456250114da83172e5d49beb242df5eed Mon Sep 17 00:00:00 2001 From: DidierRLopes Date: Wed, 23 Jun 2021 20:56:10 +0100 Subject: [PATCH] Add Fear And Greed Index command to Economy menu (#509) * Add CNN feargreed to economy menu * Update README.md * Update README.md * Update ROADMAP.md * Update README.md --- README.md | 52 ++-- ROADMAP.md | 1 + gamestonk_terminal/README.md | 1 + gamestonk_terminal/economy/README.md | 15 + gamestonk_terminal/economy/cnn_view.py | 105 +++++++ gamestonk_terminal/economy/econ_controller.py | 7 + .../technical_analysis/ta_controller.py | 1 - poetry.lock | 260 +++++++++++++++++- pyproject.toml | 1 + requirements-full.txt | 29 +- requirements.txt | 29 +- terminal.py | 8 +- 12 files changed, 463 insertions(+), 46 deletions(-) create mode 100644 gamestonk_terminal/economy/cnn_view.py diff --git a/README.md b/README.md index f889deba103..97957d9f839 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,8 @@ [![Bugs Open][bugs-open-shield]][bugs-open-url] [![Bugs Closed][bugs-closed-shield]][bugs-closed-url] -[![Build Status](https://github.com/DidierRLopes/GamestonkTerminal/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/DidierRLopes/GamestonkTerminal/actions) -[![GitHub release](https://img.shields.io/github/release/DidierRLopes/GamestonkTerminal.svg?maxAge=3600)](https://github.com/DidierRLopes/GamestonkTerminal/releases) +[![Build Status](https://github.com/GamestonkTerminal/GamestonkTerminal/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/GamestonkTerminal/GamestonkTerminal/actions) +[![GitHub release](https://img.shields.io/github/release/GamestonkTerminal/GamestonkTerminal.svg?maxAge=3600)](https://github.com/GamestonkTerminal/GamestonkTerminal/releases) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) ![Discord Shield](https://discordapp.com/api/guilds/831165782750789672/widget.png?style=shield) @@ -25,7 +25,7 @@

- + Logo @@ -34,16 +34,16 @@

The next best thing after Bloomberg Terminal. #weliketheterminal
- ≪ ROADMAP + ≪ ROADMAP   ·   - FEATURES » + FEATURES »

- Report Bug + Report Bug · - Suggest Improvement + Suggest Improvement · - Request Feature + Request Feature

@@ -167,7 +167,7 @@ After you've installed Gamestonk Terminal, you'll find a file named "Gamestonk T **NOTE:** When you close the terminal and re-open it, the only command you need to re-call is `conda activate gst` before you call `python terminal.py` again. -**TROUBLESHOOT:** If you are having troubles to install, check our *newest* troubleshoot page +**TROUBLESHOOT:** If you are having troubles to install, check our *newest* troubleshoot page ### Advanced User Install - Machine Learning @@ -333,9 +333,9 @@ Recommended if you bought the dip, and the share price keeps dipping. You may as Recommended if you adopted a strategy of buying high and selling low. -We are interested in your view on what sort of [features](https://github.com/DidierRLopes/GamestonkTerminal/issues) would make you buy even higher and selling even lower. +We are interested in your view on what sort of [features](https://github.com/GamestonkTerminal/GamestonkTerminal/issues) would make you buy even higher and selling even lower. -Also, if somehow you're sitting in several mils due to this terminal, don't forget to report a [bug](https://github.com/DidierRLopes/GamestonkTerminal/issues) so that the team can fix, and keep the old ways. +Also, if somehow you're sitting in several mils due to this terminal, don't forget to report a [bug](https://github.com/GamestonkTerminal/GamestonkTerminal/issues) so that the team can fix, and keep the old ways. **Join the 🙌 💎 Gang** @@ -347,7 +347,7 @@ Welcome to the club, and feel free to support the developers behind this amazing ## License -Distributed under the MIT License. See [LICENSE](https://github.com/DidierRLopes/GamestonkTerminal/blob/main/LICENSE) for more information. +Distributed under the MIT License. See [LICENSE](https://github.com/GamestonkTerminal/GamestonkTerminal/blob/main/LICENSE) for more information. ## Disclaimer @@ -394,19 +394,19 @@ cclauss, shadycuz, lolrenx, buzzCraft, clothespin, arcutright, jperkins12, nodes -[contributors-shield]: https://img.shields.io/github/contributors/DidierRLopes/GamestonkTerminal.svg?style=for-the-badge -[contributors-url]: https://github.com/DidierRLopes/GamestonkTerminal/graphs/contributors -[forks-shield]: https://img.shields.io/github/forks/DidierRLopes/GamestonkTerminal.svg?style=for-the-badge -[forks-url]: https://github.com/DidierRLopes/GamestonkTerminal/network/members -[stars-shield]: https://img.shields.io/github/stars/DidierRLopes/GamestonkTerminal.svg?style=for-the-badge -[stars-url]: https://github.com/DidierRLopes/GamestonkTerminal/stargazers -[issues-shield]: https://img.shields.io/github/issues/DidierRLopes/GamestonkTerminal.svg?style=for-the-badge&color=blue -[issues-url]: https://github.com/DidierRLopes/GamestonkTerminal/issues -[bugs-open-shield]: https://img.shields.io/github/issues/DidierRLopes/GamestonkTerminal/type%3Abug.svg?style=for-the-badge&color=yellow -[bugs-open-url]: https://github.com/DidierRLopes/GamestonkTerminal/issues?q=is%3Aissue+label%3Atype%3Abug+is%3Aopen -[bugs-closed-shield]: https://img.shields.io/github/issues-closed/DidierRLopes/GamestonkTerminal/type%3Abug.svg?style=for-the-badge&color=success -[bugs-closed-url]: https://github.com/DidierRLopes/GamestonkTerminal/issues?q=is%3Aissue+label%3Atype%3Abug+is%3Aclosed -[license-shield]: https://img.shields.io/github/license/DidierRLopes/GamestonkTerminal.svg?style=for-the-badge -[license-url]: https://github.com/DidierRLopes/GamestonkTerminal/blob/master/LICENSE.txt +[contributors-shield]: https://img.shields.io/github/contributors/GamestonkTerminal/GamestonkTerminal.svg?style=for-the-badge +[contributors-url]: https://github.com/GamestonkTerminal/GamestonkTerminal/graphs/contributors +[forks-shield]: https://img.shields.io/github/forks/GamestonkTerminal/GamestonkTerminal.svg?style=for-the-badge +[forks-url]: https://github.com/GamestonkTerminal/GamestonkTerminal/network/members +[stars-shield]: https://img.shields.io/github/stars/GamestonkTerminal/GamestonkTerminal.svg?style=for-the-badge +[stars-url]: https://github.com/GamestonkTerminal/GamestonkTerminal/stargazers +[issues-shield]: https://img.shields.io/github/issues/GamestonkTerminal/GamestonkTerminal.svg?style=for-the-badge&color=blue +[issues-url]: https://github.com/GamestonkTerminal/GamestonkTerminal/issues +[bugs-open-shield]: https://img.shields.io/github/issues/GamestonkTerminal/GamestonkTerminal/type%3Abug.svg?style=for-the-badge&color=yellow +[bugs-open-url]: https://github.com/GamestonkTerminal/GamestonkTerminal/issues?q=is%3Aissue+label%3Atype%3Abug+is%3Aopen +[bugs-closed-shield]: https://img.shields.io/github/issues-closed/GamestonkTerminal/GamestonkTerminal/type%3Abug.svg?style=for-the-badge&color=success +[bugs-closed-url]: https://github.com/GamestonkTerminal/GamestonkTerminal/issues?q=is%3Aissue+label%3Atype%3Abug+is%3Aclosed +[license-shield]: https://img.shields.io/github/license/GamestonkTerminal/GamestonkTerminal.svg?style=for-the-badge +[license-url]: https://github.com/GamestonkTerminal/GamestonkTerminal/blob/master/LICENSE.txt [linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge&logo=linkedin&colorB=555 [linkedin-url]: https://linkedin.com/in/DidierRLopes diff --git a/ROADMAP.md b/ROADMAP.md index ad49e79df4f..de627278d62 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -205,6 +205,7 @@ ___ * [x] Implement Economic data (gpd, unemployment rate, ...) (@jmaslek) - [PR #167](https://github.com/DidierRLopes/GamestonkTerminal/pull/167) * [x] Refactor FRED to ECON menu and add VIX view (@jmaslek) - [PR #405](https://github.com/DidierRLopes/GamestonkTerminal/pull/405) * [x] Output economic impact events calendar (@didier) - [PR #430](https://github.com/DidierRLopes/GamestonkTerminal/pull/430) +* [x] Add CNN Fear and Greed Index (@didier) - [PR #509](https://github.com/DidierRLopes/GamestonkTerminal/pull/509) **NEXT** diff --git a/gamestonk_terminal/README.md b/gamestonk_terminal/README.md index 695524c6f9e..1d5366352f5 100644 --- a/gamestonk_terminal/README.md +++ b/gamestonk_terminal/README.md @@ -393,6 +393,7 @@ Command|Description|Source Command|Description|Source ------ | -------- | -------- +`feargreed` | CNN Fear Greed Index | `events` | economic impact events | `fred` | display customized FRED data | `vixcls` | Volatility Index | diff --git a/gamestonk_terminal/economy/README.md b/gamestonk_terminal/economy/README.md index 8bd5054abed..57a908807ee 100644 --- a/gamestonk_terminal/economy/README.md +++ b/gamestonk_terminal/economy/README.md @@ -2,6 +2,8 @@ This menu aims to assess economy data, and the usage of the following commands along with an example will be exploited below. +* [feargreed](#feargreed) + * CNN Fear Greed Index from https://money.cnn.com/data/fear-and-greed/ * [events](#events) * economic impact events [Finnhub] * [fred](#fred) @@ -30,6 +32,19 @@ This menu aims to assess economy data, and the usage of the following commands a * Canada / U.S. Foreign Exchange Rate (CAD per 1 USD) +## feargreed +```text +usage: feargreed [-i {jbd,mv,pco,mm,sps,spb,shd,index}] +``` + +Display CNN Fear And Greed Index from https://money.cnn.com/data/fear-and-greed/. +* -i : CNN Fear And Greed indicator or index. From Junk Bond Demand, Market Volatility, Put and Call Options, Market Momentum Stock Price, Strength, Stock Price Breadth, Safe Heaven Demand, and Index. Default: None, shows all. + +![feargreed](https://user-images.githubusercontent.com/25267873/122684285-7338d400-d1fc-11eb-8702-d409d96a2672.png) + +Captura de ecrã 2021-06-20, às 19 18 12 + + ## events ```text usage: events [-c {NZ,AU,ERL,CA,EU,US,JP,CN,GB,CH}] [-i {low,medium,high,all}] [-n NUM] diff --git a/gamestonk_terminal/economy/cnn_view.py b/gamestonk_terminal/economy/cnn_view.py new file mode 100644 index 00000000000..c0f122f2a9b --- /dev/null +++ b/gamestonk_terminal/economy/cnn_view.py @@ -0,0 +1,105 @@ +""" Fred View """ +__docformat__ = "numpy" + +import argparse +from typing import List +from fear_greed_index.CNNFearAndGreedIndex import CNNFearAndGreedIndex +from pandas.plotting import register_matplotlib_converters +import matplotlib.pyplot as plt +from gamestonk_terminal.helper_funcs import ( + parse_known_args_and_warn, + plot_autoscale, +) +from gamestonk_terminal.config_plot import PLOT_DPI +from gamestonk_terminal import feature_flags as gtff + +register_matplotlib_converters() + + +def fear_and_greed_index(other_args: List[str]): + """Display CNN Fear And Greed Index. + + Parameters + ---------- + other_args : List[str] + argparse other args + """ + + parser = argparse.ArgumentParser( + add_help=False, + prog="feargreed", + description=""" + Display CNN Fear And Greed Index from https://money.cnn.com/data/fear-and-greed/. + """, + ) + + parser.add_argument( + "-i", + "--indicator", + dest="indicator", + required=False, + type=str, + choices=["jbd", "mv", "pco", "mm", "sps", "spb", "shd", "index"], + help=""" + CNN Fear And Greed indicator or index. From Junk Bond Demand, Market Volatility, + Put and Call Options, Market Momentum Stock Price Strength, Stock Price Breadth, + Safe Heaven Demand, and Index. + """, + ) + + try: + if other_args: + if "-" not in other_args[0]: + other_args.insert(0, "-i") + + ns_parser = parse_known_args_and_warn(parser, other_args) + if not ns_parser: + return + + cnn_fg = CNNFearAndGreedIndex() + + fig = plt.figure(figsize=plot_autoscale(), dpi=PLOT_DPI) + + if ns_parser.indicator: + if ns_parser.indicator == "index": + print(cnn_fg.index_summary) + + im = cnn_fg.index_chart + plt.imshow(im) + + else: + d_indicator_match = { + "jbd": "Junk Bond Demand", + "mv": "Market Volatility", + "pco": "Put and Call Options", + "mm": "Market Momentum", + "sps": "Stock Price Strength", + "spb": "Stock Price Breadth", + "shd": "Safe Heaven Demand", + } + indicator_name = d_indicator_match[ns_parser.indicator] + + for indicator in cnn_fg.all_indicators: + if indicator_name == indicator.type_indicator: + print(indicator.get_report()) + im = indicator.chart + plt.imshow(im) + + else: + # print Fear and Greed complete report + print(cnn_fg.get_complete_report()) + + # plot Fear and Greed charts + cnn_fg.plot_all_charts(fig) + + if gtff.USE_ION: + plt.ion() + + plt.show() + print("") + + except SystemExit: + print("") + except Exception as e: + print(e, "\n") + return diff --git a/gamestonk_terminal/economy/econ_controller.py b/gamestonk_terminal/economy/econ_controller.py index 5fb07b6655f..ea61a8ce3a1 100644 --- a/gamestonk_terminal/economy/econ_controller.py +++ b/gamestonk_terminal/economy/econ_controller.py @@ -9,6 +9,7 @@ from gamestonk_terminal.helper_funcs import get_flair from gamestonk_terminal.menu import session from gamestonk_terminal.economy import fred_view from gamestonk_terminal.economy import finnhub_view +from gamestonk_terminal.economy import cnn_view class EconomyController: @@ -32,6 +33,7 @@ class EconomyController: "fedfunds", "aaa", "dexcaus", + "feargreed", ] def __init__(self): @@ -51,6 +53,7 @@ class EconomyController: print(" q quit this menu, and shows back to main menu") print(" quit quit to abandon program") print(" ") + print(" feargreed CNN Fear and Greed Index") print(" events economic impact events [Finnhub]") print( " fred display customized FRED data from https://fred.stlouisfed.org" @@ -149,6 +152,10 @@ class EconomyController: """Process dexcaus command""" fred_view.display_fred(other_args, "DEXCAUS") + def call_feargreed(self, other_args: List[str]): + """Process feargreed command""" + cnn_view.fear_and_greed_index(other_args) + def menu(): """Econ Menu""" diff --git a/gamestonk_terminal/technical_analysis/ta_controller.py b/gamestonk_terminal/technical_analysis/ta_controller.py index 4d071150ac0..68a1e2985a2 100644 --- a/gamestonk_terminal/technical_analysis/ta_controller.py +++ b/gamestonk_terminal/technical_analysis/ta_controller.py @@ -120,7 +120,6 @@ class TechnicalAnalysisController: True - quit the program None - continue in the menu """ - (known_args, other_args) = self.ta_parser.parse_known_args(an_input.split()) return getattr( diff --git a/poetry.lock b/poetry.lock index e5f52a91b22..53daf0de543 100644 --- a/poetry.lock +++ b/poetry.lock @@ -29,6 +29,14 @@ yarl = ">=1.0,<2.0" [package.extras] speedups = ["aiodns", "brotlipy", "cchardet"] +[[package]] +name = "alabaster" +version = "0.7.12" +description = "A configurable sidebar-enabled Sphinx theme" +category = "main" +optional = false +python-versions = "*" + [[package]] name = "alpaca-trade-api" version = "1.2.2" @@ -164,6 +172,17 @@ docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"] tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"] +[[package]] +name = "babel" +version = "2.9.1" +description = "Internationalization utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.dependencies] +pytz = ">=2015.7" + [[package]] name = "backcall" version = "0.2.0" @@ -485,6 +504,14 @@ category = "main" optional = false python-versions = ">=3.6" +[[package]] +name = "docutils" +version = "0.16" +description = "Docutils -- Python Documentation Utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + [[package]] name = "ecos" version = "2.0.7.post1" @@ -505,6 +532,24 @@ category = "main" optional = false python-versions = ">=2.7" +[[package]] +name = "fear-greed-index" +version = "0.1.3" +description = "CNN Fear and Greed Index" +category = "main" +optional = false +python-versions = ">=3.6.8,<4.0.0" + +[package.dependencies] +bs4 = ">=0.0.1,<0.0.2" +lxml = ">=4.6.3,<5.0.0" +m2r2 = ">=0.2.7,<0.3.0" +matplotlib = ">=3.3.4,<4.0.0" +Pillow = ">=8.2.0,<9.0.0" +requests = ">=2.25.1,<3.0.0" +Sphinx = ">=4.0.2,<5.0.0" +sphinx-rtd-theme = ">=0.5.2,<0.6.0" + [[package]] name = "ffn" version = "0.3.6" @@ -759,6 +804,14 @@ python-versions = "*" [package.dependencies] idna = ">=2.0" +[[package]] +name = "imagesize" +version = "1.2.0" +description = "Getting image size from png/jpeg/jpeg2000/gif file" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + [[package]] name = "importlib-metadata" version = "4.5.0" @@ -1090,6 +1143,18 @@ html5 = ["html5lib"] htmlsoup = ["beautifulsoup4"] source = ["Cython (>=0.29.7)"] +[[package]] +name = "m2r2" +version = "0.2.7" +description = "Markdown and reStructuredText in a single file." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +docutils = "*" +mistune = "*" + [[package]] name = "markdown" version = "3.3.4" @@ -2270,6 +2335,14 @@ category = "main" optional = false python-versions = ">=3.5" +[[package]] +name = "snowballstemmer" +version = "2.1.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +category = "main" +optional = false +python-versions = "*" + [[package]] name = "soupsieve" version = "2.2.1" @@ -2278,6 +2351,123 @@ category = "main" optional = false python-versions = ">=3.6" +[[package]] +name = "sphinx" +version = "4.0.2" +description = "Python documentation generator" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +alabaster = ">=0.7,<0.8" +babel = ">=1.3" +colorama = {version = ">=0.3.5", markers = "sys_platform == \"win32\""} +docutils = ">=0.14,<0.18" +imagesize = "*" +Jinja2 = ">=2.3" +packaging = "*" +Pygments = ">=2.0" +requests = ">=2.5.0" +snowballstemmer = ">=1.1" +sphinxcontrib-applehelp = "*" +sphinxcontrib-devhelp = "*" +sphinxcontrib-htmlhelp = "*" +sphinxcontrib-jsmath = "*" +sphinxcontrib-qthelp = "*" +sphinxcontrib-serializinghtml = "*" + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["flake8 (>=3.5.0)", "isort", "mypy (>=0.800)", "docutils-stubs"] +test = ["pytest", "pytest-cov", "html5lib", "cython", "typed-ast"] + +[[package]] +name = "sphinx-rtd-theme" +version = "0.5.2" +description = "Read the Docs theme for Sphinx" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +docutils = "<0.17" +sphinx = "*" + +[package.extras] +dev = ["transifex-client", "sphinxcontrib-httpdomain", "bump2version"] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "1.0.2" +description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "1.0.2" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.0.0" +description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest", "html5lib"] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +description = "A sphinx extension which renders display math in HTML via JavaScript" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +test = ["pytest", "flake8", "mypy"] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "1.0.3" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "1.1.5" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + [[package]] name = "statsmodels" version = "0.12.2" @@ -2739,7 +2929,7 @@ prediction = ["tensorflow", "pmdarima"] [metadata] lock-version = "1.1" python-versions = "^3.6.8" -content-hash = "d4fbf7ee3900dc58867cc3486617ba8064123403cb2edf8bde5da1199d921737" +content-hash = "25a6b84904e2d1523dbd3cb88dbf551c3931d1bcc10811f8bb60cff5b9caa729" [metadata.files] absl-py = [ @@ -2785,6 +2975,10 @@ aiohttp = [ {file = "aiohttp-3.7.4.post0-cp39-cp39-win_amd64.whl", hash = "sha256:02f46fc0e3c5ac58b80d4d56eb0a7c7d97fcef69ace9326289fb9f1955e65cfe"}, {file = "aiohttp-3.7.4.post0.tar.gz", hash = "sha256:493d3299ebe5f5a7c66b9819eacdcfbbaaf1a8e84911ddffcdc48888497afecf"}, ] +alabaster = [ + {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, + {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, +] alpaca-trade-api = [ {file = "alpaca-trade-api-1.2.2.tar.gz", hash = "sha256:7f1fedacb597c549aa5dff5c6b0c39fc89e5a70ca9d499a33065d5c61c5303bf"}, {file = "alpaca_trade_api-1.2.2-py3-none-any.whl", hash = "sha256:0017bfa0a2e3a20d8300b9145030ae8cc58c27d25ff4512b0f9f417f7069f47a"}, @@ -2849,6 +3043,10 @@ attrs = [ {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"}, {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"}, ] +babel = [ + {file = "Babel-2.9.1-py2.py3-none-any.whl", hash = "sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9"}, + {file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"}, +] backcall = [ {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, @@ -3050,6 +3248,10 @@ detecta = [ {file = "detecta-0.0.5-py3-none-any.whl", hash = "sha256:dbaf1938e5d785386c904034e2553824e2aa31793e967984ca65983aca06d23e"}, {file = "detecta-0.0.5.tar.gz", hash = "sha256:d2ea7d13dfbbc994d6ce385a7f8dc0a85fe675a8a8e712a64ec56e54c40603ed"}, ] +docutils = [ + {file = "docutils-0.16-py2.py3-none-any.whl", hash = "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af"}, + {file = "docutils-0.16.tar.gz", hash = "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"}, +] ecos = [ {file = "ecos-2.0.7.post1-cp27-cp27m-macosx_10_13_x86_64.whl", hash = "sha256:dd9f01e28fe58894fb394931804884122606fb4e2a59d4514b803e9cd11b7d2b"}, {file = "ecos-2.0.7.post1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:db7433051f6072d4821ebc582e9ff853d7d631ed98770550d248eae70b29dd26"}, @@ -3078,6 +3280,10 @@ entrypoints = [ {file = "entrypoints-0.3-py2.py3-none-any.whl", hash = "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19"}, {file = "entrypoints-0.3.tar.gz", hash = "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451"}, ] +fear-greed-index = [ + {file = "fear-greed-index-0.1.3.tar.gz", hash = "sha256:5ba5286ee29b2b35147a93da353899e30abf1715decf943183399e4f057a2d87"}, + {file = "fear_greed_index-0.1.3-py3-none-any.whl", hash = "sha256:0bdccdce61a408172187254dced6e1033c6126620d4694aaccc5ce09f4001921"}, +] ffn = [ {file = "ffn-0.3.6-py2.py3-none-any.whl", hash = "sha256:1e55e8caf6b63dce2f164cc4d3b8a02b678be7ed12990cafb2006b818a9a09e7"}, {file = "ffn-0.3.6.tar.gz", hash = "sha256:4a79e72e06ff328e333ffe97010b1ce110bcd694fcd03be7351bf5065cd273e8"}, @@ -3213,6 +3419,10 @@ idna = [ idna-ssl = [ {file = "idna-ssl-1.1.0.tar.gz", hash = "sha256:a933e3bb13da54383f9e8f35dc4f9cb9eb9b3b78c6b36f311254d6d0d92c6c7c"}, ] +imagesize = [ + {file = "imagesize-1.2.0-py2.py3-none-any.whl", hash = "sha256:6965f19a6a2039c7d48bca7dba2473069ff854c36ae6f19d2cde309d998228a1"}, + {file = "imagesize-1.2.0.tar.gz", hash = "sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1"}, +] importlib-metadata = [ {file = "importlib_metadata-4.5.0-py3-none-any.whl", hash = "sha256:833b26fb89d5de469b24a390e9df088d4e52e4ba33b01dc5e0e4f41b81a16c00"}, {file = "importlib_metadata-4.5.0.tar.gz", hash = "sha256:b142cc1dd1342f31ff04bb7d022492b09920cb64fed867cd3ea6f80fe3ebd139"}, @@ -3397,6 +3607,10 @@ lxml = [ {file = "lxml-4.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:542d454665a3e277f76954418124d67516c5f88e51a900365ed54a9806122b83"}, {file = "lxml-4.6.3.tar.gz", hash = "sha256:39b78571b3b30645ac77b95f7c69d1bffc4cf8c3b157c435a34da72e78c82468"}, ] +m2r2 = [ + {file = "m2r2-0.2.7-py3-none-any.whl", hash = "sha256:a1b87b00f4d5163a3616253fca4c045f8351818cd803ba2e24af8897442a0eae"}, + {file = "m2r2-0.2.7.tar.gz", hash = "sha256:fbf72ade9f648d41658f97c5267687431612451f36b65761a138fbc276294df5"}, +] markdown = [ {file = "Markdown-3.3.4-py3-none-any.whl", hash = "sha256:96c3ba1261de2f7547b46a00ea8463832c921d3f9d6aba3f255a6f71386db20c"}, {file = "Markdown-3.3.4.tar.gz", hash = "sha256:31b5b491868dcc87d6c24b7e3d19a0d730d59d3e46f4eea6430a321bed387a49"}, @@ -4034,18 +4248,26 @@ pyyaml = [ {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"}, {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"}, {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"}, + {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"}, + {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"}, {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"}, {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"}, {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"}, {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"}, + {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"}, + {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"}, {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"}, {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"}, {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"}, {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"}, + {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"}, + {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"}, {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"}, {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"}, {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"}, {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"}, + {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"}, + {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"}, {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"}, {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"}, {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, @@ -4328,10 +4550,46 @@ smmap = [ {file = "smmap-4.0.0-py2.py3-none-any.whl", hash = "sha256:a9a7479e4c572e2e775c404dcd3080c8dc49f39918c2cf74913d30c4c478e3c2"}, {file = "smmap-4.0.0.tar.gz", hash = "sha256:7e65386bd122d45405ddf795637b7f7d2b532e7e401d46bbe3fb49b9986d5182"}, ] +snowballstemmer = [ + {file = "snowballstemmer-2.1.0-py2.py3-none-any.whl", hash = "sha256:b51b447bea85f9968c13b650126a888aabd4cb4463fca868ec596826325dedc2"}, + {file = "snowballstemmer-2.1.0.tar.gz", hash = "sha256:e997baa4f2e9139951b6f4c631bad912dfd3c792467e2f03d7239464af90e914"}, +] soupsieve = [ {file = "soupsieve-2.2.1-py3-none-any.whl", hash = "sha256:c2c1c2d44f158cdbddab7824a9af8c4f83c76b1e23e049479aa432feb6c4c23b"}, {file = "soupsieve-2.2.1.tar.gz", hash = "sha256:052774848f448cf19c7e959adf5566904d525f33a3f8b6ba6f6f8f26ec7de0cc"}, ] +sphinx = [ + {file = "Sphinx-4.0.2-py3-none-any.whl", hash = "sha256:d1cb10bee9c4231f1700ec2e24a91be3f3a3aba066ea4ca9f3bbe47e59d5a1d4"}, + {file = "Sphinx-4.0.2.tar.gz", hash = "sha256:b5c2ae4120bf00c799ba9b3699bc895816d272d120080fbc967292f29b52b48c"}, +] +sphinx-rtd-theme = [ + {file = "sphinx_rtd_theme-0.5.2-py2.py3-none-any.whl", hash = "sha256:4a05bdbe8b1446d77a01e20a23ebc6777c74f43237035e76be89699308987d6f"}, + {file = "sphinx_rtd_theme-0.5.2.tar.gz", hash = "sha256:32bd3b5d13dc8186d7a42fc816a23d32e83a4827d7d9882948e7b837c232da5a"}, +] +sphinxcontrib-applehelp = [ + {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, + {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, +] +sphinxcontrib-devhelp = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] +sphinxcontrib-htmlhelp = [ + {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, + {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, +] +sphinxcontrib-jsmath = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] +sphinxcontrib-qthelp = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] +sphinxcontrib-serializinghtml = [ + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] statsmodels = [ {file = "statsmodels-0.12.2-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:c1d98ce2072f5e772cbf91d05475490368da5d3ee4a3150062330c7b83221ceb"}, {file = "statsmodels-0.12.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:4184487e9c281acad3d0bda19445c69db292f0dbb18f25ebf56a7966a0a28eef"}, diff --git a/pyproject.toml b/pyproject.toml index 762a76e59a4..07f8c314180 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -73,6 +73,7 @@ vaderSentiment = "3.3.2" degiro-connector = "1.0.0" mypy = "^0.901" GitPython = "^3.1.17" +fear-greed-index = "^0.1.3" [tool.poetry.dev-dependencies] pytest = "^6.2.2" diff --git a/requirements-full.txt b/requirements-full.txt index 7d5018803dc..864bca7c9d8 100644 --- a/requirements-full.txt +++ b/requirements-full.txt @@ -1,5 +1,6 @@ absl-py==0.13.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.2.0" aiohttp==3.7.4.post0; python_version >= "3.6" +alabaster==0.7.12; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" alpaca-trade-api==1.2.2 alpha-vantage==2.3.1 ansiwrap==0.8.4; python_version >= "3.6" @@ -10,6 +11,7 @@ astunparse==1.6.3 async-generator==1.10; python_full_version >= "3.6.1" and python_version >= "3.6" async-timeout==3.0.1; python_full_version >= "3.5.3" and python_version >= "3.6" attrs==21.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6" +babel==2.9.1; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" backcall==0.2.0; python_version >= "3.6" beautifulsoup4==4.9.3; python_version >= "3.5" black==21.5b2; python_full_version >= "3.6.2" @@ -36,8 +38,10 @@ decorator==5.0.9; python_version >= "3.6" and python_full_version < "3.0.0" or p defusedxml==0.7.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6" degiro-connector==1.0.0; python_version >= "3.6" detecta==0.0.5; python_version >= "3.6" +docutils==0.16; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" ecos==2.0.7.post1; python_full_version >= "3.6.1" and python_full_version < "4.0.0" and python_version >= "3.5" entrypoints==0.3; python_version >= "3.6" +fear-greed-index==0.1.3; python_full_version >= "3.6.8" and python_full_version < "4.0.0" ffn==0.3.6; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" finviz==1.4.1 finvizfinance==0.9.8; python_version >= "3.5" @@ -57,6 +61,7 @@ hijri-converter==2.1.2; python_version >= "3.6" holidays==0.10.5.2 idna-ssl==1.1.0; python_version < "3.7" and python_version >= "3.6" idna==2.10; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "3.7" or python_version < "3.7" and python_version >= "3.6" and python_full_version >= "3.5.0" +imagesize==1.2.0; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" importlib-metadata==4.5.0; python_version < "3.8" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "3.8" or python_full_version >= "3.2.0" and python_version >= "3.6" and python_version < "3.8") inflection==0.5.1; python_version >= "3.5" ipykernel==5.5.5; python_version >= "3.6" @@ -65,7 +70,7 @@ ipython==7.16.1; python_version >= "3.6" ipywidgets==7.6.3 iso8601==0.1.14 jedi==0.18.0; python_version >= "3.6" -jinja2==3.0.1; python_version >= "3.6" +jinja2==3.0.1; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" joblib==1.0.1; python_version >= "3.6" jsonschema==3.2.0; python_version >= "3.6" jupyter-client==6.1.12; python_version >= "3.5" @@ -78,11 +83,12 @@ keras-nightly==2.5.0.dev2021032900 keras-preprocessing==1.1.2 kiwisolver==1.3.1; python_version >= "3.6" korean-lunar-calendar==0.2.1 -lxml==4.6.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6" +lxml==4.6.3; python_full_version >= "3.6.8" and python_version >= "3.5" and python_full_version < "4.0.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") +m2r2==0.2.7; python_full_version >= "3.6.8" and python_full_version < "4.0.0" markdown==3.3.4; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.2.0" and python_version >= "3.6" markupsafe==2.0.1; python_version >= "3.6" matplotlib==3.3.4; python_version >= "3.6" -mistune==0.8.4; python_version >= "3.6" +mistune==0.8.4; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" more-itertools==8.8.0; python_version >= "3.5" mplfinance==0.12.7a17 msgpack==1.0.2 @@ -102,7 +108,7 @@ onetimepass==1.0.1; python_version >= "3.6" opt-einsum==3.3.0; python_version >= "3.5" orjson==3.5.3; python_version >= "3.6" osqp==0.6.2.post0; python_full_version >= "3.6.1" and python_full_version < "4.0.0" and python_version >= "3.5" -packaging==20.9; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6" +packaging==20.9; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6") pandas-datareader==0.9.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6" pandas-ta==0.2.45b pandas==1.1.5; python_full_version >= "3.6.1" @@ -130,12 +136,12 @@ pyasn1-modules==0.2.8; python_version >= "2.7" and python_full_version < "3.0.0" pyasn1==0.4.8; python_version >= "3.5" and python_full_version < "3.0.0" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_version >= "3.5" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") and python_full_version >= "3.6.0" pycoingecko==1.4.1 pycparser==2.20; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" -pygments==2.9.0; python_version >= "3.6" +pygments==2.9.0; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" pymeeus==0.5.11; python_version >= "3.5" pyobjc-core==7.3; python_version >= "3.6" and sys_platform == "darwin" pyobjc-framework-cocoa==7.3; python_version >= "3.6" and sys_platform == "darwin" pyotp==2.6.0; python_version >= "3" -pyparsing==2.4.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6" +pyparsing==2.4.7; python_full_version >= "3.6.8" and python_version >= "3.6" and python_full_version < "4.0.0" pyportfolioopt==1.4.2; python_full_version >= "3.6.1" and python_full_version < "4.0.0" pyprind==2.11.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" pyrsistent==0.14.11 @@ -144,7 +150,7 @@ python-coinmarketcap==0.2 python-dateutil==2.8.1; python_full_version >= "3.6.1" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6") and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0") and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.5") python-dotenv==0.17.1; python_version >= "3" pytrends==4.7.3 -pytz==2021.1; python_full_version >= "3.6.1" and python_version >= "3.5" +pytz==2021.1; python_full_version >= "3.6.8" and python_version >= "3.6" and python_full_version < "4.0.0" pyupgrade==2.18.2; python_full_version >= "3.6.1" pywin32==301; sys_platform == "win32" and python_version >= "3.6" pywinpty==1.1.2; os_name == "nt" and python_version >= "3.6" @@ -170,7 +176,16 @@ selenium==3.141.0 send2trash==1.5.0; python_version >= "3.6" six==1.15.0; python_full_version >= "3.6.1" and python_version >= "3.5" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0") and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6") and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.5") and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6") and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0") smmap==4.0.0; python_version >= "3.6" +snowballstemmer==2.1.0; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" soupsieve==2.2.1; python_version >= "3.6" +sphinx-rtd-theme==0.5.2; python_full_version >= "3.6.8" and python_full_version < "4.0.0" +sphinx==4.0.2; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" +sphinxcontrib-applehelp==1.0.2; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" +sphinxcontrib-devhelp==1.0.2; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" +sphinxcontrib-htmlhelp==2.0.0; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" +sphinxcontrib-jsmath==1.0.1; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" +sphinxcontrib-qthelp==1.0.3; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" +sphinxcontrib-serializinghtml==1.1.5; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" statsmodels==0.12.2; python_version >= "3.6" tabulate==0.8.9 tenacity==7.0.0; python_version >= "3.6" diff --git a/requirements.txt b/requirements.txt index 8fe1f6d7911..117477d4b54 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ aiohttp==3.7.4.post0; python_version >= "3.6" +alabaster==0.7.12; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" alpaca-trade-api==1.2.2 alpha-vantage==2.3.1 ansiwrap==0.8.4; python_version >= "3.6" @@ -8,6 +9,7 @@ argon2-cffi==20.1.0; python_version >= "3.6" async-generator==1.10; python_full_version >= "3.6.1" and python_version >= "3.6" async-timeout==3.0.1; python_full_version >= "3.5.3" and python_version >= "3.6" attrs==21.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6" +babel==2.9.1; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" backcall==0.2.0; python_version >= "3.6" beautifulsoup4==4.9.3; python_version >= "3.5" black==21.5b2; python_full_version >= "3.6.2" @@ -33,8 +35,10 @@ decorator==5.0.9; python_version >= "3.6" and python_full_version < "3.0.0" or p defusedxml==0.7.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6" degiro-connector==1.0.0; python_version >= "3.6" detecta==0.0.5; python_version >= "3.6" +docutils==0.16; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" ecos==2.0.7.post1; python_full_version >= "3.6.1" and python_full_version < "4.0.0" and python_version >= "3.5" entrypoints==0.3; python_version >= "3.6" +fear-greed-index==0.1.3; python_full_version >= "3.6.8" and python_full_version < "4.0.0" ffn==0.3.6; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" finviz==1.4.1 finvizfinance==0.9.8; python_version >= "3.5" @@ -49,6 +53,7 @@ hijri-converter==2.1.2; python_version >= "3.6" holidays==0.10.5.2 idna-ssl==1.1.0; python_version < "3.7" and python_version >= "3.6" idna==2.10; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "3.7" or python_version < "3.7" and python_version >= "3.6" and python_full_version >= "3.5.0" +imagesize==1.2.0; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" importlib-metadata==4.5.0; python_version < "3.8" and python_version >= "3.6" inflection==0.5.1; python_version >= "3.5" ipykernel==5.5.5; python_version >= "3.6" @@ -57,7 +62,7 @@ ipython==7.16.1; python_version >= "3.6" ipywidgets==7.6.3 iso8601==0.1.14 jedi==0.18.0; python_version >= "3.6" -jinja2==3.0.1; python_version >= "3.6" +jinja2==3.0.1; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" joblib==1.0.1; python_version >= "3.6" jsonschema==3.2.0; python_version >= "3.6" jupyter-client==6.1.12; python_version >= "3.5" @@ -68,10 +73,11 @@ jupyterlab-pygments==0.1.2; python_version >= "3.6" jupyterlab-widgets==1.0.0; python_version >= "3.6" kiwisolver==1.3.1; python_version >= "3.6" korean-lunar-calendar==0.2.1 -lxml==4.6.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6" +lxml==4.6.3; python_full_version >= "3.6.8" and python_version >= "3.5" and python_full_version < "4.0.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") +m2r2==0.2.7; python_full_version >= "3.6.8" and python_full_version < "4.0.0" markupsafe==2.0.1; python_version >= "3.6" matplotlib==3.3.4; python_version >= "3.6" -mistune==0.8.4; python_version >= "3.6" +mistune==0.8.4; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" more-itertools==8.8.0; python_version >= "3.5" mplfinance==0.12.7a17 msgpack==1.0.2 @@ -90,7 +96,7 @@ oauthlib==3.1.1; python_version >= "3.6" and python_full_version < "3.0.0" or py onetimepass==1.0.1; python_version >= "3.6" orjson==3.5.3; python_version >= "3.6" osqp==0.6.2.post0; python_full_version >= "3.6.1" and python_full_version < "4.0.0" and python_version >= "3.5" -packaging==20.9; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6" +packaging==20.9; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6") pandas-datareader==0.9.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6" pandas-ta==0.2.45b pandas==1.1.5; python_full_version >= "3.6.1" @@ -116,12 +122,12 @@ py==1.10.0; python_version >= "3.6" and python_full_version < "3.0.0" and implem pyally==1.1.2 pycoingecko==1.4.1 pycparser==2.20; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" -pygments==2.9.0; python_version >= "3.6" +pygments==2.9.0; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" pymeeus==0.5.11; python_version >= "3.5" pyobjc-core==7.3; python_version >= "3.6" and sys_platform == "darwin" pyobjc-framework-cocoa==7.3; python_version >= "3.6" and sys_platform == "darwin" pyotp==2.6.0; python_version >= "3" -pyparsing==2.4.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6" +pyparsing==2.4.7; python_full_version >= "3.6.8" and python_version >= "3.6" and python_full_version < "4.0.0" pyportfolioopt==1.4.2; python_full_version >= "3.6.1" and python_full_version < "4.0.0" pyprind==2.11.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" pyrsistent==0.14.11 @@ -130,7 +136,7 @@ python-coinmarketcap==0.2 python-dateutil==2.8.1; python_full_version >= "3.6.1" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6") and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0") and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.5") python-dotenv==0.17.1; python_version >= "3" pytrends==4.7.3 -pytz==2021.1; python_full_version >= "3.6.1" and python_version >= "3.5" +pytz==2021.1; python_full_version >= "3.6.8" and python_version >= "3.6" and python_full_version < "4.0.0" pyupgrade==2.18.2; python_full_version >= "3.6.1" pywin32==301; sys_platform == "win32" and python_version >= "3.6" pywinpty==1.1.2; os_name == "nt" and python_version >= "3.6" @@ -155,7 +161,16 @@ selenium==3.141.0 send2trash==1.5.0; python_version >= "3.6" six==1.15.0; python_full_version >= "3.6.1" and python_version >= "3.5" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0") and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6") and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.5") and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6") smmap==4.0.0; python_version >= "3.6" +snowballstemmer==2.1.0; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" soupsieve==2.2.1; python_version >= "3.6" +sphinx-rtd-theme==0.5.2; python_full_version >= "3.6.8" and python_full_version < "4.0.0" +sphinx==4.0.2; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" +sphinxcontrib-applehelp==1.0.2; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" +sphinxcontrib-devhelp==1.0.2; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" +sphinxcontrib-htmlhelp==2.0.0; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" +sphinxcontrib-jsmath==1.0.1; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" +sphinxcontrib-qthelp==1.0.3; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" +sphinxcontrib-serializinghtml==1.1.5; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6" statsmodels==0.12.2; python_version >= "3.6" tabulate==0.8.9 tenacity==7.0.0; python_version >= "3.6" diff --git a/terminal.py b/terminal.py index b596d619507..f4800d05b54 100644 --- a/terminal.py +++ b/terminal.py @@ -162,13 +162,13 @@ Contexts: help_text += """ clear clear a specific stock ticker from analysis load load a specific stock ticker for analysis - quote view the current price for a specific stock ticker - candle view a candle chart for a specific stock ticker - view view and load a specific stock ticker for technical analysis """ if self.ticker: - help_text += """export export the currently loaded dataframe to a file or stdout + help_text += """quote view the current price for a specific stock ticker + candle view a candle chart for a specific stock ticker + view view and load a specific stock ticker for technical analysis + export export the currently loaded dataframe to a file or stdout > dd in-depth due-diligence, \t e.g.: news, analyst, shorts, insider, sec > ba behavioural analysis, \t from: reddit, stocktwits, twitter, google