Feature/mstarpy (#4068)

* add mstarpy to new terminal version

* add mstarpy to new terminal version

* add mstarpy with poetry

* mapping country openbb convention and mstarpy iso

* empty dataframe if no assets

* remove investing command

* plot with parameters

* change source

* mstarpy in pyproject

* chnage poetry

* change poetry

* mstarpy key

* reformat with black

* spelling instantiated

* correct instantiate

* delete fo to pass codespell test

* correction flake8 test

* correction test mypy

* correction pylint

* pass mypy test

* correction test pylint

* remove mutable default value

* delete equity, comment, add sweden menu

* delete not used EXPORT_ONLY_RAW_DATA_ALLOWED

* delete not used investpy and yfinance view

* mstarpy 0.0.2

* minor changes to user msgs

* added countries to autocompletion

* hinting

* small change on load

* adjustments and deprecating investpy

* minor adjustment to also load country on reset

* removing forecasting as self.data is not popullated

* adjustments on sector

* minor adjustments

* fix tests

* fix tests

* improved swe functions

* plot display Nav

* united_states as default country

* mstarpy version 0.0.4

* adjustments

* dependencies

---------

Co-authored-by: James Maslek <jmaslek11@gmail.com>
Co-authored-by: Henrique Joaquim <h.joaquim@campus.fct.unl.pt>
This commit is contained in:
Mael_Jourdain
2023-02-03 14:28:31 +01:00
committed by GitHub
parent 6f73f6eb2a
commit 7175d0fa8f
31 changed files with 5186 additions and 4793 deletions

View File

@@ -488,14 +488,15 @@
"fwd": ["FXEmpire"]
},
"funds": {
"country": ["Investing"],
"overview": ["Investing"],
"search": ["Investing"],
"load": ["Investing"],
"info": ["Investing"],
"plot": ["Investing"],
"sector": ["YahooFinance"],
"equity": ["YahooFinance"],
"country": ["MorningStar"],
"search": ["MorningStar"],
"load": ["MorningStar"],
"info": ["MorningStar"],
"plot": ["MorningStar"],
"sector": ["MorningStar"],
"carbon" : ["MorningStar"],
"exclusion" : ["MorningStar"],
"holdings": ["MorningStar"],
"alswe": ["Avanza"],
"infoswe": ["Avanza"]
},

View File

@@ -89,7 +89,7 @@ en:
forecast: timeseries forecasting with machine learning
portfolio: perform portfolio optimization and look at portfolio performance and attribution
dashboards: interactive dashboards using voila and jupyter notebooks
stocks/filings: the most-recent form submissions to the SEC
stocks/filings: the most-recent form submissions to the SEC
stocks/search: search a specific stock ticker for analysis
stocks/load: load a specific stock ticker and additional info for analysis
stocks/_ticker: Stock
@@ -861,6 +861,11 @@ en:
funds/alswe: display fund allocation (sector, country, holdings)
funds/infoswe: get fund information
funds/forecast: forecasting techniques
funds/country_ms: set a country for filtering
funds/holdings: holdings of the loaded funds
funds/carbon: carbon metrics
funds/exclusion: exclusion policy
funds/_country_ms: Current Country MorningStar
alternative/hn: Hacker News most popular stories
alternative/covid: COVID menu, cases, deaths, rates
alternative/oss: Open Source menu, star history, repos information

View File

@@ -15,20 +15,19 @@ logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def get_data(name: str):
def get_data(isin: str):
"""Gets the data from Avanza
Parameters
----------
name: str
Full name of the fund
isin: str
ISIN of the fund
"""
ava_fund = pd.read_csv(
os.path.join("openbb_terminal", "mutual_funds", "avanza_fund_ID.csv"),
index_col=0,
)
ava_fund.index = ava_fund.index.str.upper()
fund_id = ava_fund.loc[name, "ID"]
fund_id = ava_fund.loc[ava_fund["ISIN"] == isin]["ID"].tolist()[0]
url = f"https://www.avanza.se/_api/fund-guide/guide/{fund_id}"
response = request(url)
fund_data = response.json()

View File

