From 593bcf8369ce99a4220c54c5fa7d4325cc67fe0a Mon Sep 17 00:00:00 2001 From: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Date: Fri, 23 Sep 2022 18:36:35 +0100 Subject: [PATCH] stocks/dps bug fixes (#2614) * fix dps prom and ctb * fix prom command * fix dpotc * fix unit test --- .../stocks/dark_pool_shorts/dps_controller.py | 4 +- .../stocks/dark_pool_shorts/finra_model.py | 65 ++++++++++--------- .../stocks/dark_pool_shorts/finra_view.py | 29 +++++---- .../dark_pool_shorts/test_dps_controller.py | 2 +- 4 files changed, 54 insertions(+), 46 deletions(-) diff --git a/openbb_terminal/stocks/dark_pool_shorts/dps_controller.py b/openbb_terminal/stocks/dark_pool_shorts/dps_controller.py index 208ecd83e8d..74ce9bb45db 100644 --- a/openbb_terminal/stocks/dark_pool_shorts/dps_controller.py +++ b/openbb_terminal/stocks/dark_pool_shorts/dps_controller.py @@ -147,7 +147,7 @@ class DarkPoolShortsController(StockBaseController): ) if ns_parser: ibkr_view.display_cost_to_borrow( - num_stocks=ns_parser.number, + limit=ns_parser.number, export=ns_parser.export, ) @@ -229,7 +229,7 @@ class DarkPoolShortsController(StockBaseController): if ns_parser: finra_view.darkpool_otc( input_limit=ns_parser.n_num, - promising=ns_parser.limit, + limit=ns_parser.limit, tier=ns_parser.tier, export=ns_parser.export, ) diff --git a/openbb_terminal/stocks/dark_pool_shorts/finra_model.py b/openbb_terminal/stocks/dark_pool_shorts/finra_model.py index e7aececc636..3066a79b547 100644 --- a/openbb_terminal/stocks/dark_pool_shorts/finra_model.py +++ b/openbb_terminal/stocks/dark_pool_shorts/finra_model.py @@ -64,8 +64,8 @@ def getFINRAweeks(tier: str = "T1", is_ats: bool = True) -> List: @log_start_end(log=logger) def getFINRAdata_offset( start_date: str, - symbol: str = "", tier: str = "T1", + symbol: str = "", is_ats: bool = True, offset: int = 0, ) -> requests.Response: @@ -75,10 +75,10 @@ def getFINRAdata_offset( ---------- start_date: str Weekly data to get FINRA data, in YYYY-MM-DD format - symbol: str - Stock ticker to get data from tier: str Stock tier between T1, T2, or OTCE + symbol: str + Stock ticker to get data from is_ats: bool ATS data if true, NON-ATS otherwise offset: int @@ -259,35 +259,36 @@ def getATSdata(limit: int = 1000, tier_ats: str = "T1") -> Tuple[pd.DataFrame, D # df_ats = df_ats.append(df_ats_week, ignore_index=True) df_ats = pd.concat([df_ats, df_ats_week], ignore_index=True) - df_ats = df_ats.sort_values("weekStartDate") - df_ats["weekStartDateInt"] = pd.to_datetime(df_ats["weekStartDate"]).apply( - lambda x: x.timestamp() - ) + if not df_ats.empty: + df_ats = df_ats.sort_values("weekStartDate") + df_ats["weekStartDateInt"] = pd.to_datetime(df_ats["weekStartDate"]).apply( + lambda x: x.timestamp() + ) - console.print(f"Processing regression on {limit} promising tickers ...") + console.print(f"Processing regression on {limit} promising tickers ...") - d_ats_reg = {} - # set(df_ats['issueSymbolIdentifier'].values) this would be iterating through all tickers - # but that is extremely time consuming for little reward. A little filtering is done to - # speed up search for best ATS tickers - for symbol in list( - df_ats.groupby("issueSymbolIdentifier")["totalWeeklyShareQuantity"] - .sum() - .sort_values()[-limit:] - .index - ): - try: - slope = stats.linregress( - df_ats[df_ats["issueSymbolIdentifier"] == symbol][ - "weekStartDateInt" - ].values, - df_ats[df_ats["issueSymbolIdentifier"] == symbol][ - "totalWeeklyShareQuantity" - ].values, - )[0] - d_ats_reg[symbol] = slope - except Exception: # nosec B110 - pass + d_ats_reg = {} + # set(df_ats['issueSymbolIdentifier'].values) this would be iterating through all tickers + # but that is extremely time consuming for little reward. A little filtering is done to + # speed up search for best ATS tickers + for symbol in list( + df_ats.groupby("issueSymbolIdentifier")["totalWeeklyShareQuantity"] + .sum() + .sort_values()[-limit:] + .index + ): + try: + slope = stats.linregress( + df_ats[df_ats["issueSymbolIdentifier"] == symbol][ + "weekStartDateInt" + ].values, + df_ats[df_ats["issueSymbolIdentifier"] == symbol][ + "totalWeeklyShareQuantity" + ].values, + )[0] + d_ats_reg[symbol] = slope + except Exception: # nosec B110 + pass return df_ats, d_ats_reg @@ -314,7 +315,7 @@ def getTickerFINRAdata(symbol: str) -> Tuple[pd.DataFrame, pd.DataFrame]: for tier in tiers: for d_week in getFINRAweeks(tier, is_ats=True): status_code, response = getFINRAdata( - d_week["weekStartDate"], tier, symbol, True + d_week["weekStartDate"], symbol, tier, True ) if status_code == 200: if response: @@ -333,7 +334,7 @@ def getTickerFINRAdata(symbol: str) -> Tuple[pd.DataFrame, pd.DataFrame]: for tier in tiers: for d_week in getFINRAweeks(tier, is_ats=False): status_code, response = getFINRAdata( - d_week["weekStartDate"], tier, symbol, False + d_week["weekStartDate"], symbol, tier, False ) if status_code == 200: if response: diff --git a/openbb_terminal/stocks/dark_pool_shorts/finra_view.py b/openbb_terminal/stocks/dark_pool_shorts/finra_view.py index 18bc2f01c02..61ba5f9ccea 100644 --- a/openbb_terminal/stocks/dark_pool_shorts/finra_view.py +++ b/openbb_terminal/stocks/dark_pool_shorts/finra_view.py @@ -213,16 +213,23 @@ def darkpool_otc( # TODO: Improve command logic to be faster and more useful df_ats, d_ats_reg = finra_model.getATSdata(input_limit, tier) - symbols = list( - dict(sorted(d_ats_reg.items(), key=lambda item: item[1], reverse=True)).keys() - )[:limit] + if not df_ats.empty and d_ats_reg: - plot_dark_pools_ats(df_ats, symbols, external_axes) - console.print("") + symbols = list( + dict( + sorted(d_ats_reg.items(), key=lambda item: item[1], reverse=True) + ).keys() + )[:limit] - export_data( - export, - os.path.dirname(os.path.abspath(__file__)), - "prom", - df_ats, - ) + plot_dark_pools_ats(df_ats, symbols, external_axes) + console.print("") + + export_data( + export, + os.path.dirname(os.path.abspath(__file__)), + "prom", + df_ats, + ) + else: + console.print("[red]Could not get data[/red]\n") + return diff --git a/tests/openbb_terminal/stocks/dark_pool_shorts/test_dps_controller.py b/tests/openbb_terminal/stocks/dark_pool_shorts/test_dps_controller.py index 03c46e0571d..4e025a4d4fb 100644 --- a/tests/openbb_terminal/stocks/dark_pool_shorts/test_dps_controller.py +++ b/tests/openbb_terminal/stocks/dark_pool_shorts/test_dps_controller.py @@ -274,7 +274,7 @@ def test_call_func_expect_queue(expected_queue, queue, func): ], dict( num=1, - promising=2, + limit=2, tier="T1", export="csv", ),