mirror of
https://github.com/OpenBB-finance/OpenBB.git
synced 2026-11-06 17:31:53 +00:00
Increase robustness of load command
This commit is contained in:
@@ -181,41 +181,40 @@ def load(l_args, s_ticker, s_start, s_interval, df_stock):
|
||||
if not ns_parser:
|
||||
return [s_ticker, s_start, s_interval, df_stock]
|
||||
|
||||
except SystemExit:
|
||||
print("")
|
||||
return [s_ticker, s_start, s_interval, df_stock]
|
||||
|
||||
# Update values:
|
||||
s_ticker = ns_parser.s_ticker.upper()
|
||||
s_start = ns_parser.s_start_date
|
||||
s_interval = str(ns_parser.n_interval) + "min"
|
||||
|
||||
try:
|
||||
# Daily
|
||||
if s_interval == "1440min":
|
||||
if ns_parser.n_interval == 1440:
|
||||
|
||||
# Alpha Vantage Source
|
||||
if ns_parser.source == "av":
|
||||
ts = TimeSeries(key=cfg.API_KEY_ALPHAVANTAGE, output_format="pandas")
|
||||
# pylint: disable=unbalanced-tuple-unpacking
|
||||
df_stock, _ = ts.get_daily_adjusted(
|
||||
df_stock_candidate, _ = ts.get_daily_adjusted(
|
||||
symbol=ns_parser.s_ticker, outputsize="full"
|
||||
)
|
||||
# pylint: disable=no-member
|
||||
df_stock.sort_index(ascending=True, inplace=True)
|
||||
|
||||
# Slice dataframe from the starting date YYYY-MM-DD selected
|
||||
df_stock = df_stock[ns_parser.s_start_date :]
|
||||
|
||||
elif ns_parser.source == "yf":
|
||||
df_stock = yf.download(
|
||||
ns_parser.s_ticker, start=ns_parser.s_start_date, progress=False
|
||||
)
|
||||
# Check that a stock was successfully retrieved
|
||||
if df_stock.empty:
|
||||
# Check that loading a stock was not successful
|
||||
if df_stock_candidate.empty:
|
||||
print("")
|
||||
return [s_ticker, s_start, s_interval, df_stock]
|
||||
|
||||
df_stock = df_stock.rename(
|
||||
# pylint: disable=no-member
|
||||
df_stock_candidate.sort_index(ascending=True, inplace=True)
|
||||
|
||||
# Slice dataframe from the starting date YYYY-MM-DD selected
|
||||
df_stock_candidate = df_stock_candidate[ns_parser.s_start_date :]
|
||||
|
||||
# Yahoo Finance Source
|
||||
elif ns_parser.source == "yf":
|
||||
df_stock_candidate = yf.download(
|
||||
ns_parser.s_ticker, start=ns_parser.s_start_date, progress=False
|
||||
)
|
||||
|
||||
# Check that loading a stock was not successful
|
||||
if df_stock_candidate.empty:
|
||||
print("")
|
||||
return [s_ticker, s_start, s_interval, df_stock]
|
||||
|
||||
df_stock_candidate = df_stock_candidate.rename(
|
||||
columns={
|
||||
"Open": "1. open",
|
||||
"High": "2. high",
|
||||
@@ -225,41 +224,57 @@ def load(l_args, s_ticker, s_start, s_interval, df_stock):
|
||||
"Volume": "6. volume",
|
||||
}
|
||||
)
|
||||
df_stock.index.name = "date"
|
||||
df_stock_candidate.index.name = "date"
|
||||
|
||||
if df_stock.index[0] > s_start:
|
||||
s_start = df_stock.index[0]
|
||||
# Check if start time from dataframe is more recent than specified
|
||||
if df_stock_candidate.index[0] > pd.to_datetime(ns_parser.s_start_date):
|
||||
s_start = df_stock_candidate.index[0]
|
||||
else:
|
||||
s_start = ns_parser.s_start_date
|
||||
|
||||
# Intraday
|
||||
else:
|
||||
|
||||
# Alpha Vantage Source
|
||||
if ns_parser.source == "av":
|
||||
ts = TimeSeries(key=cfg.API_KEY_ALPHAVANTAGE, output_format="pandas")
|
||||
# pylint: disable=unbalanced-tuple-unpacking
|
||||
df_stock, _ = ts.get_intraday(
|
||||
symbol=ns_parser.s_ticker, outputsize="full", interval=s_interval
|
||||
df_stock_candidate, _ = ts.get_intraday(
|
||||
symbol=ns_parser.s_ticker,
|
||||
outputsize="full",
|
||||
interval=str(ns_parser.n_interval) + "min",
|
||||
)
|
||||
|
||||
# Check that loading a stock was not successful
|
||||
if df_stock_candidate.empty:
|
||||
print("")
|
||||
return [s_ticker, s_start, s_interval, df_stock]
|
||||
|
||||
# pylint: disable=no-member
|
||||
df_stock.sort_index(ascending=True, inplace=True)
|
||||
df_stock_candidate.sort_index(ascending=True, inplace=True)
|
||||
|
||||
# Slice dataframe from the starting date YYYY-MM-DD selected
|
||||
df_stock = df_stock[ns_parser.s_start_date :]
|
||||
df_stock_candidate = df_stock_candidate[ns_parser.s_start_date :]
|
||||
|
||||
# Check if start time from dataframe is more recent than specified
|
||||
if df_stock_candidate.index[0] > pd.to_datetime(ns_parser.s_start_date):
|
||||
s_start = df_stock_candidate.index[0]
|
||||
else:
|
||||
s_start = ns_parser.s_start_date
|
||||
|
||||
# Yahoo Finance Source
|
||||
elif ns_parser.source == "yf":
|
||||
s_int = s_interval[:-2]
|
||||
s_int = str(ns_parser.n_interval) + "m"
|
||||
|
||||
d_granularity = {"1m": 6, "5m": 59, "15m": 59, "30m": 59, "60m": 729}
|
||||
|
||||
s_start_dt = datetime.utcnow() - timedelta(days=d_granularity[s_int])
|
||||
s_date_start = s_start_dt.strftime("%Y-%m-%d")
|
||||
|
||||
s_start = pytz.utc.localize(s_start_dt)
|
||||
|
||||
if s_start_dt > ns_parser.s_start_date:
|
||||
print(
|
||||
f"Using Yahoo Finance with granularity {s_int} the starting date is set to: {s_date_start}\n"
|
||||
)
|
||||
# Using Yahoo Finance with granularity {s_int} the starting date is set to: {s_date_start}
|
||||
|
||||
df_stock = yf.download(
|
||||
df_stock_candidate = yf.download(
|
||||
ns_parser.s_ticker,
|
||||
start=s_date_start,
|
||||
progress=False,
|
||||
@@ -268,7 +283,7 @@ def load(l_args, s_ticker, s_start, s_interval, df_stock):
|
||||
)
|
||||
|
||||
else:
|
||||
df_stock = yf.download(
|
||||
df_stock_candidate = yf.download(
|
||||
ns_parser.s_ticker,
|
||||
start=ns_parser.s_start_date.strftime("%Y-%m-%d"),
|
||||
progress=False,
|
||||
@@ -276,12 +291,17 @@ def load(l_args, s_ticker, s_start, s_interval, df_stock):
|
||||
prepost=ns_parser.b_prepost,
|
||||
)
|
||||
|
||||
# Check that a stock was successfully retrieved
|
||||
if df_stock.empty:
|
||||
# Check that loading a stock was not successful
|
||||
if df_stock_candidate.empty:
|
||||
print("")
|
||||
return [s_ticker, s_start, s_interval, df_stock]
|
||||
|
||||
df_stock = df_stock.rename(
|
||||
if s_start_dt > ns_parser.s_start_date:
|
||||
s_start = pytz.utc.localize(s_start_dt)
|
||||
else:
|
||||
s_start = ns_parser.s_start_date
|
||||
|
||||
df_stock_candidate = df_stock_candidate.rename(
|
||||
columns={
|
||||
"Open": "1. open",
|
||||
"High": "2. high",
|
||||
@@ -291,26 +311,28 @@ def load(l_args, s_ticker, s_start, s_interval, df_stock):
|
||||
"Volume": "6. volume",
|
||||
}
|
||||
)
|
||||
df_stock.index.name = "date"
|
||||
df_stock_candidate.index.name = "date"
|
||||
|
||||
return [s_ticker, s_start, s_interval, df_stock]
|
||||
s_intraday = (f"Intraday {s_interval}", "Daily")[ns_parser.n_interval == 1440]
|
||||
|
||||
print(
|
||||
f"Loading {s_intraday} {ns_parser.s_ticker.upper()} stock with starting period {s_start.strftime('%Y-%m-%d')} for analysis.\n"
|
||||
)
|
||||
|
||||
return [
|
||||
ns_parser.s_ticker.upper(),
|
||||
s_start,
|
||||
str(ns_parser.n_interval) + "min",
|
||||
df_stock_candidate,
|
||||
]
|
||||
|
||||
except Exception as e:
|
||||
print(e)
|
||||
print("Either the ticker or the API_KEY are invalids. Try again!\n")
|
||||
print(e, "\nEither the ticker or the API_KEY are invalids. Try again!\n")
|
||||
return [s_ticker, s_start, s_interval, df_stock]
|
||||
|
||||
s_intraday = (f"Intraday {s_interval}", "Daily")[s_interval == "1440min"]
|
||||
|
||||
if s_start:
|
||||
print(
|
||||
f"Loading {s_intraday} {s_ticker} stock with starting period {s_start.strftime('%Y-%m-%d')} for analysis."
|
||||
)
|
||||
else:
|
||||
print(f"Loading {s_intraday} {s_ticker} stock for analysis.")
|
||||
|
||||
print("")
|
||||
return [s_ticker, s_start, s_interval, df_stock]
|
||||
except SystemExit:
|
||||
print("")
|
||||
return [s_ticker, s_start, s_interval, df_stock]
|
||||
|
||||
|
||||
def candle(s_ticker: str, s_start: str):
|
||||
|
||||
@@ -47,7 +47,7 @@ def main():
|
||||
os.system("")
|
||||
|
||||
s_ticker = ""
|
||||
s_start = ""
|
||||
s_start = "2015-01-01"
|
||||
df_stock = pd.DataFrame()
|
||||
s_interval = "1440min"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user