improve usage of timezone in terminal (#1126)

* improve usage of timezone in terminal

* lint

* update dependencies

* address James review comments

* remove seconds from time on cmd line

* skip test
This commit is contained in:
Didier Rodrigues Lopes
2022-01-04 10:35:34 +00:00
committed by GitHub
parent 8f8147c3af
commit d5d581b59b
11 changed files with 434 additions and 126 deletions

View File

@@ -19,6 +19,9 @@ USE_COLOR = strtobool(os.getenv("GTFF_USE_COLOR", "True"))
# Select console flair (choose from config_terminal.py list)
USE_FLAIR = os.getenv("GTFF_USE_FLAIR") or "stars"
# Add date and time to command line
USE_DATETIME = strtobool(os.getenv("GTFF_USE_DATETIME", "True"))
# Enable interactive matplotlib mode
USE_ION = strtobool(os.getenv("GTFF_USE_ION", "True"))

View File

@@ -4,14 +4,14 @@ import argparse
import functools
import logging
from typing import List
from datetime import datetime, timedelta, time as Time
from datetime import datetime, timedelta
import os
import random
import re
import sys
import pytz
import pandas as pd
from rich.table import Table
from pytz import timezone
import iso8601
import matplotlib
@@ -362,26 +362,6 @@ def us_market_holidays(years) -> list:
return valid_holidays
def b_is_stock_market_open() -> bool:
"""Checks if the stock market is open"""
# Get current US time
now = datetime.now(timezone("US/Eastern"))
# Check if it is a weekend
if now.date().weekday() > 4:
return False
# Check if it is a holiday
if now.strftime("%Y-%m-%d") in us_market_holidays(now.year):
return False
# Check if it hasn't open already
if now.time() < Time(hour=9, minute=30, second=0):
return False
# Check if it has already closed
if now.time() > Time(hour=16, minute=0, second=0):
return False
# Otherwise, Stock Market is open!
return True
def long_number_format(num) -> str:
"""Format a long number"""
if isinstance(num, float):
@@ -704,11 +684,88 @@ def get_flair() -> str:
}
if flair.get(gtff.USE_FLAIR):
if gtff.USE_DATETIME and get_user_timezone_or_invalid() != "INVALID":
dtime = datetime.now(pytz.timezone(get_user_timezone())).strftime(
"%Y %b %d, %H:%m"
)
return f"{dtime} {flair[gtff.USE_FLAIR]}"
return flair[gtff.USE_FLAIR]
return ""
def is_timezone_valid(user_tz: str) -> bool:
"""Check whether user timezone is valid
Parameters
----------
user_tz: str
Timezone to check for validity
Returns
-------
bool
True if timezone provided is valid
"""
return user_tz in pytz.all_timezones
def get_user_timezone() -> str:
"""Get user timezone if it is a valid one
Returns
-------
str
user timezone based on timezone.gst file
"""
filename = os.path.join(
os.path.dirname(os.path.abspath(__file__)),
"timezone.gst",
)
if os.path.isfile(filename):
with open(filename) as f:
return f.read()
return ""
def get_user_timezone_or_invalid() -> str:
"""Get user timezone if it is a valid one
Returns
-------
str
user timezone based on timezone.gst file or INVALID
"""
user_tz = get_user_timezone()
if is_timezone_valid(user_tz):
return f"{user_tz}"
return "INVALID"
def replace_user_timezone(user_tz: str) -> None:
"""Replace user timezone
Parameters
----------
user_tz: str
User timezone to set
"""
filename = os.path.join(
os.path.dirname(os.path.abspath(__file__)),
"timezone.gst",
)
if os.path.isfile(filename):
with open(filename, "w") as f:
if is_timezone_valid(user_tz):
if f.write(user_tz):
print("Timezone successfully updated", "\n")
else:
print("Timezone not set successfully", "\n")
else:
print("Timezone selected is not valid", "\n")
else:
print("timezone.gst file does not exist", "\n")
def str_to_bool(value) -> bool:
"""Match a string to a boolean value"""
if isinstance(value, bool):

View File

