Merge branch 'main' into tests_with_prompt_toolkit

This commit is contained in:
Artem Veremey
2021-03-09 23:12:11 -08:00
committed by GitHub
5 changed files with 151 additions and 2 deletions

View File

@@ -0,0 +1,133 @@
import argparse
from datetime import timedelta
import json
import requests
from colorama import Fore, Style
from bs4 import BeautifulSoup
import numpy as np
import pandas as pd
from pandas.core.frame import DataFrame
import yfinance as yf
from gamestonk_terminal.helper_funcs import (
check_positive,
get_user_agent,
patch_pandas_text_adjustment,
parse_known_args_and_warn,
)
from gamestonk_terminal.config_terminal import USE_COLOR
def direction_color_red_green(val: str) -> str:
if val == "Buy":
ret = Fore.GREEN + val + Style.RESET_ALL
elif val == "Sell":
ret = Fore.RED + val + Style.RESET_ALL
else:
ret = val
return ret
def get_ark_orders() -> DataFrame:
url_orders = "https://cathiesark.com/ark-funds-combined/trades"
raw_page = requests.get(url_orders, headers={"User-Agent": get_user_agent()}).text
parsed_script = BeautifulSoup(raw_page, "lxml").find(
"script", {"id": "__NEXT_DATA__"}
)
parsed_json = json.loads(parsed_script.string)
df_orders = pd.json_normalize(parsed_json["props"]["pageProps"]["arkTrades"])
df_orders.drop(
[
"everything",
"everything.profile.customThumbnail",
"hidden",
"images.thumbnail",
],
axis=1,
inplace=True,
)
df_orders["date"] = pd.to_datetime(df_orders["date"], format="%Y-%m-%dZ").dt.date
return df_orders
def add_order_total(df_orders: DataFrame) -> DataFrame:
start_date = df_orders["date"].iloc[-1] - timedelta(days=1)
tickers = " ".join(df_orders["ticker"].unique())
print("")
prices = yf.download(tickers, start=start_date, progress=False)
for i, candle in enumerate(["Volume", "Open", "Close", "High", "Low", "Total"]):
df_orders.insert(i + 3, candle.lower(), 0)
for i, _ in df_orders.iterrows():
if np.isnan(
prices["Open"][df_orders.loc[i, "ticker"]][
df_orders.loc[i, "date"].strftime("%Y-%m-%d")
]
):
for candle in ["Volume", "Open", "Close", "High", "Low", "Total"]:
df_orders.loc[i, candle.lower()] = 0
continue
for candle in ["Volume", "Open", "Close", "High", "Low"]:
df_orders.loc[i, candle.lower()] = prices[candle][
df_orders.loc[i, "ticker"]
][df_orders.loc[i, "date"].strftime("%Y-%m-%d")]
df_orders.loc[i, "total"] = (
df_orders.loc[i, "close"] * df_orders.loc[i, "shares"]
)
return df_orders
def ark_orders(l_args):
parser = argparse.ArgumentParser(
prog="ARK Orders",
description="""
Orders by ARK Investment Management LLC - https://ark-funds.com/. [Source: https://cathiesark.com]
""",
)
parser.add_argument(
"-n",
"--num",
action="store",
dest="n_num",
type=check_positive,
default=20,
help="Last N orders.",
)
ns_parser = parse_known_args_and_warn(parser, l_args)
df_orders = get_ark_orders()
pd.set_option("mode.chained_assignment", None)
df_orders = add_order_total(df_orders.head(ns_parser.n_num))
if USE_COLOR:
df_orders["direction"] = df_orders["direction"].apply(direction_color_red_green)
patch_pandas_text_adjustment()
df_orders["link"] = "https://finviz.com/quote.ashx?t=" + df_orders["ticker"]
pd.set_option("display.max_colwidth", None)
pd.set_option("display.max_rows", None)
pd.set_option("display.float_format", "{:,.2f}".format)
print("")
print("Orders by ARK Investment Management LLC")
print("")
print(df_orders.to_string(index=False))
print("")

View File

@@ -5,6 +5,7 @@ from gamestonk_terminal.discovery import finviz_api
from gamestonk_terminal.discovery import short_interest_api
from gamestonk_terminal.discovery import seeking_alpha_api
from gamestonk_terminal.discovery import fidelity_api
from gamestonk_terminal.discovery import ark_api
from gamestonk_terminal.discovery import simply_wallst_api
from gamestonk_terminal.discovery import spachero_api
from gamestonk_terminal.discovery import unusual_whales_api
@@ -27,6 +28,7 @@ def print_discovery():
print(" sectors show sectors performance [Alpha Vantage]")
print(" gainers show latest top gainers [Yahoo Finance]")
print(" orders orders by Fidelity Customers [Fidelity]")
print(" ark_orders orders by ARK Investment Management LLC")
print(" up_earnings upcoming earnings release dates [Seeking Alpha]")
print(
" high_short show top high short interest stocks of over 20% ratio [www.highshortinterest.com]"
@@ -54,6 +56,7 @@ def disc_menu():
"gainers",
"spacs",
"orders",
"ark_orders",
"spachero",
"high_short",
"low_float",
@@ -112,6 +115,9 @@ def disc_menu():
elif ns_known_args.cmd == "orders":
fidelity_api.orders(l_args)
elif ns_known_args.cmd == "ark_orders":
ark_api.ark_orders(l_args)
elif ns_known_args.cmd == "simply_wallst":
simply_wallst_api.simply_wallst(l_args)

View File

@@ -308,7 +308,7 @@ def popular_tickers(l_args):
n_top_stocks += 1
except HTTPError as e:
if e.response.status_code != 404:
print(f"Unexpected exception from Fiviz: {e}")
print(f"Unexpected exception from Finviz: {e}")
except Exception as e:
print(e)

View File

@@ -102,7 +102,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
"version": "3.8.8"
}
},
"nbformat": 4,

View File

@@ -0,0 +1,10 @@
import unittest
from gamestonk_terminal.discovery.ark_api import (
ark_orders,
)
class TestDiscoveryArkApi(unittest.TestCase):
def test_ark_orders(self):
ark_orders(["-n", "2"])