@@ -28,18 +28,20 @@ sector_dict = {
@log_start_end(log=logger)
def display_allocation(name: str, focus: str):
def display_allocation(name: str, isin: str, focus: str):
"""Displays the allocation of the selected swedish fund
Parameters
----------
name: str
Full name of the fund
isin: str
ISIN of the fund
focus: str
The focus of the displayed allocation/exposure of the fund
"""
# Taken from: https://github.com/northern-64bit/Portfolio-Report-Generator/tree/main
fund_data = avanza_model.get_data(name.upper())
fund_data = avanza_model.get_data(isin)
if focus in ["holding", "all"]:
table_row = []
console.print("")
@@ -81,15 +83,15 @@ def display_allocation(name: str, focus: str):
@log_start_end(log=logger)
def display_info(name: str):
def display_info(isin: str):
"""Displays info of swedish funds
Parameters
----------
name: str
Full name of the fund
isin: str
ISIN of the fund
"""
fund_data = avanza_model.get_data(name.upper())
fund_data = avanza_model.get_data(isin)
text = f"\nSwedish Description:\n\n{fund_data['description']}\n\nThe fund is managed by:\n"
for manager in fund_data["fundManagers"]:
text = text + f"\t- {manager['name']} since {manager['startDate']}\n"

View File

@@ -0,0 +1,125 @@
import logging
import mstarpy
import pandas as pd
from openbb_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def load_carbon_metrics(loaded_funds: mstarpy.Funds) -> pd.DataFrame:
"""Search mstarpy for carbon metrics
Parameters
----------
loaded_funds: mstarpy.Funds
class mstarpy.Funds instantiated with selected funds
Returns
-------
pd.DataFrame of carbon metrics
"""
carbonMetrics = loaded_funds.carbonMetrics()
return pd.Series(carbonMetrics, name="carbonMetrics").reset_index()
@log_start_end(log=logger)
def load_exclusion_policy(loaded_funds: mstarpy.Funds) -> pd.DataFrame:
"""Search mstarpy exclusion policy in esgData
Parameters
----------
loaded_funds: mstarpy.Funds
class mstarpy.Funds instantiated with selected funds
Returns
-------
pd.DataFrame of exclusion policy
"""
esgData = loaded_funds.esgData()
if "sustainabilityIntentionality" in esgData:
return pd.Series(
esgData["sustainabilityIntentionality"], name="exclusionPolicy"
).reset_index()
return pd.DataFrame()
@log_start_end(log=logger)
def load_funds(
term: str = "",
country: str = "",
) -> mstarpy.Funds:
"""Search mstarpy for matching funds
Parameters
----------
term : str
String that will be searched for. Can be name or isin
country : str
country where the funds is hosted
Returns
-------
mstarpy.Funds
"""
return mstarpy.Funds(term, country)
@log_start_end(log=logger)
def load_holdings(
loaded_funds: mstarpy.Funds, holding_type: str = "all"
) -> pd.DataFrame:
"""Search mstarpy for holdings
Parameters
----------
loaded_funds: mstarpy.Funds
class mstarpy.Funds instantiated with selected funds
holding_type : str
type of holdings, can be all, equity, bond, other
Returns
-------
pd.DataFrame of funds holdings
"""
holdings = loaded_funds.holdings(holding_type)
if holdings.empty:
return pd.DataFrame()
return holdings[["isin", "securityName", "weighting", "country"]]
@log_start_end(log=logger)
def search_funds(
term: str = "",
country: str = "",
pageSize=10,
) -> pd.DataFrame:
"""Search mstarpy for matching funds
Parameters
----------
term : str
String that will be searched for. Can be name or isin
field : list
list of field who will be displayed
country : str
country where the funds is hosted
pageSize : int
length of results to display
Returns
-------
pd.DataFrame
Dataframe containing matches
"""
field = ["SecId", "TenforeId", "LegalName"]
try:
return pd.DataFrame(
mstarpy.search_funds(term, field, country=country, pageSize=pageSize)
)
except RuntimeError as e:
logger.exception(str(e))
return pd.DataFrame()

View File

@@ -0,0 +1,275 @@
import logging
from typing import Union
import mstarpy
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from openbb_terminal.mutual_funds.mutual_funds_utils import mapping_country
from openbb_terminal.mutual_funds import mstarpy_model
from openbb_terminal.rich_config import console
from openbb_terminal.decorators import log_start_end
from openbb_terminal.helper_funcs import (
print_rich_table,
)
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_carbon_metrics(loaded_funds: mstarpy.Funds):
"""Display results of carbon metrics
Parameters
----------
loaded_funds: mstarpy.Funds
class mstarpy.Funds instantiated with selected funds
"""
carbonMetrics = mstarpy_model.load_carbon_metrics(loaded_funds)
print_rich_table(
carbonMetrics,
show_index=False,
title=f"[bold]Carbon metrics of the funds {loaded_funds.name}[/bold]",
)
@log_start_end(log=logger)
def display_exclusion_policy(loaded_funds: mstarpy.Funds):
"""Display results of exclusion policy
Parameters
----------
loaded_funds: mstarpy.Funds
class mstarpy.Funds instantiated with selected funds
"""
exclusion_policy = mstarpy_model.load_exclusion_policy(loaded_funds)
print_rich_table(
exclusion_policy,
show_index=False,
title=f"[bold]Exclusion policy of the funds {loaded_funds.name}[/bold]",
)
@log_start_end(log=logger)
def display_historical(
loaded_funds: mstarpy.Funds,
start_date: str,
end_date: str,
comparison: str = "",
):
"""Display historical fund, category, index price
Parameters
----------
loaded_funds: mstarpy.funds
class mstarpy.Funds instantiated with selected funds
start_date: str
start date of the period to be displayed
end_date: str
end date of the period to be displayed
comparison: str
type of comparison, can be index, category, both
"""
title = f"Performance of {loaded_funds.name}"
if not comparison:
data = loaded_funds.nav(start_date, end_date, frequency="daily")
fig, ax = plt.subplots(figsize=(10, 10))
ax.set_xlabel("Date")
ax.set_ylabel("Nav")
df = pd.DataFrame(data)
df["date"] = pd.to_datetime(df["date"])
ax.plot(df.date, df.nav, label=loaded_funds.name)
ax.legend(loc="best")
ax.set_title(title)
ax.tick_params(axis="x", rotation=45)
fig.tight_layout(pad=2)
else:
data = loaded_funds.historicalData()
comparison_list = {
"index": [
"fund",
"index",
],
"category": ["fund", "category"],
"both": ["fund", "index", "category"],
}
fig, ax = plt.subplots(figsize=(10, 10))
ax.set_xlabel("Date")
ax.set_ylabel("Performance (Base 100)")
for x in comparison_list[comparison]:
df = pd.DataFrame(data["graphData"][x])
df["date"] = pd.to_datetime(df["date"])
df = df.loc[(df["date"] >= start_date) & (df["date"] <= end_date)]
df["pct"] = (df["value"] / df["value"].shift(1) - 1).fillna(0)
df["base_100"] = 100 * np.cumprod(1 + df["pct"])
if x == "fund":
label = f"funds : {loaded_funds.name}"
else:
key = f"{x}Name"
if key in data:
label = f"{x} : {data[key]}"
title += f" vs {label}"
else:
label = x
ax.plot(df.date, df.base_100, label=label)
ax.legend(loc="best")
ax.set_title(title)
ax.tick_params(axis="x", rotation=45)
fig.tight_layout(pad=2)
@log_start_end(log=logger)
def display_holdings(loaded_funds: mstarpy.Funds, holding_type: str = "all"):
"""Display results of holdings
Parameters
----------
loaded_funds: mstarpy.Funds
class mstarpy.Funds instantiated with selected funds
holding_type : str
type of holdings, can be all, equity, bond, other
"""
holdings = mstarpy_model.load_holdings(loaded_funds, holding_type)
if isinstance(holdings, pd.DataFrame):
if holdings.empty:
if holding_type != "all":
console.print(f"The funds does not hold {holding_type} assets.")
else:
console.print("No holdings to be displayed.")
else:
print_rich_table(
holdings,
show_index=False,
title=f"[bold]{holding_type} holdings of the funds {loaded_funds.name}[/bold]",
)
@log_start_end(log=logger)
def display_load(
term: str = "",
country: str = "",
) -> Union[mstarpy.Funds, None]:
"""instantiate mstarpy Funds class and display the funds selected
Parameters
----------
term : str
String that will be searched for
country: str
Country to filter on
"""
if country:
iso_country = mapping_country[country]
else:
iso_country = ""
funds = mstarpy_model.load_funds(term, country=iso_country)
if isinstance(funds, mstarpy.Funds):
return funds
return None
@log_start_end(log=logger)
def display_search(
term: str = "",
country: str = "",
limit: int = 10,
):
"""Display results of searching for Mutual Funds
Parameters
----------
term : str
String that will be searched for
country: str
Country to filter on
limit: int
Number to show
"""
if country:
iso_country = mapping_country[country]
else:
iso_country = ""
searches = mstarpy_model.search_funds(term, country=iso_country, pageSize=limit)
if searches.empty:
console.print("No matches found.")
return
if country:
title = f"Mutual Funds from {country.title()} matching {term}"
else:
title = f"Mutual Funds matching {term}"
print_rich_table(
searches,
show_index=False,
title=f"[bold]{title}[/bold]",
)
@log_start_end(log=logger)
def display_sector(loaded_funds: mstarpy.Funds, asset_type: str = "equity"):
"""Display fund, category, index sector breakdown
Parameters
----------
loaded_funds: mstarpy.funds
class mstarpy.Funds instantiated with selected funds
asset_type: str
can be equity or fixed income
"""
if asset_type == "equity":
key = "EQUITY"
else:
key = "FIXEDINCOME"
d = loaded_funds.sector()[key]
fig, ax = plt.subplots(figsize=(10, 10))
width = -0.3
title = "Sector breakdown of "
for x in ["fund", "index", "category"]:
name = d[f"{x}Name"]
data = d[f"{x}Portfolio"]
p_date = data["portfolioDate"]
portfolio_date = p_date[:10] if p_date else ""
data.pop("portfolioDate")
labels = list(data.keys())
values = list(data.values())
# if all values are 0, skip
values = [0 if v is None else v for v in values]
if sum(values) == 0:
continue
label_loc = np.arange(len(labels)) # the label locations
ax.bar(label_loc + width, values, 0.3, label=f"{x} : {name} - {portfolio_date}")
width += 0.3 # the width of the bars
title += f" {name}"
ax.legend(loc="best")
ax.set_xticks(label_loc, labels)
ax.tick_params(axis="x", rotation=90)
ax.set_title(title)
fig.tight_layout(pad=2)

View File

@@ -6,29 +6,23 @@ import logging
import os
from datetime import datetime, timedelta
from typing import List
import investpy
import pandas as pd
from openbb_terminal.custom_prompt_toolkit import NestedCompleter
from openbb_terminal.custom_prompt_toolkit import NestedCompleter
from openbb_terminal import feature_flags as obbff
from openbb_terminal.decorators import log_start_end
from openbb_terminal.helper_funcs import (
EXPORT_BOTH_RAW_DATA_AND_FIGURES,
EXPORT_ONLY_FIGURES_ALLOWED,
EXPORT_ONLY_RAW_DATA_ALLOWED,
check_non_negative_float,
check_positive,
valid_date,
)
from openbb_terminal.menu import session
from openbb_terminal.mutual_funds import (
investpy_model,
investpy_view,
yfinance_view,
avanza_view,
mstarpy_view,
)
from openbb_terminal.mutual_funds.mutual_funds_utils import mapping_country
from openbb_terminal.parent_classes import BaseController
from openbb_terminal.rich_config import console, MenuText
@@ -42,80 +36,37 @@ class FundController(BaseController):
"resources",
"country",
"search",
"info",
"load",
"plot",
"sector",
"equity",
"alswe",
"infoswe",
"forecast",
"holdings",
"carbon",
"exclusion",
]
fund_countries = investpy.funds.get_fund_countries()
search_by_choices = ["name", "issuer", "isin", "symbol"]
search_cols = [
"country",
"name",
"symbol",
"issuer",
"isin",
"asset_class",
"currency",
"underlying",
]
focus_choices = ["all", "country", "sector", "holding"]
fund_countries = list(mapping_country.keys())
PATH = "/funds/"
FILE_PATH = os.path.join(os.path.dirname(__file__), "README.md")
CHOICES_GENERATION = True
def __init__(self, queue: List[str] = None):
"""Constructor"""
super().__init__(queue)
self.country = "united states"
self.data = pd.DataFrame()
self.country = "united_states"
self.funds_loaded = None
self.fund_name = ""
self.fund_symbol = ""
self.fund_isin = ""
self.TRY_RELOAD = True
self.end_date = ""
self.start_date = ""
if session and obbff.USE_PROMPT_TOOLKIT:
choices: dict = {c: {} for c in self.controller_choices}
one_to_hundred: dict = {str(c): {} for c in range(1, 100)}
choices["country"] = {c: {} for c in self.fund_countries}
choices["overview"] = {
"--limit": None,
"-l": "--limit",
}
choices["search"] = {
"--by": {c: {} for c in self.search_by_choices},
"-b": "--by",
"--fund": None,
"--sortby": {c: None for c in self.search_cols},
"-s": "--sortby",
"--limit": None,
"-l": "--limit",
"--reverse": {},
"-r": "--reverse",
}
choices["load"] = {
"--fund": None,
"--name": {},
"-n": "--name",
"--start": None,
"-s": "--start",
"--end": None,
"-e": "--end",
}
choices["sector"] = {
"--min": one_to_hundred,
"-m": "--min",
}
choices["alswe"] = {"--focus": {c: {} for c in self.focus_choices}}
choices["support"] = self.SUPPORT_CHOICES
choices["about"] = self.ABOUT_CHOICES
choices: dict = self.choices_default
choices["country"].update({c: {} for c in self.fund_countries})
self.completer = NestedCompleter.from_nested_dict(choices)
def print_help(self):
@@ -137,328 +88,22 @@ class FundController(BaseController):
mt.add_raw("\n")
mt.add_param("_fund", fund_string)
mt.add_raw("\n")
mt.add_cmd("info", self.fund_symbol)
mt.add_cmd("plot", self.fund_symbol)
if self.country == "united states":
mt.add_cmd("sector", self.fund_symbol)
mt.add_cmd("equity", self.fund_symbol)
if self.country == "sweden":
mt.add_cmd("alswe", self.fund_symbol)
mt.add_cmd("infoswe", self.fund_symbol)
mt.add_cmd("forecast", self.fund_symbol)
mt.add_cmd("sector", self.fund_symbol)
mt.add_cmd("holdings", self.fund_symbol)
mt.add_cmd("carbon", self.fund_symbol)
mt.add_cmd("exclusion", self.fund_symbol)
mt.add_cmd("alswe", self.fund_symbol and self.country == "sweden")
mt.add_cmd("infoswe", self.fund_symbol and self.country == "sweden")
console.print(text=mt.menu_text, menu="Mutual Funds")
def custom_reset(self):
"""Class specific component of reset command"""
if self.fund_name:
return ["funds", f"load {self.fund_name} --name"]
if self.fund_symbol and self.country:
return ["funds", f"country {self.country}", f"load {self.fund_symbol}"]
return []
@log_start_end(log=logger)
def call_country(self, other_args: List[str]):
"""Process country command"""
parser = argparse.ArgumentParser(
add_help=False,
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
prog="country",
description="Set a country for funds",
)
parser.add_argument(
"-n",
"--name",
type=str,
dest="name",
nargs="+",
help="country to select",
)
if other_args and "-" not in other_args[0][0]:
other_args.insert(0, "-n")
ns_parser = self.parse_known_args_and_warn(parser, other_args)
if ns_parser:
country_candidate = " ".join(ns_parser.name)
if country_candidate.lower() in self.fund_countries:
self.country = " ".join(ns_parser.name)
else:
console.print(
f"{country_candidate.lower()} not a valid country to select."
)
return self.queue
@log_start_end(log=logger)
def call_search(self, other_args: List[str]):
"""Process country command"""
parser = argparse.ArgumentParser(
add_help=False,
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
prog="search",
description="Search mutual funds in selected country based on selected field.",
)
parser.add_argument(
"-b",
"--by",
choices=self.search_by_choices,
default="name",
dest="by",
help="Field to search by",
)
parser.add_argument(
"--fund",
help="Fund string to search for",
dest="fund",
type=str,
nargs="+",
required="-h" not in other_args,
)
parser.add_argument(
"-s",
"--sortby",
dest="sortby",
choices=self.search_cols,
help="Column to sort by",
default="name",
)
parser.add_argument(
"-l",
"--limit",
help="Number of search results to show",
type=check_positive,
dest="limit",
default=10,
)
parser.add_argument(
"-r",
"--reverse",
action="store_true",
dest="reverse",
default=False,
help=(
"Data is sorted in descending order by default. "
"Reverse flag will sort it in an ascending way. "
"Only works when raw data is displayed."
),
)
if other_args and "-" not in other_args[0][0]:
other_args.insert(0, "--fund")
ns_parser = self.parse_known_args_and_warn(parser, other_args)
if ns_parser:
search_string = " ".join(ns_parser.fund)
investpy_view.display_search(
by=ns_parser.by,
value=search_string,
country=self.country,
limit=ns_parser.limit,
sortby=ns_parser.sortby,
ascend=ns_parser.reverse,
)
return self.queue
@log_start_end(log=logger)
def call_overview(self, other_args: List[str]):
"""Process country command"""
parser = argparse.ArgumentParser(
add_help=False,
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
prog="overview",
description="Show overview of funds from selected country.",
)
parser.add_argument(
"-l",
"--limit",
help="Number of search results to show",
type=check_positive,
dest="limit",
default=10,
)
ns_parser = self.parse_known_args_and_warn(
parser, other_args, export_allowed=EXPORT_ONLY_RAW_DATA_ALLOWED
)
if ns_parser:
investpy_view.display_overview(
self.country, limit=ns_parser.limit, export=ns_parser.export
)
return self.queue
@log_start_end(log=logger)
def call_info(self, other_args: List[str]):
"""Process country command"""
parser = argparse.ArgumentParser(
add_help=False,
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
prog="info",
description="Get fund information.",
)
ns_parser = self.parse_known_args_and_warn(parser, other_args)
if ns_parser:
if not self.fund_name:
console.print(
"No fund loaded. Please use `load` first to plot.\n", style="bold"
)
return self.queue
investpy_view.display_fund_info(self.fund_name, country=self.country)
return self.queue
@log_start_end(log=logger)
def call_load(self, other_args: List[str]):
"""Process country command"""
parser = argparse.ArgumentParser(
add_help=False,
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
prog="load",
description="Get historical data.",
)
parser.add_argument(
"--fund",
help="Fund string to search for",
dest="fund",
type=str,
nargs="+",
required="-h" not in other_args,
)
parser.add_argument(
"-n",
"--name",
action="store_true",
default=False,
dest="name",
help="Flag to indicate name provided instead of symbol.",
)
# Keeping the date format constant for investpy even though it needs to be reformatted in model
parser.add_argument(
"-s",
"--start",
type=valid_date,
default=(datetime.now() - timedelta(days=366)).strftime("%Y-%m-%d"),
dest="start",
help="The starting date (format YYYY-MM-DD) of the fund",
)
parser.add_argument(
"-e",
"--end",
type=valid_date,
default=datetime.now().strftime("%Y-%m-%d"),
dest="end",
help="The ending date (format YYYY-MM-DD) of the fund",
)
if other_args and "-" not in other_args[0][0]:
other_args.insert(0, "--fund")
ns_parser = self.parse_known_args_and_warn(parser, other_args)
if ns_parser:
parsed_fund = " ".join(ns_parser.fund)
(
self.data,
self.fund_name,
self.fund_symbol,
self.country,
) = investpy_model.get_fund_historical(
name=parsed_fund,
by_name=ns_parser.name,
country=self.country,
start_date=ns_parser.start,
end_date=ns_parser.end,
)
if self.data.empty:
console.print(
"""No data found.
Potential errors
-- Incorrect country specified
-- ISIN supplied instead of symbol
-- Name used, but --name flag not passed"""
)
return self.queue
@log_start_end(log=logger)
def call_plot(self, other_args: List[str]):
"""Process country command"""
parser = argparse.ArgumentParser(
add_help=False,
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
prog="plot",
description="Plot historical data.",
)
ns_parser = self.parse_known_args_and_warn(
parser, other_args, export_allowed=EXPORT_ONLY_FIGURES_ALLOWED
)
if ns_parser:
if not self.fund_symbol:
console.print(
"No fund loaded. Please use `load` first to plot.\n", style="bold"
)
return self.queue
investpy_view.display_historical(
self.data, name=self.fund_name, export=ns_parser.export
)
return self.queue
@log_start_end(log=logger)
def call_sector(self, other_args: List[str]):
"""Process sector command"""
parser = argparse.ArgumentParser(
add_help=False,
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
prog="sector",
description="Show fund sector weighting.",
)
parser.add_argument(
"-m",
"--min",
type=check_non_negative_float,
dest="min",
help="Minimum positive float to display sector",
default=5,
)
ns_parser = self.parse_known_args_and_warn(
parser, other_args, export_allowed=EXPORT_BOTH_RAW_DATA_AND_FIGURES
)
if ns_parser:
if self.country != "united states":
console.print(
"YFinance implementation currently only supports funds from united states"
)
return self.queue
if not self.fund_symbol or not self.fund_name:
console.print(
"No fund loaded. Please use `load` first to plot.\n", style="bold"
)
return self.queue
yfinance_view.display_sector(
self.fund_symbol,
min_pct_to_display=ns_parser.min,
export=ns_parser.export,
sheet_name=" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
return self.queue
@log_start_end(log=logger)
def call_equity(self, other_args: List[str]):
"""Process equity command"""
parser = argparse.ArgumentParser(
add_help=False,
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
prog="equity",
description="Show fund equity holdings.",
)
ns_parser = self.parse_known_args_and_warn(parser, other_args)
if ns_parser:
if self.country != "united states":
console.print(
"YFinance implementation currently only supports funds from united states"
)
return self.queue
if not self.fund_symbol or not self.fund_name:
console.print(
"No fund loaded. Please use `load` first to plot.\n", style="bold"
)
return self.queue
yfinance_view.display_equity(self.fund_symbol)
return self.queue
@log_start_end(log=logger)
def call_alswe(self, other_args: List[str]):
"""Process alswe command"""
@@ -466,13 +111,14 @@ Potential errors
add_help=False,
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
prog="alswe",
description="Show allocation of a swedish fund.",
description="Show allocation of a swedish fund. "
"To get a list of available funds, check the file `avanza_fund_ID.csv`.",
)
parser.add_argument(
"--focus",
dest="focus",
type=str,
choices=self.focus_choices,
choices=["all", "country", "sector", "holding"],
default="all",
help="The focus of the funds exposure/allocation",
)
@@ -488,20 +134,14 @@ Potential errors
"Avanza implementation currently only supports funds from sweden."
)
return self.queue
if self.fund_name == "":
if self.fund_symbol != "":
self.fund_symbol = investpy_model.get_fund_name_from_symbol(
self.fund_symbol
)
else:
console.print(
"No fund loaded. Please use `load` first.\n", style="bold"
)
return self.queue
if self.fund_name.upper() not in ava_fund.index.str.upper().to_numpy():
console.print("No fund data. Please use another fund", style="bold")
if self.fund_isin not in ava_fund["ISIN"].tolist():
console.print("No fund data. Please use another fund.")
return self.queue
avanza_view.display_allocation(self.fund_name, ns_parser.focus)
avanza_view.display_allocation(
name=self.fund_name, isin=self.fund_isin, focus=ns_parser.focus
)
return self.queue
@@ -512,7 +152,8 @@ Potential errors
add_help=False,
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
prog="infoswe",
description="Show fund info of a swedish fund.",
description="Show fund info of a swedish fund. "
"To get a list of available funds, check the file `avanza_fund_ID.csv`.",
)
ns_parser = self.parse_known_args_and_warn(parser, other_args)
@@ -526,32 +167,276 @@ Potential errors
"Avanza implementation currently only supports funds from sweden."
)
return self.queue
if self.fund_name == "":
if self.fund_symbol != "":
self.fund_symbol = investpy_model.get_fund_name_from_symbol(
self.fund_symbol
)
else:
console.print(
"No fund loaded. Please use `load` first.\n", style="bold"
)
return self.queue
if self.fund_name.upper() not in ava_fund.index.str.upper().to_numpy():
console.print("No fund data. Please use another fund", style="bold")
if self.fund_isin not in ava_fund["ISIN"].tolist():
console.print("No fund data. Please use another fund.")
return self.queue
avanza_view.display_info(self.fund_name)
avanza_view.display_info(self.fund_isin)
return self.queue
@log_start_end(log=logger)
def call_forecast(self, _):
"""Process forecast command"""
# pylint: disable=import-outside-toplevel
from openbb_terminal.forecast import forecast_controller
self.queue = self.load_class(
forecast_controller.ForecastController,
self.fund_name,
self.data,
self.queue,
def call_country(self, other_args: List[str]):
"""Process country command"""
parser = argparse.ArgumentParser(
add_help=False,
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
prog="country",
description="Set a country for funds",
)
parser.add_argument(
"-n",
"--name",
type=str,
choices=self.fund_countries,
dest="name",
help="country to select",
default="",
)
if other_args and "-" not in other_args[0][0]:
other_args.insert(0, "-n")
ns_parser = self.parse_known_args_and_warn(parser, other_args)
if ns_parser:
country_candidate = ns_parser.name
if country_candidate.lower() in self.fund_countries:
self.country = country_candidate
console.print(f"{country_candidate.title()} selected.")
else:
console.print(
f'" {country_candidate.title()} " not a valid country to select.'
)
return self.queue
@log_start_end(log=logger)
def call_search(self, other_args: List[str]):
"""Process search command"""
parser = argparse.ArgumentParser(
add_help=False,
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
prog="search",
description="Search mutual funds in selected country",
)
parser.add_argument(
"--fund",
help="Fund string to search for",
dest="fund",
type=str,
required="-h" not in other_args,
)
parser.add_argument(
"-l",
"--limit",
help="Number of search results to show",
type=check_positive,
dest="limit",
default=10,
)
if other_args and "-" not in other_args[0][0]:
other_args.insert(0, "--fund")
ns_parser = self.parse_known_args_and_warn(parser, other_args)
if ns_parser:
mstarpy_view.display_search(
term=ns_parser.fund,
country=self.country,
limit=ns_parser.limit,
)
return self.queue
@log_start_end(log=logger)
def call_load(self, other_args: List[str]):
parser = argparse.ArgumentParser(
add_help=False,
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
prog="load",
description="Load the fund to perform analysis on.",
)
parser.add_argument(
"--fund",
help="Fund string to search for",
dest="fund",
type=str,
required="-h" not in other_args,
)
parser.add_argument(
"-s",
"--start",
type=valid_date,
default=(datetime.now() - timedelta(days=365)).strftime("%Y-%m-%d"),
dest="start",
help="The starting date (format YYYY-MM-DD) of the stock",
)
parser.add_argument(
"-e",
"--end",
type=valid_date,
default=datetime.now().strftime("%Y-%m-%d"),
dest="end",
help="The ending date (format YYYY-MM-DD) of the stock",
)
if other_args and "-" not in other_args[0][0]:
other_args.insert(0, "--fund")
ns_parser = self.parse_known_args_and_warn(parser, other_args)
if ns_parser:
if not self.country:
console.print(
"[yellow]Loading without a country selected "
" might result in unexpected results.[/yellow]"
)
funds_loaded = mstarpy_view.display_load(
term=ns_parser.fund, country=self.country
)
if funds_loaded:
self.funds_loaded = funds_loaded
self.fund_name = funds_loaded.name
self.fund_symbol = funds_loaded.code
self.fund_isin = funds_loaded.isin
self.end_date = ns_parser.end.strftime("%Y-%m-%d")
self.start_date = ns_parser.start.strftime("%Y-%m-%d")
console.print(
f"The fund {self.fund_name} - {self.fund_isin} ({self.fund_symbol})"
" was successfully loaded."
)
else:
console.print("No funds were loaded.")
return self.queue
@log_start_end(log=logger)
def call_plot(self, other_args: List[str]):
"""Process plot command"""
parser = argparse.ArgumentParser(
add_help=False,
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
prog="plot",
description="Plot historical data.",
)
parser.add_argument(
"-c",
default="",
choices=["category", "index", "both"],
dest="compare",
type=str.lower,
help="Compare funds performance with its category or index",
)
ns_parser = self.parse_known_args_and_warn(
parser, other_args, export_allowed=EXPORT_ONLY_FIGURES_ALLOWED
)
if ns_parser:
if not self.fund_symbol:
console.print("No fund loaded. Please use `load` first to plot.")
return self.queue
mstarpy_view.display_historical(
loaded_funds=self.funds_loaded,
start_date=datetime.strptime(self.start_date, "%Y-%m-%d"),
end_date=datetime.strptime(self.end_date, "%Y-%m-%d"),
comparison=ns_parser.compare,
)
return self.queue
@log_start_end(log=logger)
def call_sector(self, other_args: List[str]):
"""Process plot command"""
parser = argparse.ArgumentParser(
add_help=False,
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
prog="sector",
description="Show funds, index, category sector breakdown.",
)
parser.add_argument(
"-t",
"--type",
type=str,
choices=["equity", "fixed_income"],
dest="type",
help="asset type to select",
default="equity",
)
if other_args and "-" not in other_args[0][0]:
other_args.insert(0, "-t")
ns_parser = self.parse_known_args_and_warn(parser, other_args)
if ns_parser:
if not self.fund_symbol:
console.print("No fund loaded. Please use `load` first.")
return self.queue
mstarpy_view.display_sector(self.funds_loaded, asset_type=ns_parser.type)
return self.queue
@log_start_end(log=logger)
def call_holdings(self, other_args: List[str]):
"""Process holdings command"""
parser = argparse.ArgumentParser(
add_help=False,
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
prog="holdings",
description="Show funds holdings.",
)
parser.add_argument(
"-t",
"--type",
type=str,
choices=["all", "equity", "bond", "other"],
dest="type",
help="type of holdings",
default="all",
)
if other_args and "-" not in other_args[0][0]:
other_args.insert(0, "-t")
ns_parser = self.parse_known_args_and_warn(parser, other_args)
if ns_parser:
if not self.fund_symbol:
console.print("No fund loaded. Please use `load` first.")
return self.queue
mstarpy_view.display_holdings(self.funds_loaded, ns_parser.type)
return self.queue
@log_start_end(log=logger)
def call_carbon(self, other_args: List[str]):
"""Process carbon_metrics command"""
parser = argparse.ArgumentParser(
add_help=False,
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
prog="carbon",
description="Show funds carbon metrcis.",
)
ns_parser = self.parse_known_args_and_warn(parser, other_args)
if ns_parser:
if not self.fund_symbol:
console.print("No fund loaded. Please use `load` first.")
return self.queue
mstarpy_view.display_carbon_metrics(self.funds_loaded)
return self.queue
@log_start_end(log=logger)
def call_exclusion(self, other_args: List[str]):
"""Process exclusion_policy command"""
parser = argparse.ArgumentParser(
add_help=False,
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
prog="exclusion",
description="Show funds exclsuion policy.",
)
ns_parser = self.parse_known_args_and_warn(parser, other_args)
if ns_parser:
if not self.fund_symbol:
console.print("No fund loaded. Please use `load` first to plot.")
return self.queue
mstarpy_view.display_exclusion_policy(self.funds_loaded)
return self.queue

View File

@@ -0,0 +1,250 @@
mapping_country = {
"afghanistan": "af",
"åland_islands": "ax",
"albania": "al",
"algeria": "dz",
"american_samoa": "as",
"andorra": "ad",
"angola": "ao",
"anguilla": "ai",
"antarctica": "aq",
"antigua_and_barbuda": "ag",
"argentina": "ar",
"armenia": "am",
"aruba": "aw",
"australia": "au",
"austria": "at",
"azerbaijan": "az",
"bahamas": "bs",
"bahrain": "bh",
"bangladesh": "bd",
"barbados": "bb",
"belarus": "by",
"belgium": "be",
"belize": "bz",
"benin": "bj",
"bermuda": "bm",
"bhutan": "bt",
"bolivia": "bo",
"bonaire": "bq",
"bosnia_and_herzegovina": "ba",
"botswana": "bw",
"bouvet_island": "bv",
"brazil": "br",
"british_indian_ocean_territory": "io",
"brunei_darussalam": "bn",
"bulgaria": "bg",
"burkina_faso": "bf",
"burundi": "bi",
"cabo_verde": "cv",
"cambodia": "kh",
"cameroon": "cm",
"canada": "ca",
"cayman_islands": "ky",
"central_african_republic": "cf",
"chad": "td",
"chile": "cl",
"china": "cn",
"christmas_island": "cx",
"cocos_(keeling)_islands": "cc",
"colombia": "co",
"comoros": "km",
"congo_(the_democratic_republic_of_the)": "cd",
"congo_(the)": "cg",
"cook_islands": "ck",
"costa_rica": "cr",
"cote_divoire": "ci",
"croatia": "hr",
"cuba": "cu",
"curaçao": "cw",
"cyprus": "cy",
"czechia": "cz",
"denmark": "dk",
"djibouti": "dj",
"dominica": "dm",
"dominican_republic": "do",
"ecuador": "ec",
"egypt": "eg",
"el_salvador": "sv",
"equatorial_guinea": "gq",
"eritrea": "er",
"estonia": "ee",
"eswatini": "sz",
"ethiopia": "et",
"falkland_islands": "fk",
"fiji": "fj",
"finland": "fi",
"france": "fr",
"french_guiana": "gf",
"french_polynesia": "pf",
"french_southern_territories": "tf",
"gabon": "ga",
"gambia": "gm",
"georgia": "ge",
"germany": "de",
"ghana": "gh",
"gibraltar": "gi",
"greece": "gr",
"greenland": "gl",
"grenada": "gd",
"guadeloupe": "gp",
"guam": "gu",
"guatemala": "gt",
"guernsey": "gg",
"guinea": "gn",
"guinea-bissau": "gw",
"guyana": "gy",
"haiti": "ht",
"heard_island_and_mcdonald_islands": "hm",
"holy_see": "va",
"honduras": "hn",
"hong_kong": "hk",
"hungary": "hu",
"iceland": "is",
"india": "in",
"indonesia": "id",
"iran": "ir",
"iraq": "iq",
"ireland": "ie",
"isle_of_man": "im",
"israel": "il",
"italy": "it",
"jamaica": "jm",
"japan": "jp",
"jersey": "je",
"jordan": "jo",
"kazakhstan": "kz",
"kenya": "ke",
"kiribati": "ki",
"korea_(the_democratic_peoples_republic_of)": "kp",
"korea_(the_republic_of)": "kr",
"kuwait": "kw",
"kyrgyzstan": "kg",
"lao_peoples_democratic_republic": "la",
"latvia": "lv",
"lebanon": "lb",
"lesotho": "ls",
"liberia": "lr",
"libya": "ly",
"liechtenstein": "li",
"lithuania": "lt",
"luxembourg": "lu",
"macao": "mo",
"north_macedonia": "mk",
"madagascar": "mg",
"malawi": "mw",
"malaysia": "my",
"maldives": "mv",
"mali": "ml",
"malta": "mt",
"marshall_islands": "mh",
"martinique": "mq",
"mauritania": "mr",
"mauritius": "mu",
"mayotte": "yt",
"mexico": "mx",
"micronesia": "fm",
"moldova": "md",
"monaco": "mc",
"mongolia": "mn",
"montenegro": "me",
"montserrat": "ms",
"morocco": "ma",
"mozambique": "mz",
"myanmar": "mm",
"namibia": "na",
"nauru": "nr",
"nepal": "np",
"netherlands": "nl",
"new_caledonia": "nc",
"new_zealand": "nz",
"nicaragua": "ni",
"niger": "ne",
"nigeria": "ng",
"niue": "nu",
"norfolk_island": "nf",
"northern_mariana_islands": "mp",
"norway": "no",
"oman": "om",
"pakistan": "pk",
"palau": "pw",
"palestine": "ps",
"panama": "pa",
"papua_new_guinea": "pg",
"paraguay": "py",
"peru": "pe",
"philippines": "ph",
"pitcairn": "pn",
"poland": "pl",
"portugal": "pt",
"puerto_rico": "pr",
"qatar": "qa",
"réunion": "re",
"romania": "ro",
"russian_federation": "ru",
"rwanda": "rw",
"saint_barthélemy": "bl",
"saint_helena": "sh",
"saint_kitts_and_nevis": "kn",
"saint_lucia": "lc",
"saint_martin_(french_part)": "mf",
"saint_pierre_and_miquelon": "pm",
"saint_vincent_and_the_grenadines": "vc",
"samoa": "ws",
"san_marino": "sm",
"sao_tome_and_principe": "st",
"saudi_arabia": "sa",
"senegal": "sn",
"serbia": "rs",
"seychelles": "sc",
"sierra_leone": "sl",
"singapore": "sg",
"sint_maarten_(dutch_part)": "sx",
"slovakia": "sk",
"slovenia": "si",
"solomon_islands": "sb",
"somalia": "so",
"south_africa": "za",
"south_georgia_and_the_south_sandwich_islands": "gs",
"south_sudan": "ss",
"spain": "es",
"sri_lanka": "lk",
"sudan": "sd",
"suriname": "sr",
"svalbard": "sj",
"sweden": "se",
"switzerland": "ch",
"syrian_arab_republic": "sy",
"taiwan": "tw",
"tajikistan": "tj",
"tanzania": "tz",
"thailand": "th",
"timor-leste": "tl",
"togo": "tg",
"tokelau": "tk",
"tonga": "to",
"trinidad_and_tobago": "tt",
"tunisia": "tn",
"türkiye": "tr",
"turkmenistan": "tm",
"turks_and_caicos_islands": "tc",
"tuvalu": "tv",
"uganda": "ug",
"ukraine": "ua",
"united_arab_emirates": "ae",
"united_kingdom": "gb",
"united_states_minor_outlying_islands": "um",
"united_states": "us",
"uruguay": "uy",
"uzbekistan": "uz",
"vanuatu": "vu",
"venezuela": "ve",
"viet_nam": "vn",
"virgin_islands_(british)": "vg",
"virgin_islands_(u.s.)": "vi",
"wallis_and_futuna": "wf",
"western_sahara": "eh",
"yemen": "ye",
"zambia": "zm",
"zimbabwe": "zw",
}

View File

@@ -104,6 +104,7 @@ class TerminalController(BaseController):
"sources",
"forecast",
"futures",
"funds",
]
PATH = "/"
@@ -187,6 +188,7 @@ class TerminalController(BaseController):
mt.add_menu("forex")
mt.add_menu("futures")
mt.add_menu("alternative")
mt.add_menu("funds")
mt.add_raw("\n")
mt.add_info("_others_")
mt.add_menu("econometrics")
@@ -472,6 +474,14 @@ class TerminalController(BaseController):
self.queue = self.load_class(FuturesController, self.queue)
def call_funds(self, _):
"""Process etf command"""
from openbb_terminal.mutual_funds.mutual_fund_controller import (
FundController,
)
self.queue = self.load_class(FundController, self.queue)
def call_intro(self, _):
"""Process intro command."""
console.print(panel.Panel("[purple]Welcome to the OpenBB Terminal.[/purple]"))

