diff --git a/ROADMAP.md b/ROADMAP.md index 858fcd70bb3..8e8d8567d48 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -43,7 +43,7 @@ * [x] Add top ratings updates (@hinxx) - [PR #357](https://github.com/DidierRLopes/GamestonkTerminal/pull/357) * [x] Add dark pool (ATS) data of tickers with growing trades activity (@didier) - [PR #372](https://github.com/DidierRLopes/GamestonkTerminal/pull/372) * [x] Past and future IPOs calendar (@didier) - [PR #432](https://github.com/DidierRLopes/GamestonkTerminal/pull/432) - +* [x] Short volume and dark pool short information (stockgrid) (@jmaslek) - [PR #496](https://github.com/GamestonkTerminal/GamestonkTerminal/pull/496 **NEXT** @@ -93,6 +93,7 @@ * [x] Add dark pools (ATS) vs Non-ATS data over time (@didier) - [PR #363](https://github.com/DidierRLopes/GamestonkTerminal/pull/363) * [x] Add failure to deliver command (@hinxx) - [PR #366](https://github.com/DidierRLopes/GamestonkTerminal/pull/366) * [x] Ratings over time (@didier) - [PR #431](https://github.com/DidierRLopes/GamestonkTerminal/pull/431) +* [x] Add short volume from stockgrid (@jmaslek) - [PR #496](https://github.com/GamestonkTerminal/GamestonkTerminal/pull/496) **NEXT** diff --git a/gamestonk_terminal/README.md b/gamestonk_terminal/README.md index ce63e14cd20..9c409fb208b 100644 --- a/gamestonk_terminal/README.md +++ b/gamestonk_terminal/README.md @@ -103,6 +103,9 @@ Command|Description|Source `trending` |trending news |[Seeking Alpha](https://seekingalpha.com/) `ratings` |top ratings updates |[MarketBeat](https://marketbeat.com) `darkpool` |dark pool tickers with growing activity |[FINRA](https://www.finra.org) +`topdark` |largest dark pool positions | [Stockgrid](https://stockgrid.io) +`darkshort` | dark pool short information|[Stockgrid](https://stockgrid.io) +`shortvol` |short interest |[Stockgrid](https://stockgrid.io)   @@ -242,6 +245,7 @@ Command|Description|Source `warnings` |company warnings according to Sean Seah book |[MarketWatch](https://www.marketwatch.com/) `dp` |dark pools (ATS) vs OTC data [FINRA](https://www.finra.org/#/) `ftd` |display fails-to-deliver data [SEC](https://www.sec.gov) +`shortview` |shows price vs short interest over last year [Stockgrid](https://stockgrid.io   @@ -469,7 +473,7 @@ Command|Website `sell_house` | plot top sell house tickers `last_contracts` | last government contracts `sum_contracts` | plot sum of last government contracts -with ticker provided | +with ticker provided | `raw_congress` | raw congress trades on the ticker `congress` | plot congress trades on the ticker `raw_senate` | raw senate trades on the ticker diff --git a/gamestonk_terminal/discovery/README.md b/gamestonk_terminal/discovery/README.md index b7b3ac0200a..89e8e6e5f3e 100644 --- a/gamestonk_terminal/discovery/README.md +++ b/gamestonk_terminal/discovery/README.md @@ -42,7 +42,15 @@ This menu aims to discover new stocks, and the usage of the following commands a * top ratings updates [MarketBeat] * [darkpool](#darkpool) * dark pool tickers with growing activity [FINRA] - + +* [topdark](#topdark) + * largest dark pool positions [Stockgrid.io] + +* [darkshort](#darkshort) + * dark pool short information [Stockgrid.io] + +* [shortvol](#shortvol) + * short interest [Stockgrid.io] ## ipo @@ -297,4 +305,72 @@ Display dark pool (ATS) data of tickers with growing trades activity. [Source: F ![darkpool](https://user-images.githubusercontent.com/25267873/115323195-8d642080-a17f-11eb-9ef8-d456ce769ab7.png) +# Stockgrid.io +## topdark + +``` +usage: topdark [-n] +``` +Display the largest dark pool positions +* -n : Number of tickers to display + +```python +(✨) (disc)> topdark -n 4 + +╒══════════╤═══════════════════╤═══════════════╤════════════╕ +│ Ticker │ Position ($1B) │ Shares (1M) │ Date │ +╞══════════╪═══════════════════╪═══════════════╪════════════╡ +│ QQQ │ 16.83 │ 51.11 │ 2021-06-10 │ +├──────────┼───────────────────┼───────────────┼────────────┤ +│ IWM │ 5.18 │ 22.99 │ 2021-06-10 │ +├──────────┼───────────────────┼───────────────┼────────────┤ +│ BND │ 3.24 │ 37.98 │ 2021-06-10 │ +├──────────┼───────────────────┼───────────────┼────────────┤ +│ EEM │ 3.13 │ 56.95 │ 2021-06-10 │ +╘══════════╧═══════════════════╧═══════════════╧════════════╛ +``` + +## darkshort + +``` +usage: darkshort [-n] +``` +Display the largest dark pool short positions +* -n : Number of tickers to display + +``` +(✨) (disc)> darkshort -n 4 + +╒══════════╤════════════╤══════════════════╤═════════════════════╤═════════════════════╤══════════════════╕ +│ Ticker │ Date │ Net Short (1M) │ Net Short ($100M) │ Short Volume (1M) │ Short Volume % │ +╞══════════╪════════════╪══════════════════╪═════════════════════╪═════════════════════╪══════════════════╡ +│ QQQ │ 2021-06-10 │ 1.66 │ 5.65 │ 5.90 │ 0.58 │ +├──────────┼────────────┼──────────────────┼─────────────────────┼─────────────────────┼──────────────────┤ +│ IWM │ 2021-06-10 │ 1.38 │ 3.17 │ 5.43 │ 0.57 │ +├──────────┼────────────┼──────────────────┼─────────────────────┼─────────────────────┼──────────────────┤ +│ RH │ 2021-06-10 │ 0.43 │ 3.03 │ 1.26 │ 0.60 │ +├──────────┼────────────┼──────────────────┼─────────────────────┼─────────────────────┼──────────────────┤ +│ TLT │ 2021-06-10 │ 1.70 │ 2.42 │ 2.25 │ 0.80 │ +╘══════════╧════════════╧══════════════════╧═════════════════════╧═════════════════════╧══════════════════╛ +``` +## shortvol + +Display the largest short positions +* -n : Number of tickers to display + +``` +(✨) (disc)> shortvol -n 4 + +╒══════════╤════════════╤════════════════╤═════════════════╤═══════════════════════╕ +│ Ticker │ Date │ %Float Short │ Days To Cover │ Short Interest (1M) │ +╞══════════╪════════════╪════════════════╪═════════════════╪═══════════════════════╡ +│ AGC │ 2021-05-28 │ 42.51 │ 24.75 │ 15.94 │ +├──────────┼────────────┼────────────────┼─────────────────┼───────────────────────┤ +│ PETS │ 2021-05-28 │ 32.69 │ 20.05 │ 6.40 │ +├──────────┼────────────┼────────────────┼─────────────────┼───────────────────────┤ +│ BCEL │ 2021-05-28 │ 27.86 │ 24.51 │ 6.23 │ +├──────────┼────────────┼────────────────┼─────────────────┼───────────────────────┤ +│ KDMN │ 2021-05-28 │ 25.54 │ 35.96 │ 39.73 │ +╘══════════╧════════════╧════════════════╧═════════════════╧═══════════════════════╛ +``` \ No newline at end of file diff --git a/gamestonk_terminal/discovery/disc_controller.py b/gamestonk_terminal/discovery/disc_controller.py index 07731915805..cf67f5658e7 100644 --- a/gamestonk_terminal/discovery/disc_controller.py +++ b/gamestonk_terminal/discovery/disc_controller.py @@ -23,6 +23,7 @@ from gamestonk_terminal.discovery import ( marketbeat_view, finra_ats_view, finnhub_view, + stockgrid_view, ) @@ -54,6 +55,9 @@ class DiscoveryController: "latest", "trending", "darkpool", + "topdark", + "darkshort", + "shortvol", ] def __init__(self): @@ -100,6 +104,9 @@ class DiscoveryController: print(" trending trending news [Seeking Alpha]") print(" ratings top ratings updates [MarketBeat]") print(" darkpool dark pool tickers with growing activity [FINRA]") + print(" topdark largest dark pool positions [Stockgrid.io]") + print(" darkshort dark pool short information [Stockgrid.io]") + print(" shortvol short interest [Stockgrid.io]") print("") def switch(self, an_input: str): @@ -220,6 +227,18 @@ class DiscoveryController: """Process darkpool command""" finra_ats_view.dark_pool(other_args) + def call_topdark(self, other_args: List[str]): + """Process topdark command""" + stockgrid_view.top_dark_pools(other_args) + + def call_darkshort(self, other_args: List[str]): + """Process shortvol command""" + stockgrid_view.darkshort(other_args) + + def call_shortvol(self, other_args: List[str]): + """Process shortvol command""" + stockgrid_view.shortvol(other_args) + def menu(): """Discovery Menu""" diff --git a/gamestonk_terminal/discovery/finra_ats_view.py b/gamestonk_terminal/discovery/finra_ats_view.py index 7480ba16885..8f091c96ea2 100644 --- a/gamestonk_terminal/discovery/finra_ats_view.py +++ b/gamestonk_terminal/discovery/finra_ats_view.py @@ -260,6 +260,5 @@ def dark_pool(other_args: List[str]): print("") except Exception as e: - print(e) - print("") + print(e, "\n") return diff --git a/gamestonk_terminal/discovery/stockgrid_view.py b/gamestonk_terminal/discovery/stockgrid_view.py new file mode 100644 index 00000000000..87c78dacac6 --- /dev/null +++ b/gamestonk_terminal/discovery/stockgrid_view.py @@ -0,0 +1,172 @@ +""" Stockgrid View """ +__docformat__ = "numpy" + +import argparse +from typing import List +import requests +import pandas as pd +from tabulate import tabulate +from gamestonk_terminal.helper_funcs import ( + parse_known_args_and_warn, +) + + +def top_dark_pools(other_args: List[str]): + """ + Get and show the top dark pool positions + Parameters + ---------- + other_args: List[str[ + Argparse arguments + + """ + + parser = argparse.ArgumentParser( + prog="topdark", add_help=False, description="Get top dark pool positions" + ) + parser.add_argument("-n", help="Number to show", type=int, default=10, dest="num") + print("") + + try: + ns_parser = parse_known_args_and_warn(parser, other_args) + if not ns_parser: + return + + link1 = "https://stockgridapp.herokuapp.com/get_dark_pool_data?top=Dark+Pools+Position+$&minmax=desc" + response = requests.get(link1) + df = pd.DataFrame(response.json()["data"]).sort_values( + "Dark Pools Position $", ascending=False + ) + df = df[["Ticker", "Dark Pools Position $", "Dark Pools Position", "Date"]] + df["Dark Pools Position $"] = df["Dark Pools Position $"] / ( + 1_000_000_000 + ) # %% + df["Dark Pools Position"] = df["Dark Pools Position"] / 1_000_000 + + df.columns = ["Ticker", "Position ($1B) ", "Shares (1M)", "Date"] + print( + tabulate( + df.iloc[: ns_parser.num], + tablefmt="fancy_grid", + floatfmt=".2f", + headers=list(df.columns), + showindex=False, + ) + ) + print("") + except Exception as e: + print(e, "\n") + + +def darkshort(other_args: List[str]): + """ + Get short volume data from Dark Pools. + Parameters + ---------- + other_args: List[str] + Argparse arguments + + """ + parser = argparse.ArgumentParser( + prog="darkshort", add_help=False, description="Get dark pool short positions" + ) + parser.add_argument("-n", help="Number to show", type=int, default=10, dest="num") + print("") + + try: + ns_parser = parse_known_args_and_warn(parser, other_args) + if not ns_parser: + return + + link = "https://stockgridapp.herokuapp.com/get_dark_pool_data?top=Dark+Pools+Position+$&minmax=desc" + response = requests.get(link) + df = pd.DataFrame(response.json()["data"]) + + df = df[ + [ + "Ticker", + "Date", + "Net Short Volume", + "Net Short Volume $", + "Short Volume", + "Short Volume %", + ] + ].sort_values(by="Net Short Volume $", ascending=False) + df["Net Short Volume $"] = df["Net Short Volume $"] / 100_000_000 + df["Short Volume"] = df["Short Volume"] / 1_000_000 + df["Net Short Volume"] = df["Net Short Volume"] / 1_000_000 + df.columns = [ + "Ticker", + "Date", + "Net Short (1M)", + "Net Short ($100M)", + "Short Volume (1M)", + "Short Volume %", + ] + print( + tabulate( + df.iloc[: ns_parser.num], + tablefmt="fancy_grid", + floatfmt=".2f", + headers=list(df.columns), + showindex=False, + ) + ) + + print("") + except Exception as e: + print(e, "\n") + + +def shortvol(other_args: List[str]): + """ + Get and show short volume from stockgrid.io + Parameters + ---------- + other_args: List[str] + Argparse arguments + """ + parser = argparse.ArgumentParser( + prog="shortvol", + add_help=False, + description="Scrape stockgrid.io for short volume data", + ) + parser.add_argument("-n", help="Number to show", type=int, default=10, dest="num") + print("") + + try: + ns_parser = parse_known_args_and_warn(parser, other_args) + if not ns_parser: + return + + link = "https://stockgridapp.herokuapp.com/get_short_interest?top=days" + r = requests.get(link) + df = pd.DataFrame(r.json()["data"]) + df.head() + + # %% + df = df[ + ["Ticker", "Date", "%Float Short", "Days To Cover", "Short Interest"] + ].sort_values(by="%Float Short", ascending=False) + df["Short Interest"] = df["Short Interest"] / 1_000_000 + df.head() + df.columns = [ + "Ticker", + "Date", + "%Float Short", + "Days To Cover", + "Short Interest (1M)", + ] + + print( + tabulate( + df.iloc[: ns_parser.num], + tablefmt="fancy_grid", + floatfmt=".2f", + headers=list(df.columns), + showindex=False, + ) + ) + + except Exception as e: + print(e, "\n") diff --git a/gamestonk_terminal/due_diligence/README.md b/gamestonk_terminal/due_diligence/README.md index 7a88574392a..aa6be243c0e 100644 --- a/gamestonk_terminal/due_diligence/README.md +++ b/gamestonk_terminal/due_diligence/README.md @@ -30,6 +30,8 @@ This menu aims to help in due-diligence of a pre-loaded stock, and the usage of * dark pools (ATS) vs OTC data [FINRA] * [ftd](#ftd) * fails-to-deliver data [SEC] +* [shortview](#shortview) + * shows price vs short interest over last year [Stockgrid.io] ## news @@ -198,3 +200,8 @@ The fails-to-deliver data collected by SEC. Fails to deliver on a given day are ![ftd](https://user-images.githubusercontent.com/25267873/115201750-93a9bc80-a0ed-11eb-8f13-68508749259e.png) +## shortview +```text +usage: shortview +``` +Plots price and short volume over the past year. diff --git a/gamestonk_terminal/due_diligence/dd_controller.py b/gamestonk_terminal/due_diligence/dd_controller.py index f24ddcad017..4008686664f 100644 --- a/gamestonk_terminal/due_diligence/dd_controller.py +++ b/gamestonk_terminal/due_diligence/dd_controller.py @@ -15,6 +15,7 @@ from gamestonk_terminal.due_diligence import reddit_view as r_view from gamestonk_terminal.due_diligence import news_view from gamestonk_terminal.due_diligence import finra_view from gamestonk_terminal.due_diligence import sec_view +from gamestonk_terminal.due_diligence import stockgrid_dd_view as sg_view from gamestonk_terminal.due_diligence import finnhub_view from gamestonk_terminal import feature_flags as gtff from gamestonk_terminal.helper_funcs import get_flair @@ -43,6 +44,7 @@ class DueDiligenceController: "sec", "dp", "ftd", + "shortview", ] def __init__(self, stock: DataFrame, ticker: str, start: str, interval: str): @@ -108,6 +110,9 @@ class DueDiligenceController: ) print(" dp dark pools (ATS) vs OTC data [FINRA]") print(" ftd fails-to-deliver data [SEC]") + print( + " shortview shows price vs short interest over last year [Stockgrid.io]" + ) print("") def switch(self, an_input: str): @@ -198,6 +203,9 @@ class DueDiligenceController: """Process ftd command""" sec_view.fails_to_deliver(other_args, self.ticker) + def call_shortview(self, other_args: List[str]): + sg_view.shortview(self.ticker, other_args) + def menu(stock: DataFrame, ticker: str, start: str, interval: str): """Due Diligence Menu diff --git a/gamestonk_terminal/due_diligence/stockgrid_dd_view.py b/gamestonk_terminal/due_diligence/stockgrid_dd_view.py new file mode 100644 index 00000000000..14bc64d1ca3 --- /dev/null +++ b/gamestonk_terminal/due_diligence/stockgrid_dd_view.py @@ -0,0 +1,90 @@ +"""Stockgrid DD View""" +__docformat__ = "numpy" + +import argparse +from typing import List +from datetime import timedelta +import requests +import pandas as pd +import matplotlib.pyplot as plt +from gamestonk_terminal.config_plot import PLOT_DPI +from gamestonk_terminal.feature_flags import USE_ION +from gamestonk_terminal.helper_funcs import parse_known_args_and_warn, plot_autoscale + + +def shortview(ticker: str, other_args: List[str]): + """ + Plot price vs short volume over last year + Parameters + ---------- + ticker: str + Stock to plot for + other_args : List[str] + Argparse arguments + + """ + + parser = argparse.ArgumentParser( + prog="shortview", add_help=False, description="Shows price vs short interest" + ) + + try: + ns_parser = parse_known_args_and_warn(parser, other_args) + if not ns_parser: + return + link = f"https://stockgridapp.herokuapp.com/get_dark_pool_individual_data?ticker={ticker}" + response = requests.get(link) + response.json().keys() + df1 = pd.DataFrame(response.json()["individual_dark_pool_position_data"]) + df2 = pd.DataFrame(response.json()["individual_short_volume"]) + prices = response.json()["prices"]["prices"] + + dates = pd.to_datetime(df1.dates) + + fig = plt.figure(figsize=(plot_autoscale()), dpi=PLOT_DPI) + + ax = fig.add_subplot(111) + + ax.bar( + dates, + df2["total_volume"], + width=timedelta(days=1), + color="b", + alpha=0.4, + label="Total Volume", + ) + ax.bar( + dates, + df2["short_volume"], + width=timedelta(days=1), + color="r", + alpha=0.4, + label="Short Volume", + ) + + ax.set_ylabel("Volume") + ax2 = ax.twinx() + + ax2.plot(dates, prices, c="k", label="Price") + ax2.set_ylabel("Price ($)") + + lines, labels = ax.get_legend_handles_labels() + lines2, labels2 = ax2.get_legend_handles_labels() + ax2.legend(lines + lines2, labels + labels2, loc="upper left") + + ax.set_xlim(dates[0], dates[251]) + + ax.grid(b=True, which="major", color="#666666", linestyle="-") + ax.minorticks_on() + ax.grid(b=True, which="minor", color="#999999", linestyle="-", alpha=0.2) + + plt.suptitle(f"Price vs Short Volume for {ticker}") + plt.gcf().autofmt_xdate() + if USE_ION: + plt.ion() + + plt.show() + print("") + + except Exception as e: + print(e, "\n") diff --git a/poetry.lock b/poetry.lock index a831f268519..2b60b74c4bf 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1180,19 +1180,21 @@ python-versions = "*" [[package]] name = "mypy" -version = "0.812" +version = "0.901" description = "Optional static typing for Python" -category = "dev" +category = "main" optional = false python-versions = ">=3.5" [package.dependencies] mypy-extensions = ">=0.4.3,<0.5.0" -typed-ast = ">=1.4.0,<1.5.0" +toml = "*" +typed-ast = {version = ">=1.4.0,<1.5.0", markers = "python_version < \"3.8\""} typing-extensions = ">=3.7.4" [package.extras] dmypy = ["psutil (>=4.0)"] +python2 = ["typed-ast (>=1.4.0,<1.5.0)"] [[package]] name = "mypy-extensions" @@ -2709,7 +2711,7 @@ prediction = ["tensorflow", "pmdarima"] [metadata] lock-version = "1.1" python-versions = "^3.6.8" -content-hash = "9510676944e6f58159239de8fc33956258c521b1cb58ad43be3ef57763633987" +content-hash = "597c430e8a6c3bb6f5531acfdadfb9036ff0d3b7a91662e01638d14581dfb31c" [metadata.files] absl-py = [ @@ -3548,28 +3550,29 @@ multitasking = [ {file = "multitasking-0.0.9.tar.gz", hash = "sha256:b59d99f709d2e17d60ccaa2be09771b6e9ed9391c63f083c0701e724f624d2e0"}, ] mypy = [ - {file = "mypy-0.812-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:a26f8ec704e5a7423c8824d425086705e381b4f1dfdef6e3a1edab7ba174ec49"}, - {file = "mypy-0.812-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:28fb5479c494b1bab244620685e2eb3c3f988d71fd5d64cc753195e8ed53df7c"}, - {file = "mypy-0.812-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:9743c91088d396c1a5a3c9978354b61b0382b4e3c440ce83cf77994a43e8c521"}, - {file = "mypy-0.812-cp35-cp35m-win_amd64.whl", hash = "sha256:d7da2e1d5f558c37d6e8c1246f1aec1e7349e4913d8fb3cb289a35de573fe2eb"}, - {file = "mypy-0.812-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4eec37370483331d13514c3f55f446fc5248d6373e7029a29ecb7b7494851e7a"}, - {file = "mypy-0.812-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d65cc1df038ef55a99e617431f0553cd77763869eebdf9042403e16089fe746c"}, - {file = "mypy-0.812-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:61a3d5b97955422964be6b3baf05ff2ce7f26f52c85dd88db11d5e03e146a3a6"}, - {file = "mypy-0.812-cp36-cp36m-win_amd64.whl", hash = "sha256:25adde9b862f8f9aac9d2d11971f226bd4c8fbaa89fb76bdadb267ef22d10064"}, - {file = "mypy-0.812-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:552a815579aa1e995f39fd05dde6cd378e191b063f031f2acfe73ce9fb7f9e56"}, - {file = "mypy-0.812-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:499c798053cdebcaa916eef8cd733e5584b5909f789de856b482cd7d069bdad8"}, - {file = "mypy-0.812-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:5873888fff1c7cf5b71efbe80e0e73153fe9212fafdf8e44adfe4c20ec9f82d7"}, - {file = "mypy-0.812-cp37-cp37m-win_amd64.whl", hash = "sha256:9f94aac67a2045ec719ffe6111df543bac7874cee01f41928f6969756e030564"}, - {file = "mypy-0.812-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d23e0ea196702d918b60c8288561e722bf437d82cb7ef2edcd98cfa38905d506"}, - {file = "mypy-0.812-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:674e822aa665b9fd75130c6c5f5ed9564a38c6cea6a6432ce47eafb68ee578c5"}, - {file = "mypy-0.812-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:abf7e0c3cf117c44d9285cc6128856106183938c68fd4944763003decdcfeb66"}, - {file = "mypy-0.812-cp38-cp38-win_amd64.whl", hash = "sha256:0d0a87c0e7e3a9becdfbe936c981d32e5ee0ccda3e0f07e1ef2c3d1a817cf73e"}, - {file = "mypy-0.812-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7ce3175801d0ae5fdfa79b4f0cfed08807af4d075b402b7e294e6aa72af9aa2a"}, - {file = "mypy-0.812-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:b09669bcda124e83708f34a94606e01b614fa71931d356c1f1a5297ba11f110a"}, - {file = "mypy-0.812-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:33f159443db0829d16f0a8d83d94df3109bb6dd801975fe86bacb9bf71628e97"}, - {file = "mypy-0.812-cp39-cp39-win_amd64.whl", hash = "sha256:3f2aca7f68580dc2508289c729bd49ee929a436208d2b2b6aab15745a70a57df"}, - {file = "mypy-0.812-py3-none-any.whl", hash = "sha256:2f9b3407c58347a452fc0736861593e105139b905cca7d097e413453a1d650b4"}, - {file = "mypy-0.812.tar.gz", hash = "sha256:cd07039aa5df222037005b08fbbfd69b3ab0b0bd7a07d7906de75ae52c4e3119"}, + {file = "mypy-0.901-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:91211acf1485a1db0b1261bc5f9ed450cba3c0dfd8da0a6680e94827591e34d7"}, + {file = "mypy-0.901-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:c8bc628961cca4335ac7d1f2ed59b7125d9252fe4c78c3d66d30b50162359c99"}, + {file = "mypy-0.901-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:4a622faa3be76114cdce009f8ec173401494cf9e8f22713e7ae75fee9d906ab3"}, + {file = "mypy-0.901-cp35-cp35m-win_amd64.whl", hash = "sha256:8183561bfd950e93eeab8379ae5ec65873c856f5b58498d23aa8691f74c86030"}, + {file = "mypy-0.901-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:da914faaa80c25f463913da6db12adba703822a768f452f29f75b40bb4357139"}, + {file = "mypy-0.901-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:307a6c047596d768c3d689734307e47a91596eb9dbb67cfdf7d1fd9117b27f13"}, + {file = "mypy-0.901-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:a85c6759dcc6a9884131fa06a037bd34352aa3947e7f5d9d5a35652cc3a44bcd"}, + {file = "mypy-0.901-cp36-cp36m-win_amd64.whl", hash = "sha256:9941b685807b60c58020bb67b3217c9df47820dcd00425f55cdf71f31d3c42d9"}, + {file = "mypy-0.901-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:08cf1f31029612e1008a9432337ca4b1fbac989ff7c8200e2c9ec42705cd4c7b"}, + {file = "mypy-0.901-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:bc61153eb4df769538bb4a6e1045f59c2e6119339690ec719feeacbfc3809e89"}, + {file = "mypy-0.901-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:1cd241966a35036f936d4739bd71a1c64e15f02bf7d12bb2815cccfb2993a9de"}, + {file = "mypy-0.901-cp37-cp37m-win_amd64.whl", hash = "sha256:97be0e8ed116f7f79472a49cf06dd45dd806771142401f684d4f13ee652a63c0"}, + {file = "mypy-0.901-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:79beb6741df15395908ecc706b3a593a98804c1d5b5b6bd0c5b03b67c7ac03a0"}, + {file = "mypy-0.901-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:bf347c327c48d963bdef5bf365215d3e98b5fddbe5069fc796cec330e8235a20"}, + {file = "mypy-0.901-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:053b92ebae901fc7954677949049f70133f2f63e3e83dc100225c26d6a46fe95"}, + {file = "mypy-0.901-cp38-cp38-win_amd64.whl", hash = "sha256:f208cc967e566698c4e30a1f65843fc88d8da05a8693bac8b975417e0aee9ced"}, + {file = "mypy-0.901-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c86e3f015bfe7958646825d41c0691c6e5a5cd4015e3409b5c29c18a3c712534"}, + {file = "mypy-0.901-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e8577d30daf1b7b6582020f539f76e78ee1ed64a0323b28c8e0333c45db9369f"}, + {file = "mypy-0.901-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:5ddd8f4096d5fc2e7d7bb3924ac22758862163ad2c1cdc902c4b85568160e90a"}, + {file = "mypy-0.901-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:4b54518e399c3f4dc53380d4252c83276b2e60623cfc5274076eb8aae57572ac"}, + {file = "mypy-0.901-cp39-cp39-win_amd64.whl", hash = "sha256:7845ad3a31407bfbd64c76d032c16ab546d282930f747023bf07c17b054bebc5"}, + {file = "mypy-0.901-py3-none-any.whl", hash = "sha256:61b10ba18a01d05fc46adbf4f18b0e92178f6b5fd0f45926ffc2a408b5419728"}, + {file = "mypy-0.901.tar.gz", hash = "sha256:18753a8bb9bcf031ff10009852bd48d781798ecbccf45be5449892e6af4e3f9f"}, ] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, diff --git a/pyproject.toml b/pyproject.toml index 995a998455c..c7ca17ef11c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -71,13 +71,14 @@ tensorflow = {version = "2.5.0", optional = true} jupyter-client = "6.1.12" vaderSentiment = "3.3.2" degiro-connector = "1.0.0" +mypy = "^0.901" [tool.poetry.dev-dependencies] pytest = "^6.2.2" pylint = "^2.7.2" flake8 = "^3.9.0" black = "21.5b2" -mypy = "^0.812" +mypy = "^0.901" mock = "^4.0.3" codespell = "^2.0.0" pyupgrade = "^2.11.0"