mirror of
https://github.com/OpenBB-finance/OpenBB.git
synced 2026-10-30 22:11:55 +00:00
* SlashCmdsPlotlyDf2img - discord.py + disnake + all cmds converted to / cmds - tabulate + switch to df2img + plots to plotly +++++ * add settings * Update run_discordbot.py * Update config_discordbot.py * Fixing black * switch to yfinance and fix indention on min/max strike * + logger, - testing prints added logger's I was missing and removed old print testing code * final tradier removal + fixes + added past_days arg to /cc - removed tradier + noticed had accidently removed if df.empty from economy cmds. fixed * linting + renamed cogs folder to cmds * Update run_discordbot.py * Update run_discordbot.py * remove cachetools * linting * pylint * Made file retrieval global * Updated dependencies * updates +added /btc,eth,sol -removed /earnings +updated README.md + added SLASH_TESTING_SERVERS in cfg for instant cmds when testing * Made slash_testing an env variable * Improved slash_testing handling * Fix testserver * FIxed test_servers * Fixed testing_servers * updates + vwap on /cc + fixed expiry_autocomp exceeding 25 option limit on SPY dates + opt-hist changed to scatter and with greeks now + opt-cc-hist the old way of plotting with candlesticks chart * remove import * update Readme * width fix * replacement of tradier for yf * title fix Co-authored-by: Colin Delahunty <colin99delahunty@gmail.com> Co-authored-by: Colin Delahunty <72827203+colin99d@users.noreply.github.com>
207 lines
5.8 KiB
Python
207 lines
5.8 KiB
Python
from __future__ import annotations
|
|
|
|
import disnake
|
|
import pandas as pd
|
|
from disnake.ext import commands
|
|
|
|
from discordbot.config_discordbot import logger
|
|
from discordbot.stocks.dark_pool_shorts.dpotc import dpotc_command
|
|
from discordbot.stocks.dark_pool_shorts.ftd import ftd_command
|
|
from discordbot.stocks.dark_pool_shorts.hsi import hsi_command
|
|
from discordbot.stocks.dark_pool_shorts.pos import pos_command
|
|
from discordbot.stocks.dark_pool_shorts.psi import psi_command
|
|
from discordbot.stocks.dark_pool_shorts.shorted import shorted_command
|
|
from discordbot.stocks.dark_pool_shorts.sidtc import sidtc_command
|
|
from discordbot.stocks.dark_pool_shorts.spos import spos_command
|
|
|
|
pos_choices = [
|
|
"Short Vol (1M)",
|
|
"Short Vol %",
|
|
"Net Short Vol (1M)",
|
|
"Net Short Vol ($100M)",
|
|
"DP Position (1M)",
|
|
"DP Position ($1B)",
|
|
]
|
|
|
|
|
|
def default_completion(inter: disnake.AppCmdInter) -> list[str]:
|
|
return ["Start Typing", "for a", "stock ticker"]
|
|
|
|
|
|
def ticker_autocomp(inter: disnake.AppCmdInter, ticker: str):
|
|
if not ticker:
|
|
return default_completion(inter)
|
|
print(f"ticker_autocomp [ticker]: {ticker}")
|
|
tlow = ticker.lower()
|
|
col_list = ["Name"]
|
|
df = pd.read_csv("files/tickers.csv", usecols=col_list)
|
|
df = df["Name"]
|
|
return [ticker for ticker in df if ticker.lower().startswith(tlow)][:24]
|
|
|
|
|
|
class DarkPoolShortsCommands(commands.Cog):
|
|
"""Dark Pool Shorts menu"""
|
|
|
|
def __init__(self, bot: commands.Bot):
|
|
self.bot = bot
|
|
self.bot.help_command.cog = self
|
|
|
|
def cog_unload(self):
|
|
self.bot.help_command = None
|
|
|
|
@commands.slash_command(name="dps-shorted")
|
|
async def shorted(self, ctx: disnake.AppCmdInter, num: int = 10):
|
|
"""Show most shorted stocks [Yahoo Finance]
|
|
|
|
Parameters
|
|
-----------
|
|
num: Number of the most shorted stocks to retrieve
|
|
"""
|
|
await ctx.response.defer()
|
|
logger.info("dps-shorted")
|
|
await shorted_command(ctx, num)
|
|
|
|
@commands.slash_command(name="dps-hsi")
|
|
async def hsi(self, ctx: disnake.AppCmdInter, num: int = 10):
|
|
"""Show top high short interest stocks of over 20% ratio [shortinterest.com]
|
|
|
|
Parameters
|
|
-----------
|
|
num: Number of top stocks to print
|
|
"""
|
|
await ctx.response.defer()
|
|
logger.info("dps-hsi")
|
|
await hsi_command(ctx, num)
|
|
|
|
@commands.slash_command(name="dps-pos")
|
|
async def pos(
|
|
self,
|
|
ctx: disnake.AppCmdInter,
|
|
sort: str = commands.Param(choices=pos_choices),
|
|
num: int = 10,
|
|
):
|
|
"""Dark pool short position [Stockgrid]
|
|
|
|
Parameters
|
|
-----------
|
|
sort: Field for which to sort.
|
|
num: Number of top tickers to show
|
|
"""
|
|
await ctx.response.defer()
|
|
logger.info("dps-pos")
|
|
|
|
if str(sort) == "Short Vol (1M)":
|
|
sort = "sv"
|
|
if str(sort) == "Short Vol %":
|
|
sort = "sv_pct"
|
|
if str(sort) == "Net Short Vol (1M)":
|
|
sort = "nsv"
|
|
if str(sort) == "Net Short Vol ($100M)":
|
|
sort = "nsv_dollar"
|
|
if str(sort) == "DP Position (1M)":
|
|
sort = "dpp"
|
|
if str(sort) == "DP Position ($1B)":
|
|
sort = "dpp_dollar"
|
|
|
|
await pos_command(ctx, sort, num)
|
|
|
|
@commands.slash_command(name="dps-sidtc")
|
|
async def sidtc(
|
|
self,
|
|
ctx: disnake.AppCmdInter,
|
|
sort: str = commands.Param(
|
|
choices=["Float Short %", "Days to Cover", "Short Interest"]
|
|
),
|
|
num: int = 10,
|
|
):
|
|
"""Short interest and days to cover [Stockgrid]
|
|
|
|
Parameters
|
|
-----------
|
|
sort: Field for which to sort. Possible are: `float`, `dtc`, `si`.
|
|
num: Number of top tickers to show
|
|
"""
|
|
await ctx.response.defer()
|
|
logger.info("dps-sidtc")
|
|
|
|
if str(sort) == "Float Short %":
|
|
sort = "float"
|
|
if str(sort) == "Days to Cover":
|
|
sort = "dtc"
|
|
if str(sort) == "Short Interest":
|
|
sort = "si"
|
|
|
|
await sidtc_command(ctx, sort, num)
|
|
|
|
@commands.slash_command(name="dps-ftd")
|
|
async def ftd(
|
|
self,
|
|
ctx: disnake.AppCmdInter,
|
|
ticker: str = commands.Param(autocomplete=ticker_autocomp),
|
|
start="",
|
|
end="",
|
|
):
|
|
"""Fails-to-deliver data [SEC]
|
|
|
|
Parameters
|
|
----------
|
|
ticker: Stock Ticker
|
|
start: YYYY-MM-DD format
|
|
end: YYYY-MM-DD format
|
|
"""
|
|
await ctx.response.defer()
|
|
logger.info("dps-ftd")
|
|
await ftd_command(ctx, ticker, start, end)
|
|
|
|
@commands.slash_command(name="dps-dpotc")
|
|
async def dpotc(
|
|
self,
|
|
ctx: disnake.AppCmdInter,
|
|
ticker: str = commands.Param(autocomplete=ticker_autocomp),
|
|
):
|
|
"""Dark pools (ATS) vs OTC data [FINRA]
|
|
|
|
Parameters
|
|
----------
|
|
ticker: Stock Ticker
|
|
"""
|
|
await ctx.response.defer()
|
|
logger.info("dps-dpotc")
|
|
await dpotc_command(ctx, ticker)
|
|
|
|
@commands.slash_command(name="dps-spos")
|
|
async def spos(
|
|
self,
|
|
ctx: disnake.AppCmdInter,
|
|
ticker: str = commands.Param(autocomplete=ticker_autocomp),
|
|
):
|
|
"""Net short vs position [Stockgrid]
|
|
|
|
Parameters
|
|
----------
|
|
ticker: Stock Ticker
|
|
"""
|
|
await ctx.response.defer()
|
|
logger.info("dps-spos")
|
|
await spos_command(ctx, ticker)
|
|
|
|
@commands.slash_command(name="dps-psi")
|
|
async def psi(
|
|
self,
|
|
ctx: disnake.AppCmdInter,
|
|
ticker: str = commands.Param(autocomplete=ticker_autocomp),
|
|
):
|
|
"""Price vs short interest volume [Stockgrid]
|
|
|
|
Parameters
|
|
----------
|
|
ticker: Stock Ticker
|
|
"""
|
|
await ctx.response.defer()
|
|
logger.info("dps-psi")
|
|
await psi_command(ctx, ticker)
|
|
|
|
|
|
def setup(bot: commands.Bot):
|
|
bot.add_cog(DarkPoolShortsCommands(bot))
|