742
poetry.lock generated vendored

File diff suppressed because it is too large Load Diff

1
pyproject.toml vendored
View File

@@ -107,6 +107,7 @@ u8darts = {extras = ["torch"], version = "0.23.0", optional = true}
docstring-parser = {version = "^0.15", optional = true}
grpcio = "^1.51.1"
jupyterlab-widgets = "^3.0.3"
mstarpy = "^0.0.4"
packaging = ">=22.0"
SPARQLWrapper = "^2.0.0"

311
requirements-full.txt vendored
View File

@@ -1,10 +1,11 @@
absl-py==1.3.0; python_version >= "3.7"
absl-py==1.4.0; python_version >= "3.7"
aiodns==3.0.0; python_version >= "3.5.2" and python_full_version >= "3.7.0"
aiohttp==3.8.3; python_version >= "3.7" and python_full_version >= "3.7.0"
aiosignal==1.2.0; python_version >= "3.6" and python_full_version >= "3.7.0"
alabaster==0.7.12; python_version >= "3.6"
aiohttp==3.8.3; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0"
aiosignal==1.3.1; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0"
alabaster==0.7.13; python_version >= "3.6"
alpha-vantage==2.3.1
altair==4.2.0; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7"
altair==4.2.2; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7"
ansiwrap==0.8.4; python_version >= "3.7"
anyio==3.6.2; python_full_version >= "3.6.2" and python_version >= "3.8" and python_version < "4.0"
appdirs==1.4.4
appnope==0.1.3; sys_platform == "darwin" and python_version >= "3.8" and platform_system == "Darwin" and python_full_version >= "3.7.0" and python_full_version < "4.0.0"
@@ -13,48 +14,49 @@ argon2-cffi-bindings==21.2.0; python_version >= "3.7"
argon2-cffi==21.3.0; python_version >= "3.7"
ascii-magic==1.6; python_version >= "3.5"
astor==0.8.1; python_full_version >= "3.7.1" and python_full_version < "4.0.0" and python_version >= "3.8"
astroid==2.12.12; python_full_version >= "3.7.2"
astropy==5.1.1; python_version >= "3.8"
asttokens==2.0.8; python_version >= "3.8"
async-timeout==4.0.2; python_version >= "3.6" and python_full_version >= "3.7.0"
astroid==2.13.5; python_full_version >= "3.7.2"
astropy==5.2.1; python_version >= "3.8"
asttokens==2.2.1; python_version >= "3.8"
async-timeout==4.0.2; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0"
atomicwrites==1.4.1; sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.7.0" and python_full_version < "4.0.0"
attrs==21.4.0; python_full_version >= "3.7.0" and python_version >= "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.5.0") and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.7.0" or python_full_version > "3.9.7" and python_version >= "3.7" and python_full_version < "4.0.0")
babel==2.10.3; python_version >= "3.7"
attrs==21.4.0; python_full_version >= "3.7.0" and python_version >= "3.8" and python_version < "4.0" and (python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.5.0") and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.7.0" or python_full_version > "3.9.7" and python_version >= "3.7" and python_full_version < "4.0.0")
babel==2.11.0; python_version >= "3.7"
backcall==0.2.0; python_version >= "3.8"
backoff==2.2.1; python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.7.0"
backports.zoneinfo==0.2.1; python_version >= "3.7" and python_full_version < "3.9.7" and python_version < "3.9" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.6.0" or python_full_version > "3.9.7" and python_version >= "3.6") or python_full_version > "3.9.7" and python_version >= "3.6" and python_version < "3.9" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.6.0" or python_full_version > "3.9.7" and python_version >= "3.6")
backports.zoneinfo==0.2.1; python_version >= "3.7" and python_full_version < "3.9.7" and python_version < "3.9" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.6.0" or python_full_version > "3.9.7" and python_version >= "3.7") or python_full_version > "3.9.7" and python_version >= "3.7" and python_version < "3.9" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.6.0" or python_full_version > "3.9.7" and python_version >= "3.7")
bandit==1.7.4; python_version >= "3.7"
base58==2.1.1; python_version >= "3.5" and python_full_version >= "3.7.0"
beartype==0.7.1; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.6.0"
beautifulsoup4==4.11.1; python_full_version >= "3.6.0" and python_version >= "3.7"
beautifulsoup4==4.11.2; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.6.0"
black==23.1.0; python_version >= "3.7"
bleach==5.0.1; python_version >= "3.7"
bleach==6.0.0; python_version >= "3.7"
blinker==1.5; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.5.0" or python_full_version > "3.9.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==5.2.0; python_version >= "3.7" and python_version < "4.0" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7")
cachetools==5.3.0; python_version >= "3.7" and python_version < "4.0" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7")
catboost==1.1.1; python_version >= "3.7"
ccxt==2.5.80
ccxt==2.7.36
certifi==2022.12.7; python_version >= "3.8" and python_version < "4" and python_full_version >= "3.7.1" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7")
cffi==1.15.1; implementation_name == "pypy" and python_version >= "3.7" and python_full_version >= "3.7.0" and python_full_version < "4.0.0"
cffi==1.15.1; implementation_name == "pypy" and python_version >= "3.8" and python_full_version >= "3.7.0" and python_full_version < "4.0.0"
cfgv==3.3.1; python_full_version >= "3.6.1" and python_version >= "3.7"
charset-normalizer==2.1.1; python_full_version >= "3.6.0"
click==8.1.3; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7"
cloudpickle==2.2.0; python_version >= "3.7"
cmdstanpy==1.0.8; python_version >= "3.7"
cloudpickle==2.2.1; python_version >= "3.7"
cmdstanpy==1.1.0; python_version >= "3.7"
codespell==2.2.2; python_version >= "3.7"
colorama==0.4.6; python_full_version >= "3.7.2" and python_version >= "3.8" and sys_platform == "win32" and (python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.7.0") and (python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.7" and python_full_version >= "3.7.0") and (python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7") or platform_system == "Windows" and python_version >= "3.7" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7") and python_full_version >= "3.7.0") and (python_version >= "3.8" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.8" and python_full_version >= "3.7.0") and python_full_version < "4.0.0"
colorama==0.4.6; python_full_version >= "3.7.2" and python_version >= "3.8" and sys_platform == "win32" and (python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.7.0") and (python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.7" and python_full_version >= "3.7.0") and (python_version >= "3.8" and python_full_version < "3.0.0" and python_version < "4.0" and platform_system == "Windows" or python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0" and platform_system == "Windows") and (python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7") or platform_system == "Windows" and python_version >= "3.7" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7") and python_full_version >= "3.7.0") and (python_version >= "3.8" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.8" and python_full_version >= "3.7.0") and python_full_version < "4.0.0"
comm==0.1.2; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.8"
commonmark==0.9.1; python_full_version >= "3.6.3" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7")
convertdate==2.4.0; python_version >= "3.7" and python_version < "4"
coverage==6.5.0; python_version >= "3.7"
coverage==7.1.0; python_version >= "3.7"
cryptography==39.0.0; 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.2.1; python_version >= "3.7"
cssselect==1.2.0; python_version >= "3.8" and python_version < "4.0"
cvxpy==1.3.0; python_version >= "3.7"
cycler==0.11.0; python_version >= "3.7"
cython==0.29.32; python_version >= "3.8" 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.8"
dateparser==1.1.2; python_version >= "3.5"
datetime==4.7; python_version >= "3.5"
debugpy==1.6.3; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.7"
cython==0.29.33; python_version >= "3.8" 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.8"
dateparser==1.1.7; python_version >= "3.7"
datetime==5.0; python_version >= "3.5"
debugpy==1.6.6; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.8"
decorator==5.1.1; python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.8" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.8"
defusedxml==0.7.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7"
degiro-connector==2.0.21; python_full_version >= "3.7.1" and python_full_version < "4.0.0"
@@ -62,172 +64,173 @@ deprecation==2.1.0
detecta==0.0.5; python_version >= "3.6"
dill==0.3.6; python_version >= "3.7" and python_full_version >= "3.7.2"
distlib==0.3.6; python_version >= "3.7"
dnspython==2.2.1; python_version >= "3.6" and python_version < "4.0"
dnspython==2.3.0; python_version >= "3.7" and python_version < "4.0"
docutils==0.17.1; 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.10; python_version >= "3.7"
entrypoints==0.4; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.7" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7")
ephem==4.1.3; python_version >= "3.7" and python_version < "4"
ecos==2.0.12; python_version >= "3.7"
entrypoints==0.4; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.8" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7")
ephem==4.1.4; python_version >= "3.7" and python_version < "4"
et-xmlfile==1.1.0; python_version >= "3.6"
exchange-calendars==4.2.3; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0"
executing==1.1.1; python_version >= "3.8"
exchange-calendars==4.2.5; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0"
executing==1.2.0; python_version >= "3.8"
fastjsonschema==2.16.2; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.7"
feedparser==6.0.10; python_version >= "3.6"
ffn==0.3.6; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
filelock==3.8.0; python_version >= "3.7"
filelock==3.9.0; python_version >= "3.7"
financedatabase==1.0.2
finnhub-python==2.4.15
finviz==1.4.4
finnhub-python==2.4.16
finviz==1.4.5; python_version >= "3.8" and python_version < "4.0"
finvizfinance==0.14.4; python_version >= "3.5"
flake8==3.9.2; python_full_version >= "3.7.0"
flake8==5.0.4; python_full_version >= "3.7.0"
fonttools==4.38.0; python_version >= "3.7"
formulaic==0.3.4; python_full_version >= "3.7.1" and python_full_version < "4.0.0" and python_version >= "3.8"
fred==3.1
fredapi==0.4.3
frozendict==2.3.4; python_version >= "3.6"
frozenlist==1.3.1; python_version >= "3.7" and python_full_version >= "3.7.0"
frozenlist==1.3.3; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0"
fsspec==2023.1.0; python_version >= "3.7"
fundamentalanalysis==0.2.14
future==0.18.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
gitdb==4.0.9; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7"
gitdb==4.0.10; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7"
gitpython==3.1.30; python_version >= "3.7"
google-auth-oauthlib==0.4.6; python_version >= "3.7"
google-auth==2.14.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7"
google-auth==2.16.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7"
graphviz==0.20.1; python_version >= "3.7"
grpcio==1.51.1; python_version >= "3.7"
h11==0.12.0; python_version >= "3.8" and python_version < "4.0"
h11==0.14.0; python_version >= "3.8" and python_version < "4.0"
hijri-converter==2.2.4; python_version >= "3.7"
holidays==0.14.2; python_version >= "3.7"
html5lib==1.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
httpcore==0.15.0; python_version >= "3.8" and python_version < "4.0"
httpx==0.23.0; python_version >= "3.8" and python_version < "4.0"
identify==2.5.7; python_version >= "3.7"
httpcore==0.16.3; python_version >= "3.8" and python_version < "4.0"
httpx==0.23.3; python_version >= "3.8" and python_version < "4.0"
identify==2.5.17; python_version >= "3.7"
idna==3.4; python_version >= "3.8" and python_version < "4" and python_full_version >= "3.7.1" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7")
imagesize==1.4.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
importlib-metadata==5.0.0; python_version >= "3.7" and python_full_version < "3.9.7" and python_version < "3.9" or python_full_version > "3.9.7" and python_version >= "3.7" and python_version < "3.9"
importlib-metadata==6.0.0; python_version >= "3.7" and python_full_version < "3.9.7" and python_version < "3.9" or python_full_version > "3.9.7" and python_version >= "3.7" and python_version < "3.9"
inflection==0.5.1; python_version >= "3.6"
iniconfig==1.1.1; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.7"
iniconfig==2.0.0; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.7"
interface-meta==1.3.0; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.1" and python_full_version < "4.0.0"
investiny==0.5.0; python_version >= "3.8" and python_version < "4.0"
investpy==1.0.8; python_version >= "3.7"
ipyflex==0.2.4; python_version >= "3.6"
ipykernel==6.16.1; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.7"
ipyflex==0.2.6; python_version >= "3.6"
ipykernel==6.21.1; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.8"
ipympl==0.8.4
ipython-genutils==0.2.0; python_version >= "3.7"
ipython==8.5.0; python_version >= "3.8"
ipywidgets==8.0.2; python_version >= "3.7"
ipywidgets==8.0.4; python_version >= "3.7"
iso8601==0.1.16
isodate==0.6.1; python_version >= "3.7"
isort==5.10.1; python_full_version >= "3.7.2" and python_version < "4.0"
isort==5.12.0; python_full_version >= "3.8.0"
jedi==0.18.2; python_version >= "3.8"
jinja2==3.1.2; python_version >= "3.7"
joblib==1.2.0; python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.8"
json5==0.9.10; python_version >= "3.7"
json5==0.9.11; python_version >= "3.7"
jsonschema==3.2.0
jupyter-client==7.4.1; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.7"
jupyter-core==4.11.2; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.7"
jupyter-server==1.21.0; python_version >= "3.7"
jupyter-client==7.4.1; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.8"
jupyter-core==5.2.0; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.8"
jupyter-server==1.23.5; python_version >= "3.7"
jupyterlab-pygments==0.2.2; python_version >= "3.7"
jupyterlab-server==2.16.1; python_version >= "3.7"
jupyterlab-widgets==3.0.3; python_version >= "3.7"
jupyterlab==3.5.0; python_version >= "3.7"
jupyterlab-server==2.16.6; python_version >= "3.7"
jupyterlab-widgets==3.0.5; python_version >= "3.7"
jupyterlab==3.5.3; python_version >= "3.7"
kiwisolver==1.4.4; python_version >= "3.7"
korean-lunar-calendar==0.3.1; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0"
lazy-object-proxy==1.7.1; python_version >= "3.6" and python_full_version >= "3.7.2"
lightgbm==3.3.3; python_version >= "3.7"
lazy-object-proxy==1.9.0; python_version >= "3.7" and python_full_version >= "3.7.2"
lightgbm==3.3.5; python_version >= "3.7"
linearmodels==4.27; python_version >= "3.8"
llvmlite==0.39.1; python_version >= "3.7"
loguru==0.6.0; python_version >= "3.5" and python_full_version >= "3.7.0"
lunarcalendar==0.0.9; python_version >= "3.7" and python_version < "4"
lxml==4.9.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7"
lxml==4.9.2; 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"
markdown-it-py==1.1.0; python_version >= "3.6" and python_version < "4.0"
markdown==3.4.1; python_version >= "3.7"
markupsafe==2.1.1; python_version >= "3.7"
markupsafe==2.1.2; python_version >= "3.7"
matplotlib-inline==0.1.6; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.8"
matplotlib==3.5.3; python_version >= "3.7"
mccabe==0.6.1; python_full_version >= "3.7.2"
mccabe==0.7.0; python_version >= "3.6" and python_full_version >= "3.7.2"
mdit-py-plugins==0.2.8; python_version >= "3.6" and python_version < "4.0"
mistune==0.8.4; python_version >= "3.7"
mistune==2.0.4; python_version >= "3.7"
mock==4.0.3; python_version >= "3.6"
more-itertools==9.0.0; python_version >= "3.7"
mplfinance==0.12.9b1
multidict==6.0.2; python_version >= "3.7" and python_full_version >= "3.7.0"
mplfinance==0.12.9b7
mstarpy==0.0.4
multidict==6.0.4; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0"
multitasking==0.0.11
mypy-extensions==0.4.3; python_version >= "3.8"
mypy==0.930; python_version >= "3.6"
myst-parser==0.15.2; python_version >= "3.6"
nbclassic==0.4.5; python_version >= "3.7"
nbclient==0.5.13; python_full_version >= "3.7.0" and python_version >= "3.7" and python_full_version < "4.0.0"
nbconvert==6.5.4; python_version >= "3.7"
nbformat==5.7.0; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.7"
nbmake==1.3.0; python_full_version >= "3.7.0" and python_full_version < "4.0.0"
nest-asyncio==1.5.6; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.7"
networkx==2.8.7; python_version >= "3.8"
nbclassic==0.5.1; python_version >= "3.7"
nbclient==0.6.8; python_full_version >= "3.7.0" and python_version >= "3.7" and python_full_version < "4.0.0"
nbconvert==7.2.9; python_version >= "3.7"
nbformat==5.7.3; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.7"
nbmake==1.3.5; python_full_version >= "3.7.0" and python_full_version < "4.0.0"
nest-asyncio==1.5.6; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.8"
networkx==3.0; python_version >= "3.8"
nfoursid==1.0.1; python_version >= "3.7"
nodeenv==1.7.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.7.0" and python_version >= "3.7"
notebook-shim==0.2.0; python_version >= "3.7"
notebook==6.5.1; python_version >= "3.7"
notebook-shim==0.2.2; python_version >= "3.7"
notebook==6.5.2; python_version >= "3.7"
numba==0.56.4; python_version >= "3.7"
numpy==1.23.4; python_version >= "3.8"
oandapyv20==0.6.3
oauthlib==3.2.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
onetimepass==1.0.1; python_full_version >= "3.7.1" and python_full_version < "4.0.0"
openpyxl==3.0.10; python_version >= "3.6"
osqp==0.6.2.post5; python_version >= "3.7"
packaging==22.0; python_version >= "3.7"
openpyxl==3.1.0; python_version >= "3.6"
osqp==0.6.2.post8; python_version >= "3.7"
packaging==23.0; 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.5.1; python_version >= "3.8"
pandas==1.5.3; python_version >= "3.8"
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"
papermill @ git+https://github.com/nteract/papermill.git@main ; python_version >= "3.7"
papermill==2.4.0; python_version >= "3.7"
parso==0.8.3; python_version >= "3.8"
pathspec==0.11.0; python_version >= "3.7"
patsy==0.5.3; python_version >= "3.8"
pbr==5.11.0; python_version >= "3.8"
pbr==5.11.1; python_version >= "3.8"
pexpect==4.8.0; sys_platform != "win32" and python_version >= "3.8"
pickleshare==0.7.5; python_version >= "3.8"
pillow==9.4.0; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7"
platformdirs==2.5.2; python_version >= "3.7" and python_full_version >= "3.7.2"
plotly==5.10.0; python_version >= "3.6"
platformdirs==2.6.2; python_version >= "3.8" and python_full_version >= "3.7.2"
plotly==5.13.0; python_version >= "3.6"
pluggy==1.0.0; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.7"
pmdarima==2.0.1; python_version >= "3.7"
praw==7.6.0; python_version >= "3.7" and python_version < "4.0"
pmdarima==2.0.2; python_version >= "3.7"
praw==7.6.1; python_version >= "3.7" and python_version < "4.0"
prawcore==2.3.0; python_version >= "3.7" and python_version < "4.0"
pre-commit==2.20.0; python_version >= "3.7"
prometheus-client==0.15.0; python_version >= "3.7"
prompt-toolkit==3.0.31; python_full_version >= "3.6.2"
pre-commit==2.21.0; python_version >= "3.7"
prometheus-client==0.16.0; python_version >= "3.7"
prompt-toolkit==3.0.36; python_full_version >= "3.6.2"
property-cached==1.6.4; python_version >= "3.8"
prophet==1.1.1; python_version >= "3.7"
prophet==1.1.2; python_version >= "3.7"
protobuf==3.20.1; python_version >= "3.7"
psaw==0.0.12; python_version >= "3"
psutil==5.9.3; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.7"
psutil==5.9.4; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.8"
ptyprocess==0.7.0; sys_platform != "win32" and python_version >= "3.8" and os_name != "nt"
pure-eval==0.2.2; python_version >= "3.8"
py==1.11.0; python_full_version >= "3.7.0" and python_version >= "3.7" and python_full_version < "4.0.0" and implementation_name == "pypy"
py==1.11.0; python_full_version >= "3.7.0" and python_version >= "3.7" and python_full_version < "4.0.0"
pyally==1.1.2
pyarrow==9.0.0; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7"
pyarrow==11.0.0; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7"
pyasn1-modules==0.2.8; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7"
pyasn1==0.4.8; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7") or python_full_version >= "3.6.0" and python_version >= "3.7" and python_version < "4" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7")
pycares==4.2.2; python_version >= "3.5.2" and python_full_version >= "3.7.0"
pycodestyle==2.7.0; python_full_version >= "3.7.0"
pycares==4.3.0; python_version >= "3.5.2" and python_full_version >= "3.7.0"
pycodestyle==2.9.1; python_version >= "3.6" and python_full_version >= "3.7.0"
pycoingecko==2.3.0
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"
pydantic==1.10.4; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.7"
pydeck==0.8.0b4; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7"
pydeck==0.8.0; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7"
pydeprecate==0.3.2; python_version >= "3.7"
pyerfa==2.0.0.1; python_version >= "3.8"
pyex==0.5.0
pyflakes==2.3.1; python_full_version >= "3.7.0"
pygments==2.13.0; python_version >= "3.6"
pyhdfe==0.1.0; python_version >= "3.8"
pyflakes==2.5.0; python_version >= "3.6" and python_full_version >= "3.7.0"
pygments==2.14.0; python_version >= "3.6"
pyhdfe==0.1.2; python_version >= "3.8"
pylint==2.15.2; python_full_version >= "3.7.2"
pyluach==2.0.2; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0"
pymeeus==0.5.11; python_version >= "3.7" and python_version < "4"
pymeeus==0.5.12; python_version >= "3.7" and python_version < "4"
pympler==1.0.1; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.6"
pyobjc-core==8.5.1; python_version >= "3.6" and sys_platform == "darwin"
pyobjc-framework-cocoa==8.5.1; python_version >= "3.6" and sys_platform == "darwin"
pyobjc-core==9.0.1; python_version >= "3.7" and sys_platform == "darwin"
pyobjc-framework-cocoa==9.0.1; python_version >= "3.7" and sys_platform == "darwin"
pyod==1.0.7; python_version >= "3.7"
pyotp==2.7.0; python_version >= "3.6"
pyotp==2.8.0; python_version >= "3.7"
pyparsing==3.0.9; python_full_version >= "3.6.8" and python_version >= "3.7"
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.1; python_version >= "3.7"
@@ -235,28 +238,28 @@ pytest-cov==3.0.0; python_version >= "3.6"
pytest-mock==3.10.0; python_version >= "3.7"
pytest-recording==0.12.1; python_version >= "3.5"
pytest==6.2.5; python_version >= "3.6"
pythclient==0.1.2; python_full_version >= "3.7.0"
pythclient==0.1.4; python_full_version >= "3.7.0"
python-binance==1.0.16
python-coinmarketcap==0.2
python-dateutil==2.8.2; python_full_version >= "3.7.1" and python_version >= "3.8" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.3.0" or python_full_version > "3.9.7") and (python_version >= "3.8" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.8") 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") and python_version < "4.0" and (python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4" or python_version >= "3.7" and python_version < "4" and python_full_version >= "3.3.0")
python-dateutil==2.8.2; python_full_version >= "3.7.1" and python_version >= "3.8" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.3.0" or python_full_version > "3.9.7") and (python_version >= "3.8" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.8") 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 < "4.0" and (python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4" or python_version >= "3.7" and python_version < "4" and python_full_version >= "3.3.0")
python-dotenv==0.19.2; python_version >= "3.5"
python-i18n==0.3.9
pytorch-lightning==1.6.5; python_version >= "3.7"
pytrends==4.8.0
pytz-deprecation-shim==0.1.0.post0; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.6.0" or python_full_version > "3.9.7" and python_version >= "3.6"
pytz==2022.5; python_full_version >= "3.7.1" and python_full_version < "4.0.0" and python_version >= "3.8" and (python_version >= "3.8" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.8") and python_version < "4.0"
pytrends==4.9.0; python_version >= "3.7"
pytz-deprecation-shim==0.1.0.post0; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.6.0" or python_full_version > "3.9.7" and python_version >= "3.7"
pytz==2022.7.1; python_full_version >= "3.7.1" and python_full_version < "4.0.0" and python_version >= "3.8" and (python_version >= "3.8" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.8") and python_version < "4.0"
pyupgrade==2.38.4; python_version >= "3.7"
pywin32==305; sys_platform == "win32" and platform_python_implementation != "PyPy" and python_version >= "3.7"
pywinpty==2.0.8; os_name == "nt" and python_version >= "3.7"
pywin32==305; sys_platform == "win32" and platform_python_implementation != "PyPy" and python_version >= "3.8"
pywinpty==2.0.10; os_name == "nt" and python_version >= "3.7"
pyyaml==6.0; python_version >= "3.8"
pyzmq==24.0.1; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.7"
qdldl==0.1.5.post2; python_version >= "3.7"
pyzmq==25.0.0; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.8"
qdldl==0.1.5.post3; python_version >= "3.7"
quandl==3.7.0; python_version >= "3.6"
rapidfuzz==1.9.1; python_version >= "2.7"
rdflib==6.2.0; python_version >= "3.7"
regex==2022.3.2; python_version >= "3.6"
regex==2022.10.31; python_version >= "3.7"
requests-oauthlib==1.3.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
requests==2.28.1; python_version >= "3.7" and python_version < "4"
requests==2.28.2; python_version >= "3.7" and python_version < "4"
rfc3986==1.5.0; python_version >= "3.8" and python_version < "4.0"
rich==12.6.0; python_full_version >= "3.6.3" and python_full_version < "4.0.0"
riskfolio-lib==3.3.0; python_version >= "3.7"
@@ -265,49 +268,49 @@ rsa==4.9; python_version >= "3.6" and python_version < "4" and (python_version >
ruamel.yaml.clib==0.2.7; platform_python_implementation == "CPython" and python_version < "3.11" and python_version >= "3.5"
ruamel.yaml==0.17.21; python_version >= "3"
ruff==0.0.236; python_version >= "3.7"
scikit-learn==1.1.2; python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.8"
scikit-learn==1.2.1; python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.8"
scipy==1.10.0; python_version >= "3.8" and python_version < "3.12"
screeninfo==0.6.7
scs==3.2.0; python_version >= "3.7"
scs==3.2.2; python_version >= "3.7"
seaborn==0.11.2; python_version >= "3.6"
semver==2.13.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.4.0" or python_full_version > "3.9.7"
send2trash==1.8.0; python_version >= "3.7"
sentiment-investor==2.1.0; python_version >= "3.8" and python_version < "4.0"
setuptools-git==1.2; python_version >= "3.7"
setuptools-scm==6.4.2; python_version >= "3.8"
sgmllib3k==1.0.0; python_version >= "3.6"
shap==0.41.0; python_version >= "3.7"
six==1.16.0; python_full_version >= "3.7.1" and python_version >= "3.8" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.3.0" or python_full_version > "3.9.7") and (python_version >= "3.8" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.8") 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 >= "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.9.7" and python_full_version >= "3.7.0" or python_full_version > "3.9.7" and python_version >= "3.7" and python_full_version < "4.0.0") and (python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.8") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7")
six==1.16.0; python_full_version >= "3.7.1" and python_version >= "3.8" and python_version < "4.0" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.3.0" or python_full_version > "3.9.7") and (python_version >= "3.8" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.8") 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 >= "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.9.7" and python_full_version >= "3.7.0" or python_full_version > "3.9.7" and python_version >= "3.7" and python_full_version < "4.0.0") and (python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.8") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7")
slicer==0.0.7; python_version >= "3.7"
smmap==5.0.0; python_version >= "3.7"
sniffio==1.3.0; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.6.2"
snowballstemmer==2.2.0; python_version >= "3.6"
socketio-client-nexus==0.7.6
soupsieve==2.3.2.post1; python_version >= "3.6" and python_full_version >= "3.6.0"
soupsieve==2.3.2.post1; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.6.0"
sparqlwrapper==2.0.0; python_version >= "3.7"
sphinx==4.5.0; python_version >= "3.6"
sphinxcontrib-applehelp==1.0.2; python_version >= "3.6"
sphinxcontrib-applehelp==1.0.4; python_version >= "3.8"
sphinxcontrib-devhelp==1.0.2; python_version >= "3.6"
sphinxcontrib-htmlhelp==2.0.0; python_version >= "3.6"
sphinxcontrib-htmlhelp==2.0.1; python_version >= "3.8"
sphinxcontrib-jsmath==1.0.1; python_version >= "3.6"
sphinxcontrib-qthelp==1.0.3; python_version >= "3.6"
sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.6"
squarify==0.4.3
sseclient==0.0.27
stack-data==0.5.1; python_version >= "3.8"
statsforecast==1.3.1; python_version >= "3.7"
stack-data==0.6.2; python_version >= "3.8"
statsforecast==1.4.0; python_version >= "3.7"
statsmodels==0.13.2; python_version >= "3.7"
stevedore==4.1.0; python_version >= "3.8"
stevedore==4.1.1; python_version >= "3.8"
stocksera==0.1.21; python_version >= "3.6"
streamlit==1.13.0; (python_version >= "3.7" and python_full_version < "3.9.7") or (python_full_version > "3.9.7")
streamlit==1.17.0; (python_version >= "3.7" and python_full_version < "3.9.7") or (python_full_version > "3.9.7")
tabulate==0.9.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7"
tbats==1.1.1; python_version >= "3.7"
tbats==1.1.2; python_version >= "3.7"
temporal-cache==0.1.4
tenacity==8.1.0; python_version >= "3.7"
tenacity==7.0.0; python_version >= "3.8" and python_version < "4.0"
tensorboard-data-server==0.6.1; python_version >= "3.7"
tensorboard-plugin-wit==1.8.1; python_version >= "3.7"
tensorboard==2.11.0; python_version >= "3.7"
terminado==0.16.0; python_version >= "3.7"
tensorboard==2.11.2; python_version >= "3.7"
terminado==0.17.1; python_version >= "3.7"
textwrap3==0.9.2; python_version >= "3.7"
thepassiveinvestor==1.1.2
threadpoolctl==3.1.0; python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.8"
tinycss2==1.2.1; python_version >= "3.7"
@@ -315,49 +318,49 @@ tokenize-rt==4.2.1; python_full_version >= "3.6.1" and python_version >= "3.7"
tokenterminal==1.0.1
toml==0.10.2; python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.7.0" or python_full_version > "3.9.7" and python_version >= "3.7" and python_full_version < "4.0.0"
tomli==2.0.1; python_version < "3.11" and python_full_version >= "3.7.2" and python_version >= "3.8" and python_full_version <= "3.11.0a6"
tomlkit==0.11.5; python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.7.2"
tomlkit==0.11.6; python_version >= "3.6" and python_full_version >= "3.7.2"
toolz==0.12.0; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7")
torch==1.11.0; python_full_version >= "3.7.0"
torchmetrics==0.10.3; python_version >= "3.7"
tornado==6.2; python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.7.0" or python_full_version > "3.9.7" and python_version >= "3.7" and python_full_version < "4.0.0"
tqdm==4.64.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
torchmetrics==0.11.1; python_version >= "3.7"
tornado==6.2; python_version >= "3.8" and python_full_version < "3.9.7" and python_full_version >= "3.7.0" or python_full_version > "3.9.7" and python_version >= "3.8" and python_full_version < "4.0.0"
tqdm==4.64.1; 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.4.0"
tradingview-ta==3.3.0; python_version >= "3.6"
traitlets==5.5.0; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.8"
types-python-dateutil==2.8.19.2
traitlets==5.9.0; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.8"
types-python-dateutil==2.8.19.6
types-pytz==2021.3.8
types-pyyaml==6.0.12
types-requests==2.28.11.2
types-pyyaml==6.0.12.4
types-requests==2.28.11.8
types-setuptools==57.4.18
types-six==1.16.21
types-urllib3==1.26.25.1
types-six==1.16.21.4
types-urllib3==1.26.25.4
typing-extensions==4.4.0; python_full_version >= "3.7.2" and python_full_version < "4.0.0" and python_version < "3.9" and python_version >= "3.7" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7") and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7")
tzdata==2022.5; python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or python_version >= "3.7" and python_full_version < "3.9.7" and platform_system == "Windows" and python_full_version >= "3.6.0" or python_full_version > "3.9.7" and python_version >= "3.6" and platform_system == "Windows"
tzlocal==4.2; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.6"
tzdata==2022.7; python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or python_version >= "3.7" and python_full_version < "3.9.7" and platform_system == "Windows" and python_full_version >= "3.6.0" or python_full_version > "3.9.7" and python_version >= "3.7" and platform_system == "Windows"
tzlocal==4.2; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7"
u8darts==0.23.0; python_version >= "3.7"
ujson==5.5.0; python_version >= "3.7"
ujson==5.7.0; python_version >= "3.7"
unidecode==1.3.6; python_version >= "3.7"
update-checker==0.18.0; python_version >= "3.7" and python_version < "4.0"
urllib3==1.26.12; python_full_version >= "3.7.1" and python_version < "4" and python_version >= "3.8" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.7")
user-agent==0.1.10
urllib3==1.26.14; python_version >= "3.8" and python_version < "4" and python_full_version >= "3.7.1" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7")
user-agent==0.1.10; python_version >= "3.8" and python_version < "4.0"
vadersentiment==3.3.2
validators==0.20.0; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.4"
valinvest==0.0.2; python_version >= "3.6"
vcrpy==4.2.1; python_version >= "3.7"
virtualenv==20.16.5; python_version >= "3.7"
virtualenv==20.17.1; python_version >= "3.7"
voila==0.4.0; python_version >= "3.7"
watchdog==2.1.9; python_version >= "3.6"
wcwidth==0.2.5; python_full_version >= "3.6.2" and python_version >= "3.8"
watchdog==2.2.1; python_version >= "3.6"
wcwidth==0.2.6; python_full_version >= "3.6.2" and python_version >= "3.8"
webencodings==0.5.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7"
websocket-client==1.4.1; python_version >= "3.8" and python_version < "4.0"
websockets==10.3; python_version >= "3.7"
websocket-client==1.5.0; python_version >= "3.8" and python_version < "4.0"
websockets==10.4; python_version >= "3.7"
werkzeug==2.2.2; python_version >= "3.7"
widgetsnbextension==4.0.3; python_version >= "3.7"
widgetsnbextension==4.0.5; python_version >= "3.7"
win32-setctime==1.1.0; python_version >= "3.5" and python_full_version >= "3.7.0" and sys_platform == "win32"
wrapt==1.14.1; python_full_version >= "3.7.2" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7") and python_version >= "3.8" and python_version < "3.11"
xarray==2022.11.0; python_version >= "3.8"
xgboost==1.7.2; python_version >= "3.8"
xlsxwriter==3.0.3; python_version >= "3.7"
yarl==1.8.1; python_version >= "3.7" and python_full_version >= "3.7.0"
xarray==2023.1.0; python_version >= "3.8"
xgboost==1.7.3; python_version >= "3.8"
xlsxwriter==3.0.8; python_version >= "3.7"
yarl==1.8.2; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0"
yfinance==0.2.9
zipp==3.10.0; python_version >= "3.7" and python_full_version < "3.9.7" and python_version < "3.10" or python_full_version > "3.9.7" and python_version >= "3.7" and python_version < "3.10"
zope.interface==5.5.0; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5"
zipp==3.12.0; python_version >= "3.7" and python_full_version < "3.9.7" and python_version < "3.10" or python_full_version > "3.9.7" and python_version >= "3.7" and python_version < "3.10"
zope.interface==5.5.2; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5"