@@ -17,7 +17,6 @@ from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.common import newsapi_view
from gamestonk_terminal.helper_funcs import (
EXPORT_ONLY_RAW_DATA_ALLOWED,
b_is_stock_market_open,
check_positive,
export_data,
get_flair,
@@ -102,6 +101,7 @@ class StocksController:
self.ticker = ticker
self.start = ""
self.interval = "1440min"
self.add_info = stocks_helper.additional_info_about_ticker("")
if queue:
self.queue = queue
else:
@@ -109,7 +109,6 @@ class StocksController:
def print_help(self):
"""Print help"""
s_intraday = (f"Intraday {self.interval}", "Daily")[self.interval == "1440min"]
if self.ticker and self.start:
stock_text = f"{s_intraday} Stock: {self.ticker} (from {self.start.strftime('%Y-%m-%d')})"
@@ -119,11 +118,11 @@ class StocksController:
reset_style_if_no_ticker = Style.RESET_ALL if not self.ticker else ""
help_text = f"""
search search a specific stock ticker for analysis
load load a specific stock ticker for analysis
{stock_text}
Market {('CLOSED', 'OPEN')[b_is_stock_market_open()]}
load load a specific stock ticker and additional info for analysis
{dim_if_no_ticker}
{stock_text}
{self.add_info}
quote view the current price for a specific stock ticker
candle view a candle chart for a specific stock ticker
news latest news of the company [News API]
@@ -220,6 +219,11 @@ Stocks Menus:
def call_reset(self, _):
"""Process reset command"""
if self.ticker:
if self.suffix:
self.queue.insert(0, f"load {self.ticker}.{self.suffix}")
else:
self.queue.insert(0, f"load {self.ticker}")
self.queue.insert(0, "stocks")
self.queue.insert(0, "reset")
self.queue.insert(0, "quit")
@@ -341,6 +345,10 @@ Stocks Menus:
)
if not df_stock_candidate.empty:
self.stock = df_stock_candidate
self.add_info = stocks_helper.additional_info_about_ticker(
ns_parser.ticker
)
print(self.add_info)
if "." in ns_parser.ticker:
self.ticker, self.suffix = ns_parser.ticker.upper().split(".")
else:
@@ -352,6 +360,7 @@ Stocks Menus:
else:
self.start = ns_parser.start
self.interval = f"{ns_parser.interval}min"
print("")
def call_quote(self, other_args: List[str]):
"""Process quote command"""

View File

@@ -8,6 +8,7 @@ from typing import List, Union
import matplotlib.pyplot as plt
import mplfinance as mpf
import pandas as pd
import pandas_market_calendars as mcal
import plotly.graph_objects as go
import pyEX
import pytz
@@ -25,6 +26,7 @@ from gamestonk_terminal.helper_funcs import (
parse_known_args_and_warn,
plot_autoscale,
try_except,
get_user_timezone_or_invalid,
)
# pylint: disable=no-member,too-many-branches,C0302
@@ -259,7 +261,7 @@ def load(
print(
f"Loading {s_intraday} {ticker.upper()} stock "
f"with starting period {s_start.strftime('%Y-%m-%d')} for analysis.\n"
f"with starting period {s_start.strftime('%Y-%m-%d')} for analysis."
)
return df_stock_candidate
@@ -644,10 +646,8 @@ def find_trendline(
----------
df_data : DataFrame
The stock ticker data frame with at least date_id, y_key columns.
y_key : str
Column name to base the trend line on.
high_low: str, optional
Either "high" or "low". High is the default.
@@ -691,3 +691,78 @@ def find_trendline(
df_data[f"{y_key}_trend"] = reg[0] * df_data["date_id"] + reg[1]
return df_data
def additional_info_about_ticker(ticker: str) -> str:
"""Additional information about trading the ticker such as exchange, currency, timezone and market status
Parameters
----------
ticker : str
The stock ticker to extract if stock market is open or not
Returns
-------
str
Additional information about trading the ticker
"""
extra_info = ""
if ticker:
ticker_info = yf.Ticker(ticker).info
extra_info += "\nDatetime: "
if (
"exchangeTimezoneName" in ticker_info
and ticker_info["exchangeTimezoneName"]
):
dtime = datetime.now(
pytz.timezone(ticker_info["exchangeTimezoneName"])
).strftime("%Y %b %d %H:%m:%S")
extra_info += dtime
extra_info += "\nTimezone: "
extra_info += ticker_info["exchangeTimezoneName"]
else:
extra_info += "\nDatetime: "
extra_info += "\nTimezone: "
extra_info += "\nExchange: "
if "exchange" in ticker_info and ticker_info["exchange"]:
exchange_name = ticker_info["exchange"]
extra_info += exchange_name
exchange_name = exchange_name.replace("NMS", "NASDAQ")
extra_info += "\nCurrency: "
if "currency" in ticker_info and ticker_info["currency"]:
extra_info += ticker_info["currency"]
extra_info += "\nMarket: "
if "exchange" in ticker_info and ticker_info["exchange"]:
if exchange_name in mcal.get_calendar_names():
calendar = mcal.get_calendar(exchange_name)
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"),
)
user_tz = get_user_timezone_or_invalid()
if user_tz != "INVALID":
is_market_open = calendar.open_at_time(
sch,
pd.Timestamp(
datetime.now().strftime("%Y-%m-%d %H:%M"), tz=user_tz
),
)
if is_market_open:
extra_info += "OPEN"
else:
extra_info += "CLOSED"
else:
extra_info += "\nDatetime: "
extra_info += "\nTimezone: "
extra_info += "\nExchange: "
extra_info += "\nMarket: "
extra_info += "\nCurrency: "
return extra_info

1
gamestonk_terminal/timezone.gst vendored Normal file
View File

@@ -0,0 +1 @@
America/New_York

149
poetry.lock generated vendored
View File

@@ -463,7 +463,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "cvxpy"
version = "1.1.17"
version = "1.1.18"
description = "A domain-specific language for modeling convex optimization problems in Python."
category = "main"
optional = false
@@ -684,6 +684,26 @@ category = "main"
optional = false
python-versions = ">=3.6"
[[package]]
name = "exchange-calendars"
version = "3.5"
description = "exchange_calendars is a Python library with securities exchange calendars"
category = "dev"
optional = false
python-versions = ">=3.7"
[package.dependencies]
korean_lunar_calendar = "*"
numpy = "*"
pandas = ">=1.1"
pyluach = "*"
python-dateutil = "*"
pytz = "*"
toolz = "*"
[package.extras]
dev = ["flake8", "pytest", "pytest-benchmark", "pytest-xdist", "pip-tools", "hypothesis"]
[[package]]
name = "fear-greed-index"
version = "0.1.3"
@@ -1938,6 +1958,20 @@ lxml = "*"
pandas = ">=0.23"
requests = ">=2.19.0"
[[package]]
name = "pandas-market-calendars"
version = "3.2"
description = "Market and exchange trading calendars for pandas"
category = "dev"
optional = false
python-versions = ">=3.7.0"
[package.dependencies]
exchange-calendars = ">=3.3"
pandas = ">=0.18"
python-dateutil = "*"
pytz = "*"
[[package]]
name = "pandas-ta"
version = "0.3.14b"
@@ -2367,6 +2401,14 @@ platformdirs = ">=2.2.0"
toml = ">=0.9.2"
typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""}
[[package]]
name = "pyluach"
version = "1.3.0"
description = "Pyluach is a Python package for manipulating Hebrew dates, Gregorian-Hebrew calendar conversions, getting the weekly parsha, and other Jewish calendar related calculations."
category = "dev"
optional = false
python-versions = ">=3.4"
[[package]]
name = "pymeeus"
version = "0.5.11"
@@ -2593,7 +2635,7 @@ tzdata = {version = "*", markers = "python_version >= \"3.6\""}
[[package]]
name = "pyupgrade"
version = "2.30.1"
version = "2.31.0"
description = "A tool to automatically upgrade syntax for newer versions."
category = "dev"
optional = false
@@ -2771,7 +2813,7 @@ rsa = ["oauthlib[signedtoken] (>=3.0.0)"]
[[package]]
name = "rich"
version = "10.16.1"
version = "10.16.2"
description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
category = "main"
optional = false
@@ -2855,7 +2897,7 @@ pyobjc-framework-Cocoa = {version = "*", markers = "sys_platform == \"darwin\""}
[[package]]
name = "scs"
version = "3.0.0"
version = "3.0.1"
description = "scs: splitting conic solver"
category = "main"
optional = false
@@ -3352,6 +3394,14 @@ category = "main"
optional = false
python-versions = ">=3.6"
[[package]]
name = "toolz"
version = "0.11.2"
description = "List processing tools and functional utilities"
category = "dev"
optional = false
python-versions = ">=3.5"
[[package]]
name = "tornado"
version = "6.1"
@@ -3570,7 +3620,7 @@ yarl = {version = "*", markers = "python_version >= \"3.6\""}
[[package]]
name = "virtualenv"
version = "20.12.0"
version = "20.13.0"
description = "Virtual Python Environment builder"
category = "dev"
optional = false
@@ -3712,7 +3762,7 @@ prediction = ["tensorflow"]
[metadata]
lock-version = "1.1"
python-versions = "^3.8,<3.10"
content-hash = "1d15aef6409a8e00f1570f98276997208c7ceb877cc7a611101fc8720b611a4e"
content-hash = "a3cf2a88480398985f7a1009d8e01d90cd8363597a7813b40a53b2f211f9087b"
[metadata.files]
absl-py = [
@@ -4057,19 +4107,22 @@ cssselect = [
{file = "cssselect-1.1.0.tar.gz", hash = "sha256:f95f8dedd925fd8f54edb3d2dfb44c190d9d18512377d3c1e2388d16126879bc"},
]
cvxpy = [
{file = "cvxpy-1.1.17-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f612f2a07550eaf286dc79ddbafde74504d10e218d5efab0e8e4c022b97d90b5"},
{file = "cvxpy-1.1.17-cp36-cp36m-manylinux_2_24_x86_64.whl", hash = "sha256:8af6aaae658471f05856555847363e68140169f164c5b0b184e85bc296b69a20"},
{file = "cvxpy-1.1.17-cp36-cp36m-win_amd64.whl", hash = "sha256:4fec0b03c2b995d6191b9176f51b1f1fdd057c89d5b5ca12ef4263ad19214a03"},
{file = "cvxpy-1.1.17-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6ae101311b28a9e7c501ff6aefb03c588d5cce6803865b6df1bfbd80b969f9f8"},
{file = "cvxpy-1.1.17-cp37-cp37m-manylinux_2_24_x86_64.whl", hash = "sha256:5d217c25e970c2f2a55ee607822823e91aaa07522913f7c61c7f9d4d0d1de885"},
{file = "cvxpy-1.1.17-cp37-cp37m-win_amd64.whl", hash = "sha256:8269bf471f5e015cec6289dfad64e5f7c50e7f35d2d0823490a4c3ea278f1a20"},
{file = "cvxpy-1.1.17-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1fa6768bcefe4b5c8e413e20547f914b8e3c908f06fc833a003dde0ea1aeb56d"},
{file = "cvxpy-1.1.17-cp38-cp38-manylinux_2_24_x86_64.whl", hash = "sha256:472c1fb6568a7bedc874f10b234d569cd16290fb9467dc2768d06dfa1c2dbc7f"},
{file = "cvxpy-1.1.17-cp38-cp38-win_amd64.whl", hash = "sha256:c0f23c57c4afe9ab5afa9bf408d8b0c8ffc3c8c57d54e81ab56b7dfe0bf9c34b"},
{file = "cvxpy-1.1.17-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:06136af30d1ea605ca8093a8664edc8f963155a8765214a430973259450b489e"},
{file = "cvxpy-1.1.17-cp39-cp39-manylinux_2_24_x86_64.whl", hash = "sha256:ea4381c55dd4f7c0a140a59dfa777c7bb09d6fa513d14a7f5381948d1540b966"},
{file = "cvxpy-1.1.17-cp39-cp39-win_amd64.whl", hash = "sha256:cdd9cfb864bcae5233a52fa4060bbeb7c81b29a23d82acafa071e372b23f6f0b"},
{file = "cvxpy-1.1.17.tar.gz", hash = "sha256:3397d3b89d770ea9f0fc359b1c9b3afede6a0d3bea1cff20e2653b13451cdb8a"},
{file = "cvxpy-1.1.18-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80018d9a4478253cc27d6d87677c4ba35908bf52e71a94e4beba5639c39f283d"},
{file = "cvxpy-1.1.18-cp310-cp310-manylinux_2_24_x86_64.whl", hash = "sha256:d3c35f47032ba15af0ae5b7d4b44ed8dd287e27101f1a264295dd4885f8aea70"},
{file = "cvxpy-1.1.18-cp310-cp310-win_amd64.whl", hash = "sha256:20b9f214f092ff5dec8e8b56ddb365690d8e02f6bd005ee9b59367150e3efd05"},
{file = "cvxpy-1.1.18-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d853b73aca9223901b1de4dcd8c71d9732e7d38e915008956aa13fa2920d2652"},
{file = "cvxpy-1.1.18-cp36-cp36m-manylinux_2_24_x86_64.whl", hash = "sha256:254683742bcd4427eaa17ca44675b540690e043782d467c4c68d1d4ef003c062"},
{file = "cvxpy-1.1.18-cp36-cp36m-win_amd64.whl", hash = "sha256:6d2dd80550b9ab5f36a3961c64b51d70f364bd375565400534af65b5cf590787"},
{file = "cvxpy-1.1.18-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e634c5afa8d4c7db9691d2fb9f982fcf9be41bf3fb8c781e47816fa290acbdbb"},
{file = "cvxpy-1.1.18-cp37-cp37m-manylinux_2_24_x86_64.whl", hash = "sha256:d84fb6de19c998a4db8e442d2d5d5c155b983ca4f1833fd79fb6ad47c092f349"},
{file = "cvxpy-1.1.18-cp37-cp37m-win_amd64.whl", hash = "sha256:d21d81ab76f6fae44090c19b9a802e42e8af440d9a505be892c1e6766621e4a6"},
{file = "cvxpy-1.1.18-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ec5371c339cd35cb47fc8e9f7e6dff22e20612fdfa6b17dc508fc513130337ba"},
{file = "cvxpy-1.1.18-cp38-cp38-manylinux_2_24_x86_64.whl", hash = "sha256:2699db1cc889fd2e0ea459f022866fcc1182241f4520c5550ca5136ef06c5246"},
{file = "cvxpy-1.1.18-cp38-cp38-win_amd64.whl", hash = "sha256:022c8d9c82d2f00535e1d08761e88aa5c1729ee685dfb2ea60465693f54550c1"},
{file = "cvxpy-1.1.18-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9f82ca609e34577062940d5c32bc1f687fcf83d39ca92ec0d04fb1f290b43355"},
{file = "cvxpy-1.1.18-cp39-cp39-manylinux_2_24_x86_64.whl", hash = "sha256:569f7298539a2bd8704209628af11ecf1bca0cff2d5e27c46b57ffea921a01cf"},
{file = "cvxpy-1.1.18-cp39-cp39-win_amd64.whl", hash = "sha256:2eb079877d23f03494141102d6cf9d3139edf5e1dc07bfa3f767f4c79e837ecb"},
{file = "cvxpy-1.1.18.tar.gz", hash = "sha256:5baefe1f2ed6937749b293586c6ce4f42ed30e7890223f7661ccb2bb7df70bef"},
]
cycler = [
{file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"},
@@ -4199,13 +4252,24 @@ docutils = [
{file = "docutils-0.16.tar.gz", hash = "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"},
]
ecos = [
{file = "ecos-2.0.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:daddb8c86bbf9d8ddd8143de4ea1c49e348f06965e62a6af606428615e5383de"},
{file = "ecos-2.0.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:301e7243cdb4fd5554ea31f353a6ef579b053ed841e341b26fea0046688770b5"},
{file = "ecos-2.0.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:425bdcbe56f6439b80f04771933bb1a0b9bd9dd4b0c793c5a8fc163aed90f42f"},
{file = "ecos-2.0.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6800afed16f7948f855acf971caa31e0d521c8a0e657a38b491d629f5920d51d"},
{file = "ecos-2.0.8-cp310-cp310-win_amd64.whl", hash = "sha256:6112488f6dcc0b20a8b48d34697990c9151dc872031a95900acac01876dc0d89"},
{file = "ecos-2.0.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f87d00e55c660c4a832bbc2ff2737fb0692416da1395602b902131db7f009bc6"},
{file = "ecos-2.0.8-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:642df202f99366c757f08661219f900f5fc2a52c92763d33d6a2f03870cca5d1"},
{file = "ecos-2.0.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:53c66b39aaa1f0b81fa4d53a465ecd70df5bdbe46b5501fadbbc21b914e7684c"},
{file = "ecos-2.0.8-cp36-cp36m-manylinux_2_24_x86_64.whl", hash = "sha256:5cbee91c94c57652b539f3bc08e6a1e3bd83001563ac714c48e3f6aa71c87dd5"},
{file = "ecos-2.0.8-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6ff997f5159f3d5006fa6ea3e4ad021ed254d17789e74d6c617b77d2282ea865"},
{file = "ecos-2.0.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:9f13e49236d04c0fbd470c0a09d794fef1b3b26414199d1375902e5d3a44ff9f"},
{file = "ecos-2.0.8-cp36-cp36m-win_amd64.whl", hash = "sha256:5aabb2455cf71431565343ce89ad2cbe26bf3c48fbc25bdf4bd58d024b2760d7"},
{file = "ecos-2.0.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:99dfdc91b228ab274ad34b7b1fa852baf3c16e75ac27559dc285d630e77fdd0c"},
{file = "ecos-2.0.8-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:f4b19afb3c3820252876d442a2dabf45bb1ee6c543e4032d9889cc991e3f81ce"},
{file = "ecos-2.0.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:98f56db0ceee6670a2c1a7b819b1b52e1b5a40021745ff69274eea06017671ac"},
{file = "ecos-2.0.8-cp37-cp37m-manylinux_2_24_x86_64.whl", hash = "sha256:f5fc6534ec6bd685663cf441160bfdd3273cd7fa8151855e82b433f1bb5cfbaf"},
{file = "ecos-2.0.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1144df5be066e1a3f062a6980b990d7c1521cd9756ee33d29b24c6e74f9d40e0"},
{file = "ecos-2.0.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:acb04a59091d6ffcd3a13264787dc35d33f0fdbfa43a4971bcb5f80f40201b03"},
{file = "ecos-2.0.8-cp37-cp37m-win_amd64.whl", hash = "sha256:23686273b2b605971f390a78b6e6fa5d330f082483f681b144c318eaf4ef7861"},
{file = "ecos-2.0.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fb47cd6680f28eee7eaaf93d25fa5f1446d2ef9840fa4af6ea1971c229ecbfdc"},
{file = "ecos-2.0.8-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:539329054b2af511dabe1f39b3f5aac3d2b4319bb6c9efeacd8c5dd71a3845b8"},
@@ -4213,7 +4277,10 @@ ecos = [
{file = "ecos-2.0.8-cp38-cp38-win_amd64.whl", hash = "sha256:0b93020d6ab7ca50f144e1391ae0a9d2f9c193746cb1e7eb79179bdd8393c2d6"},
{file = "ecos-2.0.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1be3894962b3a0dc97266e13fbb6a749db1e78a6991f6631e436ec5b3836b7e"},
{file = "ecos-2.0.8-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:0310f9cec0262b2a4bb5bad98f1c47afbca5f42a894059a0cbbea2ed93165db5"},
{file = "ecos-2.0.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6bc3356c7503e4b4ee530248ecaa02f4b75301a376808f9edc3534b67338dc6f"},
{file = "ecos-2.0.8-cp39-cp39-manylinux_2_24_x86_64.whl", hash = "sha256:252a2b0873a730ae6e56f66349667d61202a9cf8a326164b4f9466a55d971f26"},
{file = "ecos-2.0.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ed7c80b3da2e1a30f6120be48da8e244e221a703982944222a456f11e9d43aef"},
{file = "ecos-2.0.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b67f5d9e3c0d1e09c80e49cb39273e0e92f46fbfcf0d6877d3e6884cdbf21cf6"},
{file = "ecos-2.0.8-cp39-cp39-win_amd64.whl", hash = "sha256:980442422f99a766be6b625904f772d792126aba0e5889eefcd3391a6d2ef2a8"},
{file = "ecos-2.0.8.tar.gz", hash = "sha256:0b8e3f6468c15d62967bfa4f9ef5bbd62fd0b455d547eacc0afc15aceb65197b"},
]
@@ -4225,6 +4292,9 @@ et-xmlfile = [
{file = "et_xmlfile-1.1.0-py3-none-any.whl", hash = "sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada"},
{file = "et_xmlfile-1.1.0.tar.gz", hash = "sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c"},
]
exchange-calendars = [
{file = "exchange_calendars-3.5.tar.gz", hash = "sha256:1c132a9cf744ce27ce1e70c631810bbb881a64cbb1c28a166b984e383d434e41"},
]
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"},
@@ -5038,6 +5108,10 @@ pandas-datareader = [
{file = "pandas-datareader-0.10.0.tar.gz", hash = "sha256:9fc3c63d39bc0c10c2683f1c6d503ff625020383e38f6cbe14134826b454d5a6"},
{file = "pandas_datareader-0.10.0-py3-none-any.whl", hash = "sha256:0b95ff3635bc3ee1a6073521b557ab0e3c39d219f4a3b720b6b0bc6e8cdb4bb7"},
]
pandas-market-calendars = [
{file = "pandas_market_calendars-3.2-py3-none-any.whl", hash = "sha256:bf7509d1d40c918b6b91d261adde1e8ac7bf640f4403f45a8ac9f4d4fe47154b"},
{file = "pandas_market_calendars-3.2.tar.gz", hash = "sha256:5c67ec7158c298aa3efc6913d0c53b82239de779611d5eec23333ff5a2927cf2"},
]
pandas-ta = [
{file = "pandas_ta-0.3.14b.tar.gz", hash = "sha256:0fa35aec831d2815ea30b871688a8d20a76b288a7be2d26cc00c35cd8c09a993"},
]
@@ -5274,6 +5348,10 @@ pylint = [
{file = "pylint-2.12.2-py3-none-any.whl", hash = "sha256:daabda3f7ed9d1c60f52d563b1b854632fd90035bcf01443e234d3dc794e3b74"},
{file = "pylint-2.12.2.tar.gz", hash = "sha256:9d945a73640e1fec07ee34b42f5669b770c759acd536ec7b16d7e4b87a9c9ff9"},
]
pyluach = [
{file = "pyluach-1.3.0-py3-none-any.whl", hash = "sha256:43977d47c86695d66789f3d24c411c4d110363f760331136009e43ac9af61b1e"},
{file = "pyluach-1.3.0.tar.gz", hash = "sha256:9cf95eaa600cc904d1adb015036ab135e0d732ca2a30253db92b676ee3415dea"},
]
pymeeus = [
{file = "PyMeeus-0.5.11.tar.gz", hash = "sha256:bb9d670818d8b0594317b48a7dadea02a0594e5344263bf2054e1a011c8fed55"},
]
@@ -5430,8 +5508,8 @@ pytz-deprecation-shim = [
{file = "pytz_deprecation_shim-0.1.0.post0.tar.gz", hash = "sha256:af097bae1b616dde5c5744441e2ddc69e74dfdcb0c263129610d85b87445a59d"},
]
pyupgrade = [
{file = "pyupgrade-2.30.1-py2.py3-none-any.whl", hash = "sha256:803c4e7631f0596e5d991b671014ce8f4f1e76b52b27dca11ea8bf0110808dfa"},
{file = "pyupgrade-2.30.1.tar.gz", hash = "sha256:dc38f1613c50fd7baae3475f2afa5b8c933709df619494dd98773e91a5a2755e"},
{file = "pyupgrade-2.31.0-py2.py3-none-any.whl", hash = "sha256:0a62c5055f854d7f36e155b7ee8920561bf0399c53edd975cf02436eef8937fc"},
{file = "pyupgrade-2.31.0.tar.gz", hash = "sha256:80e2308cae2b11c3fdd091137495d99abf7e0cd98b501aa5758974991497c24c"},
]
pywin32 = [
{file = "pywin32-303-cp310-cp310-win32.whl", hash = "sha256:6fed4af057039f309263fd3285d7b8042d41507343cd5fa781d98fcc5b90e8bb"},
@@ -5755,8 +5833,8 @@ requests-oauthlib = [
{file = "requests_oauthlib-1.3.0-py3.7.egg", hash = "sha256:fa6c47b933f01060936d87ae9327fead68768b69c6c9ea2109c48be30f2d4dbc"},
]
rich = [
{file = "rich-10.16.1-py3-none-any.whl", hash = "sha256:bbe04dd6ac09e4b00d22cb1051aa127beaf6e16c3d8687b026e96d3fca6aad52"},
{file = "rich-10.16.1.tar.gz", hash = "sha256:4949e73de321784ef6664ebbc854ac82b20ff60b2865097b93f3b9b41e30da27"},
{file = "rich-10.16.2-py3-none-any.whl", hash = "sha256:c59d73bd804c90f747c8d7b1d023b88f2a9ac2454224a4aeaf959b21eeb42d03"},
{file = "rich-10.16.2.tar.gz", hash = "sha256:720974689960e06c2efdb54327f8bf0cdbdf4eae4ad73b6c94213cad405c371b"},
]
robin-stocks = [
{file = "robin_stocks-2.1.0-py3-none-any.whl", hash = "sha256:f746640e08d138fda2e1da42444e2881c3fb1ce43485f332e5079a42b0a78d57"},
@@ -5835,7 +5913,22 @@ screeninfo = [
{file = "screeninfo-0.6.7.tar.gz", hash = "sha256:1c4bac1ca329da3f68cbc4d2fbc92256aa9bb8ff8583ee3e14f91f0a7baa69cb"},
]
scs = [
{file = "scs-3.0.0.tar.gz", hash = "sha256:b29b6ae469041fd8e5831905dee5a10335c985e2d0e6a1c78c8a81c3bb974c2b"},
{file = "scs-3.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2663a42dfed0646886e937293de8bb8f81c7ff577db10f7899a0a49eddd465ff"},
{file = "scs-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:255f513d67a51f52e2387909ee1e7859c45ef0ba96b3ae45029d79b13a1d8c3f"},
{file = "scs-3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:ee2a3868f01a5d380fcbf68e7e081202040819de221b73267f205c2e2ac926a0"},
{file = "scs-3.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:23d34ba5f0c47138619ed7c220d75442ca17ef2b526281c40d81d0f5e9b046ef"},
{file = "scs-3.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:712491f06951c4345148d2c675eabebeb5bb8fe7f994a58b03c562ca167b66a4"},
{file = "scs-3.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8eed60b18a661a7253f2e869e6b59f70413a13306111175ff4eb940ae4b6ff93"},
{file = "scs-3.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:26913e794abf7f2e224d79e6a285d5b0d6d74c4ae7be79e206b90c573c6c6b84"},
{file = "scs-3.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8ca92b4637a0df380355582ef967251e9df788a2668a2539e6660ca7978a546"},
{file = "scs-3.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:5ffe01fbea3aea1ece0d6609e669b2bdc76d6b3e28ff9b6939a3cd2c58d3dfc8"},
{file = "scs-3.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d5b948a8d3f54d6eeda7e354bf1c58046e24f9d6de19b2e5e247e02a6e1b7511"},
{file = "scs-3.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f578c1b1d2faa45f728f9f10e866662093df8a446be649f61bf08332a0fad0fb"},
{file = "scs-3.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:9386469f96ad7bb0f2c0e76b96e6464fc72ee5803460fa29c18074e859ebdce5"},
{file = "scs-3.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:555e6a34cf305b6f37902b52b45d365fd5c6f2f5696a8d6b0b14d3191fb5340e"},
{file = "scs-3.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4dd78fc5b824c6f683f1ed887f363ca1e5f034cb7b22f281d2e49d9bb786341"},
{file = "scs-3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:12ede49041f51b7a5f3308df8e8418a35c76dd2b9de6e6ef0cf6b350fcd969bf"},
{file = "scs-3.0.1.tar.gz", hash = "sha256:22a8f319b989a5c4048e6313ccacf7d0dc4687af87ac1916c5750651b38f0623"},
]
seaborn = [
{file = "seaborn-0.11.2-py3-none-any.whl", hash = "sha256:85a6baa9b55f81a0623abddc4a26b334653ff4c6b18c418361de19dbba0ef283"},
@@ -6029,6 +6122,10 @@ tomli = [
{file = "tomli-1.2.3-py3-none-any.whl", hash = "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c"},
{file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"},
]
toolz = [
{file = "toolz-0.11.2-py3-none-any.whl", hash = "sha256:a5700ce83414c64514d82d60bcda8aabfde092d1c1a8663f9200c07fdcc6da8f"},
{file = "toolz-0.11.2.tar.gz", hash = "sha256:6b312d5e15138552f1bda8a4e66c30e236c831b612b2bf0005f8a1df10a4bc33"},
]
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"},
@@ -6200,8 +6297,8 @@ vcrpy = [
{file = "vcrpy-4.1.1.tar.gz", hash = "sha256:57095bf22fc0a2d99ee9674cdafebed0f3ba763018582450706f7d3a74fff599"},
]
virtualenv = [
{file = "virtualenv-20.12.0-py2.py3-none-any.whl", hash = "sha256:e41ee6238f7f857c75041d069b0f6e4084752d1ecc2d96b2e2614626a8337062"},
{file = "virtualenv-20.12.0.tar.gz", hash = "sha256:03dbbd4b2a85872a859dfabafc351d702a0b8ace8603da6eb2b90afdfb8fb91b"},
{file = "virtualenv-20.13.0-py2.py3-none-any.whl", hash = "sha256:339f16c4a86b44240ba7223d0f93a7887c3ca04b5f9c8129da7958447d079b09"},
{file = "virtualenv-20.13.0.tar.gz", hash = "sha256:d8458cf8d59d0ea495ad9b34c2599487f8a7772d796f9910858376d1600dd2dd"},
]
wcwidth = [
{file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"},

1
pyproject.toml vendored
View File

@@ -108,6 +108,7 @@ types-tabulate = "^0.8.3"
types-PyYAML = "^6.0.1"
types-python-dateutil = "^2.8.3"
pre-commit = "^2.16.0"
pandas-market-calendars = "^3.2"
[tool.poetry.extras]
prediction = ["tensorflow"]

68
requirements-full.txt vendored
View File

@@ -12,23 +12,23 @@ astroid==2.9.1; python_full_version >= "3.6.2"
astunparse==1.6.3
async-timeout==3.0.1; python_full_version >= "3.5.3" and python_version >= "3.6"
atomicwrites==1.4.0; 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.4.0"
attrs==21.4.0; python_full_version >= "3.6.1" and python_version >= "3.6" and python_version < "4.0"
attrs==21.4.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
babel==2.9.1; 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.4.0" and python_version >= "3.6")
backcall==0.2.0; python_version >= "3.7"
backports.zoneinfo==0.2.1; python_version < "3.9" 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")
bandit==1.7.1; python_version >= "3.5"
beartype==0.7.1; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.6.0"
beautifulsoup4==4.10.0; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.5"
beautifulsoup4==4.10.0; python_full_version > "3.0.0" and python_version >= "3.5"
black==21.7b0; python_full_version >= "3.6.2"
bleach==4.1.0; python_version >= "3.7"
bs4==0.0.1
bt==0.2.9; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
cachetools==4.2.4; python_version >= "3.5" and python_version < "4.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")
certifi==2021.10.8; python_full_version >= "3.7.1" and python_version >= "3.6" 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.8" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.6.0") and (python_version >= "3" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3")
cffi==1.15.0; implementation_name == "pypy" and python_version >= "3.7" and python_full_version >= "3.6.1"
certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
cffi==1.15.0; implementation_name == "pypy" and python_version >= "3.6"
cfgv==3.3.1; python_full_version >= "3.6.1"
chardet==4.0.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
charset-normalizer==2.0.9; python_full_version >= "3.7.1" and python_version >= "3.6" 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.8" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.6.0") and (python_version >= "3" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3")
charset-normalizer==2.0.9; python_full_version >= "3.6.0" and python_version >= "3"
click==8.0.3; python_full_version >= "3.6.2" and python_version >= "3.6"
codespell==2.1.0; python_version >= "3.5"
colorama==0.4.4; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
@@ -37,8 +37,8 @@ convertdate==2.3.2; python_version >= "3.6"
coverage==6.2; python_version >= "3.6"
cryptography==36.0.1; python_version >= "3.6"
cssselect==1.1.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
cvxpy==1.1.17; python_full_version >= "3.6.1" and python_full_version < "4.0.0" and python_version >= "3.6"
cycler==0.11.0; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.7"
cvxpy==1.1.18; python_full_version >= "3.6.1" and python_full_version < "4.0.0" and python_version >= "3.6"
cycler==0.11.0; python_version >= "3.7"
cython==0.29.26; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "darwin" or python_full_version >= "3.3.0" and sys_platform == "darwin" and python_version >= "3.6"
dateparser==1.1.0; python_version >= "3.5"
datetime==4.3; python_version >= "3.5"
@@ -54,6 +54,7 @@ docutils==0.16; python_full_version >= "3.6.8" and python_full_version < "4.0.0"
ecos==2.0.8; python_full_version >= "3.6.1" and python_full_version < "4.0.0" and python_version >= "3.6"
entrypoints==0.3; python_full_version >= "3.6.1" and python_version >= "3.7"
et-xmlfile==1.1.0; python_version >= "3.6"
exchange-calendars==3.5; python_version >= "3.7" and python_full_version >= "3.7.0"
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"
filelock==3.4.2; python_version >= "3.7" and python_full_version >= "3.6.1"
@@ -62,7 +63,7 @@ finviz==1.4.3
finvizfinance==0.9.10; python_version >= "3.5"
flake8==3.9.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
flatbuffers==2.0
fonttools==4.28.5; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.7"
fonttools==4.28.5; python_version >= "3.7"
fred==3.1
fredapi==0.4.3
frozendict==2.1.3; python_version >= "3.6"
@@ -79,7 +80,7 @@ h5py==3.6.0; python_version >= "3.7"
hijri-converter==2.2.2; python_version >= "3.6"
holidays==0.11.3.1; python_version >= "3.6"
identify==2.4.1; python_full_version >= "3.6.1"
idna==3.3; python_full_version >= "3.7.1" and python_version >= "3.6" 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.8" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.6.0") and (python_version >= "3" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3")
idna==3.3; python_full_version >= "3.6.2" and python_version >= "3.6"
imagesize==1.3.0; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6"
importlib-metadata==4.10.0; python_version < "3.10" and python_version >= "3.7"
inflection==0.5.1; python_version >= "3.6"
@@ -87,14 +88,14 @@ iniconfig==1.1.1; python_version >= "3.6"
investpy==1.0.7; python_version >= "3"
ipykernel==6.6.0; python_version >= "3.7"
ipympl==0.8.4
ipython-genutils==0.2.0; python_full_version >= "3.6.1" and python_version >= "3.6"
ipython-genutils==0.2.0; python_version >= "3.6"
ipython==7.30.1; python_version >= "3.7"
ipywidgets==7.6.5
iso8601==0.1.16
isort==5.10.1; python_full_version >= "3.6.2" and python_version < "4.0"
jedi==0.18.1; python_version >= "3.7"
jinja2==3.0.3; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.7"
joblib==1.1.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7"
joblib==1.1.0; python_version >= "3.7"
json5==0.9.6; python_version >= "3.6"
jsonschema==3.2.0
jupyter-client==7.1.0; python_full_version >= "3.6.1" and python_version >= "3.7"
@@ -108,15 +109,15 @@ jupyterlab-widgets==1.0.2; python_version >= "3.6"
jupyterlab==3.2.5; python_version >= "3.6"
keras-preprocessing==1.1.2
keras==2.7.0
kiwisolver==1.3.2; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.7"
korean-lunar-calendar==0.2.1; python_version >= "3.6"
kiwisolver==1.3.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==12.0.0
lxml==4.7.1; python_full_version >= "3.6.8" and python_version >= "3.5" and python_full_version < "4.0.0" and (python_version >= "3" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3") 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.8; python_full_version >= "3.6.8" and python_full_version < "4.0.0"
markdown-it-py==1.1.0; python_version >= "3.6" and python_version < "4.0"
markdown==3.3.6; python_version >= "3.6"
markupsafe==2.0.1; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.7"
markupsafe==2.0.1; python_version >= "3.6"
matplotlib-inline==0.1.3; python_version >= "3.7"
matplotlib==3.5.1; python_version >= "3.7"
mccabe==0.6.1; python_full_version >= "3.6.2"
@@ -134,7 +135,7 @@ nbclassic==0.3.4; python_version >= "3.6"
nbclient==0.5.9; python_full_version >= "3.6.1" and python_version >= "3.7"
nbconvert==6.3.0; python_version >= "3.7"
nbformat==5.1.3; python_full_version >= "3.6.1" and python_version >= "3.7"
nest-asyncio==1.5.4; python_full_version >= "3.6.1" and python_version >= "3.7"
nest-asyncio==1.5.4; python_full_version >= "3.6.1" and python_version >= "3.6"
nodeenv==1.6.0; python_full_version >= "3.6.1"
notebook==6.4.6; python_version >= "3.6"
numpy==1.21.2; python_version >= "3.7" and python_version < "3.11"
@@ -146,6 +147,7 @@ opt-einsum==3.3.0; python_version >= "3.5"
osqp==0.6.2.post4; python_full_version >= "3.6.1" and python_full_version < "4.0.0" and python_version >= "3.6"
packaging==21.3; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.7"
pandas-datareader==0.10.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-market-calendars==3.2; python_full_version >= "3.7.0"
pandas-ta==0.3.14b
pandas==1.3.5; python_full_version >= "3.7.1"
pandocfilters==1.5.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
@@ -170,23 +172,24 @@ prompt-toolkit==3.0.24; python_full_version >= "3.6.2"
protobuf==3.19.1; python_full_version >= "3.7.1" and python_full_version < "4.0.0" and python_version >= "3.6"
psaw==0.0.12; python_version >= "3"
ptyprocess==0.7.0; os_name != "nt" and python_version >= "3.7" and sys_platform != "win32"
py==1.11.0; python_full_version >= "3.6.1" and python_version >= "3.7" and implementation_name == "pypy"
py==1.11.0; python_version >= "3.6" and python_full_version < "3.0.0" and implementation_name == "pypy" or python_full_version >= "3.5.0" and python_version >= "3.6" and implementation_name == "pypy"
pyally==1.1.2
pyasn1-modules==0.2.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
pyasn1==0.4.8; python_version >= "3.6" 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_full_version >= "3.6.0" and python_version >= "3.6" 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")
pycodestyle==2.7.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
pycoingecko==1.4.1
pycparser==2.21; implementation_name == "pypy" and python_version >= "3.7" and python_full_version >= "3.6.1"
pycparser==2.21; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
pyex==0.5.0
pyflakes==2.3.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
pygments==2.11.1; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.7"
pylint==2.12.2; python_full_version >= "3.6.2"
pyluach==1.3.0; python_version >= "3.7" and python_full_version >= "3.7.0"
pymeeus==0.5.11; python_version >= "3.6"
pymongo==3.11.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
pyobjc-core==8.1; python_version >= "3.6" and sys_platform == "darwin"
pyobjc-framework-cocoa==8.1; python_version >= "3.6" and sys_platform == "darwin"
pyotp==2.6.0; python_version >= "3"
pyparsing==3.0.6; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.7"
pyparsing==3.0.6; python_version >= "3.7"
pyportfolioopt==1.5.1; 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.18.0; python_version >= "3.6"
@@ -195,16 +198,16 @@ pytest-recording==0.12.0; python_version >= "3.5"
pytest==6.2.5; python_version >= "3.6"
python-binance==1.0.15
python-coinmarketcap==0.2
python-dateutil==2.8.2; python_full_version >= "3.7.1" and python_version >= "3.7" and python_full_version < "4.0.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-dateutil==2.8.2; python_full_version >= "3.7.1" and python_version >= "3.7" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.7") 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.19.2; python_version >= "3.5"
pytrends==4.7.3
pytz-deprecation-shim==0.1.0.post0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
pytz==2021.3; python_full_version >= "3.7.1" and python_version >= "3.6" and python_full_version < "4.0.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6")
pyupgrade==2.30.1; python_full_version >= "3.6.1"
pywin32==303; sys_platform == "win32" and platform_python_implementation != "PyPy" and python_version >= "3.7" and python_full_version >= "3.6.1"
pytz==2021.3; python_full_version >= "3.7.1" and python_version >= "3.7" and python_full_version < "4.0.0"
pyupgrade==2.31.0; python_full_version >= "3.6.1"
pywin32==303; sys_platform == "win32" and platform_python_implementation != "PyPy" and python_version >= "3.6"
pywinpty==1.1.6; os_name == "nt" and python_version >= "3.6"
pyyaml==6.0; python_version >= "3.6" and python_full_version >= "3.6.1"
pyzmq==22.3.0; python_full_version >= "3.6.1" and python_version >= "3.7"
pyzmq==22.3.0; python_full_version >= "3.6.1" and python_version >= "3.6"
qdldl==0.1.5.post0; python_full_version >= "3.6.1" and python_full_version < "4.0.0" and python_version >= "3.6"
qtconsole==5.2.2; python_version >= "3.6"
qtpy==2.0.0; python_version >= "3.6"
@@ -214,19 +217,19 @@ regex==2021.11.10; python_full_version >= "3.6.2" and python_version >= "3.6"
reportlab==3.6.5; python_version >= "3.6" and python_version < "4"
requests-oauthlib==1.3.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
requests==2.26.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
rich==10.16.1; python_full_version >= "3.6.2" and python_full_version < "4.0.0"
rich==10.16.2; python_full_version >= "3.6.2" and python_full_version < "4.0.0"
robin-stocks==2.1.0; python_version >= "3"
rsa==4.8; python_version >= "3.6" 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")
scikit-learn==1.0.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7"
scipy==1.7.3; python_version >= "3.7" and python_version < "3.11" and python_full_version >= "3.6.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.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")
scipy==1.7.3; python_version >= "3.7" and python_version < "3.11" and python_full_version >= "3.6.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.6.0")
screeninfo==0.6.7
scs==3.0.0; python_full_version >= "3.6.1" and python_full_version < "4.0.0" and python_version >= "3.6"
scs==3.0.1; python_full_version >= "3.6.1" and python_full_version < "4.0.0" and python_version >= "3.6"
seaborn==0.11.2; python_version >= "3.6"
selenium==3.141.0
send2trash==1.8.0; python_version >= "3.6"
sentiment-investor==2.1.0; python_version >= "3.8" and python_version < "4.0"
setuptools-scm==6.3.2; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.7"
six==1.16.0; python_full_version >= "3.7.1" and python_version >= "3.7" and python_full_version < "4.0.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 >= "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") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.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")
setuptools-scm==6.3.2; python_version >= "3.7"
six==1.16.0; python_full_version >= "3.7.1" and python_version >= "3.6" and python_full_version < "4.0.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 >= "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") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.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")
smmap==5.0.0; python_version >= "3.7"
sniffio==1.2.0; python_full_version >= "3.6.2" and python_version >= "3.6"
snowballstemmer==2.2.0; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6"
@@ -257,10 +260,11 @@ terminado==0.12.1; python_version >= "3.6"
testpath==0.5.0; python_version >= "3.7"
textwrap3==0.9.2; python_version >= "3.6"
thepassiveinvestor==1.0.10
threadpoolctl==3.0.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7"
threadpoolctl==3.0.0; python_version >= "3.7"
tokenize-rt==4.2.1; python_full_version >= "3.6.1"
toml==0.10.2; python_full_version >= "3.6.2" 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")
tomli==1.2.3; python_full_version >= "3.6.2" and python_version >= "3.7"
toolz==0.11.2; python_version >= "3.7" and python_full_version >= "3.7.0"
tornado==6.1; python_full_version >= "3.6.1" and python_version >= "3.7"
tqdm==4.62.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
tradingview-ta==3.2.10; python_version >= "3.6"
@@ -277,13 +281,13 @@ tzlocal==4.1; python_version >= "3.6"
ujson==5.1.0; python_version >= "3.7"
unidecode==1.3.2; python_version >= "3.5"
update-checker==0.18.0; python_version >= "3.6" and python_version < "4.0"
urllib3==1.26.7; python_full_version >= "3.7.1" and python_version < "4" and python_version >= "3.6" 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.8" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.6.0") and (python_version >= "3" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3")
urllib3==1.26.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
user-agent==0.1.10
vadersentiment==3.3.2
valinvest==0.0.2; python_version >= "3.6"
vcrpy==4.1.1; python_version >= "3.5"
virtualenv==20.12.0; python_full_version >= "3.6.1"
wcwidth==0.2.5; python_version >= "3.7" and python_full_version >= "3.6.2"
virtualenv==20.13.0; python_full_version >= "3.6.1"
wcwidth==0.2.5; python_version >= "3.6" and python_full_version >= "3.6.2"
webencodings==0.5.1; python_version >= "3.7"
websocket-client==1.2.3; python_version >= "3.8" and python_version < "4.0"
websockets==9.1; python_full_version >= "3.6.1"

113
requirements.txt vendored
View File

@@ -7,29 +7,35 @@ appdirs==1.4.4; python_full_version >= "3.6.2" and python_version >= "3.6"
appnope==0.1.2; platform_system == "Darwin" and python_version >= "3.7" and sys_platform == "darwin"
argon2-cffi-bindings==21.2.0; python_version >= "3.6"
argon2-cffi==21.3.0; python_version >= "3.6"
astroid==2.9.1; python_full_version >= "3.6.2"
async-timeout==3.0.1; python_full_version >= "3.5.3" and python_version >= "3.6"
attrs==21.4.0; python_full_version >= "3.6.1" and python_version >= "3.6"
atomicwrites==1.4.0; 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.4.0"
attrs==21.4.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
babel==2.9.1; 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.4.0" and python_version >= "3.6")
backcall==0.2.0; python_version >= "3.7"
backports.zoneinfo==0.2.1; python_version < "3.9" 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")
bandit==1.7.1; python_version >= "3.5"
beartype==0.7.1; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.6.0"
beautifulsoup4==4.10.0; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.5"
beautifulsoup4==4.10.0; python_full_version > "3.0.0" and python_version >= "3.5"
black==21.7b0; python_full_version >= "3.6.2"
bleach==4.1.0; python_version >= "3.7"
bs4==0.0.1
bt==0.2.9; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
certifi==2021.10.8; python_full_version >= "3.7.1" and python_version >= "3.6" 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.8" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.6.0") and (python_version >= "3" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3")
cffi==1.15.0; implementation_name == "pypy" and python_version >= "3.7" and python_full_version >= "3.6.1"
certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
cffi==1.15.0; implementation_name == "pypy" and python_version >= "3.6"
cfgv==3.3.1; python_full_version >= "3.6.1"
chardet==4.0.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
charset-normalizer==2.0.9; python_full_version >= "3.7.1" and python_version >= "3.6" 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.8" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.6.0") and (python_version >= "3" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3")
charset-normalizer==2.0.9; python_full_version >= "3.6.0" and python_version >= "3"
click==8.0.3; python_full_version >= "3.6.2" and python_version >= "3.6"
codespell==2.1.0; python_version >= "3.5"
colorama==0.4.4; (python_version >= "2.7" and python_full_version < "3.0.0") or (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.3.2; python_version >= "3.6"
coverage==6.2; python_version >= "3.6"
cryptography==36.0.1; python_version >= "3.6"
cssselect==1.1.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
cvxpy==1.1.17; python_full_version >= "3.6.1" and python_full_version < "4.0.0" and python_version >= "3.6"
cycler==0.11.0; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.7"
cvxpy==1.1.18; python_full_version >= "3.6.1" and python_full_version < "4.0.0" and python_version >= "3.6"
cycler==0.11.0; python_version >= "3.7"
cython==0.29.26; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "darwin" or python_full_version >= "3.3.0" and sys_platform == "darwin" and python_version >= "3.6"
dateparser==1.1.0; python_version >= "3.5"
datetime==4.3; python_version >= "3.5"
@@ -39,17 +45,21 @@ defusedxml==0.7.1; python_version >= "3.7" and python_full_version < "3.0.0" or
degiro-connector==2.0.13; python_full_version >= "3.7.1" and python_full_version < "4.0.0"
deprecation==2.1.0
detecta==0.0.5; python_version >= "3.6"
distlib==0.3.4; python_full_version >= "3.6.1"
dnspython==2.1.0; 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"
docutils==0.16; 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")
ecos==2.0.8; python_full_version >= "3.6.1" and python_full_version < "4.0.0" and python_version >= "3.6"
entrypoints==0.3; python_full_version >= "3.6.1" and python_version >= "3.7"
et-xmlfile==1.1.0; python_version >= "3.6"
exchange-calendars==3.5; python_version >= "3.7" and python_full_version >= "3.7.0"
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"
filelock==3.4.2; python_version >= "3.7" and python_full_version >= "3.6.1"
financedatabase==1.0.2
finviz==1.4.3
finvizfinance==0.9.10; python_version >= "3.5"
fonttools==4.28.5; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.7"
flake8==3.9.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
fonttools==4.28.5; python_version >= "3.7"
fred==3.1
fredapi==0.4.3
frozendict==2.1.3; python_version >= "3.6"
@@ -60,19 +70,22 @@ gitpython==3.1.24; python_version >= "3.7"
grpcio==1.43.0; python_full_version >= "3.7.1" and python_full_version < "4.0.0" and python_version >= "3.6"
hijri-converter==2.2.2; python_version >= "3.6"
holidays==0.11.3.1; python_version >= "3.6"
idna==3.3; python_full_version >= "3.7.1" and python_version >= "3.6" 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.8" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.6.0") and (python_version >= "3" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3")
identify==2.4.1; python_full_version >= "3.6.1"
idna==3.3; python_full_version >= "3.6.2" and python_version >= "3.6"
imagesize==1.3.0; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6"
inflection==0.5.1; python_version >= "3.6"
iniconfig==1.1.1; python_version >= "3.6"
investpy==1.0.7; python_version >= "3"
ipykernel==6.6.0; python_version >= "3.7"
ipympl==0.8.4
ipython-genutils==0.2.0; python_full_version >= "3.6.1" and python_version >= "3.6"
ipython-genutils==0.2.0; python_version >= "3.6"
ipython==7.30.1; python_version >= "3.7"
ipywidgets==7.6.5
iso8601==0.1.16
isort==5.10.1; python_full_version >= "3.6.2" and python_version < "4.0"
jedi==0.18.1; python_version >= "3.7"
jinja2==3.0.3; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.7"
joblib==1.1.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7"
joblib==1.1.0; python_version >= "3.7"
json5==0.9.6; python_version >= "3.6"
jsonschema==3.2.0
jupyter-client==7.1.0; python_full_version >= "3.6.1" and python_version >= "3.7"
@@ -84,25 +97,32 @@ jupyterlab-pygments==0.1.2; python_version >= "3.7"
jupyterlab-server==2.10.2; python_version >= "3.6"
jupyterlab-widgets==1.0.2; python_version >= "3.6"
jupyterlab==3.2.5; python_version >= "3.6"
kiwisolver==1.3.2; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.7"
korean-lunar-calendar==0.2.1; python_version >= "3.6"
kiwisolver==1.3.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"
lxml==4.7.1; python_full_version >= "3.6.8" and python_version >= "3.5" and python_full_version < "4.0.0" and (python_version >= "3" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3") 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.8; python_full_version >= "3.6.8" and python_full_version < "4.0.0"
markupsafe==2.0.1; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.7"
markdown-it-py==1.1.0; python_version >= "3.6" and python_version < "4.0"
markupsafe==2.0.1; python_version >= "3.6"
matplotlib-inline==0.1.3; python_version >= "3.7"
matplotlib==3.5.1; python_version >= "3.7"
mccabe==0.6.1; python_full_version >= "3.6.2"
mdit-py-plugins==0.2.8; python_version >= "3.6" and python_version < "4.0"
mistune==0.8.4; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.7"
mock==4.0.3; python_version >= "3.6"
more-itertools==8.12.0; python_version >= "3.6"
mplfinance==0.12.8b6
multidict==5.2.0; python_version >= "3.6"
multitasking==0.0.10
mypy-extensions==0.4.3; python_full_version >= "3.6.2" and python_version >= "3.6"
mypy==0.930; python_version >= "3.6"
myst-parser==0.15.2; python_version >= "3.6"
nbclassic==0.3.4; python_version >= "3.6"
nbclient==0.5.9; python_full_version >= "3.6.1" and python_version >= "3.7"
nbconvert==6.3.0; python_version >= "3.7"
nbformat==5.1.3; python_full_version >= "3.6.1" and python_version >= "3.7"
nest-asyncio==1.5.4; python_full_version >= "3.6.1" and python_version >= "3.7"
nest-asyncio==1.5.4; python_full_version >= "3.6.1" and python_version >= "3.6"
nodeenv==1.6.0; python_full_version >= "3.6.1"
notebook==6.4.6; python_version >= "3.6"
numpy==1.21.2; python_version >= "3.7" and python_version < "3.11"
oandapyv20==0.6.3
@@ -112,6 +132,7 @@ openpyxl==3.0.9; python_version >= "3.6"
osqp==0.6.2.post4; python_full_version >= "3.6.1" and python_full_version < "4.0.0" and python_version >= "3.6"
packaging==21.3; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.7"
pandas-datareader==0.10.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-market-calendars==3.2; python_full_version >= "3.7.0"
pandas-ta==0.3.14b
pandas==1.3.5; python_full_version >= "3.7.1"
pandocfilters==1.5.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
@@ -119,45 +140,57 @@ papermill==2.3.3; python_version >= "3.6"
parso==0.8.3; python_version >= "3.7"
pathspec==0.9.0; python_full_version >= "3.6.2" and python_version >= "3.6"
patsy==0.5.2; python_version >= "3.6"
pbr==5.8.0; python_version >= "3.6"
pexpect==4.8.0; sys_platform != "win32" and python_version >= "3.7"
pickleshare==0.7.5; python_version >= "3.7"
pillow==8.4.0; python_version >= "3.6"
platformdirs==2.4.1; python_version >= "3.7" and python_full_version >= "3.6.2"
plotly==5.5.0; python_version >= "3.6"
pluggy==1.0.0; python_version >= "3.6"
pmdarima==1.8.4; python_version >= "3.6"
praw==7.5.0; python_version >= "3.6" and python_version < "4.0"
prawcore==2.3.0; python_version >= "3.6" and python_version < "4.0"
pre-commit==2.16.0; python_full_version >= "3.6.1"
prettytable==2.5.0; python_version >= "3.6"
prometheus-client==0.12.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
prompt-toolkit==3.0.24; python_full_version >= "3.6.2"
protobuf==3.19.1; python_full_version >= "3.7.1" and python_full_version < "4.0.0" and python_version >= "3.5"
psaw==0.0.12; python_version >= "3"
ptyprocess==0.7.0; os_name != "nt" and python_version >= "3.7" and sys_platform != "win32"
py==1.11.0; implementation_name == "pypy" and python_version >= "3.7" and python_full_version >= "3.6.1"
py==1.11.0; python_version >= "3.6" and python_full_version < "3.0.0" and implementation_name == "pypy" or python_full_version >= "3.5.0" and python_version >= "3.6" and implementation_name == "pypy"
pyally==1.1.2
pycodestyle==2.7.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
pycoingecko==1.4.1
pycparser==2.21; implementation_name == "pypy" and python_version >= "3.7" and python_full_version >= "3.6.1"
pycparser==2.21; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
pyex==0.5.0
pyflakes==2.3.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
pygments==2.11.1; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.7"
pylint==2.12.2; python_full_version >= "3.6.2"
pyluach==1.3.0; python_version >= "3.7" and python_full_version >= "3.7.0"
pymeeus==0.5.11; python_version >= "3.6"
pymongo==3.11.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
pyobjc-core==8.1; python_version >= "3.6" and sys_platform == "darwin"
pyobjc-framework-cocoa==8.1; python_version >= "3.6" and sys_platform == "darwin"
pyotp==2.6.0; python_version >= "3"
pyparsing==3.0.6; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.7"
pyparsing==3.0.6; python_version >= "3.7"
pyportfolioopt==1.5.1; 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.18.0; python_version >= "3.6"
pytest-mock==3.6.1; python_version >= "3.6"
pytest-recording==0.12.0; python_version >= "3.5"
pytest==6.2.5; python_version >= "3.6"
python-binance==1.0.15
python-coinmarketcap==0.2
python-dateutil==2.8.2; python_full_version >= "3.7.1" and python_version >= "3.7" and python_full_version < "4.0.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-dateutil==2.8.2; python_full_version >= "3.7.1" and python_version >= "3.7" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.7") 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.19.2; python_version >= "3.5"
pytrends==4.7.3
pytz-deprecation-shim==0.1.0.post0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
pytz==2021.3; python_full_version >= "3.7.1" and python_version >= "3.6" and python_full_version < "4.0.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6")
pywin32==303; sys_platform == "win32" and platform_python_implementation != "PyPy" and python_version >= "3.7" and python_full_version >= "3.6.1"
pytz==2021.3; python_full_version >= "3.7.1" and python_version >= "3.7" and python_full_version < "4.0.0"
pyupgrade==2.31.0; python_full_version >= "3.6.1"
pywin32==303; sys_platform == "win32" and platform_python_implementation != "PyPy" and python_version >= "3.6"
pywinpty==1.1.6; os_name == "nt" and python_version >= "3.6"
pyyaml==6.0; python_version >= "3.6"
pyzmq==22.3.0; python_full_version >= "3.6.1" and python_version >= "3.7"
pyyaml==6.0; python_version >= "3.6" and python_full_version >= "3.6.1"
pyzmq==22.3.0; python_full_version >= "3.6.1" and python_version >= "3.6"
qdldl==0.1.5.post0; python_full_version >= "3.6.1" and python_full_version < "4.0.0" and python_version >= "3.6"
qtconsole==5.2.2; python_version >= "3.6"
qtpy==2.0.0; python_version >= "3.6"
@@ -167,18 +200,18 @@ regex==2021.11.10; python_full_version >= "3.6.2" and python_version >= "3.6"
reportlab==3.6.5; python_version >= "3.6" and python_version < "4"
requests-oauthlib==1.3.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
requests==2.26.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
rich==10.16.1; python_full_version >= "3.6.2" and python_full_version < "4.0.0"
rich==10.16.2; python_full_version >= "3.6.2" and python_full_version < "4.0.0"
robin-stocks==2.1.0; python_version >= "3"
scikit-learn==1.0.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7"
scipy==1.7.3; python_version >= "3.7" and python_version < "3.11" and python_full_version >= "3.6.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.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")
scipy==1.7.3; python_version >= "3.7" and python_version < "3.11" and python_full_version >= "3.6.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.6.0")
screeninfo==0.6.7
scs==3.0.0; python_full_version >= "3.6.1" and python_full_version < "4.0.0" and python_version >= "3.6"
scs==3.0.1; python_full_version >= "3.6.1" and python_full_version < "4.0.0" and python_version >= "3.6"
seaborn==0.11.2; python_version >= "3.6"
selenium==3.141.0
send2trash==1.8.0; python_version >= "3.6"
sentiment-investor==2.1.0; python_version >= "3.8" and python_version < "4.0"
setuptools-scm==6.3.2; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.7"
six==1.16.0; python_full_version >= "3.7.1" and python_version >= "3.7" and python_full_version < "4.0.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 >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.7")
setuptools-scm==6.3.2; python_version >= "3.7"
six==1.16.0; python_full_version >= "3.7.1" and python_version >= "3.6" and python_full_version < "4.0.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") 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.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.7")
smmap==5.0.0; python_version >= "3.7"
sniffio==1.2.0; python_full_version >= "3.6.2" and python_version >= "3.6"
snowballstemmer==2.2.0; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6"
@@ -194,6 +227,7 @@ sphinxcontrib-qthelp==1.0.3; python_full_version >= "3.6.8" and python_full_vers
sphinxcontrib-serializinghtml==1.1.5; python_full_version >= "3.6.8" and python_full_version < "4.0.0" and python_version >= "3.6"
sseclient==0.0.27
statsmodels==0.12.2; python_version >= "3.6"
stevedore==3.5.0; python_version >= "3.6"
tabulate==0.8.9
temporal-cache==0.1.4
tenacity==8.0.1; python_version >= "3.6"
@@ -202,28 +236,39 @@ terminado==0.12.1; python_version >= "3.6"
testpath==0.5.0; python_version >= "3.7"
textwrap3==0.9.2; python_version >= "3.6"
thepassiveinvestor==1.0.10
threadpoolctl==3.0.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7"
threadpoolctl==3.0.0; python_version >= "3.7"
tokenize-rt==4.2.1; python_full_version >= "3.6.1"
toml==0.10.2; python_full_version >= "3.6.2" 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")
tomli==1.2.3; python_full_version >= "3.6.2" and python_version >= "3.7"
toolz==0.11.2; python_version >= "3.7" and python_full_version >= "3.7.0"
tornado==6.1; python_full_version >= "3.6.1" and python_version >= "3.7"
tqdm==4.62.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
tradingview-ta==3.2.10; python_version >= "3.6"
traitlets==5.1.1; python_full_version >= "3.6.1" and python_version >= "3.7"
typing-extensions==4.0.1; python_version < "3.10" and python_version >= "3.7"
types-python-dateutil==2.8.4
types-pytz==2021.3.3
types-pyyaml==6.0.1
types-requests==2.26.3
types-tabulate==0.8.4
types-termcolor==1.1.2
typing-extensions==4.0.1; python_version < "3.10" and python_version >= "3.7" and python_full_version >= "3.6.2"
tzdata==2021.5; 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.1; python_version >= "3.6"
ujson==5.1.0; python_version >= "3.7"
unidecode==1.3.2; python_version >= "3.5"
update-checker==0.18.0; python_version >= "3.6" and python_version < "4.0"
urllib3==1.26.7; python_full_version >= "3.7.1" and python_version < "4" and python_version >= "3.6" 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.8" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.6.0") and (python_version >= "3" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3")
urllib3==1.26.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
user-agent==0.1.10
vadersentiment==3.3.2
valinvest==0.0.2; python_version >= "3.6"
wcwidth==0.2.5; python_version >= "3.7" and python_full_version >= "3.6.2"
vcrpy==4.1.1; python_version >= "3.5"
virtualenv==20.13.0; python_full_version >= "3.6.1"
wcwidth==0.2.5; python_version >= "3.6" and python_full_version >= "3.6.2"
webencodings==0.5.1; python_version >= "3.7"
websocket-client==1.2.3; python_version >= "3.8" and python_version < "4.0"
websockets==9.1; python_full_version >= "3.6.1"
widgetsnbextension==3.5.2
wrapt==1.13.3; python_full_version >= "3.7.1" and python_full_version < "4.0.0"
wrapt==1.13.3; python_full_version >= "3.7.1" 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")
yarl==1.7.2; python_version >= "3.6"
yfinance==0.1.68
zope.interface==5.4.0; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5"

View File

@@ -8,6 +8,7 @@ import difflib
import logging
import sys
from typing import List, Union
import pytz
from prompt_toolkit.completion import NestedCompleter
@@ -15,6 +16,8 @@ from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.helper_funcs import (
get_flair,
system_clear,
get_user_timezone_or_invalid,
replace_user_timezone,
)
from gamestonk_terminal.loggers import setup_logging
from gamestonk_terminal.menu import session
@@ -51,6 +54,7 @@ class TerminalController:
"update",
"about",
"keys",
"tz",
]
CHOICES_MENUS = [
"stocks",
@@ -66,6 +70,8 @@ class TerminalController:
CHOICES += CHOICES_COMMANDS
CHOICES += CHOICES_MENUS
all_timezones = pytz.all_timezones
def __init__(self, jobs_cmds: List[str] = None):
"""Constructor"""
self.t_parser = argparse.ArgumentParser(add_help=False, prog="terminal")
@@ -77,7 +83,7 @@ class TerminalController:
if session and gtff.USE_PROMPT_TOOLKIT:
choices: dict = {c: None for c in self.CHOICES}
choices["tz"] = {c: None for c in self.all_timezones}
self.completer = NestedCompleter.from_nested_dict(choices)
self.queue: List[str] = list()
@@ -94,7 +100,7 @@ class TerminalController:
def print_help(self):
"""Print help"""
help_text = """
help_text = f"""
Multiple jobs queue (where each '/' denotes a new command). E.g.
/stocks $ disc/ugs -n 3/../load tsla/candle
@@ -114,6 +120,9 @@ The main commands you should be aware when navigating through the terminal are:
about about us
update update terminal automatically
keys check for status of API keys
tz set different timezone
Timezone: {get_user_timezone_or_invalid()}
> stocks
> crypto
@@ -263,6 +272,12 @@ The main commands you should be aware when navigating through the terminal are:
self.queue = portfolio_controller.menu(self.queue)
def call_tz(self, other_args: List[str]):
"""Process tz command"""
other_args.append(self.queue[0])
self.queue = self.queue[1:]
replace_user_timezone("/".join(other_args))
def terminal(jobs_cmds: List[str] = None):
"""Terminal Menu"""

View File

@@ -32,6 +32,7 @@ def vcr_config():
}
@pytest.mark.skip("Broken ?")
@pytest.mark.vcr
@pytest.mark.record_stdout
@pytest.mark.parametrize(