No description
Find a file
Viktor Barzin 5955a5a86d
Some checks are pending
ci/woodpecker/push/woodpecker Pipeline is running
fix: hardcode pip extras in Dockerfile to avoid buildx arg parsing issues
The woodpeckerci/plugin-docker-buildx was not passing the EXTRAS build
arg correctly (commas in the value were likely being parsed as list
separators), causing the image to only install dev dependencies instead
of all service extras (api, news, sentiment, trading, backtester).

Hardcode the pip install extras directly in the Dockerfile rather than
relying on the build arg.
2026-02-25 22:27:15 +00:00
.claude fix: resolve all remaining TODOs, add dev mode auth bypass 2026-02-25 22:02:25 +00:00
.planning/codebase docs: map existing codebase 2026-02-23 20:04:05 +00:00
alembic fix: make hypertable creation conditional on TimescaleDB extension 2026-02-25 21:03:31 +00:00
backtester fix: resolve 13 important issues from code review 2026-02-22 17:58:01 +00:00
dashboard fix: resolve all remaining TODOs, add dev mode auth bypass 2026-02-25 22:02:25 +00:00
docker fix: hardcode pip extras in Dockerfile to avoid buildx arg parsing issues 2026-02-25 22:27:15 +00:00
docs/plans fix: resolve all remaining TODOs, add dev mode auth bypass 2026-02-25 22:02:25 +00:00
scripts feat: wire 6 new strategies and fundamentals into signal generator 2026-02-23 21:55:59 +00:00
services fix: resolve all remaining TODOs, add dev mode auth bypass 2026-02-25 22:02:25 +00:00
shared fix: resolve all remaining TODOs, add dev mode auth bypass 2026-02-25 22:02:25 +00:00
tests fix: resolve all remaining TODOs, add dev mode auth bypass 2026-02-25 22:02:25 +00:00
.env.example feat: productionize local service — fix signal pipeline, lower thresholds, add company-name ticker extraction 2026-02-22 22:17:26 +00:00
.gitignore feat: docker compose infrastructure — postgres+timescaledb, redis, ollama 2026-02-22 15:11:50 +00:00
.woodpecker.yml fix: hardcode pip extras in Dockerfile to avoid buildx arg parsing issues 2026-02-25 22:27:15 +00:00
alembic.ini feat: database models and alembic migrations — all tables per design 2026-02-22 15:17:07 +00:00
docker-compose.yml feat: productionize local service — fix signal pipeline, lower thresholds, add company-name ticker extraction 2026-02-22 22:17:26 +00:00
pyproject.toml feat: make backtest work end-to-end with Alpaca bars, ticker selection, all 9 strategies 2026-02-23 22:25:41 +00:00
README.md fix: resolve all remaining TODOs, add dev mode auth bypass 2026-02-25 22:02:25 +00:00

Trading Bot

Automated stock trading bot combining news sentiment analysis with technical strategies. Built as event-driven Python microservices communicating via Redis Streams, with a React/TypeScript dashboard and Alpaca paper trading.

Architecture

RSS/Reddit ─→ news_fetcher ─→ [news:raw] ─→ sentiment_analyzer ─→ [news:scored] ┐
                                                                                  │
Alpaca OHLCV ─→ market_data ─→ [market:bars] ────────────────────────────────────┤
                                                                                  │
                                              signal_generator ←──────────────────┘
                                                    │
                                              [signals:generated]
                                                    │
                                              trade_executor ─→ [trades:executed] ─→ learning_engine
                                                    │                                       │
                                                Alpaca API                             Redis (weights)

Services: news-fetcher, sentiment-analyzer, signal-generator, trade-executor, learning-engine, market-data, api-gateway, dashboard

9 Trading Strategies: Momentum, Mean Reversion, News-Driven, Value, MACD Crossover, Bollinger Breakout, VWAP, Liquidity, MA Stack — combined via weighted ensemble with multi-armed bandit weight adjustment.

Tech Stack

  • Backend: Python 3.12, FastAPI, SQLAlchemy 2.0 (async), Pydantic v2, alpaca-py
  • Frontend: React 19, TypeScript, Vite, Tailwind CSS, TanStack Query, TradingView lightweight-charts
  • ML: transformers (FinBERT), Ollama (local LLM fallback)
  • Database: PostgreSQL 16 + TimescaleDB, Alembic migrations (16 tables)
  • Messaging: Redis Streams + pub/sub
  • Auth: WebAuthn/Passkeys + JWT sessions
  • Observability: OpenTelemetry + Prometheus metrics
  • CI/CD: Woodpecker → Docker → Kubernetes

Quick Start

# Full stack with Docker Compose
docker compose up -d

# Seed default strategies
docker compose exec api-gateway python -m scripts.seed_strategies

Development

# Create virtual environment
python3 -m venv .venv && source .venv/bin/activate

# Install all dependencies
pip install -e ".[api,news,sentiment,trading,backtester,dev]"

# Run unit tests (404 tests)
python -m pytest tests/ -v -m "not integration"

# Run integration tests (requires Redis + PostgreSQL)
python -m pytest tests/ -v -m integration

# Dashboard development
cd dashboard && npm install && npm run dev

Project Structure

trading-bot/
├── shared/              # Shared libraries (config, DB, Redis, models, schemas, broker, strategies, fundamentals)
├── services/            # 7 microservices (news_fetcher, sentiment_analyzer, signal_generator,
│                        #   trade_executor, learning_engine, market_data, api_gateway)
├── backtester/          # Historical replay engine with simulated broker
├── dashboard/           # React 19 / TypeScript / Vite frontend
├── docker/              # Dockerfiles and nginx configs
├── scripts/             # Seed scripts and smoke tests
├── tests/               # 404 unit + 9 integration tests
├── alembic/             # Database migrations
├── docker-compose.yml   # Full stack orchestration
├── .woodpecker.yml      # CI/CD pipeline
└── pyproject.toml       # Python monorepo with optional dependency groups