306
requirements.txt vendored
View File

@@ -1,269 +1,319 @@
aiodns==3.0.0; python_version >= "3.5.2" and python_full_version >= "3.7.0"
aiohttp==3.8.3; python_version >= "3.6" and python_full_version >= "3.7.0"
aiosignal==1.2.0; python_version >= "3.6" and python_full_version >= "3.7.0"
aiohttp==3.8.3; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0"
aiosignal==1.3.1; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0"
alabaster==0.7.13; python_version >= "3.6"
alpha-vantage==2.3.1
altair==4.2.0; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7"
altair==4.2.2; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7"
ansiwrap==0.8.4; python_version >= "3.7"
anyio==3.6.2; python_full_version >= "3.6.2" and python_version >= "3.8" and python_version < "4.0"
appdirs==1.4.4
appnope==0.1.3; sys_platform == "darwin" and python_version >= "3.8" and platform_system == "Darwin"
arch==5.3.1; python_version >= "3.7"
appnope==0.1.3; sys_platform == "darwin" and python_version >= "3.8" and platform_system == "Darwin" and python_full_version >= "3.7.0" and python_full_version < "4.0.0"
argon2-cffi-bindings==21.2.0; python_version >= "3.7"
argon2-cffi==21.3.0; python_version >= "3.7"
ascii-magic==1.6; python_version >= "3.5"
astor==0.8.1; python_full_version >= "3.7.1" and python_full_version < "4.0.0" and python_version >= "3.8"
astropy==5.1.1; python_version >= "3.8"
asttokens==2.0.8; python_version >= "3.8"
async-timeout==4.0.2; python_version >= "3.6" and python_full_version >= "3.7.0"
attrs==21.4.0; python_version >= "3.6" and python_full_version >= "3.7.0" and (python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.7.0" or python_full_version > "3.9.7" and python_version >= "3.7")
babel==2.10.3; python_version >= "3.7"
astroid==2.13.5; python_full_version >= "3.7.2"
asttokens==2.2.1; python_version >= "3.8"
async-timeout==4.0.2; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0"
atomicwrites==1.4.1; sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.7.0" and python_full_version < "4.0.0"
attrs==21.4.0; python_full_version >= "3.7.0" and python_version >= "3.8" and python_version < "4.0" and (python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.5.0") and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.7.0" or python_full_version > "3.9.7" and python_version >= "3.7" and python_full_version < "4.0.0")
babel==2.11.0; python_version >= "3.7"
backcall==0.2.0; python_version >= "3.8"
backoff==2.2.1; python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.7.0"
backports.zoneinfo==0.2.1; python_version >= "3.7" and python_full_version < "3.9.7" and python_version < "3.9" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.6.0" or python_full_version > "3.9.7" and python_version >= "3.6") or python_full_version > "3.9.7" and python_version >= "3.6" and python_version < "3.9" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.6.0" or python_full_version > "3.9.7" and python_version >= "3.6")
backports.zoneinfo==0.2.1; python_version >= "3.7" and python_full_version < "3.9.7" and python_version < "3.9" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.6.0" or python_full_version > "3.9.7" and python_version >= "3.7") or python_full_version > "3.9.7" and python_version >= "3.7" and python_version < "3.9" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.6.0" or python_full_version > "3.9.7" and python_version >= "3.7")
bandit==1.7.4; python_version >= "3.7"
base58==2.1.1; python_version >= "3.5" and python_full_version >= "3.7.0"
beartype==0.7.1; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.6.0"
beautifulsoup4==4.11.1; python_full_version >= "3.6.0" and python_version >= "3.7"
bleach==5.0.1; python_version >= "3.7"
beautifulsoup4==4.11.2; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.6.0"
black==23.1.0; python_version >= "3.7"
bleach==6.0.0; python_version >= "3.7"
blinker==1.5; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.5.0" or python_full_version > "3.9.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==5.2.0; python_version >= "3.7" and python_version < "4.0" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7")
ccxt==2.5.80
cachetools==5.3.0; python_version >= "3.7" and python_version < "4.0" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7")
ccxt==2.7.36
certifi==2022.12.7; python_version >= "3.8" and python_version < "4" and python_full_version >= "3.7.1" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7")
cffi==1.15.1; implementation_name == "pypy" and python_version >= "3.7" and python_full_version >= "3.7.0"
cffi==1.15.1; implementation_name == "pypy" and python_version >= "3.8" and python_full_version >= "3.7.0" and python_full_version < "4.0.0"
cfgv==3.3.1; python_full_version >= "3.6.1" and python_version >= "3.7"
charset-normalizer==2.1.1; python_full_version >= "3.6.0"
click==8.1.3; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7"
colorama==0.4.6; python_full_version >= "3.7.0" and python_version >= "3.8" and sys_platform == "win32" and platform_system == "Windows" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7")
codespell==2.2.2; python_version >= "3.7"
colorama==0.4.6; python_full_version >= "3.7.2" and python_version >= "3.8" and sys_platform == "win32" and (python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.7.0") and (python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.7" and python_full_version >= "3.7.0") and (python_version >= "3.8" and python_full_version < "3.0.0" and python_version < "4.0" and platform_system == "Windows" or python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0" and platform_system == "Windows") and (python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7") or platform_system == "Windows" and python_version >= "3.7" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7") and python_full_version >= "3.7.0") and (python_version >= "3.8" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.8" and python_full_version >= "3.7.0") and python_full_version < "4.0.0"
comm==0.1.2; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.8"
commonmark==0.9.1; python_full_version >= "3.6.3" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7")
convertdate==2.4.0; python_version >= "3.7" and python_version < "4"
coverage==7.1.0; python_version >= "3.7"
cryptography==39.0.0; 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.2.1; python_version >= "3.7"
cssselect==1.2.0; python_version >= "3.8" and python_version < "4.0"
cycler==0.11.0; python_version >= "3.7"
cython==0.29.32; python_version >= "3.8" 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.8"
dateparser==1.1.2; python_version >= "3.5"
datetime==4.7; python_version >= "3.5"
debugpy==1.6.3; python_version >= "3.7"
cython==0.29.33; python_version >= "3.8" 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.8"
dateparser==1.1.7; python_version >= "3.7"
datetime==5.0; python_version >= "3.5"
debugpy==1.6.6; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.8"
decorator==5.1.1; python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.8" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.8"
defusedxml==0.7.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7"
degiro-connector==2.0.21; 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"
dnspython==2.2.1; python_version >= "3.6" and python_version < "4.0"
ecos==2.0.10; python_version >= "3.7"
entrypoints==0.4; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7"
dill==0.3.6; python_version >= "3.7" and python_full_version >= "3.7.2"
distlib==0.3.6; python_version >= "3.7"
dnspython==2.3.0; python_version >= "3.7" and python_version < "4.0"
docutils==0.17.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
entrypoints==0.4; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.8" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7")
et-xmlfile==1.1.0; python_version >= "3.6"
exchange-calendars==4.2.3; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0"
executing==1.1.1; python_version >= "3.8"
fastjsonschema==2.16.2; python_full_version >= "3.7.0" and python_version >= "3.7"
exchange-calendars==4.2.5; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0"
executing==1.2.0; python_version >= "3.8"
fastjsonschema==2.16.2; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.7"
feedparser==6.0.10; python_version >= "3.6"
ffn==0.3.6; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
filelock==3.9.0; python_version >= "3.7"
financedatabase==1.0.2
finnhub-python==2.4.15
finviz==1.4.4
finnhub-python==2.4.16
finviz==1.4.5; python_version >= "3.8" and python_version < "4.0"
finvizfinance==0.14.4; python_version >= "3.5"
flake8==3.9.2; python_full_version >= "3.7.0"
flake8==5.0.4; python_full_version >= "3.7.0"
fonttools==4.38.0; python_version >= "3.7"
formulaic==0.3.4; python_full_version >= "3.7.1" and python_full_version < "4.0.0" and python_version >= "3.8"
fred==3.1
fredapi==0.4.3
frozendict==2.3.4; python_version >= "3.6"
frozenlist==1.3.1; python_version >= "3.7" and python_full_version >= "3.7.0"
frozenlist==1.3.3; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0"
fundamentalanalysis==0.2.14
future==0.18.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
gitdb==4.0.9; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7"
gitdb==4.0.10; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7"
gitpython==3.1.30; python_version >= "3.7"
grpcio==1.51.1; python_version >= "3.7"
h11==0.12.0; python_version >= "3.8" and python_version < "4.0"
h11==0.14.0; python_version >= "3.8" and python_version < "4.0"
hijri-converter==2.2.4; python_version >= "3.7"
holidays==0.14.2; python_version >= "3.7"
html5lib==1.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
httpcore==0.15.0; python_version >= "3.8" and python_version < "4.0"
httpx==0.23.0; python_version >= "3.8" and python_version < "4.0"
httpcore==0.16.3; python_version >= "3.8" and python_version < "4.0"
httpx==0.23.3; python_version >= "3.8" and python_version < "4.0"
identify==2.5.17; python_version >= "3.7"
idna==3.4; python_version >= "3.8" and python_version < "4" and python_full_version >= "3.7.1" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7")
importlib-metadata==5.0.0; python_version >= "3.7" and python_full_version < "3.9.7" and python_version < "3.10" or python_full_version > "3.9.7" and python_version >= "3.7" and python_version < "3.10"
imagesize==1.4.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
importlib-metadata==6.0.0; python_version >= "3.7" and python_full_version < "3.9.7" and python_version < "3.10" or python_full_version > "3.9.7" and python_version >= "3.7" and python_version < "3.10"
inflection==0.5.1; python_version >= "3.6"
iniconfig==2.0.0; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.7"
interface-meta==1.3.0; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.1" and python_full_version < "4.0.0"
investiny==0.5.0; python_version >= "3.8" and python_version < "4.0"
investpy==1.0.8; python_version >= "3.7"
ipyflex==0.2.4; python_version >= "3.6"
ipykernel==6.16.1; python_version >= "3.7"
ipyflex==0.2.6; python_version >= "3.6"
ipykernel==6.21.1; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.8"
ipympl==0.8.4
ipython-genutils==0.2.0; python_version >= "3.7"
ipython==8.5.0; python_version >= "3.8"
ipywidgets==8.0.2; python_version >= "3.7"
ipywidgets==8.0.4; python_version >= "3.7"
iso8601==0.1.16
isodate==0.6.1; python_version >= "3.7"
isort==5.12.0; python_full_version >= "3.8.0"
jedi==0.18.2; python_version >= "3.8"
jinja2==3.1.2; python_version >= "3.7"
joblib==1.2.0; python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.8"
json5==0.9.10; python_version >= "3.7"
json5==0.9.11; python_version >= "3.7"
jsonschema==3.2.0
jupyter-client==7.4.1; python_full_version >= "3.7.0" and python_version >= "3.7"
jupyter-core==4.11.2; python_full_version >= "3.7.0" and python_version >= "3.7"
jupyter-server==1.21.0; python_version >= "3.7"
jupyter-client==7.4.1; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.8"
jupyter-core==5.2.0; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.8"
jupyter-server==1.23.5; python_version >= "3.7"
jupyterlab-pygments==0.2.2; python_version >= "3.7"
jupyterlab-server==2.16.1; python_version >= "3.7"
jupyterlab-widgets==3.0.3; python_version >= "3.7"
jupyterlab==3.5.0; python_version >= "3.7"
jupyterlab-server==2.16.6; python_version >= "3.7"
jupyterlab-widgets==3.0.5; python_version >= "3.7"
jupyterlab==3.5.3; python_version >= "3.7"
kiwisolver==1.4.4; python_version >= "3.7"
korean-lunar-calendar==0.3.1; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0"
lazy-object-proxy==1.9.0; python_version >= "3.7" and python_full_version >= "3.7.2"
linearmodels==4.27; python_version >= "3.8"
loguru==0.6.0; python_version >= "3.5" and python_full_version >= "3.7.0"
lxml==4.9.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7"
markupsafe==2.1.1; python_version >= "3.7"
matplotlib-inline==0.1.6; python_version >= "3.8"
lxml==4.9.2; 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"
markdown-it-py==1.1.0; python_version >= "3.6" and python_version < "4.0"
markupsafe==2.1.2; python_version >= "3.7"
matplotlib-inline==0.1.6; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.8"
matplotlib==3.5.3; python_version >= "3.7"
mccabe==0.6.1; python_full_version >= "3.7.0"
mistune==0.8.4; python_version >= "3.7"
mccabe==0.7.0; python_version >= "3.6" and python_full_version >= "3.7.2"
mdit-py-plugins==0.2.8; python_version >= "3.6" and python_version < "4.0"
mistune==2.0.4; python_version >= "3.7"
mock==4.0.3; python_version >= "3.6"
more-itertools==9.0.0; python_version >= "3.7"
mplfinance==0.12.9b1
multidict==6.0.2; python_version >= "3.7" and python_full_version >= "3.7.0"
mplfinance==0.12.9b7
mstarpy==0.0.4
multidict==6.0.4; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0"
multitasking==0.0.11
mypy-extensions==0.4.3; python_version >= "3.8"
nbclassic==0.4.5; python_version >= "3.7"
nbclient==0.5.13; python_full_version >= "3.7.0" and python_version >= "3.7"
nbconvert==6.5.4; python_version >= "3.7"
nbformat==5.7.0; python_full_version >= "3.7.0" and python_version >= "3.7"
nest-asyncio==1.5.6; python_full_version >= "3.7.0" and python_version >= "3.7"
networkx==2.8.7; python_version >= "3.8"
notebook-shim==0.2.0; python_version >= "3.7"
notebook==6.5.1; python_version >= "3.7"
mypy==0.930; python_version >= "3.6"
myst-parser==0.15.2; python_version >= "3.6"
nbclassic==0.5.1; python_version >= "3.7"
nbclient==0.6.8; python_full_version >= "3.7.0" and python_version >= "3.7" and python_full_version < "4.0.0"
nbconvert==7.2.9; python_version >= "3.7"
nbformat==5.7.3; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.7"
nbmake==1.3.5; python_full_version >= "3.7.0" and python_full_version < "4.0.0"
nest-asyncio==1.5.6; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.8"
nodeenv==1.7.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.7.0" and python_version >= "3.7"
notebook-shim==0.2.2; python_version >= "3.7"
notebook==6.5.2; python_version >= "3.7"
numpy==1.23.4; python_version >= "3.8"
oandapyv20==0.6.3
oauthlib==3.2.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
onetimepass==1.0.1; python_full_version >= "3.7.1" and python_full_version < "4.0.0"
openpyxl==3.0.10; python_version >= "3.6"
osqp==0.6.2.post5; python_version >= "3.7"
packaging==22.0; python_version >= "3.7"
openpyxl==3.1.0; python_version >= "3.6"
packaging==23.0; 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.5.1; python_version >= "3.8"
pandas==1.5.3; python_version >= "3.8"
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"
papermill @ git+https://github.com/nteract/papermill.git@main ; python_version >= "3.7"
papermill==2.4.0; python_version >= "3.7"
parso==0.8.3; python_version >= "3.8"
pathspec==0.11.0; python_version >= "3.7"
patsy==0.5.3; python_version >= "3.8"
pbr==5.11.1; python_version >= "3.8"
pexpect==4.8.0; sys_platform != "win32" and python_version >= "3.8"
pickleshare==0.7.5; python_version >= "3.8"
pillow==9.4.0; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7"
plotly==5.10.0; python_version >= "3.6"
praw==7.6.0; python_version >= "3.7" and python_version < "4.0"
platformdirs==2.6.2; python_version >= "3.8" and python_full_version >= "3.7.2"
plotly==5.13.0; python_version >= "3.6"
pluggy==1.0.0; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.7"
praw==7.6.1; python_version >= "3.7" and python_version < "4.0"
prawcore==2.3.0; python_version >= "3.7" and python_version < "4.0"
prometheus-client==0.15.0; python_version >= "3.7"
prompt-toolkit==3.0.31; python_full_version >= "3.6.2"
pre-commit==2.21.0; python_version >= "3.7"
prometheus-client==0.16.0; python_version >= "3.7"
prompt-toolkit==3.0.36; python_full_version >= "3.6.2"
property-cached==1.6.4; python_version >= "3.8"
protobuf==3.20.1; python_version >= "3.7"
psaw==0.0.12; python_version >= "3"
psutil==5.9.3; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
psutil==5.9.4; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.8"
ptyprocess==0.7.0; sys_platform != "win32" and python_version >= "3.8" and os_name != "nt"
pure-eval==0.2.2; python_version >= "3.8"
py==1.11.0; python_version >= "3.7" and python_full_version < "3.0.0" and implementation_name == "pypy" or implementation_name == "pypy" and python_version >= "3.7" and python_full_version >= "3.5.0"
py==1.11.0; python_full_version >= "3.7.0" and python_version >= "3.7" and python_full_version < "4.0.0"
pyally==1.1.2
pyarrow==9.0.0; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7"
pycares==4.2.2; python_version >= "3.5.2" and python_full_version >= "3.7.0"
pycodestyle==2.7.0; python_full_version >= "3.7.0"
pyarrow==11.0.0; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7"
pycares==4.3.0; python_version >= "3.5.2" and python_full_version >= "3.7.0"
pycodestyle==2.9.1; python_version >= "3.6" and python_full_version >= "3.7.0"
pycoingecko==2.3.0
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"
pydeck==0.8.0b4; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7"
pyerfa==2.0.0.1; python_version >= "3.8"
pydantic==1.10.4; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.7"
pydeck==0.8.0; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7"
pyex==0.5.0
pyflakes==2.3.1; python_full_version >= "3.7.0"
pygments==2.13.0; python_version >= "3.6"
pyhdfe==0.1.0; python_version >= "3.8"
pyflakes==2.5.0; python_version >= "3.6" and python_full_version >= "3.7.0"
pygments==2.14.0; python_version >= "3.6"
pyhdfe==0.1.2; python_version >= "3.8"
pylint==2.15.2; python_full_version >= "3.7.2"
pyluach==2.0.2; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0"
pymeeus==0.5.11; python_version >= "3.7" and python_version < "4"
pymeeus==0.5.12; python_version >= "3.7" and python_version < "4"
pympler==1.0.1; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.6"
pyobjc-core==8.5.1; python_version >= "3.6" and sys_platform == "darwin"
pyobjc-framework-cocoa==8.5.1; python_version >= "3.6" and sys_platform == "darwin"
pyotp==2.7.0; python_version >= "3.6"
pyobjc-core==9.0.1; python_version >= "3.7" and sys_platform == "darwin"
pyobjc-framework-cocoa==9.0.1; python_version >= "3.7" and sys_platform == "darwin"
pyotp==2.8.0; python_version >= "3.7"
pyparsing==3.0.9; python_full_version >= "3.6.8" and python_version >= "3.7"
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.1; python_version >= "3.7"
pythclient==0.1.2; python_full_version >= "3.7.0"
pytest-cov==3.0.0; python_version >= "3.6"
pytest-mock==3.10.0; python_version >= "3.7"
pytest-recording==0.12.1; python_version >= "3.5"
pytest==6.2.5; python_version >= "3.6"
pythclient==0.1.4; python_full_version >= "3.7.0"
python-binance==1.0.16
python-coinmarketcap==0.2
python-dateutil==2.8.2; python_full_version >= "3.7.1" and python_version >= "3.8" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.3.0" or python_full_version > "3.9.7") and (python_version >= "3.8" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.8") 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") and python_version < "4.0"
python-dateutil==2.8.2; python_full_version >= "3.7.1" and python_version >= "3.8" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.3.0" or python_full_version > "3.9.7") and (python_version >= "3.8" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.8") 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 < "4.0"
python-dotenv==0.19.2; python_version >= "3.5"
python-i18n==0.3.9
pytrends==4.8.0
pytz-deprecation-shim==0.1.0.post0; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.6.0" or python_full_version > "3.9.7" and python_version >= "3.6"
pytz==2022.5; python_full_version >= "3.7.1" and python_full_version < "4.0.0" and python_version >= "3.8" and (python_version >= "3.8" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.8") and python_version < "4.0"
pywin32==305; sys_platform == "win32" and platform_python_implementation != "PyPy" and python_version >= "3.7"
pywinpty==2.0.8; os_name == "nt" and python_version >= "3.7"
pyyaml==6.0; python_version >= "3.8"
pyzmq==24.0.1; python_version >= "3.7"
qdldl==0.1.5.post2; python_version >= "3.7"
pytrends==4.9.0; python_version >= "3.7"
pytz-deprecation-shim==0.1.0.post0; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.6.0" or python_full_version > "3.9.7" and python_version >= "3.7"
pytz==2022.7.1; python_full_version >= "3.7.1" and python_full_version < "4.0.0" and python_version >= "3.8" and (python_version >= "3.8" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.8") and python_version < "4.0"
pyupgrade==2.38.4; python_version >= "3.7"
pywin32==305; sys_platform == "win32" and platform_python_implementation != "PyPy" and python_version >= "3.8"
pywinpty==2.0.10; os_name == "nt" and python_version >= "3.7"
pyyaml==6.0; python_version >= "3.7"
pyzmq==25.0.0; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.8"
quandl==3.7.0; python_version >= "3.6"
rapidfuzz==1.9.1; python_version >= "2.7"
rdflib==6.2.0; python_version >= "3.7"
regex==2022.3.2; python_version >= "3.6"
regex==2022.10.31; python_version >= "3.7"
requests-oauthlib==1.3.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
requests==2.28.1; python_version >= "3.7" and python_version < "4"
requests==2.28.2; python_version >= "3.7" and python_version < "4"
rfc3986==1.5.0; python_version >= "3.8" and python_version < "4.0"
rich==12.6.0; python_full_version >= "3.6.3" and python_full_version < "4.0.0"
riskfolio-lib==3.3.0; python_version >= "3.7"
robin-stocks==2.1.0; python_version >= "3"
ruamel.yaml.clib==0.2.7; platform_python_implementation == "CPython" and python_version < "3.11" and python_version >= "3.5"
ruamel.yaml==0.17.21; python_version >= "3"
scikit-learn==1.1.2; python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.8"
ruff==0.0.236; python_version >= "3.7"
scikit-learn==1.2.1; python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.8"
scipy==1.10.0; python_version >= "3.8" and python_version < "3.12"
screeninfo==0.6.7
scs==3.2.0; python_version >= "3.7"
seaborn==0.11.2; python_version >= "3.6"
semver==2.13.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.4.0" or python_full_version > "3.9.7"
send2trash==1.8.0; python_version >= "3.7"
sentiment-investor==2.1.0; python_version >= "3.8" and python_version < "4.0"
setuptools-scm==6.4.2; python_version >= "3.8"
sgmllib3k==1.0.0; python_version >= "3.6"
six==1.16.0; python_full_version >= "3.7.1" and python_version >= "3.8" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.3.0" or python_full_version > "3.9.7") and (python_version >= "3.8" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.8") 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 >= "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.9.7" and python_full_version >= "3.7.0" or python_full_version > "3.9.7" and python_version >= "3.7") and (python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.8")
six==1.16.0; python_full_version >= "3.7.1" and python_version >= "3.8" and python_version < "4.0" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.3.0" or python_full_version > "3.9.7") and (python_version >= "3.8" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.8") 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 >= "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.9.7" and python_full_version >= "3.7.0" or python_full_version > "3.9.7" and python_version >= "3.7" and python_full_version < "4.0.0") and (python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.8")
smmap==5.0.0; python_version >= "3.7"
sniffio==1.3.0; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.6.2"
snowballstemmer==2.2.0; python_version >= "3.6"
socketio-client-nexus==0.7.6
soupsieve==2.3.2.post1; python_version >= "3.6" and python_full_version >= "3.6.0"
soupsieve==2.3.2.post1; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.6.0"
sparqlwrapper==2.0.0; python_version >= "3.7"
sphinx==4.5.0; python_version >= "3.6"
sphinxcontrib-applehelp==1.0.4; python_version >= "3.8"
sphinxcontrib-devhelp==1.0.2; python_version >= "3.6"
sphinxcontrib-htmlhelp==2.0.1; python_version >= "3.8"
sphinxcontrib-jsmath==1.0.1; python_version >= "3.6"
sphinxcontrib-qthelp==1.0.3; python_version >= "3.6"
sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.6"
squarify==0.4.3
sseclient==0.0.27
stack-data==0.5.1; python_version >= "3.8"
stack-data==0.6.2; python_version >= "3.8"
statsmodels==0.13.2; python_version >= "3.7"
stevedore==4.1.1; python_version >= "3.8"
stocksera==0.1.21; python_version >= "3.6"
streamlit==1.13.0; (python_version >= "3.7" and python_full_version < "3.9.7") or (python_full_version > "3.9.7")
streamlit==1.17.0; (python_version >= "3.7" and python_full_version < "3.9.7") or (python_full_version > "3.9.7")
tabulate==0.9.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7"
temporal-cache==0.1.4
tenacity==8.1.0; python_version >= "3.7"
terminado==0.16.0; python_version >= "3.7"
tenacity==7.0.0; python_version >= "3.8" and python_version < "4.0"
terminado==0.17.1; python_version >= "3.7"
textwrap3==0.9.2; python_version >= "3.7"
thepassiveinvestor==1.1.2
threadpoolctl==3.1.0; python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.8"
tinycss2==1.2.1; python_version >= "3.7"
tokenize-rt==4.2.1; python_full_version >= "3.6.1" and python_version >= "3.7"
tokenterminal==1.0.1
toml==0.10.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.3.0" or python_full_version > "3.9.7"
tomli==2.0.1; python_version >= "3.8"
toml==0.10.2; python_version >= "3.7" and python_full_version < "3.9.7" and python_full_version >= "3.7.0" or python_full_version > "3.9.7" and python_version >= "3.7" and python_full_version < "4.0.0"
tomli==2.0.1; python_version < "3.11" and python_full_version >= "3.7.2" and python_version >= "3.8" and python_full_version <= "3.11.0a6"
tomlkit==0.11.6; python_version >= "3.6" and python_full_version >= "3.7.2"
toolz==0.12.0; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7")
tornado==6.2; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7"
tqdm==4.64.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
tornado==6.2; python_version >= "3.8" and python_full_version < "3.9.7" and python_full_version >= "3.7.0" or python_full_version > "3.9.7" and python_version >= "3.8" and python_full_version < "4.0.0"
tqdm==4.64.1; 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.4.0"
tradingview-ta==3.3.0; python_version >= "3.6"
traitlets==5.5.0; python_full_version >= "3.7.0" and python_version >= "3.8"
typing-extensions==4.4.0; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version < "3.9" and python_version >= "3.7" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7") and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7")
tzdata==2022.5; python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or python_version >= "3.7" and python_full_version < "3.9.7" and platform_system == "Windows" and python_full_version >= "3.6.0" or python_full_version > "3.9.7" and python_version >= "3.6" and platform_system == "Windows"
tzlocal==4.2; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.6"
ujson==5.5.0; python_version >= "3.7"
traitlets==5.9.0; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and python_version >= "3.8"
types-python-dateutil==2.8.19.6
types-pytz==2021.3.8
types-pyyaml==6.0.12.4
types-requests==2.28.11.8
types-setuptools==57.4.18
types-six==1.16.21.4
types-urllib3==1.26.25.4
typing-extensions==4.4.0; python_full_version >= "3.7.2" and python_full_version < "4.0.0" and python_version < "3.9" and python_version >= "3.7" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7") and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7")
tzdata==2022.7; python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or python_version >= "3.7" and python_full_version < "3.9.7" and platform_system == "Windows" and python_full_version >= "3.6.0" or python_full_version > "3.9.7" and python_version >= "3.7" and platform_system == "Windows"
tzlocal==4.2; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.7"
ujson==5.7.0; python_version >= "3.7"
unidecode==1.3.6; python_version >= "3.7"
update-checker==0.18.0; python_version >= "3.7" and python_version < "4.0"
urllib3==1.26.12; python_full_version >= "3.7.1" and python_version < "4" and python_version >= "3.8" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7")
user-agent==0.1.10
urllib3==1.26.14; python_version >= "3.8" and python_version < "4" and python_full_version >= "3.7.1" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7")
user-agent==0.1.10; python_version >= "3.8" and python_version < "4.0"
vadersentiment==3.3.2
validators==0.20.0; python_version >= "3.7" and python_full_version < "3.9.7" or python_full_version > "3.9.7" and python_version >= "3.4"
valinvest==0.0.2; python_version >= "3.6"
vcrpy==4.2.1; python_version >= "3.7"
virtualenv==20.17.1; python_version >= "3.7"
voila==0.4.0; python_version >= "3.7"
watchdog==2.1.9; python_version >= "3.6"
wcwidth==0.2.5; python_full_version >= "3.6.2" and python_version >= "3.8"
watchdog==2.2.1; python_version >= "3.6"
wcwidth==0.2.6; python_full_version >= "3.6.2" and python_version >= "3.8"
webencodings==0.5.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7"
websocket-client==1.4.1; python_version >= "3.8" and python_version < "4.0"
websockets==10.3; python_version >= "3.7"
widgetsnbextension==4.0.3; python_version >= "3.7"
websocket-client==1.5.0; python_version >= "3.8" and python_version < "4.0"
websockets==10.4; python_version >= "3.7"
widgetsnbextension==4.0.5; python_version >= "3.7"
win32-setctime==1.1.0; python_version >= "3.5" and python_full_version >= "3.7.0" and sys_platform == "win32"
wrapt==1.14.1; python_full_version >= "3.7.1" and python_full_version < "4.0.0" and python_version >= "3.8"
xlsxwriter==3.0.3; python_version >= "3.7"
yarl==1.8.1; python_version >= "3.7" and python_full_version >= "3.7.0"
wrapt==1.14.1; python_full_version >= "3.7.2" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7") and python_version >= "3.8" and python_version < "3.11"
yarl==1.8.2; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0"
yfinance==0.2.9
zipp==3.10.0; python_version >= "3.7" and python_full_version < "3.9.7" and python_version < "3.10" or python_full_version > "3.9.7" and python_version >= "3.7" and python_version < "3.10"
zope.interface==5.5.0; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5"
zipp==3.12.0; python_version >= "3.7" and python_full_version < "3.9.7" and python_version < "3.10" or python_full_version > "3.9.7" and python_version >= "3.7" and python_version < "3.10"
zope.interface==5.5.2; 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

