Selected work / Case study 04
Market Move Bot
A Python application that monitors stocks and ETFs, sends price-movement alerts to Discord, and keeps experimental AI research in a separate local testing environment.

01 / Project overview
Project overview
I built Market Move Bot to combine price monitoring, sourced market context, technical analysis, and local AI research without relying on paid AI APIs. Transparent calculations and resource-conscious processing are central to the design.
Live price alerts and experimental research are deliberately separate. The bot is a research and alerting tool, not a validated trading system.
02 / The problem
The problem
Price movements, market headlines, and research calculations live in separate places. I wanted one personal workflow for monitoring them, without allowing unvalidated AI interpretations or strategy experiments to become live alerts.
03 / The solution
The solution
Live · Monitoring and Discord alerts
- Configurable price-movement alerts, charts, volume information, and recent company and market news.
- Cooldowns and duplicate suppression keep repeated notifications under control.
Experimental · Local research only
- Local AI interpretation, swing-trading and longer-term outlooks, and strategy testing remain in shadow mode.
- Results are saved locally for review, not automatically published in live alerts. No trades are placed.
04 / Architecture and data sources
Architecture and data sources
A standard-library-focused Python application processes RSS/XML and JSON, caches retrieved data, paces API requests, and generates PNG charts locally. SQLite persists alert cooldown state.
Live alert path
- Twelve Data quotes and historical daily price/volume data feed price monitoring and chart generation.
- Percentage-move rules, cooldown state, and duplicate suppression determine alert delivery.
- Discord Webhooks deliver organized, color-coded cards and chart attachments, alongside volume information and recent news.
Local research path · Shadow mode
- Historical data, publisher summaries, and available annual cash-flow figures support research calculations.
- The local Ollama API runs Qwen3 4B with bounded context and output; background AI processing uses GPU-load checks and model unloading.
- Experimental outlooks and strategy evaluations are saved locally for review. They are not automatically promoted or sent to live alerts.
Source responsibilities
- Twelve Data API — stock quotes and historical daily price/volume data.
- Discord Webhooks — alert delivery and chart attachments.
- Google News RSS — recent company and broad-market headlines.
- Yahoo Finance and CNBC RSS — publisher-provided news summaries.
- SEC EDGAR Company Facts API — annual financial-statement cash-flow data.
- Local Ollama API — Qwen3 4B inference on the computer, without paid cloud inference.
05 / Live features and resource controls
Live features and resource controls
Monitoring and delivery
- Monitors SPY, QQQ, NVDA, AMD, NBIS, BE, WD, SPCX, TSLA, MU, IREN, and INTC.
- Configurable percentage-move alerts with cooldowns and duplicate suppression.
- Price charts, volume information, and recent company and market news in color-coded Discord cards.
Designed for a personal computer
- Starts quietly at Windows sign-in and reduces polling outside market hours.
- Cached retrieval and API request pacing limit unnecessary work.
- Automatically skips new AI and research work while FC27 is running; GPU-load checks and model unloading help manage resources.
06 / Experimental research
Experimental research
These research capabilities support local review. Experimental outlooks remain in shadow mode, separate from live alert delivery.
Technical analysis
- Calculates moving averages, Wilder RSI, MACD, price momentum, opening gaps, and volatility measurements.
- Calculates volume-based indicators including MFI, Chaikin Money Flow, and OBV changes.
- Uses rule-based detection for breakouts, breakdowns, and bullish or bearish engulfing candles.
Fundamental coverage
- Includes annual operating cash flow and calculated free cash flow when comparable capital-expenditure data is available.
- Explicitly marks missing or incompatible figures unavailable.
- Full valuation, balance-sheet analysis, and earnings forecasting are not implemented.
Local AI interpretation
- Interprets publisher summaries, separates reported facts from possible implications, and cites supplied sources.
- Identifies counterarguments and missing evidence.
- Experimental swing-trading and longer-term outlooks are saved locally for review rather than published automatically.
07 / Testing and safeguards
Testing and safeguards
Software behavior · 55 automated tests
- Covers calculations, data validation, citations, gaming controls, and historical-testing safeguards.
- Test coverage verifies software behavior, not investment performance.
Strategy research · 16 predefined variants
- A daily research engine uses chronological training and holdout periods, assumed trading costs, and forward paper observations.
- The engine does not place trades, rewrite itself, or automatically promote strategies.
- Historical testing and paper observations are experimental evidence for review, not proof of returns or future performance.
08 / Lessons learned
Lessons learned
The engineering takeaways center on making the system inspectable and keeping its responsibilities bounded.
Make uncertainty visible
- Keep transparent calculations and supplied-source citations alongside interpretations.
- Treat unavailable or incompatible financial data as missing instead of manufacturing a value.
- Separate software correctness from claims about investment performance.
Keep experiments contained
- Separate dependable alert delivery from research that still needs review.
- Bound background work to fit the resources of a shared personal computer.
- Use chronological evaluation, trading-cost assumptions, and paper observations without automatic strategy promotion.
09 / Limitations
Limitations
Market Move Bot is a research and alerting tool, not a validated trading system. The 55 automated tests verify software behavior, not investment performance.
AI currently analyzes publisher summaries rather than full articles and can still make interpretive errors. Fundamental coverage is limited to the available annual cash-flow data described above.
Availability depends on the computer remaining awake and connected. Data-provider limits apply. Experimental research remains local and requires review.