From 2688a7df441e98198bcb36893530af2067a4b3e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A5l-Kristian=20Hamre?= Date: Tue, 22 Jul 2025 20:53:38 +0200 Subject: [PATCH] Big improvements on image view. --- rstat_tool/dashboard.py | 33 +++++-- rstat_tool/database.py | 58 ++++++++---- rstat_tool/format_blacklist.py | 151 +++++++++++++++--------------- rstat_tool/ticker_extractor.py | 151 +++++++++++++++--------------- templates/daily_image_view.html | 91 +++++++----------- templates/index.html | 2 +- templates/overall_image_view.html | 93 +++++++----------- templates/subreddit.html | 5 +- templates/weekly_image_view.html | 66 ++++++------- 9 files changed, 324 insertions(+), 326 deletions(-) diff --git a/rstat_tool/dashboard.py b/rstat_tool/dashboard.py index f6f68ef..d001ef1 100644 --- a/rstat_tool/dashboard.py +++ b/rstat_tool/dashboard.py @@ -1,6 +1,6 @@ # rstat_tool/dashboard.py -from flask import Flask, render_template +from flask import Flask, render_template, request from datetime import datetime, timedelta, timezone from .logger_setup import get_logger from .database import ( @@ -69,13 +69,30 @@ def daily_image_view(name): @app.route("/image/weekly/") def weekly_image_view(name): - """The handler for the WEEKLY image-style dashboard.""" - tickers = get_weekly_summary_for_subreddit(name) - - # Create the date range string for the title - end_date = datetime.now(timezone.utc) - start_date = end_date - timedelta(days=7) - date_range_str = f"{start_date.strftime('%b %d')} - {end_date.strftime('%b %d, %Y')}" + """ + The handler for the WEEKLY image-style dashboard. + Accepts an optional 'date' query parameter in YYYY-MM-DD format. + """ + # Get the date from the URL query string, e.g., ?date=2025-07-21 + date_str = request.args.get('date') + target_date = None + + if date_str: + try: + # Convert the string to a datetime object + target_date = datetime.strptime(date_str, "%Y-%m-%d").replace(tzinfo=timezone.utc) + except ValueError: + return "Invalid date format. Please use YYYY-MM-DD.", 400 + else: + # If no date is provided, default to showing LAST week + today = datetime.now(timezone.utc) + target_date = today - timedelta(days=7) + + # The query now returns the results and the date objects used + tickers, start_of_week, end_of_week = get_weekly_summary_for_subreddit(name, target_date) + + # Format the date range for the title + date_range_str = f"{start_of_week.strftime('%b %d')} - {end_of_week.strftime('%b %d, %Y')}" return render_template( "weekly_image_view.html", diff --git a/rstat_tool/database.py b/rstat_tool/database.py index 2b962d9..23dd3bd 100644 --- a/rstat_tool/database.py +++ b/rstat_tool/database.py @@ -235,6 +235,22 @@ def get_ticker_info(conn, ticker_id): cursor.execute("SELECT * FROM tickers WHERE id = ?", (ticker_id,)) return cursor.fetchone() +def get_week_start_end(for_date): + """ + Calculates the start (Monday, 00:00:00) and end (Sunday, 23:59:59) + of the week that a given date falls into. + Returns two datetime objects. + """ + # Monday is 0, Sunday is 6 + start_of_week = for_date - timedelta(days=for_date.weekday()) + end_of_week = start_of_week + timedelta(days=6) + + # Set time to the very beginning and very end of the day for an inclusive range + start_of_week = start_of_week.replace(hour=0, minute=0, second=0, microsecond=0) + end_of_week = end_of_week.replace(hour=23, minute=59, second=59, microsecond=999999) + + return start_of_week, end_of_week + def generate_summary_report(limit=20): """Queries the DB to generate a summary for the command-line tool.""" log.info(f"\n--- Top {limit} Tickers by Mention Count ---") @@ -334,49 +350,53 @@ def get_daily_summary_for_subreddit(subreddit_name): one_day_ago = datetime.now(timezone.utc) - timedelta(days=1) one_day_ago_timestamp = int(one_day_ago.timestamp()) query = """ - SELECT t.symbol, - COUNT(CASE WHEN m.mention_type = 'post' THEN 1 END) as post_mentions, - COUNT(CASE WHEN m.mention_type = 'comment' THEN 1 END) as comment_mentions, + SELECT + t.symbol, t.market_cap, t.closing_price, + COUNT(m.id) as total_mentions, COUNT(CASE WHEN m.mention_sentiment > 0.1 THEN 1 END) as bullish_mentions, COUNT(CASE WHEN m.mention_sentiment < -0.1 THEN 1 END) as bearish_mentions FROM mentions m JOIN tickers t ON m.ticker_id = t.id JOIN subreddits s ON m.subreddit_id = s.id WHERE LOWER(s.name) = LOWER(?) AND m.mention_timestamp >= ? - GROUP BY t.symbol ORDER BY (post_mentions + comment_mentions) DESC LIMIT 10; + GROUP BY t.symbol, t.market_cap, t.closing_price + ORDER BY total_mentions DESC LIMIT 10; """ results = conn.execute(query, (subreddit_name, one_day_ago_timestamp)).fetchall() conn.close() return results -def get_weekly_summary_for_subreddit(subreddit_name): - """ Gets a summary for the WEEKLY image view (last 7 days). """ +def get_weekly_summary_for_subreddit(subreddit_name, for_date): + """ Gets a summary for the WEEKLY image view (full week). """ conn = get_db_connection() - seven_days_ago = datetime.now(timezone.utc) - timedelta(days=7) - seven_days_ago_timestamp = int(seven_days_ago.timestamp()) + start_of_week, end_of_week = get_week_start_end(for_date) + start_timestamp = int(start_of_week.timestamp()) + end_timestamp = int(end_of_week.timestamp()) query = """ - SELECT t.symbol, - COUNT(CASE WHEN m.mention_type = 'post' THEN 1 END) as post_mentions, - COUNT(CASE WHEN m.mention_type = 'comment' THEN 1 END) as comment_mentions, + SELECT + t.symbol, t.market_cap, t.closing_price, + COUNT(m.id) as total_mentions, COUNT(CASE WHEN m.mention_sentiment > 0.1 THEN 1 END) as bullish_mentions, COUNT(CASE WHEN m.mention_sentiment < -0.1 THEN 1 END) as bearish_mentions FROM mentions m JOIN tickers t ON m.ticker_id = t.id JOIN subreddits s ON m.subreddit_id = s.id - WHERE LOWER(s.name) = LOWER(?) AND m.mention_timestamp >= ? - GROUP BY t.symbol ORDER BY (post_mentions + comment_mentions) DESC LIMIT 10; + WHERE LOWER(s.name) = LOWER(?) AND m.mention_timestamp BETWEEN ? AND ? + GROUP BY t.symbol, t.market_cap, t.closing_price + ORDER BY total_mentions DESC LIMIT 10; """ - results = conn.execute(query, (subreddit_name, seven_days_ago_timestamp)).fetchall() + results = conn.execute(query, (subreddit_name, start_timestamp, end_timestamp)).fetchall() conn.close() - return results + return results, start_of_week, end_of_week def get_overall_image_view_summary(): """ Gets a summary of top tickers across ALL subreddits for the image view. """ conn = get_db_connection() query = """ - SELECT t.symbol, - COUNT(CASE WHEN m.mention_type = 'post' THEN 1 END) as post_mentions, - COUNT(CASE WHEN m.mention_type = 'comment' THEN 1 END) as comment_mentions, + SELECT + t.symbol, t.market_cap, t.closing_price, + COUNT(m.id) as total_mentions, COUNT(CASE WHEN m.mention_sentiment > 0.1 THEN 1 END) as bullish_mentions, COUNT(CASE WHEN m.mention_sentiment < -0.1 THEN 1 END) as bearish_mentions FROM mentions m JOIN tickers t ON m.ticker_id = t.id - GROUP BY t.symbol ORDER BY (post_mentions + comment_mentions) DESC LIMIT 10; + GROUP BY t.symbol, t.market_cap, t.closing_price + ORDER BY total_mentions DESC LIMIT 10; """ results = conn.execute(query).fetchall() conn.close() diff --git a/rstat_tool/format_blacklist.py b/rstat_tool/format_blacklist.py index 568ca16..da766d7 100644 --- a/rstat_tool/format_blacklist.py +++ b/rstat_tool/format_blacklist.py @@ -18,81 +18,82 @@ COMMON_WORDS_BLACKLIST = { "CNY", "COCK", "COGS", "COIL", "COKE", "COME", "COST", "COULD", "COVID", "CPAP", "CPI", "CRA", "CRE", "CRO", "CRV", "CSE", "CSS", "CST", "CTB", "CTEP", "CTO", "CUCKS", "CULT", "CUV", "CYCLE", "CZK", "DA", "DAILY", "DAO", "DATE", - "DAX", "DAY", "DAYS", "DCA", "DCF", "DD", "DEBT", "DEEZ", "DEMO", "DEX", - "DIA", "DID", "DIDNT", "DIP", "DITM", "DIV", "DIY", "DJIA", "DKK", "DL", - "DM", "DMV", "DNI", "DO", "DOE", "DOES", "DOGE", "DOJ", "DOM", "DONT", - "DOOR", "DOWN", "DPI", "DR", "DUDE", "DUMP", "DUTY", "DYI", "DYNK", "DYODD", - "DYOR", "EACH", "EARLY", "EARN", "EAST", "EASY", "ECB", "EDGAR", "EDIT", "EDT", - "EJ", "EMA", "EMJ", "END", "ENRON", "ENSI", "ENV", "EO", "EOD", "EOW", - "EOY", "EPA", "EPK", "EPS", "ER", "ESG", "ESPP", "EST", "ETA", "ETF", - "ETFS", "ETH", "EU", "EUR", "EV", "EVEN", "EVERY", "EVTOL", "EXTRA", "EYES", - "EZ", "FAANG", "FAFO", "FAQ", "FAR", "FAST", "FBI", "FCFF", "FD", "FDA", - "FEE", "FFH", "FFS", "FGMA", "FIG", "FIGMA", "FIHTX", "FING", "FINRA", "FINT", - "FINTX", "FINTY", "FIRST", "FKIN", "FLT", "FLY", "FML", "FOLO", "FOMC", "FOMO", - "FOR", "FOREX", "FRAUD", "FRG", "FROM", "FSBO", "FSD", "FSELK", "FSPSX", "FTD", - "FTSE", "FUCK", "FUCKS", "FUD", "FULL", "FUND", "FUNNY", "FVG", "FWIW", "FX", - "FXAIX", "FXIAX", "FXROX", "FY", "FYI", "FZROX", "GAAP", "GAIN", "GAVE", "GBP", - "GC", "GDP", "GET", "GG", "GJ", "GL", "GLHF", "GMAT", "GMI", "GMT", - "GO", "GOAL", "GOAT", "GOD", "GOING", "GOLD", "GONE", "GONNA", "GPT", "GPU", - "GRAB", "GREAT", "GREEN", "GST", "GTA", "GTFO", "GTG", "GUH", "GUY", "GUYS", - "HAD", "HAHA", "HALF", "HANDS", "HAS", "HATE", "HAVE", "HBAR", "HCOL", "HEAR", - "HEDGE", "HEGE", "HELD", "HELP", "HEY", "HFCS", "HFT", "HGTV", "HIGH", "HIGHS", - "HINT", "HIS", "HITID", "HKD", "HODL", "HODOR", "HOF", "HOLD", "HOLY", "HOME", - "HOUR", "HOW", "HS", "HSA", "HT", "HTF", "HTML", "HUF", "HUGE", "HYPE", - "IANAL", "IB", "IBS", "ICT", "ID", "IDF", "IDK", "IF", "II", "IKKE", - "IKZ", "IM", "IMHO", "IMI", "IMO", "IN", "INR", "INTO", "IP", "IPO", - "IRA", "IRAS", "IRC", "IRISH", "IRS", "IS", "ISA", "ISIN", "ISM", "ISN", - "IST", "IT", "ITC", "ITM", "ITS", "ITWN", "IUIT", "IV", "IVV", "IWM", - "IXL", "JAVA", "JD", "JFC", "JK", "JLR", "JMO", "JOIN", "JOKE", "JP", - "JPOW", "JPY", "JS", "JST", "JUN", "JUST", "KARMA", "KEEP", "KILL", "KING", - "KNEW", "KNOW", "KO", "KOHLS", "KPMG", "KRW", "LANGT", "LARGE", "LAST", "LATE", - "LATER", "LBO", "LCS", "LDL", "LEADS", "LEAP", "LEAPS", "LEARN", "LEI", "LET", - "LETS", "LFG", "LFP", "LIFE", "LIG", "LIGMA", "LIKE", "LIMIT", "LIST", "LLC", - "LLM", "LMAO", "LMM", "LMN", "LOKO", "LOL", "LOLOL", "LONG", "LOOK", "LOSE", - "LOSS", "LOST", "LOVE", "LOW", "LOWER", "LOWS", "LP", "LTCG", "LUPD", "LYING", - "M&A", "MA", "MACD", "MAKE", "MAKES", "MANY", "MAX", "MBA", "MC", "MCAP", - "MCP", "ME", "MEME", "MERGE", "MERK", "MES", "MEXC", "MF", "MFER", "MID", - "MIGHT", "MIN", "MIND", "ML", "MLB", "MLS", "MM", "MNQ", "MOASS", "MOM", - "MONEY", "MONTH", "MONY", "MOON", "MORE", "MOU", "MSK", "MTVGA", "MUCH", "MUSIC", - "MUST", "MXN", "MY", "MYMD", "NASA", "NASDA", "NATO", "NAV", "NBA", "NCAN", - "NCR", "NEAR", "NEAT", "NEED", "NEVER", "NEW", "NEWS", "NEXT", "NFA", "NFC", - "NFL", "NFT", "NGMI", "NIGHT", "NIQ", "NK", "NO", "NOK", "NONE", "NOPE", - "NORTH", "NOT", "NOVA", "NOW", "NQ", "NSA", "NTVS", "NULL", "NUT", "NUTS", - "NUTZ", "NVM", "NW", "NY", "NYSE", "NZ", "NZD", "OBBB", "OBI", "OBS", - "OBV", "OCF", "OCO", "ODAT", "OEM", "OF", "OFA", "OFF", "OG", "OH", - "OK", "OKAY", "OLD", "OMFG", "OMG", "ON", "ONE", "ONLY", "OP", "OPEC", - "OPENQ", "OPEX", "OPRN", "OR", "ORB", "OS", "OSCE", "OT", "OTC", "OTM", - "OUCH", "OUGHT", "OUT", "OVER", "OWN", "PA", "PANIC", "PC", "PDT", "PE", - "PEAK", "PEG", "PETA", "PEW", "PFC", "PGHL", "PIMCO", "PITA", "PLAN", "PLAYS", - "PLN", "PM", "PMI", "PNL", "POC", "POMO", "POP", "POS", "POSCO", "POTUS", - "POV", "POW", "PPI", "PR", "PRICE", "PROFIT", "PROXY", "PS", "PSA", "PST", - "PT", "PTD", "PUSSY", "PUT", "PWC", "Q1", "Q2", "Q3", "Q4", "QE", - "QED", "QIMC", "QQQ", "QR", "RAM", "RATM", "RBA", "RBNZ", "RE", "REACH", - "READY", "REAL", "RED", "REIT", "REITS", "REKT", "RFK", "RH", "RICO", "RIDE", - "RIGHT", "RIP", "RISK", "RISKY", "ROCE", "ROCK", "ROE", "ROFL", "ROI", "ROIC", - "ROTH", "RRSP", "RSD", "RSI", "RT", "RTD", "RUB", "RUG", "RULE", "RUST", - "RVOL", "SAGA", "SALES", "SAME", "SAVE", "SAYS", "SBF", "SBLOC", "SC", "SCALP", - "SCAM", "SCHB", "SCIF", "SEC", "SEE", "SEK", "SELL", "SELLL", "SEP", "SESG", - "SET", "SGD", "SHALL", "SHARE", "SHELL", "SHIT", "SHORT", "SHOW", "SHTF", "SI", - "SIGN", "SL", "SLIM", "SLOW", "SMA", "SMALL", "SO", "SOLIS", "SOME", "SOON", - "SOUTH", "SP", "SPAC", "SPDR", "SPEND", "SPLG", "SPX", "SPY", "SS", "START", - "STAY", "STEEL", "STFU", "STILL", "STOCK", "STOOQ", "STOP", "STOR", "STQQQ", "STUCK", - "STUDY", "SUS", "SUV", "SWIFT", "SWING", "TA", "TAG", "TAKE", "TAM", "TBTH", - "TEAMS", "TED", "TERM", "TEXT", "TF", "TFNA", "TFSA", "THANK", "THAT", "THATS", - "THE", "THEIR", "THEM", "THEN", "THERE", "THESE", "THEY", "THING", "THINK", "THIS", - "TIA", "TIKR", "TIME", "TINA", "TITS", "TJR", "TL", "TL;DR", "TLDR", "TO", - "TODAY", "TOLD", "TOO", "TOS", "TOT", "TOTAL", "TP", "TRADE", "TREND", "TRUE", - "TRUMP", "TRUST", "TRY", "TSA", "TSP", "TSX", "TSXV", "TTM", "TTYL", "TWO", - "UAW", "UCITS", "UGH", "UI", "UK", "UNDER", "UNTIL", "UP", "US", "USA", - "USD", "USSA", "USSR", "UTC", "VALID", "VALUE", "VAMOS", "VERY", "VFMXX", "VFV", - "VI", "VIX", "VLI", "VOO", "VP", "VR", "VRVP", "VSUS", "VTI", "VUAG", - "VW", "VWAP", "VWCE", "VXN", "VXUX", "WAGMI", "WAIT", "WALL", "WANT", "WATCH", - "WAY", "WE", "WEB3", "WEEK", "WENT", "WEST", "WHALE", "WHAT", "WHEN", "WHERE", - "WHICH", "WHO", "WHOS", "WHY", "WIDE", "WILL", "WIRE", "WIRED", "WITH", "WL", - "WON", "WOOPS", "WORDS", "WORTH", "WOULD", "WP", "WRONG", "WSB", "WSJ", "WTF", - "WV", "WWII", "WWIII", "X", "XCUSE", "XD", "XEQT", "XMR", "XO", "XRP", - "XX", "YEAH", "YEET", "YES", "YET", "YIELD", "YM", "YMMV", "YOLO", "YOU", - "YOUR", "YOY", "YT", "YTD", "YUGE", "ZAR", "ZEN", "ZERO", "ZEVDXY" + "DAX", "DAY", "DAYS", "DCA", "DCF", "DD", "DEBT", "DEEZ", "DEMO", "DET", + "DEX", "DIA", "DID", "DIDNT", "DIP", "DITM", "DIV", "DIY", "DJIA", "DKK", + "DL", "DM", "DMV", "DNI", "DO", "DOE", "DOES", "DOGE", "DOJ", "DOM", + "DONT", "DOOR", "DOWN", "DPI", "DR", "DUDE", "DUMP", "DUTY", "DXYXBT", "DYI", + "DYNK", "DYODD", "DYOR", "EACH", "EARLY", "EARN", "EAST", "EASY", "ECB", "EDGAR", + "EDIT", "EDT", "EJ", "EMA", "EMJ", "END", "ENRON", "ENSI", "ENV", "EO", + "EOD", "EOW", "EOY", "EPA", "EPK", "EPS", "ER", "ESG", "ESPP", "EST", + "ETA", "ETF", "ETFS", "ETH", "EU", "EUR", "EV", "EVEN", "EVERY", "EVTOL", + "EXTRA", "EYES", "EZ", "FAANG", "FAFO", "FAQ", "FAR", "FAST", "FBI", "FCFF", + "FD", "FDA", "FEE", "FFH", "FFS", "FGMA", "FIG", "FIGMA", "FIHTX", "FING", + "FINRA", "FINT", "FINTX", "FINTY", "FIRST", "FKIN", "FLT", "FLY", "FML", "FOLO", + "FOMC", "FOMO", "FOR", "FOREX", "FRAUD", "FRG", "FROM", "FRP", "FSBO", "FSD", + "FSELK", "FSPSX", "FTD", "FTSE", "FUCK", "FUCKS", "FUD", "FULL", "FUND", "FUNNY", + "FVG", "FWIW", "FX", "FXAIX", "FXIAX", "FXROX", "FY", "FYI", "FZROX", "GAAP", + "GAIN", "GAVE", "GBP", "GC", "GDP", "GET", "GG", "GJ", "GL", "GLHF", + "GMAT", "GMI", "GMT", "GO", "GOAL", "GOAT", "GOD", "GOING", "GOLD", "GONE", + "GONNA", "GPT", "GPU", "GRAB", "GREAT", "GREEN", "GST", "GTA", "GTFO", "GTG", + "GUH", "GUY", "GUYS", "HAD", "HAHA", "HALF", "HANDS", "HAS", "HATE", "HAVE", + "HBAR", "HCOL", "HEAR", "HEDGE", "HEGE", "HELD", "HELP", "HEY", "HFCS", "HFT", + "HGTV", "HIGH", "HIGHS", "HINT", "HIS", "HITID", "HKD", "HODL", "HODOR", "HOF", + "HOLD", "HOLY", "HOME", "HOUR", "HOW", "HS", "HSA", "HT", "HTF", "HTML", + "HUF", "HUGE", "HYPE", "IANAL", "IB", "IBS", "ICT", "ID", "IDF", "IDK", + "IF", "II", "IKKE", "IKZ", "IM", "IMHO", "IMI", "IMO", "IN", "INR", + "INTO", "IP", "IPO", "IRA", "IRAS", "IRC", "IRISH", "IRS", "IS", "ISA", + "ISIN", "ISM", "ISN", "IST", "IT", "ITC", "ITM", "ITS", "ITWN", "IUIT", + "IV", "IVV", "IWM", "IXL", "JAVA", "JD", "JFC", "JK", "JLR", "JMO", + "JOIN", "JOKE", "JP", "JPOW", "JPY", "JS", "JST", "JUN", "JUST", "KARMA", + "KEEP", "KILL", "KING", "KNEW", "KNOW", "KO", "KOHLS", "KPMG", "KRW", "LANGT", + "LARGE", "LAST", "LATE", "LATER", "LBO", "LCS", "LDL", "LEADS", "LEAP", "LEAPS", + "LEARN", "LEI", "LET", "LETS", "LFG", "LFP", "LIFE", "LIG", "LIGMA", "LIKE", + "LIMIT", "LIST", "LLC", "LLM", "LMAO", "LMM", "LMN", "LOKO", "LOL", "LOLOL", + "LONG", "LOOK", "LOSE", "LOSS", "LOST", "LOVE", "LOW", "LOWER", "LOWS", "LP", + "LTCG", "LUPD", "LYING", "M&A", "MA", "MACD", "MAKE", "MAKES", "MANGE", "MANY", + "MAX", "MBA", "MC", "MCAP", "MCP", "ME", "MEME", "MERGE", "MERK", "MES", + "MEXC", "MF", "MFER", "MID", "MIGHT", "MIN", "MIND", "ML", "MLB", "MLS", + "MM", "MNQ", "MOASS", "MOM", "MONEY", "MONTH", "MONY", "MOON", "MORE", "MOU", + "MSK", "MTVGA", "MUCH", "MUSIC", "MUST", "MVA", "MXN", "MY", "MYMD", "NASA", + "NASDA", "NATO", "NAV", "NBA", "NCAN", "NCR", "NEAR", "NEAT", "NEED", "NEVER", + "NEW", "NEWS", "NEXT", "NFA", "NFC", "NFL", "NFT", "NGMI", "NIGHT", "NIQ", + "NK", "NO", "NOK", "NONE", "NOPE", "NORTH", "NOT", "NOVA", "NOW", "NQ", + "NSA", "NTVS", "NULL", "NUT", "NUTS", "NUTZ", "NVM", "NW", "NY", "NYSE", + "NZ", "NZD", "OBBB", "OBI", "OBS", "OBV", "OCF", "OCO", "ODAT", "OEM", + "OF", "OFA", "OFF", "OG", "OH", "OK", "OKAY", "OL", "OLD", "OMFG", + "OMG", "ON", "ONE", "ONLY", "OP", "OPEC", "OPENQ", "OPEX", "OPRN", "OR", + "ORB", "OS", "OSCE", "OT", "OTC", "OTM", "OUCH", "OUGHT", "OUT", "OVER", + "OWN", "PA", "PANIC", "PC", "PDT", "PE", "PEAK", "PEG", "PETA", "PEW", + "PFC", "PGHL", "PIMCO", "PITA", "PLAN", "PLAYS", "PLN", "PM", "PMI", "PNL", + "POC", "POMO", "POP", "POS", "POSCO", "POTUS", "POV", "POW", "PPI", "PR", + "PRICE", "PROFIT", "PROXY", "PS", "PSA", "PST", "PT", "PTD", "PUSSY", "PUT", + "PWC", "Q1", "Q2", "Q3", "Q4", "QE", "QED", "QIMC", "QQQ", "QR", + "RAM", "RATM", "RBA", "RBNZ", "RE", "REACH", "READY", "REAL", "RED", "REIT", + "REITS", "REKT", "RFK", "RH", "RICO", "RIDE", "RIGHT", "RIP", "RISK", "RISKY", + "ROCE", "ROCK", "ROE", "ROFL", "ROI", "ROIC", "ROTH", "RRSP", "RSD", "RSI", + "RT", "RTD", "RUB", "RUG", "RULE", "RUST", "RVOL", "SAGA", "SALES", "SAME", + "SAVE", "SAYS", "SBF", "SBLOC", "SC", "SCALP", "SCAM", "SCHB", "SCIF", "SEC", + "SEE", "SEK", "SELL", "SELLL", "SEP", "SESG", "SET", "SGD", "SHALL", "SHARE", + "SHELL", "SHIT", "SHORT", "SHOW", "SHTF", "SI", "SIGN", "SL", "SLIM", "SLOW", + "SMA", "SMALL", "SO", "SOLIS", "SOME", "SOON", "SOUTH", "SP", "SPAC", "SPDR", + "SPEND", "SPLG", "SPX", "SPY", "SS", "START", "STAY", "STEEL", "STFU", "STILL", + "STOCK", "STOOQ", "STOP", "STOR", "STQQQ", "STUCK", "STUDY", "SUS", "SUV", "SWIFT", + "SWING", "TA", "TAG", "TAKE", "TAM", "TBTH", "TEAMS", "TED", "TERM", "TEXT", + "TF", "TFNA", "TFSA", "THANK", "THAT", "THATS", "THE", "THEIR", "THEM", "THEN", + "THERE", "THESE", "THEY", "THING", "THINK", "THIS", "TIA", "TIKR", "TIME", "TINA", + "TITS", "TJR", "TL", "TL;DR", "TLDR", "TO", "TODAY", "TOLD", "TOO", "TOS", + "TOT", "TOTAL", "TP", "TRADE", "TREND", "TRUE", "TRUMP", "TRUST", "TRY", "TSA", + "TSP", "TSX", "TSXV", "TTM", "TTYL", "TWO", "UAW", "UCITS", "UGH", "UI", + "UK", "UNDER", "UNTIL", "UP", "US", "USA", "USD", "USSA", "USSR", "UTC", + "VALID", "VALUE", "VAMOS", "VERY", "VFMXX", "VFV", "VI", "VIX", "VLI", "VOO", + "VP", "VR", "VRVP", "VSUS", "VTI", "VUAG", "VW", "VWAP", "VWCE", "VXN", + "VXUX", "WAGMI", "WAIT", "WALL", "WANT", "WATCH", "WAY", "WE", "WEB3", "WEEK", + "WENT", "WEST", "WHALE", "WHAT", "WHEN", "WHERE", "WHICH", "WHO", "WHOS", "WHY", + "WIDE", "WILL", "WIRE", "WIRED", "WITH", "WL", "WON", "WOOPS", "WORDS", "WORTH", + "WOULD", "WP", "WRONG", "WSB", "WSJ", "WTF", "WV", "WWII", "WWIII", "X", + "XCUSE", "XD", "XEQT", "XMR", "XO", "XRP", "XX", "YEAH", "YEET", "YES", + "YET", "YIELD", "YM", "YMMV", "YOLO", "YOU", "YOUR", "YOY", "YT", "YTD", + "YUGE", "ZAR", "ZEN", "ZERO", "ZEV" } def format_and_print_list(word_set, words_per_line=10): diff --git a/rstat_tool/ticker_extractor.py b/rstat_tool/ticker_extractor.py index eba2dc7..9e86ffd 100644 --- a/rstat_tool/ticker_extractor.py +++ b/rstat_tool/ticker_extractor.py @@ -22,81 +22,82 @@ COMMON_WORDS_BLACKLIST = { "CNY", "COCK", "COGS", "COIL", "COKE", "COME", "COST", "COULD", "COVID", "CPAP", "CPI", "CRA", "CRE", "CRO", "CRV", "CSE", "CSS", "CST", "CTB", "CTEP", "CTO", "CUCKS", "CULT", "CUV", "CYCLE", "CZK", "DA", "DAILY", "DAO", "DATE", - "DAX", "DAY", "DAYS", "DCA", "DCF", "DD", "DEBT", "DEEZ", "DEMO", "DEX", - "DIA", "DID", "DIDNT", "DIP", "DITM", "DIV", "DIY", "DJIA", "DKK", "DL", - "DM", "DMV", "DNI", "DO", "DOE", "DOES", "DOGE", "DOJ", "DOM", "DONT", - "DOOR", "DOWN", "DPI", "DR", "DUDE", "DUMP", "DUTY", "DYI", "DYNK", "DYODD", - "DYOR", "EACH", "EARLY", "EARN", "EAST", "EASY", "ECB", "EDGAR", "EDIT", "EDT", - "EJ", "EMA", "EMJ", "END", "ENRON", "ENSI", "ENV", "EO", "EOD", "EOW", - "EOY", "EPA", "EPK", "EPS", "ER", "ESG", "ESPP", "EST", "ETA", "ETF", - "ETFS", "ETH", "EU", "EUR", "EV", "EVEN", "EVERY", "EVTOL", "EXTRA", "EYES", - "EZ", "FAANG", "FAFO", "FAQ", "FAR", "FAST", "FBI", "FCFF", "FD", "FDA", - "FEE", "FFH", "FFS", "FGMA", "FIG", "FIGMA", "FIHTX", "FING", "FINRA", "FINT", - "FINTX", "FINTY", "FIRST", "FKIN", "FLT", "FLY", "FML", "FOLO", "FOMC", "FOMO", - "FOR", "FOREX", "FRAUD", "FRG", "FROM", "FSBO", "FSD", "FSELK", "FSPSX", "FTD", - "FTSE", "FUCK", "FUCKS", "FUD", "FULL", "FUND", "FUNNY", "FVG", "FWIW", "FX", - "FXAIX", "FXIAX", "FXROX", "FY", "FYI", "FZROX", "GAAP", "GAIN", "GAVE", "GBP", - "GC", "GDP", "GET", "GG", "GJ", "GL", "GLHF", "GMAT", "GMI", "GMT", - "GO", "GOAL", "GOAT", "GOD", "GOING", "GOLD", "GONE", "GONNA", "GPT", "GPU", - "GRAB", "GREAT", "GREEN", "GST", "GTA", "GTFO", "GTG", "GUH", "GUY", "GUYS", - "HAD", "HAHA", "HALF", "HANDS", "HAS", "HATE", "HAVE", "HBAR", "HCOL", "HEAR", - "HEDGE", "HEGE", "HELD", "HELP", "HEY", "HFCS", "HFT", "HGTV", "HIGH", "HIGHS", - "HINT", "HIS", "HITID", "HKD", "HODL", "HODOR", "HOF", "HOLD", "HOLY", "HOME", - "HOUR", "HOW", "HS", "HSA", "HT", "HTF", "HTML", "HUF", "HUGE", "HYPE", - "IANAL", "IB", "IBS", "ICT", "ID", "IDF", "IDK", "IF", "II", "IKKE", - "IKZ", "IM", "IMHO", "IMI", "IMO", "IN", "INR", "INTO", "IP", "IPO", - "IRA", "IRAS", "IRC", "IRISH", "IRS", "IS", "ISA", "ISIN", "ISM", "ISN", - "IST", "IT", "ITC", "ITM", "ITS", "ITWN", "IUIT", "IV", "IVV", "IWM", - "IXL", "JAVA", "JD", "JFC", "JK", "JLR", "JMO", "JOIN", "JOKE", "JP", - "JPOW", "JPY", "JS", "JST", "JUN", "JUST", "KARMA", "KEEP", "KILL", "KING", - "KNEW", "KNOW", "KO", "KOHLS", "KPMG", "KRW", "LANGT", "LARGE", "LAST", "LATE", - "LATER", "LBO", "LCS", "LDL", "LEADS", "LEAP", "LEAPS", "LEARN", "LEI", "LET", - "LETS", "LFG", "LFP", "LIFE", "LIG", "LIGMA", "LIKE", "LIMIT", "LIST", "LLC", - "LLM", "LMAO", "LMM", "LMN", "LOKO", "LOL", "LOLOL", "LONG", "LOOK", "LOSE", - "LOSS", "LOST", "LOVE", "LOW", "LOWER", "LOWS", "LP", "LTCG", "LUPD", "LYING", - "M&A", "MA", "MACD", "MAKE", "MAKES", "MANY", "MAX", "MBA", "MC", "MCAP", - "MCP", "ME", "MEME", "MERGE", "MERK", "MES", "MEXC", "MF", "MFER", "MID", - "MIGHT", "MIN", "MIND", "ML", "MLB", "MLS", "MM", "MNQ", "MOASS", "MOM", - "MONEY", "MONTH", "MONY", "MOON", "MORE", "MOU", "MSK", "MTVGA", "MUCH", "MUSIC", - "MUST", "MXN", "MY", "MYMD", "NASA", "NASDA", "NATO", "NAV", "NBA", "NCAN", - "NCR", "NEAR", "NEAT", "NEED", "NEVER", "NEW", "NEWS", "NEXT", "NFA", "NFC", - "NFL", "NFT", "NGMI", "NIGHT", "NIQ", "NK", "NO", "NOK", "NONE", "NOPE", - "NORTH", "NOT", "NOVA", "NOW", "NQ", "NSA", "NTVS", "NULL", "NUT", "NUTS", - "NUTZ", "NVM", "NW", "NY", "NYSE", "NZ", "NZD", "OBBB", "OBI", "OBS", - "OBV", "OCF", "OCO", "ODAT", "OEM", "OF", "OFA", "OFF", "OG", "OH", - "OK", "OKAY", "OLD", "OMFG", "OMG", "ON", "ONE", "ONLY", "OP", "OPEC", - "OPENQ", "OPEX", "OPRN", "OR", "ORB", "OS", "OSCE", "OT", "OTC", "OTM", - "OUCH", "OUGHT", "OUT", "OVER", "OWN", "PA", "PANIC", "PC", "PDT", "PE", - "PEAK", "PEG", "PETA", "PEW", "PFC", "PGHL", "PIMCO", "PITA", "PLAN", "PLAYS", - "PLN", "PM", "PMI", "PNL", "POC", "POMO", "POP", "POS", "POSCO", "POTUS", - "POV", "POW", "PPI", "PR", "PRICE", "PROFIT", "PROXY", "PS", "PSA", "PST", - "PT", "PTD", "PUSSY", "PUT", "PWC", "Q1", "Q2", "Q3", "Q4", "QE", - "QED", "QIMC", "QQQ", "QR", "RAM", "RATM", "RBA", "RBNZ", "RE", "REACH", - "READY", "REAL", "RED", "REIT", "REITS", "REKT", "RFK", "RH", "RICO", "RIDE", - "RIGHT", "RIP", "RISK", "RISKY", "ROCE", "ROCK", "ROE", "ROFL", "ROI", "ROIC", - "ROTH", "RRSP", "RSD", "RSI", "RT", "RTD", "RUB", "RUG", "RULE", "RUST", - "RVOL", "SAGA", "SALES", "SAME", "SAVE", "SAYS", "SBF", "SBLOC", "SC", "SCALP", - "SCAM", "SCHB", "SCIF", "SEC", "SEE", "SEK", "SELL", "SELLL", "SEP", "SESG", - "SET", "SGD", "SHALL", "SHARE", "SHELL", "SHIT", "SHORT", "SHOW", "SHTF", "SI", - "SIGN", "SL", "SLIM", "SLOW", "SMA", "SMALL", "SO", "SOLIS", "SOME", "SOON", - "SOUTH", "SP", "SPAC", "SPDR", "SPEND", "SPLG", "SPX", "SPY", "SS", "START", - "STAY", "STEEL", "STFU", "STILL", "STOCK", "STOOQ", "STOP", "STOR", "STQQQ", "STUCK", - "STUDY", "SUS", "SUV", "SWIFT", "SWING", "TA", "TAG", "TAKE", "TAM", "TBTH", - "TEAMS", "TED", "TERM", "TEXT", "TF", "TFNA", "TFSA", "THANK", "THAT", "THATS", - "THE", "THEIR", "THEM", "THEN", "THERE", "THESE", "THEY", "THING", "THINK", "THIS", - "TIA", "TIKR", "TIME", "TINA", "TITS", "TJR", "TL", "TL;DR", "TLDR", "TO", - "TODAY", "TOLD", "TOO", "TOS", "TOT", "TOTAL", "TP", "TRADE", "TREND", "TRUE", - "TRUMP", "TRUST", "TRY", "TSA", "TSP", "TSX", "TSXV", "TTM", "TTYL", "TWO", - "UAW", "UCITS", "UGH", "UI", "UK", "UNDER", "UNTIL", "UP", "US", "USA", - "USD", "USSA", "USSR", "UTC", "VALID", "VALUE", "VAMOS", "VERY", "VFMXX", "VFV", - "VI", "VIX", "VLI", "VOO", "VP", "VR", "VRVP", "VSUS", "VTI", "VUAG", - "VW", "VWAP", "VWCE", "VXN", "VXUX", "WAGMI", "WAIT", "WALL", "WANT", "WATCH", - "WAY", "WE", "WEB3", "WEEK", "WENT", "WEST", "WHALE", "WHAT", "WHEN", "WHERE", - "WHICH", "WHO", "WHOS", "WHY", "WIDE", "WILL", "WIRE", "WIRED", "WITH", "WL", - "WON", "WOOPS", "WORDS", "WORTH", "WOULD", "WP", "WRONG", "WSB", "WSJ", "WTF", - "WV", "WWII", "WWIII", "X", "XCUSE", "XD", "XEQT", "XMR", "XO", "XRP", - "XX", "YEAH", "YEET", "YES", "YET", "YIELD", "YM", "YMMV", "YOLO", "YOU", - "YOUR", "YOY", "YT", "YTD", "YUGE", "ZAR", "ZEN", "ZERO", "ZEVDXY" + "DAX", "DAY", "DAYS", "DCA", "DCF", "DD", "DEBT", "DEEZ", "DEMO", "DET", + "DEX", "DIA", "DID", "DIDNT", "DIP", "DITM", "DIV", "DIY", "DJIA", "DKK", + "DL", "DM", "DMV", "DNI", "DO", "DOE", "DOES", "DOGE", "DOJ", "DOM", + "DONT", "DOOR", "DOWN", "DPI", "DR", "DUDE", "DUMP", "DUTY", "DXYXBT", "DYI", + "DYNK", "DYODD", "DYOR", "EACH", "EARLY", "EARN", "EAST", "EASY", "ECB", "EDGAR", + "EDIT", "EDT", "EJ", "EMA", "EMJ", "END", "ENRON", "ENSI", "ENV", "EO", + "EOD", "EOW", "EOY", "EPA", "EPK", "EPS", "ER", "ESG", "ESPP", "EST", + "ETA", "ETF", "ETFS", "ETH", "EU", "EUR", "EV", "EVEN", "EVERY", "EVTOL", + "EXTRA", "EYES", "EZ", "FAANG", "FAFO", "FAQ", "FAR", "FAST", "FBI", "FCFF", + "FD", "FDA", "FEE", "FFH", "FFS", "FGMA", "FIG", "FIGMA", "FIHTX", "FING", + "FINRA", "FINT", "FINTX", "FINTY", "FIRST", "FKIN", "FLT", "FLY", "FML", "FOLO", + "FOMC", "FOMO", "FOR", "FOREX", "FRAUD", "FRG", "FROM", "FRP", "FSBO", "FSD", + "FSELK", "FSPSX", "FTD", "FTSE", "FUCK", "FUCKS", "FUD", "FULL", "FUND", "FUNNY", + "FVG", "FWIW", "FX", "FXAIX", "FXIAX", "FXROX", "FY", "FYI", "FZROX", "GAAP", + "GAIN", "GAVE", "GBP", "GC", "GDP", "GET", "GG", "GJ", "GL", "GLHF", + "GMAT", "GMI", "GMT", "GO", "GOAL", "GOAT", "GOD", "GOING", "GOLD", "GONE", + "GONNA", "GPT", "GPU", "GRAB", "GREAT", "GREEN", "GST", "GTA", "GTFO", "GTG", + "GUH", "GUY", "GUYS", "HAD", "HAHA", "HALF", "HANDS", "HAS", "HATE", "HAVE", + "HBAR", "HCOL", "HEAR", "HEDGE", "HEGE", "HELD", "HELP", "HEY", "HFCS", "HFT", + "HGTV", "HIGH", "HIGHS", "HINT", "HIS", "HITID", "HKD", "HODL", "HODOR", "HOF", + "HOLD", "HOLY", "HOME", "HOUR", "HOW", "HS", "HSA", "HT", "HTF", "HTML", + "HUF", "HUGE", "HYPE", "IANAL", "IB", "IBS", "ICT", "ID", "IDF", "IDK", + "IF", "II", "IKKE", "IKZ", "IM", "IMHO", "IMI", "IMO", "IN", "INR", + "INTO", "IP", "IPO", "IRA", "IRAS", "IRC", "IRISH", "IRS", "IS", "ISA", + "ISIN", "ISM", "ISN", "IST", "IT", "ITC", "ITM", "ITS", "ITWN", "IUIT", + "IV", "IVV", "IWM", "IXL", "JAVA", "JD", "JFC", "JK", "JLR", "JMO", + "JOIN", "JOKE", "JP", "JPOW", "JPY", "JS", "JST", "JUN", "JUST", "KARMA", + "KEEP", "KILL", "KING", "KNEW", "KNOW", "KO", "KOHLS", "KPMG", "KRW", "LANGT", + "LARGE", "LAST", "LATE", "LATER", "LBO", "LCS", "LDL", "LEADS", "LEAP", "LEAPS", + "LEARN", "LEI", "LET", "LETS", "LFG", "LFP", "LIFE", "LIG", "LIGMA", "LIKE", + "LIMIT", "LIST", "LLC", "LLM", "LMAO", "LMM", "LMN", "LOKO", "LOL", "LOLOL", + "LONG", "LOOK", "LOSE", "LOSS", "LOST", "LOVE", "LOW", "LOWER", "LOWS", "LP", + "LTCG", "LUPD", "LYING", "M&A", "MA", "MACD", "MAKE", "MAKES", "MANGE", "MANY", + "MAX", "MBA", "MC", "MCAP", "MCP", "ME", "MEME", "MERGE", "MERK", "MES", + "MEXC", "MF", "MFER", "MID", "MIGHT", "MIN", "MIND", "ML", "MLB", "MLS", + "MM", "MNQ", "MOASS", "MOM", "MONEY", "MONTH", "MONY", "MOON", "MORE", "MOU", + "MSK", "MTVGA", "MUCH", "MUSIC", "MUST", "MVA", "MXN", "MY", "MYMD", "NASA", + "NASDA", "NATO", "NAV", "NBA", "NCAN", "NCR", "NEAR", "NEAT", "NEED", "NEVER", + "NEW", "NEWS", "NEXT", "NFA", "NFC", "NFL", "NFT", "NGMI", "NIGHT", "NIQ", + "NK", "NO", "NOK", "NONE", "NOPE", "NORTH", "NOT", "NOVA", "NOW", "NQ", + "NSA", "NTVS", "NULL", "NUT", "NUTS", "NUTZ", "NVM", "NW", "NY", "NYSE", + "NZ", "NZD", "OBBB", "OBI", "OBS", "OBV", "OCF", "OCO", "ODAT", "OEM", + "OF", "OFA", "OFF", "OG", "OH", "OK", "OKAY", "OL", "OLD", "OMFG", + "OMG", "ON", "ONE", "ONLY", "OP", "OPEC", "OPENQ", "OPEX", "OPRN", "OR", + "ORB", "OS", "OSCE", "OT", "OTC", "OTM", "OUCH", "OUGHT", "OUT", "OVER", + "OWN", "PA", "PANIC", "PC", "PDT", "PE", "PEAK", "PEG", "PETA", "PEW", + "PFC", "PGHL", "PIMCO", "PITA", "PLAN", "PLAYS", "PLN", "PM", "PMI", "PNL", + "POC", "POMO", "POP", "POS", "POSCO", "POTUS", "POV", "POW", "PPI", "PR", + "PRICE", "PROFIT", "PROXY", "PS", "PSA", "PST", "PT", "PTD", "PUSSY", "PUT", + "PWC", "Q1", "Q2", "Q3", "Q4", "QE", "QED", "QIMC", "QQQ", "QR", + "RAM", "RATM", "RBA", "RBNZ", "RE", "REACH", "READY", "REAL", "RED", "REIT", + "REITS", "REKT", "RFK", "RH", "RICO", "RIDE", "RIGHT", "RIP", "RISK", "RISKY", + "ROCE", "ROCK", "ROE", "ROFL", "ROI", "ROIC", "ROTH", "RRSP", "RSD", "RSI", + "RT", "RTD", "RUB", "RUG", "RULE", "RUST", "RVOL", "SAGA", "SALES", "SAME", + "SAVE", "SAYS", "SBF", "SBLOC", "SC", "SCALP", "SCAM", "SCHB", "SCIF", "SEC", + "SEE", "SEK", "SELL", "SELLL", "SEP", "SESG", "SET", "SGD", "SHALL", "SHARE", + "SHELL", "SHIT", "SHORT", "SHOW", "SHTF", "SI", "SIGN", "SL", "SLIM", "SLOW", + "SMA", "SMALL", "SO", "SOLIS", "SOME", "SOON", "SOUTH", "SP", "SPAC", "SPDR", + "SPEND", "SPLG", "SPX", "SPY", "SS", "START", "STAY", "STEEL", "STFU", "STILL", + "STOCK", "STOOQ", "STOP", "STOR", "STQQQ", "STUCK", "STUDY", "SUS", "SUV", "SWIFT", + "SWING", "TA", "TAG", "TAKE", "TAM", "TBTH", "TEAMS", "TED", "TERM", "TEXT", + "TF", "TFNA", "TFSA", "THANK", "THAT", "THATS", "THE", "THEIR", "THEM", "THEN", + "THERE", "THESE", "THEY", "THING", "THINK", "THIS", "TIA", "TIKR", "TIME", "TINA", + "TITS", "TJR", "TL", "TL;DR", "TLDR", "TO", "TODAY", "TOLD", "TOO", "TOS", + "TOT", "TOTAL", "TP", "TRADE", "TREND", "TRUE", "TRUMP", "TRUST", "TRY", "TSA", + "TSP", "TSX", "TSXV", "TTM", "TTYL", "TWO", "UAW", "UCITS", "UGH", "UI", + "UK", "UNDER", "UNTIL", "UP", "US", "USA", "USD", "USSA", "USSR", "UTC", + "VALID", "VALUE", "VAMOS", "VERY", "VFMXX", "VFV", "VI", "VIX", "VLI", "VOO", + "VP", "VR", "VRVP", "VSUS", "VTI", "VUAG", "VW", "VWAP", "VWCE", "VXN", + "VXUX", "WAGMI", "WAIT", "WALL", "WANT", "WATCH", "WAY", "WE", "WEB3", "WEEK", + "WENT", "WEST", "WHALE", "WHAT", "WHEN", "WHERE", "WHICH", "WHO", "WHOS", "WHY", + "WIDE", "WILL", "WIRE", "WIRED", "WITH", "WL", "WON", "WOOPS", "WORDS", "WORTH", + "WOULD", "WP", "WRONG", "WSB", "WSJ", "WTF", "WV", "WWII", "WWIII", "X", + "XCUSE", "XD", "XEQT", "XMR", "XO", "XRP", "XX", "YEAH", "YEET", "YES", + "YET", "YIELD", "YM", "YMMV", "YOLO", "YOU", "YOUR", "YOY", "YT", "YTD", + "YUGE", "ZAR", "ZEN", "ZERO", "ZEV" } def extract_tickers(text): diff --git a/templates/daily_image_view.html b/templates/daily_image_view.html index 8017307..859c641 100644 --- a/templates/daily_image_view.html +++ b/templates/daily_image_view.html @@ -3,85 +3,59 @@ - r/{{ subreddit_name }} Mentions + r/{{ subreddit_name }} Ticker Mentions
-

Reddit Mentions

+

Ticker Mentions Daily

r/{{ subreddit_name }}

{{ current_date }}
- - - - + + + @@ -90,9 +64,15 @@ - - - + + +
Rank TickerPostsCommentsMentionsMkt CapClose Price Sentiment
{{ loop.index }} {{ ticker.symbol }}{{ ticker.post_mentions }}{{ ticker.comment_mentions }}{{ ticker.total_mentions }}{{ ticker.market_cap | format_mc }} + {% if ticker.closing_price %} + ${{ "%.2f"|format(ticker.closing_price) }} + {% else %} + N/A + {% endif %} + {% if ticker.bullish_mentions > ticker.bearish_mentions %} Bullish @@ -106,7 +86,6 @@ {% endfor %}
-