@@ -2525,11 +2525,11 @@ interactions:
Content-Type:
- text/plain; charset=utf-8
Date:
- Tue, 24 Jan 2023 09:56:48 GMT
- Thu, 02 Feb 2023 12:38:47 GMT
ETag:
- '"08f456d8e5ec3e2bfa8f503f02be6faa9459c3ea66fc1cd9a553858d3b959041"'
Expires:
- Tue, 24 Jan 2023 10:01:48 GMT
- Thu, 02 Feb 2023 12:43:47 GMT
Source-Age:
- '0'
Strict-Transport-Security:
@@ -2545,15 +2545,15 @@ interactions:
X-Content-Type-Options:
- nosniff
X-Fastly-Request-ID:
- 93af81fa391c37967a8816d18af82f0a38573c2c
- 2fc33d40d5235a2812d15e0e67a2ab5f268516de
X-Frame-Options:
- deny
X-GitHub-Request-Id:
- 61CA:D26D:B4AB6:D2B74:63CFAB60
- 5704:0C77:59AE13:659218:63DBAED6
X-Served-By:
- cache-ams21028-AMS
- cache-lis1490049-LIS
X-Timer:
- S1674554208.229202,VS0,VE191
- S1675341527.731863,VS0,VE390
X-XSS-Protection:
- 1; mode=block
status:

