mirror of
https://github.com/Xe138/AI-Trader.git
synced 2026-04-01 17:17:24 -04:00
Added documentation for: - Duplicate simulation prevention in JobManager.create_job() - Cross-job portfolio continuity in position tracking - Updated CLAUDE.md with Duplicate Simulation Prevention section - Updated docs/developer/architecture.md with Position Tracking Across Jobs section
2.1 KiB
2.1 KiB
Architecture
System design and component overview.
Component Diagram
See README.md for architecture diagram.
Key Components
FastAPI Server (api/main.py)
- REST API endpoints
- Request validation
- Response formatting
Job Manager (api/job_manager.py)
- Job lifecycle management
- SQLite operations
- Concurrency control
Simulation Worker (api/simulation_worker.py)
- Background job execution
- Date-sequential, model-parallel orchestration
- Error handling
Model-Day Executor (api/model_day_executor.py)
- Single model-day execution
- Runtime config isolation
- Agent invocation
Base Agent (agent/base_agent/base_agent.py)
- Trading session execution
- MCP tool integration
- Position management
MCP Services (agent_tools/)
- Math, Search, Trade, Price tools
- Internal HTTP servers
- Localhost-only access
Data Flow
- API receives trigger request
- Job Manager validates and creates job
- Worker starts background execution
- For each date (sequential):
- For each model (parallel):
- Executor creates isolated runtime config
- Agent executes trading session
- Results stored in database
- For each model (parallel):
- Job status updated
- Results available via API
Anti-Look-Ahead Controls
TODAY_DATEin runtime config limits data access- Price queries filter by date
- Search results filtered by publication date
See CLAUDE.md for implementation details.
Position Tracking Across Jobs
Design: Portfolio state is tracked per-model across all jobs, not per-job.
Query Logic:
# Get starting position for current trading day
SELECT id, ending_cash FROM trading_days
WHERE model = ? AND date < ? # No job_id filter
ORDER BY date DESC
LIMIT 1
Benefits:
- Portfolio continuity when creating new jobs with overlapping dates
- Prevents accidental portfolio resets
- Enables flexible job scheduling (resume, rerun, backfill)
Example:
- Job 1: Runs 2025-10-13 to 2025-10-15 for model-a
- Job 2: Runs 2025-10-16 to 2025-10-20 for model-a
- Job 2 starts with Job 1's ending position from 2025-10-15