summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDidierRLopes <dro.lopes@campus.fct.unl.pt>2021-09-25 17:03:21 +0100
committerGitHub <noreply@github.com>2021-09-25 17:03:21 +0100
commit35f82f24bad2b8a93fc8a0b0ad86504ae99e303a (patch)
tree6ecb0de11c2186c9574ea484db5776cf22b01d86
parent71b9e82f3645c25ba4f2c3e552d9cbced44f91bb (diff)
Add fa/analysis command to analyse filings using NLP (#761)
* Add alpaca keys to cfg_terminal * Add fa/analysis command for sec filings * no need for alpaca keys on config_terminal * fix eclect naming
-rw-r--r--gamestonk_terminal/config_terminal.py2
-rw-r--r--gamestonk_terminal/stocks/fundamental_analysis/eclect_us_model.py33
-rw-r--r--gamestonk_terminal/stocks/fundamental_analysis/eclect_us_view.py24
-rw-r--r--gamestonk_terminal/stocks/fundamental_analysis/fa_controller.py21
-rwxr-xr-xwebsite/content/stocks/fundamental_analysis/analysis/_index.md10
-rwxr-xr-xwebsite/data/menu/main.yml2
6 files changed, 92 insertions, 0 deletions
diff --git a/gamestonk_terminal/config_terminal.py b/gamestonk_terminal/config_terminal.py
index e112bae9633..832b54718e1 100644
--- a/gamestonk_terminal/config_terminal.py
+++ b/gamestonk_terminal/config_terminal.py
@@ -91,6 +91,8 @@ API_COINBASE_KEY = os.getenv("GT_API_COINBASE_KEY") or "REPLACE_ME"
API_COINBASE_SECRET = os.getenv("GT_API_COINBASE_SECRET") or "REPLACE_ME"
API_COINBASE_PASS_PHRASE = os.getenv("GT_API_COINBASE_PASS_PHRASE") or "REPLACE_ME"
+# https://alpaca.markets/docs/api-documentation/api-v2/
+# GT_APCA_API_BASE_URL, GT_APCA_API_KEY_ID and GT_APCA_API_SECRET_KEY need to be set as env variable
# https://docs.whale-alert.io/
API_WHALE_ALERT_KEY = os.getenv("GT_API_WHALE_ALERT_KEY") or "REPLACE_ME"
diff --git a/gamestonk_terminal/stocks/fundamental_analysis/eclect_us_model.py b/gamestonk_terminal/stocks/fundamental_analysis/eclect_us_model.py
new file mode 100644
index 00000000000..f72b927a31c
--- /dev/null
+++ b/gamestonk_terminal/stocks/fundamental_analysis/eclect_us_model.py
@@ -0,0 +1,33 @@
+"""Eclect.us model"""
+__docformat__ = "numpy"
+
+import requests
+
+# pylint: disable=R1718
+
+
+def get_filings_analysis(ticker: str) -> str:
+ """Save time reading SEC filings with the help of machine learning. [Source: https://eclect.us]
+
+ Parameters
+ ----------
+ ticker: str
+ Ticker to see analysis of filings
+
+ Returns
+ -------
+ str
+ Analysis of filings text
+ """
+ result = requests.get(f"https://api.eclect.us/symbol/{ticker.lower()}?page=1")
+
+ if result.status_code == 200:
+ if result.json():
+ return "\n\n".join(
+ {
+ sentence["sentence"]
+ for sentence in result.json()[0]["daa_highlights"]
+ }
+ )
+
+ return ""
diff --git a/gamestonk_terminal/stocks/fundamental_analysis/eclect_us_view.py b/gamestonk_terminal/stocks/fundamental_analysis/eclect_us_view.py
new file mode 100644
index 00000000000..a67570ad920
--- /dev/null
+++ b/gamestonk_terminal/stocks/fundamental_analysis/eclect_us_view.py
@@ -0,0 +1,24 @@
+"""Eclect.us view"""
+__docformat__ = "numpy"
+
+from gamestonk_terminal.stocks.fundamental_analysis import eclect_us_model
+
+
+def display_analysis(
+ ticker: str,
+) -> None:
+ """Display analysis of SEC filings based on NLP model. [Source: https://eclect.us]
+
+ Parameters
+ ----------
+ ticker: str
+ Ticker to do SEC filings analysis from
+ """
+
+ analysis = eclect_us_model.get_filings_analysis(ticker)
+
+ if analysis:
+ print(analysis)
+ else:
+ print("No SEC filings analysis found for this ticker")
+ print("")
diff --git a/gamestonk_terminal/stocks/fundamental_analysis/fa_controller.py b/gamestonk_terminal/stocks/fundamental_analysis/fa_controller.py
index 80fdda20e70..ed58366de0b 100644
--- a/gamestonk_terminal/stocks/fundamental_analysis/fa_controller.py
+++ b/gamestonk_terminal/stocks/fundamental_analysis/fa_controller.py
@@ -11,6 +11,7 @@ from gamestonk_terminal.stocks.fundamental_analysis.financial_modeling_prep impo
fmp_view,
)
from gamestonk_terminal.stocks.fundamental_analysis import (
+ eclect_us_view,
finviz_view,
yahoo_finance_view,
av_view,
@@ -37,6 +38,7 @@ class FundamentalAnalysisController:
]
CHOICES_COMMANDS = [
+ "analysis",
"score",
"dcf",
"screener",
@@ -108,6 +110,7 @@ Fundamental Analysis:
screener screen info about the company [Finviz]
mgmt management team of the company [Business Insider]
+ analysis analyse SEC filings with the help of machine learning [Elect.us]
score investing score from Warren Buffett, Joseph Piotroski and Benjamin Graham [FMP]
warnings company warnings according to Sean Seah book [Market Watch]
dcf a customizable discounted cash flow created in excel [stockanalysis]
@@ -181,6 +184,24 @@ Other Sources:
"""Process Quit command - quit the program"""
return True
+ def call_analysis(self, other_args: List[str]):
+ """Process analysis command"""
+ parser = argparse.ArgumentParser(
+ add_help=False,
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
+ prog="analysis",
+ description="""Display analysis of SEC filings based on NLP model. [Source: https://eclect.us]""",
+ )
+ try:
+ ns_parser = parse_known_args_and_warn(parser, other_args)
+ if not ns_parser:
+ return
+
+ eclect_us_view.display_analysis(self.ticker)
+
+ except Exception as e:
+ print(e, "\n")
+
def call_mgmt(self, other_args: List[str]):
"""Process mgmt command"""
business_insider_view.management(other_args, self.ticker)
diff --git a/website/content/stocks/fundamental_analysis/analysis/_index.md b/website/content/stocks/fundamental_analysis/analysis/_index.md
new file mode 100755
index 00000000000..06f672a7ef5
--- /dev/null
+++ b/website/content/stocks/fundamental_analysis/analysis/_index.md
@@ -0,0 +1,10 @@
+```text
+usage: analysis [-h]
+```
+
+Display analysis of SEC filings based on NLP model. [Source: https://eclect.us]
+
+```
+optional arguments:
+ -h, --help show this help message (default: False)
+```
diff --git a/website/data/menu/main.yml b/website/data/menu/main.yml
index 48cfdb87ea0..fcdde35e745 100755
--- a/website/data/menu/main.yml
+++ b/website/data/menu/main.yml
@@ -197,6 +197,8 @@ main:
ref: "/stocks/fundamental_analysis/screener"
- name: mgmt
ref: "/stocks/fundamental_analysis/mgmt"
+ - name: analysis
+ ref: "/stocks/fundamental_analysis/analysis"
- name: score
ref: "/stocks/fundamental_analysis/score"
- name: warnings