View File

@@ -2525,13 +2525,13 @@ interactions:
Content-Type:
- text/plain; charset=utf-8
Date:
- Mon, 23 Jan 2023 14:16:13 GMT
- Thu, 02 Feb 2023 12:39:21 GMT
ETag:
- '"08f456d8e5ec3e2bfa8f503f02be6faa9459c3ea66fc1cd9a553858d3b959041"'
Expires:
- Mon, 23 Jan 2023 14:21:13 GMT
- Thu, 02 Feb 2023 12:44:21 GMT
Source-Age:
- '118'
- '35'
Strict-Transport-Security:
- max-age=31536000
Vary:
@@ -2545,15 +2545,15 @@ interactions:
X-Content-Type-Options:
- nosniff
X-Fastly-Request-ID:
- 82b2e2f8392fd91a239d6db3662a21bf790a7cde
- 025cfed2c5c1961614a1c28193dd73d12fc19beb
X-Frame-Options:
- deny
X-GitHub-Request-Id:
- B832:BCB0:BDF798:CD756D:63CE91D4
- 5704:0C77:59AE13:659218:63DBAED6
X-Served-By:
- cache-ams21056-AMS
- cache-lis1490032-LIS
X-Timer:
- S1674483373.259799,VS0,VE1
- S1675341562.501079,VS0,VE1
X-XSS-Protection:
- 1; mode=block
status:

