mirror of
https://github.com/OpenBB-finance/OpenBB.git
synced 2026-10-30 05:52:23 +00:00
242 lines
7.9 KiB
Python
242 lines
7.9 KiB
Python
""" Disc Controller """
|
|
__docformat__ = "numpy"
|
|
|
|
import argparse
|
|
import os
|
|
from typing import List
|
|
from matplotlib import pyplot as plt
|
|
from prompt_toolkit.completion import NestedCompleter
|
|
from gamestonk_terminal import feature_flags as gtff
|
|
from gamestonk_terminal.helper_funcs import get_flair
|
|
from gamestonk_terminal.menu import session
|
|
from gamestonk_terminal.discovery import (
|
|
alpha_vantage_view,
|
|
ark_view,
|
|
fidelity_view,
|
|
finviz_view,
|
|
seeking_alpha_view,
|
|
short_interest_view,
|
|
simply_wallst_view,
|
|
spachero_view,
|
|
unusual_whales_view,
|
|
yahoo_finance_view,
|
|
marketbeat_view,
|
|
)
|
|
|
|
|
|
class DiscoveryController:
|
|
""" Discovery Controller """
|
|
|
|
# Command choices
|
|
CHOICES = [
|
|
"help",
|
|
"q",
|
|
"quit",
|
|
"map",
|
|
"rtp_sectors",
|
|
"gainers",
|
|
"losers",
|
|
"orders",
|
|
"ark_orders",
|
|
"up_earnings",
|
|
"high_short",
|
|
"low_float",
|
|
"simply_wallst",
|
|
"spachero",
|
|
"uwhales",
|
|
"valuation",
|
|
"performance",
|
|
"spectrum",
|
|
"ratings",
|
|
"latest",
|
|
"trending",
|
|
]
|
|
|
|
def __init__(self):
|
|
"""Constructor"""
|
|
self.spectrum_img_to_delete = ""
|
|
self.disc_parser = argparse.ArgumentParser(add_help=False, prog="disc")
|
|
self.disc_parser.add_argument(
|
|
"cmd",
|
|
choices=self.CHOICES,
|
|
)
|
|
|
|
@staticmethod
|
|
def print_help():
|
|
""" Print help """
|
|
|
|
print("\nDiscovery Mode:")
|
|
print(" help show this discovery menu again")
|
|
print(" q quit this menu, and shows back to main menu")
|
|
print(" quit quit to abandon program")
|
|
print("")
|
|
print(" map S&P500 index stocks map [Finviz]")
|
|
print(" rtp_sectors real-time performance sectors [Alpha Vantage]")
|
|
print(" gainers show latest top gainers [Yahoo Finance]")
|
|
print(" losers show latest top losers [Yahoo Finance]")
|
|
print(" orders orders by Fidelity Customers [Fidelity]")
|
|
print(
|
|
" ark_orders orders by ARK Investment Management LLC [www.cathiesark.com]"
|
|
)
|
|
print(" up_earnings upcoming earnings release dates [Seeking Alpha]")
|
|
print(
|
|
" high_short show top high short interest stocks of over 20% ratio [www.highshortinterest.com]"
|
|
)
|
|
print(
|
|
" low_float show low float stocks under 10M shares float [www.lowfloat.com]"
|
|
)
|
|
print(" simply_wallst Simply Wall St. research data [Simply Wall St.]")
|
|
print(" spachero great website for SPACs research [SpacHero]")
|
|
print(" uwhales good website for SPACs research [UnusualWhales]")
|
|
print(" valuation valuation of sectors, industry, country [Finviz]")
|
|
print(" performance performance of sectors, industry, country [Finviz]")
|
|
print(" spectrum spectrum of sectors, industry, country [Finviz]")
|
|
print(" latest latest news [Seeking Alpha]")
|
|
print(" trending trending news [Seeking Alpha]")
|
|
print(" ratings top ratings updates [MarketBeat]")
|
|
print("")
|
|
|
|
def switch(self, an_input: str):
|
|
"""Process and dispatch input
|
|
|
|
Returns
|
|
-------
|
|
True, False or None
|
|
False - quit the menu
|
|
True - quit the program
|
|
None - continue in the menu
|
|
"""
|
|
(known_args, other_args) = self.disc_parser.parse_known_args(an_input.split())
|
|
|
|
# Due to Finviz implementation of Spectrum, we delete the generated spectrum figure
|
|
# after saving it and displaying it to the user
|
|
if self.spectrum_img_to_delete:
|
|
# Confirm that file exists
|
|
if os.path.isfile(self.spectrum_img_to_delete + ".jpg"):
|
|
os.remove(self.spectrum_img_to_delete + ".jpg")
|
|
self.spectrum_img_to_delete = ""
|
|
|
|
return getattr(
|
|
self, "call_" + known_args.cmd, lambda: "Command not recognized!"
|
|
)(other_args)
|
|
|
|
def call_help(self, _):
|
|
"""Process Help command"""
|
|
self.print_help()
|
|
|
|
def call_q(self, _):
|
|
"""Process Q command - quit the menu"""
|
|
return False
|
|
|
|
def call_quit(self, _):
|
|
"""Process Quit command - quit the program"""
|
|
return True
|
|
|
|
def call_map(self, other_args: List[str]):
|
|
"""Process map command"""
|
|
finviz_view.map_sp500_view(other_args)
|
|
|
|
def call_rtp_sectors(self, other_args: List[str]):
|
|
"""Process rtp_sectors command"""
|
|
alpha_vantage_view.sectors_view(other_args)
|
|
|
|
def call_gainers(self, other_args: List[str]):
|
|
"""Process gainers command"""
|
|
yahoo_finance_view.gainers_view(other_args)
|
|
|
|
def call_losers(self, other_args: List[str]):
|
|
"""Process losers command"""
|
|
yahoo_finance_view.losers_view(other_args)
|
|
|
|
def call_orders(self, other_args: List[str]):
|
|
"""Process orders command"""
|
|
fidelity_view.orders_view(other_args)
|
|
|
|
def call_ark_orders(self, other_args: List[str]):
|
|
"""Process ark_orders command"""
|
|
ark_view.ark_orders_view(other_args)
|
|
|
|
def call_up_earnings(self, other_args: List[str]):
|
|
"""Process up_earnings command"""
|
|
seeking_alpha_view.earnings_release_dates_view(other_args)
|
|
|
|
def call_high_short(self, other_args: List[str]):
|
|
"""Process high_short command"""
|
|
short_interest_view.high_short_interest_view(other_args)
|
|
|
|
def call_low_float(self, other_args: List[str]):
|
|
"""Process low_float command"""
|
|
short_interest_view.low_float_view(other_args)
|
|
|
|
def call_simply_wallst(self, other_args: List[str]):
|
|
"""Process simply_wallst command"""
|
|
simply_wallst_view.simply_wallst_view(other_args)
|
|
|
|
def call_spachero(self, other_args: List[str]):
|
|
"""Process spachero command"""
|
|
spachero_view.spachero_view(other_args)
|
|
|
|
def call_uwhales(self, other_args: List[str]):
|
|
"""Process uwhales command"""
|
|
unusual_whales_view.unusual_whales_view(other_args)
|
|
|
|
def call_valuation(self, other_args: List[str]):
|
|
"""Process valuation command"""
|
|
finviz_view.view_group_data(other_args, "valuation")
|
|
|
|
def call_performance(self, other_args: List[str]):
|
|
"""Process performance command"""
|
|
finviz_view.view_group_data(other_args, "performance")
|
|
|
|
def call_spectrum(self, other_args: List[str]):
|
|
"""Process spectrum command"""
|
|
self.spectrum_img_to_delete = finviz_view.view_group_data(
|
|
other_args, "spectrum"
|
|
)
|
|
|
|
def call_latest(self, other_args: List[str]):
|
|
"""Process latest command"""
|
|
seeking_alpha_view.latest_news_view(other_args)
|
|
|
|
def call_trending(self, other_args: List[str]):
|
|
"""Process trending command"""
|
|
seeking_alpha_view.trending_news_view(other_args)
|
|
|
|
def call_ratings(self, other_args: List[str]):
|
|
"""Process ratings command"""
|
|
marketbeat_view.ratings_view(other_args)
|
|
|
|
|
|
def menu():
|
|
"""Discovery Menu"""
|
|
|
|
disc_controller = DiscoveryController()
|
|
disc_controller.call_help(None)
|
|
|
|
# Loop forever and ever
|
|
while True:
|
|
# Get input command from user
|
|
if session and gtff.USE_PROMPT_TOOLKIT:
|
|
completer = NestedCompleter.from_nested_dict(
|
|
{c: None for c in disc_controller.CHOICES}
|
|
)
|
|
|
|
an_input = session.prompt(
|
|
f"{get_flair()} (disc)> ",
|
|
completer=completer,
|
|
)
|
|
else:
|
|
an_input = input(f"{get_flair()} (disc)> ")
|
|
|
|
try:
|
|
plt.close("all")
|
|
|
|
process_input = disc_controller.switch(an_input)
|
|
|
|
if process_input is not None:
|
|
return process_input
|
|
|
|
except SystemExit:
|
|
print("The command selected doesn't exist\n")
|
|
continue
|