1
0
mirror of https://gitlab.com/simple-stock-bots/simple-stock-bot.git synced 2025-06-16 15:17:28 +00:00

formatting

This commit is contained in:
Anson 2023-11-30 21:50:25 -07:00
parent 0c71193194
commit 1fe7fe8c9c
11 changed files with 2166 additions and 2158 deletions

View File

@ -10,6 +10,7 @@ import pytz
import requests as r import requests as r
import schedule import schedule
from common.Symbol import Stock from common.Symbol import Stock
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -44,9 +45,13 @@ class MarketData:
self.MARKETDATA_TOKEN = "" self.MARKETDATA_TOKEN = ""
except KeyError: except KeyError:
self.MARKETDATA_TOKEN = "" self.MARKETDATA_TOKEN = ""
log.warning("Starting without an MarketData.app Token will not allow you to get market data!") log.warning(
"Starting without an MarketData.app Token will not allow you to get market data!"
)
log.warning("Use this affiliate link so that the bot can stay free:") log.warning("Use this affiliate link so that the bot can stay free:")
log.warning("https://dashboard.marketdata.app/marketdata/aff/go/misterbiggs?keyword=repo") log.warning(
"https://dashboard.marketdata.app/marketdata/aff/go/misterbiggs?keyword=repo"
)
if self.MARKETDATA_TOKEN != "": if self.MARKETDATA_TOKEN != "":
schedule.every().day.do(self.clear_charts) schedule.every().day.do(self.clear_charts)
@ -104,7 +109,7 @@ class MarketData:
return self.symbol_list.get(symbol.upper(), None) return self.symbol_list.get(symbol.upper(), None)
def get_symbol_list(self): def get_symbol_list(self):
# Doesn't use `self.get`` since needs are much different # Doesn't use `self.get()` since needs are much different
sec_resp = r.get( sec_resp = r.get(
"https://www.sec.gov/files/company_tickers.json", "https://www.sec.gov/files/company_tickers.json",
headers={ headers={
@ -148,9 +153,7 @@ class MarketData:
statusJSON = status.json() statusJSON = status.json()
if statusJSON["status"] == "ok": if statusJSON["status"] == "ok":
return ( return f"CoinGecko API responded that it was OK with a {status.status_code} in {status.elapsed.total_seconds()} seconds."
f"CoinGecko API responded that it was OK with a {status.status_code} in {status.elapsed.total_seconds()} seconds."
)
else: else:
return f"MarketData.app is currently reporting the following status: {statusJSON['status']}" return f"MarketData.app is currently reporting the following status: {statusJSON['status']}"
@ -229,7 +232,11 @@ class MarketData:
if data := self.get( if data := self.get(
f"stocks/candles/{resolution}/{symbol}", f"stocks/candles/{resolution}/{symbol}",
params={"from": startTime.timestamp(), "to": now.timestamp(), "extended": True}, params={
"from": startTime.timestamp(),
"to": now.timestamp(),
"extended": True,
},
): ):
data.pop("s") data.pop("s")
df = pd.DataFrame(data) df = pd.DataFrame(data)
@ -316,7 +323,9 @@ class MarketData:
options_data["underlying"] = "$" + options_data["underlying"] options_data["underlying"] = "$" + options_data["underlying"]
options_data["updated"] = humanize.naturaltime(dt.datetime.now() - dt.datetime.fromtimestamp(options_data["updated"])) options_data["updated"] = humanize.naturaltime(
dt.datetime.now() - dt.datetime.fromtimestamp(options_data["updated"])
)
options_data["expiration"] = humanize.naturaltime( options_data["expiration"] = humanize.naturaltime(
dt.datetime.now() - dt.datetime.fromtimestamp(options_data["expiration"]) dt.datetime.now() - dt.datetime.fromtimestamp(options_data["expiration"])

View File

@ -26,6 +26,9 @@ class Symbol:
def __str__(self) -> str: def __str__(self) -> str:
return self.id return self.id
def __hash__(self):
return hash(self.id)
class Stock(Symbol): class Stock(Symbol):
"""Stock Market Object. Gets data from MarketData""" """Stock Market Object. Gets data from MarketData"""

View File

@ -5,7 +5,6 @@ import pandas as pd
import requests as r import requests as r
import schedule import schedule
from markdownify import markdownify from markdownify import markdownify
from common.Symbol import Coin from common.Symbol import Coin
from common.utilities import rate_limited from common.utilities import rate_limited
@ -38,7 +37,9 @@ class cg_Crypto:
# Make sure API returned a proper status code # Make sure API returned a proper status code
if resp.status_code == 429: if resp.status_code == 429:
log.warning(f"CoinGecko returned 429 - Too Many Requests for endpoint: {endpoint}. Sleeping and trying again.") log.warning(
f"CoinGecko returned 429 - Too Many Requests for endpoint: {endpoint}. Sleeping and trying again."
)
time.sleep(10) time.sleep(10)
return self.get(endpoint=endpoint, params=params, timeout=timeout) return self.get(endpoint=endpoint, params=params, timeout=timeout)
@ -58,7 +59,9 @@ class cg_Crypto:
def symbol_id(self, symbol) -> str: def symbol_id(self, symbol) -> str:
try: try:
return self.symbol_list[self.symbol_list["symbol"] == symbol]["id"].values[0] return self.symbol_list[self.symbol_list["symbol"] == symbol]["id"].values[
0
]
except KeyError: except KeyError:
return "" return ""
@ -69,7 +72,9 @@ class cg_Crypto:
# Removes all binance-peg symbols # Removes all binance-peg symbols
symbols = symbols[~symbols["id"].str.contains("binance-peg")] symbols = symbols[~symbols["id"].str.contains("binance-peg")]
symbols["description"] = "$$" + symbols["symbol"].str.upper() + ": " + symbols["name"] symbols["description"] = (
"$$" + symbols["symbol"].str.upper() + ": " + symbols["name"]
)
symbols = symbols[["id", "symbol", "name", "description"]] symbols = symbols[["id", "symbol", "name", "description"]]
symbols["type_id"] = "$$" + symbols["symbol"] symbols["type_id"] = "$$" + symbols["symbol"]
@ -90,9 +95,7 @@ class cg_Crypto:
try: try:
status.raise_for_status() status.raise_for_status()
return ( return f"CoinGecko API responded that it was OK with a {status.status_code} in {status.elapsed.total_seconds()} seconds."
f"CoinGecko API responded that it was OK with a {status.status_code} in {status.elapsed.total_seconds()} seconds."
)
except r.HTTPError: except r.HTTPError:
return f"CoinGecko API returned an error code {status.status_code} in {status.elapsed.total_seconds()} seconds." return f"CoinGecko API returned an error code {status.status_code} in {status.elapsed.total_seconds()} seconds."
@ -162,7 +165,9 @@ class cg_Crypto:
f"/coins/{symbol.id}/ohlc", f"/coins/{symbol.id}/ohlc",
params={"vs_currency": self.vs_currency, "days": 1}, params={"vs_currency": self.vs_currency, "days": 1},
): ):
df = pd.DataFrame(resp, columns=["Date", "Open", "High", "Low", "Close"]).dropna() df = pd.DataFrame(
resp, columns=["Date", "Open", "High", "Low", "Close"]
).dropna()
df["Date"] = pd.to_datetime(df["Date"], unit="ms") df["Date"] = pd.to_datetime(df["Date"], unit="ms")
df = df.set_index("Date") df = df.set_index("Date")
return df return df
@ -188,7 +193,9 @@ class cg_Crypto:
f"/coins/{symbol.id}/ohlc", f"/coins/{symbol.id}/ohlc",
params={"vs_currency": self.vs_currency, "days": 30}, params={"vs_currency": self.vs_currency, "days": 30},
): ):
df = pd.DataFrame(resp, columns=["Date", "Open", "High", "Low", "Close"]).dropna() df = pd.DataFrame(
resp, columns=["Date", "Open", "High", "Low", "Close"]
).dropna()
df["Date"] = pd.to_datetime(df["Date"], unit="ms") df["Date"] = pd.to_datetime(df["Date"], unit="ms")
df = df.set_index("Date") df = df.set_index("Date")
return df return df

View File

@ -1,11 +1,2 @@
[tool.black]
line-length = 130
[tool.flake8]
max-line-length = 130
[tool.pycodestyle]
max_line_length = 130
[tool.ruff] [tool.ruff]
line-length = 130 line-length = 130

View File

@ -9,9 +9,7 @@ $tsla
/chart $tsla /chart $tsla
/chart $$btc /chart $$btc
/help /help
/trending""".split( /trending""".split("\n")
"\n"
)
print("press enter to start") print("press enter to start")
keyboard.wait("enter") keyboard.wait("enter")