View File

@@ -2525,13 +2525,13 @@ interactions:
Content-Type:
- text/plain; charset=utf-8
Date:
- Mon, 23 Jan 2023 14:16:13 GMT
- Thu, 02 Feb 2023 12:39:21 GMT
ETag:
- '"08f456d8e5ec3e2bfa8f503f02be6faa9459c3ea66fc1cd9a553858d3b959041"'
Expires:
- Mon, 23 Jan 2023 14:21:13 GMT
- Thu, 02 Feb 2023 12:44:21 GMT
Source-Age:
- '118'
- '34'
Strict-Transport-Security:
- max-age=31536000
Vary:
@@ -2541,19 +2541,19 @@ interactions:
X-Cache:
- HIT
X-Cache-Hits:
- '2'
- '1'
X-Content-Type-Options:
- nosniff
X-Fastly-Request-ID:
- 4403d9531379a70e2f9e9a5d87a02c98f0fc10a0
- d659bbcf9cff7140058b5866069d442a9de7507b
X-Frame-Options:
- deny
X-GitHub-Request-Id:
- B832:BCB0:BDF798:CD756D:63CE91D4
- 5704:0C77:59AE13:659218:63DBAED6
X-Served-By:
- cache-ams21059-AMS
- cache-lis1490041-LIS
X-Timer:
- S1674483373.134627,VS0,VE0
- S1675341561.436595,VS0,VE1
X-XSS-Protection:
- 1; mode=block
status:

View File

@@ -1,18 +1,18 @@
,Date,Company,Symbol,Price,LastPrice,Change (%),Recommendation
0,06/15,Applied Materials ,AMAT,97.42,114.15,14.66,Buy
1,06/15,AMN Healthcare Services ,AMN,103.32,101.67,-1.6199999999999999,Buy
2,06/15,Alibaba ,BABA,108.03,119.53,9.62,Sell
3,06/15,Dutch Bros ,BROS,34.17,34.42,0.73,Buy
4,06/15,Chargepoint ,CHPT,13.36,11.87,-12.55,Sell
5,06/15,Cleveland-Cliffs ,CLF,18.05,20.61,12.42,Sell
6,06/15,Ford Motor ,F,12.27,12.8,4.14,Buy
7,06/15,Eli Lilly ,LLY,292.99,342.21,14.38,Buy
8,06/15,Meta Platforms ,META,169.35,143.27,-18.2,Buy
9,06/15,Medical Properties Trust ,MPW,14.99,13.78,-8.780000000000001,Buy
10,06/15,Nucor ,NUE,116.46,153.85,24.3,Buy
11,06/15,Planet Fitness ,PLNT,64.42,80.87,20.34,Buy
12,06/15,Prothena ,PRTA,23.68,55.1,57.02,Sell
13,06/15,SoFi Technologies ,SOFI,5.94,5.87,-1.1900000000000002,Buy
14,06/15,Toll Brothers ,TOL,44.38,56.04,20.810000000000002,Buy
15,06/15,Woodside Energy Group ,WDS,22.11,26.39,16.220000000000002,Buy
16,06/15,Whirlpool ,WHR,155.52,152.12,-2.2399999999999998,Buy
0,06/15,Applied Materials ,AMAT,97.42,119.01,18.14,Buy
1,06/15,AMN Healthcare Services ,AMN,103.32,99.77,-3.56,Buy
2,06/15,Alibaba ,BABA,108.03,112.82,4.25,Sell
3,06/15,Dutch Bros ,BROS,34.17,38.52,11.29,Buy
4,06/15,Chargepoint ,CHPT,13.36,12.46,-7.22,Sell
5,06/15,Cleveland-Cliffs ,CLF,18.05,21.89,17.54,Sell
6,06/15,Ford Motor ,F,12.27,13.79,11.020000000000001,Buy
7,06/15,Eli Lilly ,LLY,292.99,342.57,14.469999999999999,Buy
8,06/15,Meta Platforms ,META,169.35,153.12,-10.6,Buy
9,06/15,Medical Properties Trust ,MPW,14.99,12.93,-15.93,Buy
10,06/15,Nucor ,NUE,116.46,174.98,33.44,Buy
11,06/15,Planet Fitness ,PLNT,64.42,83.8,23.13,Buy
12,06/15,Prothena ,PRTA,23.68,53.67,55.879999999999995,Sell
13,06/15,SoFi Technologies ,SOFI,5.94,7.38,19.509999999999998,Buy
14,06/15,Toll Brothers ,TOL,44.38,60.26,26.35,Buy
15,06/15,Woodside Energy Group ,WDS,22.11,25.31,12.64,Buy
16,06/15,Whirlpool ,WHR,155.52,156.5,0.63,Buy
1 Date Company Symbol Price LastPrice Change (%) Recommendation
2 0 06/15 Applied Materials AMAT 97.42 114.15 119.01 14.66 18.14 Buy
3 1 06/15 AMN Healthcare Services AMN 103.32 101.67 99.77 -1.6199999999999999 -3.56 Buy
4 2 06/15 Alibaba BABA 108.03 119.53 112.82 9.62 4.25 Sell
5 3 06/15 Dutch Bros BROS 34.17 34.42 38.52 0.73 11.29 Buy
6 4 06/15 Chargepoint CHPT 13.36 11.87 12.46 -12.55 -7.22 Sell
7 5 06/15 Cleveland-Cliffs CLF 18.05 20.61 21.89 12.42 17.54 Sell
8 6 06/15 Ford Motor F 12.27 12.8 13.79 4.14 11.020000000000001 Buy
9 7 06/15 Eli Lilly LLY 292.99 342.21 342.57 14.38 14.469999999999999 Buy
10 8 06/15 Meta Platforms META 169.35 143.27 153.12 -18.2 -10.6 Buy
11 9 06/15 Medical Properties Trust MPW 14.99 13.78 12.93 -8.780000000000001 -15.93 Buy
12 10 06/15 Nucor NUE 116.46 153.85 174.98 24.3 33.44 Buy
13 11 06/15 Planet Fitness PLNT 64.42 80.87 83.8 20.34 23.13 Buy
14 12 06/15 Prothena PRTA 23.68 55.1 53.67 57.02 55.879999999999995 Sell
15 13 06/15 SoFi Technologies SOFI 5.94 5.87 7.38 -1.1900000000000002 19.509999999999998 Buy
16 14 06/15 Toll Brothers TOL 44.38 56.04 60.26 20.810000000000002 26.35 Buy
17 15 06/15 Woodside Energy Group WDS 22.11 26.39 25.31 16.220000000000002 12.64 Buy
18 16 06/15 Whirlpool WHR 155.52 152.12 156.5 -2.2399999999999998 0.63 Buy

View File

@@ -1,18 +1,18 @@
,Date,Company,Symbol,Price,LastPrice,Change (%),Recommendation,InverseCramer
0,06/15,Applied Materials ,AMAT,97.42,114.15,14.66,Buy,Sell
1,06/15,AMN Healthcare Services ,AMN,103.32,101.67,-1.6199999999999999,Buy,Sell
2,06/15,Alibaba ,BABA,108.03,119.53,9.62,Sell,Buy
3,06/15,Dutch Bros ,BROS,34.17,34.42,0.73,Buy,Sell
4,06/15,Chargepoint ,CHPT,13.36,11.87,-12.55,Sell,Buy
5,06/15,Cleveland-Cliffs ,CLF,18.05,20.61,12.42,Sell,Buy
6,06/15,Ford Motor ,F,12.27,12.8,4.14,Buy,Sell
7,06/15,Eli Lilly ,LLY,292.99,342.21,14.38,Buy,Sell
8,06/15,Meta Platforms ,META,169.35,143.27,-18.2,Buy,Sell
9,06/15,Medical Properties Trust ,MPW,14.99,13.78,-8.780000000000001,Buy,Sell
10,06/15,Nucor ,NUE,116.46,153.85,24.3,Buy,Sell
11,06/15,Planet Fitness ,PLNT,64.42,80.87,20.34,Buy,Sell
12,06/15,Prothena ,PRTA,23.68,55.1,57.02,Sell,Buy
13,06/15,SoFi Technologies ,SOFI,5.94,5.87,-1.1900000000000002,Buy,Sell
14,06/15,Toll Brothers ,TOL,44.38,56.04,20.810000000000002,Buy,Sell
15,06/15,Woodside Energy Group ,WDS,22.11,26.39,16.220000000000002,Buy,Sell
16,06/15,Whirlpool ,WHR,155.52,152.12,-2.2399999999999998,Buy,Sell
0,06/15,Applied Materials ,AMAT,97.42,119.01,18.14,Buy,Sell
1,06/15,AMN Healthcare Services ,AMN,103.32,99.77,-3.56,Buy,Sell
2,06/15,Alibaba ,BABA,108.03,112.82,4.25,Sell,Buy
3,06/15,Dutch Bros ,BROS,34.17,38.52,11.29,Buy,Sell
4,06/15,Chargepoint ,CHPT,13.36,12.46,-7.22,Sell,Buy
5,06/15,Cleveland-Cliffs ,CLF,18.05,21.89,17.54,Sell,Buy
6,06/15,Ford Motor ,F,12.27,13.79,11.020000000000001,Buy,Sell
7,06/15,Eli Lilly ,LLY,292.99,342.57,14.469999999999999,Buy,Sell
8,06/15,Meta Platforms ,META,169.35,153.12,-10.6,Buy,Sell
9,06/15,Medical Properties Trust ,MPW,14.99,12.93,-15.93,Buy,Sell
10,06/15,Nucor ,NUE,116.46,174.98,33.44,Buy,Sell
11,06/15,Planet Fitness ,PLNT,64.42,83.8,23.13,Buy,Sell
12,06/15,Prothena ,PRTA,23.68,53.67,55.879999999999995,Sell,Buy
13,06/15,SoFi Technologies ,SOFI,5.94,7.38,19.509999999999998,Buy,Sell
14,06/15,Toll Brothers ,TOL,44.38,60.26,26.35,Buy,Sell
15,06/15,Woodside Energy Group ,WDS,22.11,25.31,12.64,Buy,Sell
16,06/15,Whirlpool ,WHR,155.52,156.5,0.63,Buy,Sell
1 Date Company Symbol Price LastPrice Change (%) Recommendation InverseCramer
2 0 06/15 Applied Materials AMAT 97.42 114.15 119.01 14.66 18.14 Buy Sell
3 1 06/15 AMN Healthcare Services AMN 103.32 101.67 99.77 -1.6199999999999999 -3.56 Buy Sell
4 2 06/15 Alibaba BABA 108.03 119.53 112.82 9.62 4.25 Sell Buy
5 3 06/15 Dutch Bros BROS 34.17 34.42 38.52 0.73 11.29 Buy Sell
6 4 06/15 Chargepoint CHPT 13.36 11.87 12.46 -12.55 -7.22 Sell Buy
7 5 06/15 Cleveland-Cliffs CLF 18.05 20.61 21.89 12.42 17.54 Sell Buy
8 6 06/15 Ford Motor F 12.27 12.8 13.79 4.14 11.020000000000001 Buy Sell
9 7 06/15 Eli Lilly LLY 292.99 342.21 342.57 14.38 14.469999999999999 Buy Sell
10 8 06/15 Meta Platforms META 169.35 143.27 153.12 -18.2 -10.6 Buy Sell
11 9 06/15 Medical Properties Trust MPW 14.99 13.78 12.93 -8.780000000000001 -15.93 Buy Sell
12 10 06/15 Nucor NUE 116.46 153.85 174.98 24.3 33.44 Buy Sell
13 11 06/15 Planet Fitness PLNT 64.42 80.87 83.8 20.34 23.13 Buy Sell
14 12 06/15 Prothena PRTA 23.68 55.1 53.67 57.02 55.879999999999995 Sell Buy
15 13 06/15 SoFi Technologies SOFI 5.94 5.87 7.38 -1.1900000000000002 19.509999999999998 Buy Sell
16 14 06/15 Toll Brothers TOL 44.38 56.04 60.26 20.810000000000002 26.35 Buy Sell
17 15 06/15 Woodside Energy Group WDS 22.11 26.39 25.31 16.220000000000002 12.64 Buy Sell
18 16 06/15 Whirlpool WHR 155.52 152.12 156.5 -2.2399999999999998 0.63 Buy Sell

View File

@@ -3,20 +3,20 @@
[yellow]Warning[/yellow]: We noticed Jim Crammer recommendation data has not been updated for a while, and we're investigating on finding a replacement.
Company Symbol Price LastPrice Change (%) Recommendation
0 Applied Materials AMAT 97.42 109.65 11.15 Buy
1 AMN Healthcare Services AMN 103.32 99.14 -4.22 Buy
2 Alibaba BABA 108.03 119.86 9.87 Sell
3 Dutch Bros BROS 34.17 34.00 -0.50 Buy
4 Chargepoint CHPT 13.36 11.09 -20.47 Sell
5 Cleveland-Cliffs CLF 18.05 20.97 13.92 Sell
6 Ford Motor F 12.27 12.40 1.05 Buy
7 Eli Lilly LLY 292.99 346.07 15.34 Buy
8 Meta Platforms META 169.35 139.37 -21.51 Buy
9 Medical Properties Trust MPW 14.99 13.72 -9.26 Buy
10 Nucor NUE 116.46 153.47 24.12 Buy
11 Planet Fitness PLNT 64.42 79.22 18.68 Buy
12 Prothena PRTA 23.68 54.56 56.60 Sell
13 SoFi Technologies SOFI 5.94 5.67 -4.76 Buy
14 Toll Brothers TOL 44.38 55.86 20.55 Buy
15 Woodside Energy Group WDS 22.11 25.98 14.90 Buy
16 Whirlpool WHR 155.52 150.82 -3.12 Buy
0 Applied Materials AMAT 97.42 119.01 18.14 Buy
1 AMN Healthcare Services AMN 103.32 99.77 -3.56 Buy
2 Alibaba BABA 108.03 112.82 4.25 Sell
3 Dutch Bros BROS 34.17 38.52 11.29 Buy
4 Chargepoint CHPT 13.36 12.46 -7.22 Sell
5 Cleveland-Cliffs CLF 18.05 21.89 17.54 Sell
6 Ford Motor F 12.27 13.79 11.02 Buy
7 Eli Lilly LLY 292.99 342.57 14.47 Buy
8 Meta Platforms META 169.35 153.12 -10.60 Buy
9 Medical Properties Trust MPW 14.99 12.93 -15.93 Buy
10 Nucor NUE 116.46 174.98 33.44 Buy
11 Planet Fitness PLNT 64.42 83.80 23.13 Buy
12 Prothena PRTA 23.68 53.67 55.88 Sell
13 SoFi Technologies SOFI 5.94 7.38 19.51 Buy
14 Toll Brothers TOL 44.38 60.26 26.35 Buy
15 Woodside Energy Group WDS 22.11 25.31 12.64 Buy
16 Whirlpool WHR 155.52 156.50 0.63 Buy

View File

