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

+# 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

+## 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"