Add Stockgrid io source (#496)

* poetry add new mypy and merge recent main updates

* add shortdata command and dark short interest data

* reformat black

* Update Readme

* Add stockgrid dd command and update readme info

* Update Roadmao
This commit is contained in:
jmaslek
2021-06-12 13:26:58 -04:00
committed by GitHub
parent a54d15ddad
commit c0248a5b08
11 changed files with 412 additions and 32 deletions

View File

@@ -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**

View File

@@ -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

View File

@@ -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 <a name="ipo"></a>
@@ -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 <a name="topdark"></a>
```
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 <a name="darkshort"></a>
```
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 <a name="darkpool"></a>
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 │
╘══════════╧════════════╧════════════════╧═════════════════╧═══════════════════════╛
```

View File

@@ -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"""

View File

@@ -260,6 +260,5 @@ def dark_pool(other_args: List[str]):
print("")
except Exception as e:
print(e)
print("")
print(e, "\n")
return

View File

@@ -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")

View File

@@ -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 <a name="news"></a>
@@ -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 <a name="shortview"></a>
```text
usage: shortview
```
Plots price and short volume over the past year.

View File

@@ -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

View File

@@ -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")

55
poetry.lock generated
View File

@@ -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"},

View File

@@ -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"