@@ -3,20 +3,20 @@
[yellow]Warning[/yellow]: We noticed Jim Crammer recommendation data has not been updated for a while, and we're investigating on finding a replacement.
Company Symbol Price LastPrice Change (%) Recommendation InverseCramer
0 Applied Materials AMAT 97.42 109.65 11.15 Buy Sell
1 AMN Healthcare Services AMN 103.32 99.14 -4.22 Buy Sell
2 Alibaba BABA 108.03 119.86 9.87 Sell Buy
3 Dutch Bros BROS 34.17 34.00 -0.50 Buy Sell
4 Chargepoint CHPT 13.36 11.09 -20.47 Sell Buy
5 Cleveland-Cliffs CLF 18.05 20.97 13.92 Sell Buy
6 Ford Motor F 12.27 12.40 1.05 Buy Sell
7 Eli Lilly LLY 292.99 346.07 15.34 Buy Sell
8 Meta Platforms META 169.35 139.37 -21.51 Buy Sell
9 Medical Properties Trust MPW 14.99 13.72 -9.26 Buy Sell
10 Nucor NUE 116.46 153.47 24.12 Buy Sell
11 Planet Fitness PLNT 64.42 79.22 18.68 Buy Sell
12 Prothena PRTA 23.68 54.56 56.60 Sell Buy
13 SoFi Technologies SOFI 5.94 5.67 -4.76 Buy Sell
14 Toll Brothers TOL 44.38 55.86 20.55 Buy Sell
15 Woodside Energy Group WDS 22.11 25.98 14.90 Buy Sell
16 Whirlpool WHR 155.52 150.82 -3.12 Buy Sell
0 Applied Materials AMAT 97.42 119.01 18.14 Buy Sell
1 AMN Healthcare Services AMN 103.32 99.77 -3.56 Buy Sell
2 Alibaba BABA 108.03 112.82 4.25 Sell Buy
3 Dutch Bros BROS 34.17 38.52 11.29 Buy Sell
4 Chargepoint CHPT 13.36 12.46 -7.22 Sell Buy
5 Cleveland-Cliffs CLF 18.05 21.89 17.54 Sell Buy
6 Ford Motor F 12.27 13.79 11.02 Buy Sell
7 Eli Lilly LLY 292.99 342.57 14.47 Buy Sell
8 Meta Platforms META 169.35 153.12 -10.60 Buy Sell
9 Medical Properties Trust MPW 14.99 12.93 -15.93 Buy Sell
10 Nucor NUE 116.46 174.98 33.44 Buy Sell
11 Planet Fitness PLNT 64.42 83.80 23.13 Buy Sell
12 Prothena PRTA 23.68 53.67 55.88 Sell Buy
13 SoFi Technologies SOFI 5.94 7.38 19.51 Buy Sell
14 Toll Brothers TOL 44.38 60.26 26.35 Buy Sell
15 Woodside Energy Group WDS 22.11 25.31 12.64 Buy Sell
16 Whirlpool WHR 155.52 156.50 0.63 Buy Sell

View File

@@ -297,7 +297,7 @@ interactions:
x-envoy-decorator-operation:
- finance-chart-api--mtls-production-ir2.finance-k8s.svc.yahoo.local:4080/*
x-envoy-upstream-service-time:
- '9'
- '6'
x-request-id:
- 46d5c0a0-b781-4531-a7e8-5827fe2aa12a
x-yahoo-request-id:

View File

@@ -593,7 +593,7 @@ interactions:
AvrCVZON4gAA
headers:
Age:
- '0'
- '1'
Connection:
- keep-alive
Expect-CT:

View File

@@ -1,6 +1,5 @@
,X,Y,dist
ZBH,1,1,0
D,1,1,0
LLY,1,1,0
EW,1,1,0
ETR,1,1,0
@@ -27,11 +26,11 @@ FSLR,1,1,0
FRT,1,1,0
FRC,1,1,0
FITB,1,1,0
FFIV,1,1,0
D,1,1,0
DAL,1,1,0
DE,1,1,0
DFS,1,1,0
DG,1,1,0
CTRA,1,1,0
CSX,1,1,0
CSGP,1,1,0
CPRT,1,1,0
@@ -44,9 +43,9 @@ CMA,1,1,0
CEG,1,1,0
CCI,1,1,0
CAG,1,1,0
FFIV,1,1,0
XRAY,1,1,0
DXCM,1,1,0
FE,1,1,0
FANG,1,1,0
DVN,1,1,0
DVA,1,1,0
DUK,1,1,0
@@ -59,11 +58,11 @@ DLTR,1,1,0
DLR,1,1,0
DISH,1,1,0
DIS,1,1,0
FANG,1,1,0
CTVA,1,1,0
FE,1,1,0
FDS,1,1,0
HST,1,1,0
DG,1,1,0
DXCM,1,1,0
CTRA,1,1,0
FDX,1,1,0
FAST,1,1,0
HSIC,1,1,0
HRL,1,1,0
HPE,1,1,0
@@ -90,11 +89,11 @@ IP,1,1,0
INTU,1,1,0
INTC,1,1,0
INCY,1,1,0
ILMN,1,1,0
HST,1,1,0
HSY,1,1,0
PEAK,1,1,0
BEN,1,1,0
F,1,1,0
FAST,1,1,0
EXR,1,1,0
EXPE,1,1,0
EXPD,1,1,0
@@ -107,9 +106,9 @@ EL,1,1,0
IT,1,1,0
GRMN,1,1,0
GNRC,1,1,0
FDX,1,1,0
GM,1,1,0
GEN,1,1,0
FDS,1,1,0
GIS,1,1,0
GEHC,1,1,0
GE,1,1,0
GD,1,1,0
@@ -122,11 +121,11 @@ FLT,1,1,0
FISV,1,1,0
FIS,1,1,0
FCX,1,1,0
GIS,1,1,0
ILMN,1,1,0
CVS,1,1,0
DHR,1,1,0
AMCR,1,1,0
F,1,1,0
GEN,1,1,0
IFF,1,1,0
CTVA,1,1,0
DHI,1,1,0
ALL,1,1,0
AIG,1,1,0
AEP,1,1,0
@@ -153,11 +152,11 @@ ADSK,1,1,0
ADI,1,1,0
ACGL,1,1,0
AAPL,1,1,0
WRB,1,1,0
AMCR,1,1,0
AMD,1,1,0
AME,1,1,0
AMGN,1,1,0
AMP,1,1,0
ATVI,1,1,0
ARE,1,1,0
APD,1,1,0
AOS,1,1,0
@@ -170,9 +169,9 @@ AFL,1,1,0
AES,1,1,0
ADP,1,1,0
ADM,1,1,0
WRB,1,1,0
ADBE,1,1,0
ABT,1,1,0
TECH,1,1,0
ACN,1,1,0
ABBV,1,1,0
AAP,1,1,0
A,1,1,0
@@ -185,11 +184,11 @@ AWK,1,1,0
APH,1,1,0
AMZN,1,1,0
AMT,1,1,0
ACN,1,1,0
DHI,1,1,0
TECH,1,1,0
BWA,1,1,0
CAT,1,1,0
AMP,1,1,0
ABT,1,1,0
CVS,1,1,0
BXP,1,1,0
BSX,1,1,0
CARR,1,1,0
CAH,1,1,0
BF-B,1,1,0
@@ -216,11 +215,11 @@ C,1,1,0
STZ,1,1,0
GLW,1,1,0
ED,1,1,0
DHR,1,1,0
CAT,1,1,0
CBOE,1,1,0
CBRE,1,1,0
CCL,1,1,0
CDAY,1,1,0
BSX,1,1,0
BRO,1,1,0
BRK-B,1,1,0
BR,1,1,0
@@ -233,9 +232,9 @@ BIIB,1,1,0
BDX,1,1,0
BBY,1,1,0
BBWI,1,1,0
BXP,1,1,0
BAX,1,1,0
AVGO,1,1,0
BWA,1,1,0
BA,1,1,0
KMX,1,1,0
CZR,1,1,0
CTLT,1,1,0
@@ -248,10 +247,11 @@ CHRW,1,1,0
CE,1,1,0
CDW,1,1,0
CDNS,1,1,0
BA,1,1,0
IFF,1,1,0
CDAY,1,1,0
AVGO,1,1,0
ATVI,1,1,0
IEX,1,1,0
IDXX,1,1,0
ICE,1,1,0
ROP,1,1,0
ROL,1,1,0
ROK,1,1,0
@@ -375,10 +375,9 @@ VMC,1,1,0
VLO,1,1,0
VICI,1,1,0
TEL,1,1,0
IDXX,1,1,0
PAYC,1,1,0
PAYX,1,1,0
PCAR,1,1,0
LYB,1,1,0
LW,1,1,0
LVS,1,1,0
LUMN,1,1,0
@@ -405,11 +404,11 @@ MKC,1,1,0
MGM,1,1,0
META,1,1,0
MET,1,1,0
MDT,1,1,0
LYB,1,1,0
LYV,1,1,0
MKTX,1,1,0
MPC,1,1,0
MRO,1,1,0
ICE,1,1,0
IBM,1,1,0
HWM,1,1,0
HUM,1,1,0
@@ -422,9 +421,9 @@ KMB,1,1,0
KLAC,1,1,0
KIM,1,1,0
KHC,1,1,0
MDT,1,1,0
KEYS,1,1,0
KDP,1,1,0
MCK,1,1,0
KEY,1,1,0
K,1,1,0
JPM,1,1,0
JNPR,1,1,0
@@ -437,11 +436,11 @@ IRM,1,1,0
IQV,1,1,0
INVH,1,1,0
MTB,1,1,0
KEY,1,1,0
MCK,1,1,0
MRO,1,1,0
KDP,1,1,0
PAYX,1,1,0
MCHP,1,1,0
MCD,1,1,0
ODFL,1,1,0
MAS,1,1,0
NXPI,1,1,0
NVR,1,1,0
NVDA,1,1,0
@@ -454,8 +453,8 @@ NI,1,1,0
NDSN,1,1,0
NCLH,1,1,0
PYPL,1,1,0
OGN,1,1,0
PXD,1,1,0
PSX,1,1,0
PPL,1,1,0
PPG,1,1,0
POOL,1,1,0
@@ -469,11 +468,10 @@ PH,1,1,0
PFE,1,1,0
PEP,1,1,0
PCG,1,1,0
PSX,1,1,0
MMM,1,1,0
ODFL,1,1,0
OGN,1,1,0
OKE,1,1,0
ON,1,1,0
MAS,1,1,0
OMC,1,1,0
MAR,1,1,0
MAA,1,1,0
MA,1,1,0
@@ -486,9 +484,9 @@ NKE,1,1,0
NFLX,1,1,0
NEM,1,1,0
NEE,1,1,0
OMC,1,1,0
NDAQ,1,1,0
MSCI,1,1,0
MCD,1,1,0
MSI,1,1,0
MS,1,1,0
MPWR,1,1,0
MOS,1,1,0
@@ -501,5 +499,6 @@ OXY,1,1,0
OTIS,1,1,0
ORLY,1,1,0
ORCL,1,1,0
MSI,1,1,0
TOT.TO,1,1,0
ON,1,1,0
MSCI,1,1,0
MMM,1,1,0
1 X Y dist
2 ZBH 1 1 0
D 1 1 0
3 LLY 1 1 0
4 EW 1 1 0
5 ETR 1 1 0
26 FRT 1 1 0
27 FRC 1 1 0
28 FITB 1 1 0
29 FFIV 1 1 0
30 D 1 1 0
31 DAL 1 1 0
32 DE 1 1 0
33 DFS 1 1 0
DG 1 1 0
CTRA 1 1 0
34 CSX 1 1 0
35 CSGP 1 1 0
36 CPRT 1 1 0
43 CEG 1 1 0
44 CCI 1 1 0
45 CAG 1 1 0
FFIV 1 1 0
46 XRAY 1 1 0
47 DXCM FE 1 1 0
48 FANG 1 1 0
49 DVN 1 1 0
50 DVA 1 1 0
51 DUK 1 1 0
58 DLR 1 1 0
59 DISH 1 1 0
60 DIS 1 1 0
61 FANG DG 1 1 0
62 CTVA DXCM 1 1 0
63 FE CTRA 1 1 0
64 FDS FDX 1 1 0
65 HST FAST 1 1 0
66 HSIC 1 1 0
67 HRL 1 1 0
68 HPE 1 1 0
89 INTU 1 1 0
90 INTC 1 1 0
91 INCY 1 1 0
92 ILMN 1 1 0
93 HST 1 1 0
94 HSY 1 1 0
95 PEAK 1 1 0
96 BEN 1 1 0
F 1 1 0
FAST 1 1 0
97 EXR 1 1 0
98 EXPE 1 1 0
99 EXPD 1 1 0
106 IT 1 1 0
107 GRMN 1 1 0
108 GNRC 1 1 0
FDX 1 1 0
109 GM 1 1 0
110 GEN FDS 1 1 0
111 GIS 1 1 0
112 GEHC 1 1 0
113 GE 1 1 0
114 GD 1 1 0
121 FISV 1 1 0
122 FIS 1 1 0
123 FCX 1 1 0
124 GIS F 1 1 0
125 ILMN GEN 1 1 0
126 CVS IFF 1 1 0
127 DHR CTVA 1 1 0
128 AMCR DHI 1 1 0
129 ALL 1 1 0
130 AIG 1 1 0
131 AEP 1 1 0
152 ADI 1 1 0
153 ACGL 1 1 0
154 AAPL 1 1 0
155 WRB 1 1 0
156 AMCR 1 1 0
157 AMD 1 1 0
158 AME 1 1 0
159 AMGN 1 1 0
AMP 1 1 0
ATVI 1 1 0
160 ARE 1 1 0
161 APD 1 1 0
162 AOS 1 1 0
169 AES 1 1 0
170 ADP 1 1 0
171 ADM 1 1 0
WRB 1 1 0
172 ADBE 1 1 0
173 ABT TECH 1 1 0
174 ACN 1 1 0
175 ABBV 1 1 0
176 AAP 1 1 0
177 A 1 1 0
184 APH 1 1 0
185 AMZN 1 1 0
186 AMT 1 1 0
187 ACN AMP 1 1 0
188 DHI ABT 1 1 0
189 TECH CVS 1 1 0
190 BWA BXP 1 1 0
191 CAT BSX 1 1 0
192 CARR 1 1 0
193 CAH 1 1 0
194 BF-B 1 1 0
215 STZ 1 1 0
216 GLW 1 1 0
217 ED 1 1 0
218 DHR 1 1 0
219 CAT 1 1 0
220 CBOE 1 1 0
221 CBRE 1 1 0
222 CCL 1 1 0
CDAY 1 1 0
BSX 1 1 0
223 BRO 1 1 0
224 BRK-B 1 1 0
225 BR 1 1 0
232 BDX 1 1 0
233 BBY 1 1 0
234 BBWI 1 1 0
BXP 1 1 0
235 BAX 1 1 0
236 AVGO BWA 1 1 0
237 BA 1 1 0
238 KMX 1 1 0
239 CZR 1 1 0
240 CTLT 1 1 0
247 CE 1 1 0
248 CDW 1 1 0
249 CDNS 1 1 0
250 BA CDAY 1 1 0
251 IFF AVGO 1 1 0
252 ATVI 1 1 0
253 IEX 1 1 0
254 IDXX ICE 1 1 0
255 ROP 1 1 0
256 ROL 1 1 0
257 ROK 1 1 0
375 VLO 1 1 0
376 VICI 1 1 0
377 TEL 1 1 0
378 IDXX 1 1 0
379 PAYC 1 1 0
PAYX 1 1 0
380 PCAR 1 1 0
LYB 1 1 0
381 LW 1 1 0
382 LVS 1 1 0
383 LUMN 1 1 0
404 MGM 1 1 0
405 META 1 1 0
406 MET 1 1 0
407 MDT 1 1 0
408 LYB 1 1 0
409 LYV 1 1 0
410 MKTX 1 1 0
411 MPC 1 1 0
MRO 1 1 0
ICE 1 1 0
412 IBM 1 1 0
413 HWM 1 1 0
414 HUM 1 1 0
421 KLAC 1 1 0
422 KIM 1 1 0
423 KHC 1 1 0
MDT 1 1 0
424 KEYS 1 1 0
425 KDP MCK 1 1 0
426 KEY 1 1 0
427 K 1 1 0
428 JPM 1 1 0
429 JNPR 1 1 0
436 IQV 1 1 0
437 INVH 1 1 0
438 MTB 1 1 0
439 KEY MRO 1 1 0
440 MCK KDP 1 1 0
441 PAYX 1 1 0
442 MCHP 1 1 0
443 MCD MAS 1 1 0
ODFL 1 1 0
444 NXPI 1 1 0
445 NVR 1 1 0
446 NVDA 1 1 0
453 NDSN 1 1 0
454 NCLH 1 1 0
455 PYPL 1 1 0
OGN 1 1 0
456 PXD 1 1 0
457 PSX 1 1 0
458 PPL 1 1 0
459 PPG 1 1 0
460 POOL 1 1 0
468 PFE 1 1 0
469 PEP 1 1 0
470 PCG 1 1 0
471 PSX ODFL 1 1 0
472 MMM OGN 1 1 0
473 OKE 1 1 0
474 ON OMC 1 1 0
MAS 1 1 0
475 MAR 1 1 0
476 MAA 1 1 0
477 MA 1 1 0
484 NFLX 1 1 0
485 NEM 1 1 0
486 NEE 1 1 0
OMC 1 1 0
487 NDAQ 1 1 0
488 MSCI MCD 1 1 0
489 MSI 1 1 0
490 MS 1 1 0
491 MPWR 1 1 0
492 MOS 1 1 0
499 OTIS 1 1 0
500 ORLY 1 1 0
501 ORCL 1 1 0
502 MSI ON 1 1 0
503 TOT.TO MSCI 1 1 0
504 MMM 1 1 0

View File

@@ -34,7 +34,7 @@ def test_get_historical(mocker, recorder):
mocker.patch("yfinance.download", side_effect=mock_yf_download)
result_df = yahoo_finance_model.get_historical(
similar=["TSLA", "GM"],
similar=["TSLA", "AAPL"],
start_date=datetime.strptime("2020-12-21", "%Y-%m-%d"),
candle_type="o",
)
@@ -82,7 +82,7 @@ def test_get_sp500_comps_tsne(mocker, recorder):
side_effect=lambda x: np.full((len(x), 2), 1),
)
result_df = yahoo_finance_model.get_sp500_comps_tsne(
symbol="TOT.TO",
symbol="AAPL",
)
recorder.capture(result_df)