diff --git a/openbb_terminal/stocks/dark_pool_shorts/dps_api.py b/openbb_terminal/stocks/dark_pool_shorts/dps_api.py index b3eaeabf168..51f70a14db6 100644 --- a/openbb_terminal/stocks/dark_pool_shorts/dps_api.py +++ b/openbb_terminal/stocks/dark_pool_shorts/dps_api.py @@ -6,6 +6,7 @@ from openbb_terminal.helper_classes import ModelsNamespace as _models # pylint: disable=unused-import # Menu commands +from .ibkr_view import display_cost_to_borrow as call_ctb from .yahoofinance_view import display_most_shorted as call_shorted from .shortinterest_view import high_short_interest as call_hsi from .finra_view import darkpool_otc as call_prom diff --git a/openbb_terminal/stocks/dark_pool_shorts/dps_controller.py b/openbb_terminal/stocks/dark_pool_shorts/dps_controller.py index 0075b563048..c534dfde261 100644 --- a/openbb_terminal/stocks/dark_pool_shorts/dps_controller.py +++ b/openbb_terminal/stocks/dark_pool_shorts/dps_controller.py @@ -30,6 +30,7 @@ from openbb_terminal.stocks.dark_pool_shorts import ( shortinterest_view, stockgrid_view, yahoofinance_view, + ibkr_view, ) logger = logging.getLogger(__name__) @@ -41,6 +42,7 @@ class DarkPoolShortsController(StockBaseController): CHOICES_COMMANDS = [ "load", "shorted", + "ctb", "hsi", "prom", "pos", @@ -82,6 +84,8 @@ class DarkPoolShortsController(StockBaseController): [src][Yahoo Finance][/src] shorted show most shorted stocks +[src][Interactive Broker][/src] + ctb stocks with highest cost to borrow [src][Shortinterest.com][/src] hsi show top high short interest stocks of over 20% ratio [src][FINRA][/src] @@ -134,6 +138,35 @@ class DarkPoolShortsController(StockBaseController): export=ns_parser.export, ) + @log_start_end(log=logger) + def call_ctb(self, other_args: List[str]): + """Process CTB command""" + parser = argparse.ArgumentParser( + add_help=False, + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + prog="ctb", + description="Print stocks with highest cost to borrow. [Source: Interactive Broker]", + ) + parser.add_argument( + "-n", + "--number", + action="store", + dest="number", + type=check_int_range(1, 10000), + default=20, + help="Number of stocks with high cost to borrow to retrieve.", + ) + if other_args and "-" not in other_args[0][0]: + other_args.insert(0, "-l") + ns_parser = parse_known_args_and_warn( + parser, other_args, EXPORT_ONLY_RAW_DATA_ALLOWED + ) + if ns_parser: + ibkr_view.display_cost_to_borrow( + num_stocks=ns_parser.number, + export=ns_parser.export, + ) + @log_start_end(log=logger) def call_hsi(self, other_args: List[str]): """Process hsi command""" diff --git a/openbb_terminal/stocks/dark_pool_shorts/ibkr_model.py b/openbb_terminal/stocks/dark_pool_shorts/ibkr_model.py new file mode 100644 index 00000000000..5114b88ffee --- /dev/null +++ b/openbb_terminal/stocks/dark_pool_shorts/ibkr_model.py @@ -0,0 +1,38 @@ +""" Interactive Broker Model """ +__docformat__ = "numpy" + +import logging + +import ftplib +from io import BytesIO +import pandas as pd + +from openbb_terminal.decorators import log_start_end + +logger = logging.getLogger(__name__) + + +@log_start_end(log=logger) +def get_cost_to_borrow() -> pd.DataFrame: + """Get stocks with highest cost to borrow [Source: Interactive Broker] + + Returns + ------- + pd.DataFrame + Cost to borrow + """ + ftp = ftplib.FTP("ftp3.interactivebrokers.com", "shortstock") + + flo = BytesIO() + ftp.retrbinary("RETR usa.txt", flo.write) + flo.seek(0) + + data = pd.read_csv(flo, sep="|", skiprows=1) + data = data[["#SYM", "FEERATE", "AVAILABLE"]] + data["AVAILABLE"] = data["AVAILABLE"].replace(">10000000", 10000000) + data.fillna(0, inplace=True) + data["AVAILABLE"] = data["AVAILABLE"].astype(int) + data.sort_values(by=["FEERATE"], ascending=False, inplace=True) + data["FEERATE"] = data["FEERATE"].apply(lambda x: str(x) + "%") + data.columns = ["Symbol", "Fees", "Available"] + return data diff --git a/openbb_terminal/stocks/dark_pool_shorts/ibkr_view.py b/openbb_terminal/stocks/dark_pool_shorts/ibkr_view.py new file mode 100644 index 00000000000..a194393ed17 --- /dev/null +++ b/openbb_terminal/stocks/dark_pool_shorts/ibkr_view.py @@ -0,0 +1,44 @@ +""" Interactive Broker View """ +__docformat__ = "numpy" + +import logging +import os + +from openbb_terminal.decorators import log_start_end +from openbb_terminal.helper_funcs import export_data, print_rich_table +from openbb_terminal.rich_config import console +from openbb_terminal.stocks.dark_pool_shorts import ibkr_model + +logger = logging.getLogger(__name__) + + +@log_start_end(log=logger) +def display_cost_to_borrow(num_stocks: int, export: str): + """Display stocks with highest cost to borrow. [Source: Interactive Broker] + + Parameters + ---------- + num_stocks: int + Number of stocks to display + export : str + Export dataframe data to csv,json,xlsx file + """ + df = ibkr_model.get_cost_to_borrow().head(num_stocks) + + if df.empty: + console.print("No data found.") + else: + print_rich_table( + df, + headers=list(df.columns), + show_index=False, + title="Highest Cost to Borrow", + ) + console.print("") + + export_data( + export, + os.path.dirname(os.path.abspath(__file__)), + "cost_to_borrow", + df, + ) diff --git a/tests/openbb_terminal/stocks/dark_pool_shorts/cassettes/test_dps_controller/test_call_load.yaml b/tests/openbb_terminal/stocks/dark_pool_shorts/cassettes/test_dps_controller/test_call_load.yaml index 659de7b03a0..0dab7b80514 100644 --- a/tests/openbb_terminal/stocks/dark_pool_shorts/cassettes/test_dps_controller/test_call_load.yaml +++ b/tests/openbb_terminal/stocks/dark_pool_shorts/cassettes/test_dps_controller/test_call_load.yaml @@ -13,41 +13,56 @@ interactions: response: body: string: !!binary | - H4sIAAAAAAAAAO1XTW8bNxD9LzpvWQ6/mVvQFG2BJkhr5xAERqFaG0eNPtyVlMQ1/N/zZnbpLKkA - uRe5rFZccubxzZsh535x/W45HBdP7hdDfzht8PbmfrHtj0seuj4NQ7+7vls8Wby6eLboFoe77d/7 - Df5eXvz+FP/7T1i+u+lfLLc9Rl88v8Dgenc4Dqdtvzte3t3y8M9/vPrt8jW+vF0Ph+PlsFz1z5ZH - fCETY6JktO7g/ua0WQ7Pl8P7/ni5ZnsUnDeUtLbd4mZ73L99e+gB8AcewoojJv2334mHi8sZmsvp - w4Tq6bYf1tfLH1/0H/96vR/eLxpnL/EV85IPKqduJOTl0H9Y70+Hnzb7A75lg2+mW9zy1F/XO6DA - v5Ee2dB6d/MSXvYrpu126PnnHN9uNW7KOy17PhyFexky2vHQ2T4fHtF+w2awobU5ufmazdv94fgN - g3GkeW5w8nFuEBZXy+Pyl2G5Y6jrI2uGVkw1RwR/8PphuVmv/uT/B8hs/Oz5Qds9nlaeQZ50h4fh - h+cHaX7eHXnydvlpcfUwhh/YtrewRcHmEDzj5dfoyckrnqRDec1RT6+UbJlgQk7TayBfRqOmMhqT - CJRfU3TFWA40GSNj9DSBrA6hvGZbJriYJ7vkg5/sQva+TMhU8FLOcZpgdHKTXUOx7MJ4CmU0AHx5 - TXkyhpQqu7DaFryWTMFrjY5lgsl28mbxMtm1YLBMiKbgtYk3Or3mVOzmVHbhjCt4Ya3gdY4K687r - wrrzqbDukivQXbYFutemBMCTLgHwlHlDV1xjVkjp4344sIj/Pe25nKByXY/5+kYSFmQmk0mDddNl - a5RnKNEaEJpSl3JWvFEN4OBf5iTlETaTTQ4p+g6cJZVCztkTRRqHQlRAo7NV2eY8LuXxlJTD1Ajx - gG4ZCYrSfErUymINRGDKHFQdjvgXl0DdjrisQFi1DM54ZoXLqQYpk+CxDljlv//qojkF7E0HZaja - hyXlwbtPfjIEQDCK2FvP5MocrTxLLMcgI/CiOCO/WAYQZRAByl7sZgcGK99IGVCbKTWY4BUjgGQJ - 0sHiDnFVGECmF1DJBWXdfCRbUDvfSMY++EczsspaJsUZSC5AjrLWWIVEmakl66hYvkg1FNbAI8Yw - WitP7ZSH9xSjhA3qCrwXkKximNOCRc4AuQkRFRbOxVWeO0+x3YqcTRHmtWNJIAE2+48ic1Kp3rQG - MVaqiIkWqYrNndlnXVY6yB6aruDDgvL+C8NpVG+shRERKbCEMuD8NARB1VRCdlZRpQQMuVbRhGjx - EQioowxBi8Yqh/KbJs2T0nOJQeAQHX5IZJO05CVyOAGlCyblknbmLH+QGn7mTRNI4pNs5o4AqGKA - JQ0/2fHTsevkqc75rK3iSosEiiZI3UE66VGvHcitd5CCaXnX7COl3Aoeu8Md4TF5EsigUBU4bRCe - uesEpBDN3LoRUSIRuRJyQRfc2Ic+G2mDJjqqKMqams3igGzTEqlblQpo99365h2LF/Bmou5Qp5q8 - ZHmHXFfoPEa8TWEJ8twaQdusBwhdfrQbq7aHrGtVcf6SwV50qGSDA1hWfqVoJ/miERM+5b2N9Fhi - 27oEYL7JUWByKtUmCTvyzUIvyCTt8kyqyJ0Q66Rz4AlVxuKwfTy42oKUrW0qNMRrqtqU4hndvq0d - qBRjQc7IKGjOjvUStbwWEBfbcaKWSsxzoorz+o8cBNmzUgX2z06IpKsUBE3QSSVy5HstS64cYr0p - tDhXxuJXnegQ5P62302CxHIEp4JJbW5kakxAuud6RN7XyYdI2jZy0I1ycyIxkFRoCmggHEZwF7Sf - xM2m3Pz2QUwu/6Jy1AKHoeYgxupY9GubK4Mei6g/Q8q1vpUxnzV1zoC1JhpSatvLAvQa9exiAkPR - zCpBDu1ZCznX5yiiZOqo+LOTFYq3fu45sSirmp5iWzVZ800JN7g3xbnlJEUj4YysbkqsvFgrGuW8 - ulGydb4upIZ5PreDnROXEPX6wpr1eD1y7ZmBw6tKZNY435I/7DcnboHfmOgzH6adtWhGiG/TcMMR - 7oxN0qp03CJIG2I12HbyKRKD71ActTSDgDo236Azaf5E1keuTh1aDSfNBFwQN0cd25d2yGoaewcD - 33LZ5/ZA+gbunYimT9IwYbPailM0FLLcGOOkKULv46IXYC5LF2Sdi6yCzqNYsunOYO+CGVO89C5o - Lyzrv0N/YbgFxCcQLN6RX9LqwAW3S4zZJC9Q2bJ4Bxo+CNF/ZOkgO4po09II3plxFUwLmWiXvEzG - 0SVOcXrkNBJuoSOZA73h09UDIrRc/VNalvv5n+/9y/f+5X/cvzxcPbD6+2HYD4snu9Nm8/DwGU0m - x+KLFAAA + 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 headers: Age: - - '0' + - '1' Connection: - keep-alive Expect-CT: @@ -56,6 +71,8 @@ interactions: - no-referrer-when-downgrade Strict-Transport-Security: - max-age=15552000 + Transfer-Encoding: + - chunked X-Content-Type-Options: - nosniff X-Frame-Options: @@ -66,26 +83,24 @@ interactions: - public, max-age=10, stale-while-revalidate=20 content-encoding: - gzip - content-length: - - '1773' content-type: - application/json;charset=utf-8 date: - - Tue, 22 Feb 2022 08:08:54 GMT + - Tue, 12 Apr 2022 11:42:23 GMT server: - ATS vary: - Origin,Accept-Encoding x-envoy-decorator-operation: - - finance-chart-api--mtls-production-ir2.finance-k8s.svc.yahoo.local:4080/* + - finance-chart-api--mtls-production-sg3.finance-k8s.svc.yahoo.local:4080/* x-envoy-upstream-service-time: - - '4' + - '3' x-request-id: - - 06ea0e14-2d52-4652-86a5-2974a504a71c + - 2f74a9a5-aa72-482e-97b4-79b037631670 x-yahoo-request-id: - - 7smvs8dh196gm + - 4odqgb9h5apd0 y-rid: - - 7smvs8dh196gm + - 4odqgb9h5apd0 status: code: 200 message: OK diff --git a/tests/openbb_terminal/stocks/dark_pool_shorts/txt/test_dps_controller/test_print_help.txt b/tests/openbb_terminal/stocks/dark_pool_shorts/txt/test_dps_controller/test_print_help.txt index 8a917682b75..cbf1f2cfada 100644 --- a/tests/openbb_terminal/stocks/dark_pool_shorts/txt/test_dps_controller/test_print_help.txt +++ b/tests/openbb_terminal/stocks/dark_pool_shorts/txt/test_dps_controller/test_print_help.txt @@ -3,6 +3,8 @@ [Yahoo Finance] shorted show most shorted stocks +[Interactive Broker] + ctb stocks with highest cost to borrow [Shortinterest.com] hsi show top high short interest stocks of over 20% ratio [FINRA] diff --git a/website/content/terminal/stocks/dark_pool_shorts/ctb/_index.md b/website/content/terminal/stocks/dark_pool_shorts/ctb/_index.md new file mode 100644 index 00000000000..d52567a5fc1 --- /dev/null +++ b/website/content/terminal/stocks/dark_pool_shorts/ctb/_index.md @@ -0,0 +1,62 @@ +``` +usage: ctb [-n NUM] [--export {csv,json,xlsx}] [-h] +``` + +Request a list of stocks that have the highest cost to borrow [Source: Interactive Broker] + +``` +optional arguments: + -n NUM, --num NUM Number of the stocks with high cost to borrow to retrieve. (default: 20) + --export {csv,json,xlsx} + Export dataframe data to csv,json,xlsx file + -h, --help show this help message (default: False) +``` + +Example: +``` +2022 Apr 07, 09:47 (�) /stocks/dps/ $ ctb + Highest Cost to Borrow +┌─────────┬───────────┬───────────┐ +│ Symbol │ Fees │ Available │ +├─────────┼───────────┼───────────┤ +│ PIK │ 457.4402% │ 7000 │ +├─────────┼───────────┼───────────┤ +│ EVTL │ 413.7294% │ 10000 │ +├─────────┼───────────┼───────────┤ +│ CELZ │ 330.9411% │ 100000 │ +├─────────┼───────────┼───────────┤ +│ DRCT │ 304.9628% │ 300000 │ +├─────────┼───────────┼───────────┤ +│ MYNZ │ 291.8163% │ 3000 │ +├─────────┼───────────┼───────────┤ +│ DCFC │ 279.0673% │ 10000 │ +├─────────┼───────────┼───────────┤ +│ FGFPP │ 278.422% │ 8000 │ +├─────────┼───────────┼───────────┤ +│ ZTEK │ 250.0307% │ 75000 │ +├─────────┼───────────┼───────────┤ +│ FRGE │ 245.1883% │ 700 │ +├─────────┼───────────┼───────────┤ +│ SATL │ 240.7341% │ 500 │ +├─────────┼───────────┼───────────┤ +│ ARMR │ 240.5414% │ 5000 │ +├─────────┼───────────┼───────────┤ +│ PILL │ 223.538% │ 55000 │ +├─────────┼───────────┼───────────┤ +│ ARQQ │ 217.3978% │ 3000 │ +├─────────┼───────────┼───────────┤ +│ NRSN │ 216.9888% │ 6000 │ +├─────────┼───────────┼───────────┤ +│ ZIONL │ 215.2871% │ 35000 │ +├─────────┼───────────┼───────────┤ +│ BLBX │ 213.441% │ 15000 │ +├─────────┼───────────┼───────────┤ +│ WINSF │ 212.907% │ 10000 │ +├─────────┼───────────┼───────────┤ +│ SKYH │ 206.7746% │ 25000 │ +├─────────┼───────────┼───────────┤ +│ SOHON │ 205.1096% │ 40000 │ +├─────────┼───────────┼───────────┤ +│ MH PRA │ 202.1235% │ 100000 │ +└─────────┴───────────┴───────────┘ +``` diff --git a/website/data/menu/main.yml b/website/data/menu/main.yml index c91e43a3b3a..08a61c237d6 100755 --- a/website/data/menu/main.yml +++ b/website/data/menu/main.yml @@ -101,6 +101,8 @@ main: sub: - name: shorted ref: "/terminal/stocks/dark_pool_shorts/shorted" + - name: ctb + ref: "/terminal/stocks/dark_pool_shorts/ctb" - name: hsi ref: "/terminal/stocks/dark_pool_shorts/hsi" - name: prom