Files
ForexBot2/CLAUDE.md
T
harwinder bb3c475f22 Add web dashboard (Redis + FastAPI + WebSocket), scope XAU penalties
Signal daemon (signal_web.py): candle-boundary scanner mirroring
telegram_bot.py, publishes serialized SignalReport JSON to Redis.
Web API (web/app.py): thin FastAPI reader behind Apache, serves
/api/signals REST + /ws WebSocket from Redis pub/sub.
Frontend (web/static/index.html): 3-pair grid, color-coded signals,
indicator breakdown per timeframe, trade setup display.

Also: XAU-specific penalty scoping in signal_aggregator (softer
confidence penalties for gold, original strict values for forex),
pair-aware session filter routing XAU to its own blocked hours.
2026-05-14 23:15:37 -04:00

5.6 KiB
Raw Blame History

ForexBot2

Automated forex signal intelligence platform. Analyzes 4 currency pairs (EUR/USD, GBP/USD, USD/JPY, XAU/USD) across multiple timeframes using technical indicators, news sentiment, and economic calendar data. Delivers signals via Telegram with full trade setups (entry, SL, TP).

Architecture

Twelve Data REST API + WebSocket
        |
  data_provider.py          (fetch, cache, validate OHLCV; rate-limited 55 calls/min)
        |
    engine.py                (6 indicators per timeframe → composite score)
        |
  signal_aggregator.py       (MTF agreement + news + final signal + trade setup)
        |
  +-----+--------+
  |              |
telegram_bot.py  main.py
(Telegram alerts, (CLI single-pair
 auto-scanner,    analysis)
 WS monitor,
 live dashboard)

Core Files

File Purpose
config.py All configuration dataclasses, pair definitions, strategy configs
data_provider.py Twelve Data SDK wrapper with in-memory cache and rate limiting
engine.py TechnicalEngine — computes EMA, RSI, BB, ADX, ATR, MACD, divergences, candlestick patterns, swing S/R
signal_aggregator.py SignalAggregator — MTF analysis, news integration, final signal scoring, trade setup generation
news_engine.py Economic calendar (Forex Factory JSON) + RSS sentiment (keyword-based)
telegram_bot.py Async Telegram bot with auto-scanner (M5/M15/H1/H4), WebSocket price monitor, live dashboard
main.py CLI entry point for single USD/JPY analysis
test_all.py Comprehensive QA suite (~90 tests, no live API needed)

Key Concepts

Signal Pipeline: OHLCV → indicators → regime classification → regime-weighted composite score → MTF agreement check → news/event adjustment → confidence penalties → final signal (STRONG_BUY/BUY/NEUTRAL/SELL/STRONG_SELL) → quality grade (A+/A/B/C/D/F) → trade setup if grade C+.

Regime-Adaptive Weights: Market classified as trending_up, trending_down, or ranging via ADX + EMA. Trending boosts EMA weight (2.0x), ranging boosts RSI/BB (2.0x). This is the core edge.

Pair-Specific Strategies: XAU/USD (oversold-bounce: RSI<38 + triple-TF EMA200 confirmation), EUR/USD and GBP/USD (pullback-buy: RSI 30-55 + BB<0.75 + dual-TF EMA200). Each has hour-blocked windows from backtest optimization.

SELL Suppression: Forex SELL signals are suppressed for all pairs except XAU/USD. Backtesting showed 0% win rate for forex shorts.

Trade Setup: SL = nearest swing low/high ± 1×ATR buffer (min 1.5×ATR). TP = nearest swing level if RR≥1.2, else calculated from ATR. Minimum RR 1.2:1.

How to Run

# CLI (single USD/JPY analysis)
python main.py                    # H1 default
python main.py --timeframe M15 --detail --json

# Telegram bot (auto-scanner)
TELEGRAM_TOKEN=<token> TELEGRAM_CHAT_ID=<id> python telegram_bot.py

# Tests
python test_all.py

Environment Variables

Variable Purpose Default
TWELVE_DATA_API_KEY Market data API key Hardcoded fallback in config
TELEGRAM_TOKEN Telegram bot token Hardcoded fallback
TELEGRAM_CHAT_ID Auto-scan chat ID (enables boot auto-scan) Hardcoded fallback
FB2_EMA_LO / FB2_EMA_HI EMA200 distance thresholds (%) 0.5 / 1.5

Dependencies

numpy, pandas, requests, twelvedata, python-telegram-bot, websockets — see requirements.txt.

Data Provider

  • Source: Twelve Data REST API via twelvedata SDK
  • Rate limit: 55 credits/min (Grow plan), enforced by sliding-window throttle
  • Cache: In-memory dict, TTL = candle duration of the timeframe
  • Validation: Drops NaN rows, forward-fills gaps (limit 3), fixes OHLC inconsistencies, removes outliers (>10σ), strips future timestamps, deduplicates
  • WebSocket: EUR/USD and XAU/USD only (Grow plan WS limit); GBP/USD and USD/JPY via REST-only scans

Telegram Bot

  • Auto-scan: M5 (data-only, no alerts), M15, H1, H4 at candle boundaries + 10s buffer
  • WebSocket: Streams live ticks for EUR/USD + XAU/USD; triggers immediate M15 scan on key level breach (swing S/R, BB, EMA200) with 5-min cooldown
  • Live dashboard: Edit-in-place message, 30s refresh, shows all pairs/timeframes/prices/setups
  • Commands: /start, /autoscan, /status, /cache, /clearcache, /help
  • Correlation warning: Flags same-direction signals on EUR/USD + GBP/USD (USD-weakness group)

Backtesting

The backtest/ directory (gitignored) contains pair-specific backtesting scripts, GPU-accelerated optimizers, and historical parquet data. Strategies were optimized on 1-year M15 data. Results drove the current strategy configs in config.py.

Planned: MT5 Auto-Execution

Documented in mt5.md. REST bridge architecture: Linux bot → HTTP → Windows FastAPI server wrapping MetaTrader5 COM. Not yet implemented. Key: MT5Config dataclass, idempotent orders, position-size from bridge-side tick values.

Code Conventions

  • Python 3.12, type hints on public methods
  • Dataclasses for all config and output structures
  • SignalStrength enum (-2 to +2) is the universal signal currency
  • Indicators stored as Dict[str, IndicatorSignal] in TechnicalAnalysis
  • Key levels stored as Dict[str, float] — prefixed swing_high_, swing_low_, ema_, bb_, atr
  • Private indicator data attached as result._rsi_series, result._macd_histogram (underscore prefix, skipped by composite scorer)
  • Blocking signal computation runs in ThreadPoolExecutor(max_workers=4) to avoid blocking the async Telegram event loop
  • Shared ForexDataProvider instance across all scans for cache reuse