Implement custom 5-minute candlestick charts via Finnhub + QuickChart

Replace FinViz charts with custom-generated candlestick charts:
- Fetch 5-minute OHLC data from Finnhub API
- Generate candlestick chart images via QuickChart API
- Display last 50 candles with time-based x-axis
- Fallback to FinViz daily chart if intraday data unavailable

New FinnhubAPI methods:
- get_intraday_candles(): Fetch 5-min candle data
- generate_chart_url(): Create QuickChart URL from candle data

Chart specifications: 800x400px, Chart.js v3, candlestick type

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Michael Simard
2025-12-03 19:31:18 -06:00
parent 30ebd85712
commit 6f6b6360ca
2 changed files with 109 additions and 5 deletions

17
bot.py
View File

@@ -169,9 +169,20 @@ class StockBot(commands.Bot):
embed.add_field(name="Change", value=change_str, inline=True)
embed.add_field(name="Previous Close", value=f"${stock_data['previous_close']}", inline=True)
# Add FinViz daily chart
chart_url = f"https://finviz.com/chart.ashx?t={ticker}&ty=c&ta=1&p=d&s=l"
embed.set_image(url=chart_url)
# Add 5-minute intraday chart from Finnhub + QuickChart
if hasattr(self.stock_api, 'get_intraday_candles'):
candles = self.stock_api.get_intraday_candles(ticker, resolution=5, days_back=1)
if candles:
chart_url = self.stock_api.generate_chart_url(ticker, candles)
embed.set_image(url=chart_url)
else:
# Fallback to FinViz daily chart if intraday data unavailable
chart_url = f"https://finviz.com/chart.ashx?t={ticker}&ty=c&ta=1&p=d&s=l"
embed.set_image(url=chart_url)
else:
# Fallback for non-Finnhub APIs
chart_url = f"https://finviz.com/chart.ashx?t={ticker}&ty=c&ta=1&p=d&s=l"
embed.set_image(url=chart_url)
market_status = "🟢 Market Open" if stock_data['market_open'] else "🔴 Market Closed"
embed.set_footer(text=f"{market_status}")