Improve menus

This commit is contained in:
didier
2021-01-16 15:54:15 +00:00
parent c7b2fa4056
commit 79be82c90c
4 changed files with 261 additions and 312 deletions

View File

@@ -1,211 +0,0 @@
import argparse
from alpha_vantage.sectorperformance import SectorPerformances
from alpha_vantage.timeseries import TimeSeries
import config_bot as cfg
import pandas as pd
from stock_market_helper_funcs import *
# ----------------------------------------------- PRINT_HELP ----------------------------------------------------------
def print_help(s_ticker, s_start, s_interval, b_is_market_open):
""" Print help
"""
print("What do you want to do?")
print(" gainers show latest top gainers")
print(" sectors show sectors performance")
print(" view view and load a specific stock ticker for technical analysis")
print(" clear clear a specific stock ticker from analysis")
print(" load load a specific stock ticker for analysis")
print(" help help to see this menu again")
print(" quit to abandon the program")
s_intraday = (f'Intraday {s_interval}', 'Daily')[s_interval == "1440min"]
if s_ticker and s_start:
print(f"\n{s_intraday} Stock: {s_ticker} (from {s_start.strftime('%Y-%m-%d')})")
elif s_ticker:
print(f"\n{s_intraday} Stock: {s_ticker}")
else:
print("\nStock: ?")
print(f"Market {('CLOSED', 'OPEN')[b_is_market_open]}.")
if s_ticker:
print("\nMenus:")
print(" fa fundamental analysis")
print(" ta technical analysis")
print(" pred prediction techniques")
'''
print("\nPrediction:")
print(" ma")
print(" ema")
print(" lr")
print(" knn")
print(" arima")
print(" rnn")
print(" lstm")
print(" prophet")
'''
# ---------------------------------------------------- SECTORS ----------------------------------------------------
def sectors(l_args):
parser = argparse.ArgumentParser(prog='sectors', description='Plot sectors performance')
try:
(ns_parser, l_unknown_args) = parser.parse_known_args(l_args)
except SystemExit:
print("")
return
if l_unknown_args:
print(f"The following args couldn't be interpreted: {l_unknown_args}")
sp = SectorPerformances(key=cfg.API_KEY_ALPHAVANTAGE, output_format='pandas')
df_sectors, d_meta_data = sp.get_sector()
df_sectors['Rank A: Real-Time Performance'].plot(kind='bar')
plt.title('Real Time Performance (%) per Sector')
plt.tight_layout()
plt.grid()
plt.show()
print("")
# ---------------------------------------------------- GAINERS ----------------------------------------------------
def gainers(l_args):
parser = argparse.ArgumentParser(prog='gainers',
description='Show top ticker gainers from Yahoo Finance')
parser.add_argument('-n', "--num", action="store", dest="n_gainers", type=int, default=5, choices=range(1, 25),
help='Number of the top gainers stocks to retrieve (default 5)')
try:
(ns_parser, l_unknown_args) = parser.parse_known_args(l_args)
except SystemExit:
print("")
return
if l_unknown_args:
print(f"The following args couldn't be interpreted: {l_unknown_args}")
df_gainers = pd.read_html('https://finance.yahoo.com/screener/predefined/day_gainers')[0]
print(df_gainers.head(ns_parser.n_gainers).to_string(index=False))
print("")
# ----------------------------------------------------- LOAD -----------------------------------------------------
def load(l_args, s_ticker, s_start, s_interval, df_stock):
parser = argparse.ArgumentParser(prog='load', description=""" Load a stock in order to perform analysis""")
parser.add_argument('-t', "--ticker", action="store", dest="s_ticker", required=True, help="Stock ticker")
parser.add_argument('-s', "--start", type=valid_date, dest="s_start_date", help="The starting date (format YYYY-MM-DD) of the stock")
parser.add_argument('-i', "--interval", action="store", dest="n_interval", type=int, default=1440, choices=[1,5,15,30,60], help="Intraday stock minutes")
try:
(ns_parser, l_unknown_args) = parser.parse_known_args(l_args)
except SystemExit:
print("")
return [s_ticker, s_start, s_interval, df_stock]
if l_unknown_args:
print(f"The following args couldn't be interpreted: {l_unknown_args}")
# Update values:
s_ticker = ns_parser.s_ticker
s_start = ns_parser.s_start_date
s_interval = str(ns_parser.n_interval)+'min'
try:
ts = TimeSeries(key=cfg.API_KEY_ALPHAVANTAGE, output_format='pandas')
# Daily
if s_interval == "1440min":
df_stock, d_stock_metadata = ts.get_daily_adjusted(symbol=ns_parser.s_ticker, outputsize='full')
# Intraday
else:
df_stock, d_stock_metadata = ts.get_intraday(symbol=ns_parser.s_ticker, outputsize='full', interval=s_interval)
except:
print("Either the ticker or the API_KEY are invalids. Try again!")
return [s_ticker, s_start, s_interval, df_stock]
s_intraday = (f'Intraday {s_interval}', 'Daily')[s_interval == "1440min"]
if s_start:
# Slice dataframe from the starting date YYYY-MM-DD selected
df_stock = df_stock[ns_parser.s_start_date:]
print(f"Loading {s_intraday} {s_ticker} stock with starting period {s_start.strftime('%Y-%m-%d')} for analysis.\n")
else:
print(f"Loading {s_intraday} {s_ticker} stock for analysis.\n")
return [s_ticker, s_start, s_interval, df_stock]
# ----------------------------------------------------- VIEW -----------------------------------------------------
def view(l_args, s_ticker, s_start, s_interval, df_stock):
parser = argparse.ArgumentParser(prog='view', description='Visualise historical data of a stock. An alpha_vantage key is necessary.')
if s_ticker:
parser.add_argument('-t', "--ticker", action="store", dest="s_ticker", default=s_ticker, help='Stock ticker')
else:
parser.add_argument('-t', "--ticker", action="store", dest="s_ticker", required=True, help='Stock ticker')
parser.add_argument('-s', "--start", type=valid_date, dest="s_start_date", help="The starting date (format YYYY-MM-DD) of the stock")
parser.add_argument('-i', "--interval", action="store", dest="n_interval", type=int, default=0, choices=[1,5,15,30,60], help="Intraday stock minutes")
parser.add_argument("--type", action="store", dest="n_type", type=check_positive, default=5, # in case it's daily
help='1234 corresponds to types: 1. open; 2. high; 3.low; 4. close; while 14 corresponds to types: 1.open; 4. close')
try:
(ns_parser, l_unknown_args) = parser.parse_known_args(l_args)
except SystemExit:
print("")
return
if l_unknown_args:
print(f"The following args couldn't be interpreted: {l_unknown_args}")
# Update values:
s_ticker = ns_parser.s_ticker
if ns_parser.s_start_date:
s_start = ns_parser.s_start_date
# A new interval intraday period was given
if ns_parser.n_interval != 0:
s_interval = str(ns_parser.n_interval)+'min'
try:
ts = TimeSeries(key=cfg.API_KEY_ALPHAVANTAGE, output_format='pandas')
# Daily
if s_interval == "1440min":
df_stock, d_stock_metadata = ts.get_daily_adjusted(symbol=s_ticker, outputsize='full')
# Intraday
else:
df_stock, d_stock_metadata = ts.get_intraday(symbol=s_ticker, outputsize='full', interval=s_interval)
except:
print("Either the ticker or the API_KEY are invalids. Try again!")
return
# Slice dataframe from the starting date YYYY-MM-DD selected
df_stock = df_stock[s_start:]
# Daily
if s_interval == "1440min":
# The default doesn't exist for intradaily data
ln_col_idx = [int(x)-1 for x in list(str(ns_parser.n_type))]
if 4 not in ln_col_idx:
ln_col_idx.append(4)
# Check that the types given are not bigger than 4, as there are only 5 types (0-4)
if len([i for i in ln_col_idx if i > 4]) > 0:
print("An index bigger than 4 was given, which is wrong. Try again")
return
# Append last column of df to be filtered which corresponds to: 6. Volume
ln_col_idx.append(5)
# Intraday
else:
# The default doesn't exist for intradaily data
if ns_parser.n_type == 5:
ln_col_idx = [3]
else:
ln_col_idx = [int(x)-1 for x in list(str(ns_parser.n_type))]
# Check that the types given are not bigger than 3, as there are only 4 types (0-3)
if len([i for i in ln_col_idx if i > 3]) > 0:
print("An index bigger than 3 was given, which is wrong. Try again")
return
# Append last column of df to be filtered which corresponds to: 5. Volume
ln_col_idx.append(4)
# Plot view of the stock
plot_view_stock(df_stock.iloc[:, ln_col_idx], ns_parser.s_ticker)

View File

@@ -39,7 +39,7 @@ def print_fundamental_analysis(s_ticker, s_start, s_interval):
print(" insider insider trading of the company")
print(" news latest news of the company")
print(" analyst analyst prices and ratings of the company")
print("\nMarket Watch BS")
print("\nMarket Watch API")
print(" incom income statement of the company")
print(" assets assets of the company")
print(" liabilities liabilities and shareholders equity of the company")
@@ -80,6 +80,7 @@ def print_more_fundamental_analysis():
print(" ratios financial ratios of the company")
print(" growth financial statement growth of the company")
print("")
return
# ---------------------------------------------------- INFO ----------------------------------------------------
@@ -112,9 +113,9 @@ def fa_menu(s_ticker, s_start, s_interval):
# Add list of arguments that the fundamental analysis parser accepts
fa_parser = argparse.ArgumentParser(prog='fundamental_analysis', add_help=False)
fa_parser.add_argument('fa', choices=['info', 'warnings', 'help', 'q', 'quit', 'more',
'screener', 'insider', 'news', 'analyst', # Finviz
'income', 'assets', 'liabilities', 'operating', 'investing', 'financing', 'sec']) # MW
fa_parser.add_argument('cmd', choices=['info', 'warnings', 'help', 'q', 'quit', 'more',
'screener', 'insider', 'news', 'analyst', # Finviz
'income', 'assets', 'liabilities', 'operating', 'investing', 'financing', 'sec']) # MW
print_fundamental_analysis(s_ticker, s_start, s_interval)
@@ -131,64 +132,64 @@ def fa_menu(s_ticker, s_start, s_interval):
print("The command selected doesn't exist\n")
continue
if ns_known_args.fa == 'info':
if ns_known_args.cmd == 'info':
info(l_args, s_ticker)
elif ns_known_args.fa == 'help':
elif ns_known_args.cmd == 'help':
print_fundamental_analysis(s_ticker, s_start, s_interval)
elif ns_known_args.fa == 'q':
elif ns_known_args.cmd == 'q':
# Just leave the FA menu
return False
elif ns_known_args.fa == 'quit':
elif ns_known_args.cmd == 'quit':
# Abandon the program
return True
elif ns_known_args.fa == 'warnings':
elif ns_known_args.cmd == 'warnings':
mw_api.sean_seah_warnings(l_args, s_ticker)
# -------------------------------------------------- FINVIZ -----------------------------------------------
elif ns_known_args.fa == 'screener':
# FINVIZ API
elif ns_known_args.cmd == 'screener':
fvz_api.screener(l_args, s_ticker)
elif ns_known_args.fa == 'insider':
elif ns_known_args.cmd == 'insider':
fvz_api.insider(l_args, s_ticker)
elif ns_known_args.fa == 'news':
elif ns_known_args.cmd == 'news':
fvz_api.news(l_args, s_ticker)
elif ns_known_args.fa == 'analyst':
elif ns_known_args.cmd == 'analyst':
fvz_api.analyst(l_args, s_ticker)
# ------------------------------------------------ MARKET WATCH ---------------------------------------------
elif ns_known_args.fa == 'income':
# MARKET WATCH API
elif ns_known_args.cmd == 'income':
mw_api.income(l_args, s_ticker)
elif ns_known_args.fa == 'assets':
elif ns_known_args.cmd == 'assets':
mw_api.assets(l_args, s_ticker)
elif ns_known_args.fa == 'liabilities':
elif ns_known_args.cmd == 'liabilities':
mw_api.liabilities(l_args, s_ticker)
elif ns_known_args.fa == 'operating':
elif ns_known_args.cmd == 'operating':
mw_api.operating(l_args, s_ticker)
elif ns_known_args.fa == 'investing':
elif ns_known_args.cmd == 'investing':
mw_api.investing(l_args, s_ticker)
elif ns_known_args.fa == 'financing':
elif ns_known_args.cmd == 'financing':
mw_api.financing(l_args, s_ticker)
elif ns_known_args.fa == 'sec':
elif ns_known_args.cmd == 'sec':
mw_api.sec_fillings(l_args, s_ticker)
# --------------------------------------------- MORE FUNDAMENTAL ANALYSIS ---------------------------------------------
elif ns_known_args.fa == 'more':
# MORE FUNDAMENTAL ANALYSIS MENU
elif ns_known_args.cmd == 'more':
# Add list of arguments that the more fundamental analysis parser accepts
mfa_parser = argparse.ArgumentParser(prog='more_fundamental_analysis', add_help=False)
mfa_parser.add_argument('mfa', choices=['help', 'q', 'quit',
mfa_parser.add_argument('cmd', choices=['help', 'q', 'quit',
'overview', 'key', 'income', 'balance', 'cash', 'earnings', # AV
'profile', 'rating', 'quote', 'enterprise', 'dcf', # FMP
'inc', 'bal', 'cashf', 'metrics', 'ratios', 'growth']) # FMP
@@ -208,75 +209,73 @@ def fa_menu(s_ticker, s_start, s_interval):
print("The command selected doesn't exist\n")
continue
if ns_known_args.mfa == 'help':
if ns_known_args.cmd == 'help':
print_more_fundamental_analysis()
elif ns_known_args.mfa == 'q':
elif ns_known_args.cmd == 'q':
# Just leave the more FA menu
print_fundamental_analysis(s_ticker, s_start, s_interval)
break
elif ns_known_args.mfa == 'quit':
elif ns_known_args.cmd == 'quit':
# Abandon the program
return True
# ----------------------------------------------- ALPHA VANTAGE ----------------------------------------------
elif ns_known_args.mfa == 'overview':
# ALPHA VANTAGE API
elif ns_known_args.cmd == 'overview':
av_api.overview(l_args, s_ticker)
elif ns_known_args.mfa == 'income':
elif ns_known_args.cmd == 'income':
av_api.income_statement(l_args, s_ticker)
elif ns_known_args.mfa == 'balance':
elif ns_known_args.cmd == 'balance':
av_api.balance_sheet(l_args, s_ticker)
elif ns_known_args.mfa == 'cash':
elif ns_known_args.cmd == 'cash':
av_api.cash_flow(l_args, s_ticker)
elif ns_known_args.mfa == 'earnings':
elif ns_known_args.cmd == 'earnings':
av_api.earnings(l_args, s_ticker)
# -------------------------------------------- FINANCIAL MODELING PREP -----------------------------------------
# FINANCIAL MODELING PREP API
# Details:
elif ns_known_args.mfa == 'profile':
elif ns_known_args.cmd == 'profile':
fmp_api.profile(l_args, s_ticker)
elif ns_known_args.mfa == 'rating':
elif ns_known_args.cmd == 'rating':
fmp_api.rating(l_args, s_ticker)
elif ns_known_args.mfa == 'quote':
elif ns_known_args.cmd == 'quote':
fmp_api.quote(l_args, s_ticker)
elif ns_known_args.mfa == 'enterprise':
elif ns_known_args.cmd == 'enterprise':
fmp_api.enterprise(l_args, s_ticker)
elif ns_known_args.mfa == 'dcf':
elif ns_known_args.cmd == 'dcf':
fmp_api.discounted_cash_flow(l_args, s_ticker)
# Financial statement:
elif ns_known_args.mfa == 'inc':
elif ns_known_args.cmd == 'inc':
fmp_api.income_statement(l_args, s_ticker)
elif ns_known_args.mfa == 'bal':
elif ns_known_args.cmd == 'bal':
fmp_api.balance_sheet(l_args, s_ticker)
elif ns_known_args.mfa == 'cashf':
elif ns_known_args.cmd == 'cashf':
fmp_api.cash_flow(l_args, s_ticker)
# Ratios:
elif ns_known_args.mfa == 'metrics':
elif ns_known_args.cmd == 'metrics':
fmp_api.key_metrics(l_args, s_ticker)
elif ns_known_args.mfa == 'ratios':
elif ns_known_args.cmd == 'ratios':
fmp_api.financial_ratios(l_args, s_ticker)
elif ns_known_args.mfa == 'growth':
elif ns_known_args.cmd == 'growth':
fmp_api.financial_statement_growth(l_args, s_ticker)
# ------------------------------------------------------------------------------------------------------------
else:
print("Command not recognized!")
# ------------------------------------------------------------------------------------------------------------
else:
print("Command not recognized!")

View File

@@ -38,19 +38,180 @@
- Sheet9 - Reddit popularity
"""
import argparse
import pandas as pd
from stock_market_helper_funcs import *
import command as cmd
from fundamental_analysis import fa_menu as fam
from technical_analysis import ta_menu as tam
from discovery import disc_menu as dam
# delete this important when automatic loading tesla
#i.e. when program is done
import config_bot as cfg
from alpha_vantage.timeseries import TimeSeries
# ----------------------------------------------------- LOAD -----------------------------------------------------
def load(l_args, s_ticker, s_start, s_interval, df_stock):
parser = argparse.ArgumentParser(prog='load', description=""" Load a stock in order to perform analysis""")
parser.add_argument('-t', "--ticker", action="store", dest="s_ticker", required=True, help="Stock ticker")
parser.add_argument('-s', "--start", type=valid_date, dest="s_start_date", help="The starting date (format YYYY-MM-DD) of the stock")
parser.add_argument('-i', "--interval", action="store", dest="n_interval", type=int, default=1440, choices=[1,5,15,30,60], help="Intraday stock minutes")
try:
(ns_parser, l_unknown_args) = parser.parse_known_args(l_args)
except SystemExit:
print("")
return [s_ticker, s_start, s_interval, df_stock]
if l_unknown_args:
print(f"The following args couldn't be interpreted: {l_unknown_args}")
# Update values:
s_ticker = ns_parser.s_ticker
s_start = ns_parser.s_start_date
s_interval = str(ns_parser.n_interval)+'min'
try:
ts = TimeSeries(key=cfg.API_KEY_ALPHAVANTAGE, output_format='pandas')
# Daily
if s_interval == "1440min":
df_stock, d_stock_metadata = ts.get_daily_adjusted(symbol=ns_parser.s_ticker, outputsize='full')
# Intraday
else:
df_stock, d_stock_metadata = ts.get_intraday(symbol=ns_parser.s_ticker, outputsize='full', interval=s_interval)
except:
print("Either the ticker or the API_KEY are invalids. Try again!")
return [s_ticker, s_start, s_interval, df_stock]
s_intraday = (f'Intraday {s_interval}', 'Daily')[s_interval == "1440min"]
if s_start:
# Slice dataframe from the starting date YYYY-MM-DD selected
df_stock = df_stock[ns_parser.s_start_date:]
print(f"Loading {s_intraday} {s_ticker} stock with starting period {s_start.strftime('%Y-%m-%d')} for analysis.\n")
else:
print(f"Loading {s_intraday} {s_ticker} stock for analysis.\n")
return [s_ticker, s_start, s_interval, df_stock]
# ----------------------------------------------------- VIEW -----------------------------------------------------
def view(l_args, s_ticker, s_start, s_interval, df_stock):
parser = argparse.ArgumentParser(prog='view', description='Visualise historical data of a stock. An alpha_vantage key is necessary.')
if s_ticker:
parser.add_argument('-t', "--ticker", action="store", dest="s_ticker", default=s_ticker, help='Stock ticker')
else:
parser.add_argument('-t', "--ticker", action="store", dest="s_ticker", required=True, help='Stock ticker')
parser.add_argument('-s', "--start", type=valid_date, dest="s_start_date", help="The starting date (format YYYY-MM-DD) of the stock")
parser.add_argument('-i', "--interval", action="store", dest="n_interval", type=int, default=0, choices=[1,5,15,30,60], help="Intraday stock minutes")
parser.add_argument("--type", action="store", dest="n_type", type=check_positive, default=5, # in case it's daily
help='1234 corresponds to types: 1. open; 2. high; 3.low; 4. close; while 14 corresponds to types: 1.open; 4. close')
try:
(ns_parser, l_unknown_args) = parser.parse_known_args(l_args)
except SystemExit:
print("")
return
if l_unknown_args:
print(f"The following args couldn't be interpreted: {l_unknown_args}")
# Update values:
s_ticker = ns_parser.s_ticker
if ns_parser.s_start_date:
s_start = ns_parser.s_start_date
# A new interval intraday period was given
if ns_parser.n_interval != 0:
s_interval = str(ns_parser.n_interval)+'min'
try:
ts = TimeSeries(key=cfg.API_KEY_ALPHAVANTAGE, output_format='pandas')
# Daily
if s_interval == "1440min":
df_stock, d_stock_metadata = ts.get_daily_adjusted(symbol=s_ticker, outputsize='full')
# Intraday
else:
df_stock, d_stock_metadata = ts.get_intraday(symbol=s_ticker, outputsize='full', interval=s_interval)
except:
print("Either the ticker or the API_KEY are invalids. Try again!")
return
# Slice dataframe from the starting date YYYY-MM-DD selected
df_stock = df_stock[s_start:]
# Daily
if s_interval == "1440min":
# The default doesn't exist for intradaily data
ln_col_idx = [int(x)-1 for x in list(str(ns_parser.n_type))]
if 4 not in ln_col_idx:
ln_col_idx.append(4)
# Check that the types given are not bigger than 4, as there are only 5 types (0-4)
if len([i for i in ln_col_idx if i > 4]) > 0:
print("An index bigger than 4 was given, which is wrong. Try again")
return
# Append last column of df to be filtered which corresponds to: 6. Volume
ln_col_idx.append(5)
# Intraday
else:
# The default doesn't exist for intradaily data
if ns_parser.n_type == 5:
ln_col_idx = [3]
else:
ln_col_idx = [int(x)-1 for x in list(str(ns_parser.n_type))]
# Check that the types given are not bigger than 3, as there are only 4 types (0-3)
if len([i for i in ln_col_idx if i > 3]) > 0:
print("An index bigger than 3 was given, which is wrong. Try again")
return
# Append last column of df to be filtered which corresponds to: 5. Volume
ln_col_idx.append(4)
# Plot view of the stock
plot_view_stock(df_stock.iloc[:, ln_col_idx], ns_parser.s_ticker)
# ----------------------------------------------------- HELP ------------------------------------------------------------------
def print_help(s_ticker, s_start, s_interval, b_is_market_open):
""" Print help
"""
print("What do you want to do?")
print(" help help to see this menu again")
print(" quit to abandon the program")
print("")
print(" clear clear a specific stock ticker from analysis")
print(" load load a specific stock ticker for analysis")
print(" view view and load a specific stock ticker for technical analysis")
s_intraday = (f'Intraday {s_interval}', 'Daily')[s_interval == "1440min"]
if s_ticker and s_start:
print(f"\n{s_intraday} Stock: {s_ticker} (from {s_start.strftime('%Y-%m-%d')})")
elif s_ticker:
print(f"\n{s_intraday} Stock: {s_ticker}")
else:
print("\nStock: ?")
print(f"Market {('CLOSED', 'OPEN')[b_is_market_open]}.")
if s_ticker:
print("\nMenus:")
print(" disc discovery mode")
print(" fa fundamental analysis")
print(" ta technical analysis")
print(" pred prediction techniques")
'''
print("\nPrediction:")
print(" ma")
print(" ema")
print(" lr")
print(" knn")
print(" arima")
print(" rnn")
print(" lstm")
print(" prophet")
'''
# -----------------------------------------------------------------------------------------------------------------------
def main():
@@ -73,19 +234,25 @@ def main():
# Add list of arguments that the main parser accepts
menu_parser = argparse.ArgumentParser(prog='stock_market_bot', add_help=False)
menu_parser.add_argument('opt', choices=['gainers', 'sectors', 'view', 'clear', 'load',
'fa', 'ta', 'help', 'quit'])
menu_parser.add_argument('opt', choices=['help', 'quit',
'clear', 'load', 'view',
'disc', 'fa', 'ta'])
# Print first welcome message and help
print("\nWelcome to Didier's Stock Market Bot\n")
cmd.print_help(s_ticker, s_start, s_interval, b_is_stock_market_open())
print_help(s_ticker, s_start, s_interval, b_is_stock_market_open())
print("\n")
# Loop forever and ever
while True:
# Get input command from user
as_input = input('> ')
# Is command empty
if not len(as_input):
print("")
continue
# Parse main command of the list of possible commands
try:
@@ -95,38 +262,35 @@ def main():
print("The command selected doesn't exist\n")
continue
# --------------------------------------------------- GAINERS --------------------------------------------------
if ns_known_args.opt == 'gainers':
cmd.gainers(l_args)
if ns_known_args.opt == 'help':
print_help(s_ticker, s_start, s_interval, b_is_stock_market_open())
# --------------------------------------------------- SECTORS --------------------------------------------------
if ns_known_args.opt == 'sectors':
cmd.sectors(l_args)
# --------------------------------------------------- CLEAR ----------------------------------------------------
elif ns_known_args.opt == 'quit':
print("Hope you made money today. Good bye my lover, good bye my friend.\n")
return
elif ns_known_args.opt == 'clear':
print("Clearing stock ticker to be used for analysis")
s_ticker = ""
s_start = ""
# ---------------------------------------------------- LOAD ----------------------------------------------------
elif ns_known_args.opt == 'load':
[s_ticker, s_start, s_interval, df_stock] = cmd.load(l_args, s_ticker, s_start, s_interval, df_stock)
[s_ticker, s_start, s_interval, df_stock] = load(l_args, s_ticker, s_start, s_interval, df_stock)
# ---------------------------------------------------- VIEW ----------------------------------------------------
elif ns_known_args.opt == 'view':
cmd.view(l_args, s_ticker, s_start, s_interval, df_stock)
view(l_args, s_ticker, s_start, s_interval, df_stock)
# ---------------------------------------------------- HELP ----------------------------------------------------
elif ns_known_args.opt == 'help':
cmd.print_help(s_ticker, s_start, s_interval, b_is_stock_market_open())
# DISCOVERY MENU
elif ns_known_args.opt == 'disc':
b_quit = dam.disc_menu()
# ----------------------------------------------------- QUIT ----------------------------------------------------
elif ns_known_args.opt == 'quit':
print("Hope you made money today. Good bye my lover, good bye my friend.\n")
return
# ------------------------------------------- FUNDAMENTAL ANALYSIS ---------------------------------------------
if b_quit:
print("Hope you made money today. Good bye my lover, good bye my friend.\n")
return
else:
print_help(s_ticker, s_start, s_interval, b_is_stock_market_open())
# FUNDAMENTAL ANALYSIS MENU
elif ns_known_args.opt == 'fa':
b_quit = fam.fa_menu(s_ticker, s_start, s_interval)
@@ -134,9 +298,9 @@ def main():
print("Hope you made money today. Good bye my lover, good bye my friend.\n")
return
else:
cmd.print_help(s_ticker, s_start, s_interval, b_is_stock_market_open())
print_help(s_ticker, s_start, s_interval, b_is_stock_market_open())
# -------------------------------------------- TECHNICAL ANALYSIS ----------------------------------------------
# TECHNICAL ANALYSIS MENU
elif ns_known_args.opt == 'ta':
b_quit = tam.ta_menu(df_stock, s_ticker, s_start, s_interval)
@@ -144,12 +308,9 @@ def main():
print("Hope you made money today. Good bye my lover, good bye my friend.\n")
return
else:
cmd.print_help(s_ticker, s_start, s_interval, b_is_stock_market_open())
# ------------------------------------------------ PREDICTION --------------------------------------------------
print_help(s_ticker, s_start, s_interval, b_is_stock_market_open())
# --------------------------------------------------------------------------------------------------------------
else:
print('Shouldnt see this command!')

View File

@@ -57,12 +57,12 @@ def ta_menu(df_stock, s_ticker, s_start, s_interval):
# Add list of arguments that the technical analysis parser accepts
ta_parser = argparse.ArgumentParser(prog='technical_analysis', add_help=False)
ta_parser.add_argument('ta', choices=['help', 'q', 'quit',
'ema', 'sma', 'vwap', # overlap
'cci', 'macd', 'rsi', 'stoch', # momentum
'adx', 'aroon', # trend
'bbands', # volatility
'ad', 'obv']) # volume
ta_parser.add_argument('cmd', choices=['help', 'q', 'quit',
'ema', 'sma', 'vwap', # overlap
'cci', 'macd', 'rsi', 'stoch', # momentum
'adx', 'aroon', # trend
'bbands', # volatility
'ad', 'obv']) # volume
print_technical_analysis(s_ticker, s_start, s_interval)
@@ -79,56 +79,56 @@ def ta_menu(df_stock, s_ticker, s_start, s_interval):
print("The command selected doesn't exist\n")
continue
if ns_known_args.ta == 'help':
if ns_known_args.cmd == 'help':
print_technical_analysis(s_ticker, s_start, s_interval)
elif ns_known_args.ta == 'q':
elif ns_known_args.cmd == 'q':
# Just leave the FA menu
return False
elif ns_known_args.ta == 'quit':
elif ns_known_args.cmd == 'quit':
# Abandon the program
return True
# -------------------------------------------------- OVERLAP --------------------------------------------------
elif ns_known_args.ta == 'ema':
elif ns_known_args.cmd == 'ema':
ta_overlap.ema(l_args, s_ticker, s_interval, df_stock)
elif ns_known_args.ta == 'sma':
elif ns_known_args.cmd == 'sma':
ta_overlap.sma(l_args, s_ticker, s_interval, df_stock)
elif ns_known_args.ta == 'vwap':
elif ns_known_args.cmd == 'vwap':
ta_overlap.vwap(l_args, s_ticker, s_interval, df_stock)
# --------------------------------------------------- MOMENTUM ---------------------------------------------------
elif ns_known_args.ta == 'cci':
elif ns_known_args.cmd == 'cci':
ta_momentum.cci(l_args, s_ticker, s_interval, df_stock)
elif ns_known_args.ta == 'macd':
elif ns_known_args.cmd == 'macd':
ta_momentum.macd(l_args, s_ticker, s_interval, df_stock)
elif ns_known_args.ta == 'rsi':
elif ns_known_args.cmd == 'rsi':
ta_momentum.rsi(l_args, s_ticker, s_interval, df_stock)
elif ns_known_args.ta == 'stoch':
elif ns_known_args.cmd == 'stoch':
ta_momentum.stoch(l_args, s_ticker, s_interval, df_stock)
# ---------------------------------------------------- TREND ----------------------------------------------------
elif ns_known_args.ta == 'adx':
elif ns_known_args.cmd == 'adx':
ta_trend.adx(l_args, s_ticker, s_interval, df_stock)
elif ns_known_args.ta == 'aroon':
elif ns_known_args.cmd == 'aroon':
ta_trend.aroon(l_args, s_ticker, s_interval, df_stock)
# -------------------------------------------------- VOLATILITY --------------------------------------------------
elif ns_known_args.ta == 'bbands':
elif ns_known_args.cmd == 'bbands':
ta_volatility.bbands(l_args, s_ticker, s_interval, df_stock)
# ---------------------------------------------------- VOLUME ----------------------------------------------------
elif ns_known_args.ta == 'ad':
elif ns_known_args.cmd == 'ad':
ta_volume.ad(l_args, s_ticker, s_interval, df_stock)
elif ns_known_args.ta == 'obv':
elif ns_known_args.cmd == 'obv':
ta_volume.obv(l_args, s_ticker, s_interval, df_stock)
# ------------------------------------------------------------------------------------------------------------