TradingAgents/untitled:plan-forexCustomiz...

466 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Comprehensive Plan: Customizing the Repository for Forex Trading
### TL;DR
Transform the equity-focused trading agents architecture into a multi-asset system supporting forex by:
1. Creating an abstract `Instrument` layer (equity vs currency pairs)
2. Establishing a unified configuration framework
3. Implementing forex-specific data integrations
4. Building forex-aware agents with proper leverage & commission handling
5. Adding 24/5 market monitoring and compliance features
---
## Architecture Overview
### Current State (Equity-Focused)
- Agents designed for stock trading (tickers, market hours, fundamental analysis)
- Data models assume single market open/close times
- Risk management tailored to equity leverage constraints
### Target State (Multi-Asset)
- Agents agnostic to instrument type (extensible to stocks, forex, crypto, commodities)
- Configuration-driven asset switching
- Specialized risk management rules per asset class
---
## Phase 0: Foundation & Configuration (Effort: 3-4 days) — **CRITICAL PATH**
### 0.1 Create Instrument Abstraction Layer
**Why First**: All downstream phases depend on this abstraction.
**Changes**:
- Create `tradingagents/models/instrument.py`:
- Base `Instrument` class with common fields (symbol, name, type, exchange)
- `EquityInstrument` subclass (ticker, sector, fundamentals)
- `CurrencyPairInstrument` subclass (base currency, quote currency, pip size, lot sizes)
- Update `tradingagents/agents/` to use `Instrument` instead of hardcoded ticker handling
**Concrete Example**:
```python
# tradingagents/models/instrument.py
class Instrument(ABC):
symbol: str
name: str
instrument_type: InstrumentType # Enum: EQUITY, FOREX
class CurrencyPair(Instrument):
base_currency: str # "EUR"
quote_currency: str # "USD"
pip_size: float # 0.0001 for most pairs, 0.01 for JPY pairs
standard_lot: float # 100,000
mini_lot: float # 10,000
micro_lot: float # 1,000
```
### 0.2 Unified Configuration Schema
**Create**: `tradingagents/config/forex_config.py`
**Config Structure**:
```yaml
trading_mode: "forex" # or "equity"
forex:
data_provider: "oanda" # OANDA, Forex.com, Alpha Vantage
api_keys:
oanda: ${OANDA_API_KEY}
account_id: ${OANDA_ACCOUNT_ID}
default_leverage: 50 # 1:50 leverage
max_leverage: 500
lot_type: "micro" # micro, mini, standard
base_currency: "USD"
trading_pairs:
- "EUR/USD"
- "GBP/USD"
- "USD/JPY"
market_hours:
forex:
open: "Sunday 17:00 EST" # 24/5 market
close: "Friday 17:00 EST"
```
### 0.3 Multi-Provider API Interface
**Create**: `tradingagents/dataflows/forex_provider_factory.py`
- Implement factory pattern for forex data providers
- Define common interface: `ForexDataProvider`
- Fallback strategy between OANDA and Forex.com APIs
---
## Phase 1: Data Integration (Effort: 5-6 days) — *Parallel with Phase 2*
### 1.1 Forex Data Provider Implementation
**Create New Files**:
- `tradingagents/dataflows/oanda_api.py`
- `tradingagents/dataflows/forexcom_api.py`
- `tradingagents/dataflows/forex_common.py` (shared utilities)
**Implement**:
- Real-time tick data fetching for currency pairs
- Historical candle data (1m, 5m, 15m, 1h, 4h, 1d)
- Bid/ask spread tracking
- Account balance & margin info retrieval
**Concrete Example** (`oanda_api.py`):
```python
class OANDADataProvider(ForexDataProvider):
def get_candles(self, pair: str, timeframe: str, count: int) -> DataFrame:
"""Fetch historical OHLCV data"""
def get_live_quotes(self, pairs: List[str]) -> Dict[str, Quote]:
"""Get real-time bid/ask for multiple pairs"""
def get_account_info(self) -> AccountInfo:
"""Balance, margin used, available margin"""
```
### 1.2 Forex-Specific Metrics & Normalization
**Update**: `tradingagents/utils/` → Add `forex_metrics.py`
- Pip value calculation (varies by pair and lot size)
- Spread normalization (in pips)
- Slippage tracking
- Margin requirement calculation per position
### 1.3 Data Validation & Error Handling
**Add Tests**: `tests/test_forex_data_sources.py`
- Validate bid/ask < spread tolerance
- Verify pip calculations per pair
- Test data continuity across sessions (no gaps at market open)
- Handle connection failures & API rate limits
**Update**: `dataflows/` error handling for 24/5 operation
---
## Phase 2: Abstraction Refactoring (Effort: 6-8 days) — *Parallel with Phase 1*
### 2.1 Refactor Core Data Models
**Update**:
- `tradingagents/agents/utils/agent_states.py` Store `Instrument` instead of `ticker`
- `tradingagents/graph/trading_graph.py` Accept generic instruments
- Agent nodes to work with any `Instrument` subclass
### 2.2 Update Graph Structure
**Modify**: `tradingagents/graph/setup.py`
The analysis graph remains the same, but information flows differently:
- **For Equity**: Pull fundamentals, sector data
- **For Forex**: Pull economic indicators, central bank decisions, geopolitical events
Add conditional logic in `conditional_logic.py` to route instrument-specific analysis.
### 2.3 Refactor Existing Agents
**Update Agents** (in `tradingagents/agents/`):
- `fundamentals_analyst.py` Skip fundamentals for forex, pull macro data instead
- `market_analyst.py` Add forex-specific technical analysis (moving averages, Fibonacci, support/resistance)
- `news_analyst.py` Add economic calendar events, central bank statements
- All agents accept `Instrument` instead of ticker
---
## Phase 3: Forex-Specific Strategy Implementation (Effort: 7-10 days) — *After Phase 1 & 2*
### 3.1 Create Forex Strategy Agents
**New Files**:
- `tradingagents/agents/analysts/forex_technician.py` Technical analysis for pairs
- `tradingagents/agents/analysts/macro_analyst.py` Economic data & central bank tracking
- `tradingagents/agents/traders/forex_trader.py` Pair-specific trading decisions
### 3.2 Implement Trading Strategies
**Extend**: `tradingagents/agents/trader/trader.py`
Strategies:
- **Scalping**: Quick trades on micro-trends (1-5 minute candles)
- **Swing Trading**: Hold 1-3 days on support/resistance breakouts
- **Carry Trade**: Long-term holds with interest rate differentials
- **Mean Reversion**: Identification via RSI, Bollinger Bands
### 3.3 Add Reversal & Position Management
- Support both long & short positions (shorting is standard in forex)
- Trailing stop-loss implementation
- Breakeven adjustments
---
## Phase 4: Risk Management & Position Sizing (Effort: 4-5 days)
### 4.1 Forex-Specific Risk Models
**Update**: `tradingagents/agents/risk_mgmt/`
**New Considerations**:
- **Leverage Risk**: Enforce max leverage per position (e.g., max 5:1 on single pair)
- **Margin Requirements**: Track used margin % (warn if >70% used)
- **Liquidation Limits**: Flag if losses would exceed stop-out level (typically 50% margin)
- **Correlation Risk**: Prevent over-exposure to related pairs (EUR/USD + EUR/GBP)
**Modify Debators**:
- `aggressive_debator.py` → Allow higher leverage (up to 100:1)
- `neutral_debator.py` → Medium leverage (20:1 to 50:1)
- `conservative_debator.py` → Low leverage (1:1 to 10:1), wider stops
### 4.2 Position Sizing Engine
**Create**: `tradingagents/utils/forex_position_sizing.py`
**Algorithm**:
```
position_size = (account_equity × risk_percent) / (stop_loss_in_pips × pip_value_per_unit)
```
**Constraints**:
- Risk no more than 1-2% of account per trade
- Minimum position: 1 micro lot
- Maximum position: Limited by leverage & margin available
**Concrete Example**:
```python
def calculate_position_size(
account_equity: float,
risk_percent: float = 0.02, # 2%
leverage: int = 50,
stop_loss_pips: int = 50,
pair: str = "EUR/USD"
) -> float:
"""Returns position in units"""
pip_value = get_pip_value(pair, lot_size=1000) # micro lot
risk_amount = account_equity * risk_percent
pips_at_risk = stop_loss_pips
position_units = (risk_amount / (pip_value * pips_at_risk)) * 1000
return round(position_units / 1000) * 1000 # Round to micro lots
```
### 4.3 Compliance & Regulation
- **FIFO Rule**: Some jurisdictions (US) require First-In-First-Out closing
- **PDT-like Restrictions**: Pattern day trade equivalents for some firms
- Track & log regulatory compliance
---
## Phase 5: Market Monitoring & Operations (Effort: 3-4 days) — *After Phase 1*
### 5.1 24/5 Market Monitoring
**Create**: `tradingagents/utils/market_monitor.py`
- Track trading sessions (London, NYSE, Asia sessions)
- Monitor volatility spikes (especially at session opens)
- Alert on economic calendar events
- Handle disconnections gracefully (reconnect strategy)
### 5.2 Order Execution & Slippage Tracking
**Update**: `tradingagents/agents/trader/trader.py`
- Simulate slippage based on spreads
- Log actual fill prices vs expected
- Track execution quality metrics
### 5.3 Trade Journaling
**Create**: `tradingagents/utils/forex_trade_journal.py`
Log per trade:
- Entry price, spread at entry
- Exit price, slippage impact
- PnL in pips and account currency
- Trade reason (technical signal, macro event, etc.)
---
## Phase 6: User Interface & CLI (Effort: 3-4 days)
### 6.1 CLI Commands
**Update**: `cli/main.py`
**New Commands**:
```bash
trading-agent --mode forex --pair EUR/USD --leverage 50
trading-agent --mode forex --strategy scalping --pairs EUR/USD,GBP/USD
trading-agent --backtest forex --pair EUR/USD --timeframe 1h --start 2024-01-01
```
### 6.2 Configuration Management
**Update**: `cli/config.py`
```python
class ForexConfig:
provider: str # "oanda", "forexcom"
api_key: str
leverage: int
pairs: List[str]
risk_percent: float
strategy: str
```
### 6.3 Dashboard/Status Display
**Update**: `cli/static/welcome.txt` → Add forex-specific info
- Current positions, open drawdown
- Margin used / available
- Today's PnL tracking
---
## Phase 7: Testing & Backtesting (Effort: 5-6 days) — *Parallel with Phase 6*
### 7.1 Unit Tests
**Create/Update**:
- `tests/test_forex_position_sizing.py`
- `tests/test_instrument_abstraction.py`
- `tests/test_risk_management_forex.py`
- `tests/test_oanda_provider.py`
### 7.2 Backtesting Engine
**Create**: `tradingagents/backtest/forex_backtest.py`
- Load historical forex data
- Simulate trades with realistic spreads & slippage
- Calculate metrics: Sharpe ratio, max drawdown, win rate
- Compare strategies across pairs & timeframes
### 7.3 Integration Tests
- End-to-end trading workflow (signal → order → execution)
- Error recovery (reconnection, partial fills)
- Regulatory compliance checks
---
## Phase 8: Documentation & Deployment (Effort: 2-3 days)
### 8.1 Update README.md
- Forex setup instructions (API signup, credentials)
- Example configurations for different strategies
- Risk disclaimers for leverage trading
### 8.2 API Documentation
- Document new forex data providers
- Agent configuration reference
- Position sizing formula explanation
### 8.3 Deployment
- Docker configuration updates for 24/5 operation
- Environment variable setup (API keys, secrets)
- Monitoring & alerting setup
---
## Dependency Graph & Critical Path
```
Phase 0: Configuration ◄── CRITICAL (blocks everything)
├─→ Phase 1: Data Integration (5-6 days)
│ ├─→ Phase 4: Risk Management (4-5 days)
└─→ Phase 2: Abstraction (6-8 days)
└─→ Phase 3: Strategy (7-10 days)
Phase 5: Monitoring (3-4 days) ◄── After Phase 1
Phase 6: CLI (3-4 days) ◄── After Phase 2 & 3
Phase 7: Testing (5-6 days) ◄── Parallel throughout
Phase 8: Documentation (2-3 days) ◄── Final
```
**Total Sequential Time**: ~8-12 weeks (with parallelization)
---
## MVP vs. Enhancements
### MVP (Phase 0, 1, 2, 3, 4, 5) — **Weeks 1-8**
- Single forex pair (EUR/USD)
- Single provider (OANDA)
- Swing trading strategy only
- Basic risk management (leverage limits, position sizing)
- Backtesting capability
### Phase 1 Enhancement (Week 9+)
- Multi-pair support (5-10 major pairs)
- Strategy selection (scalping, carry trade)
- Economic calendar integration
### Phase 2 Enhancement (Week 12+)
- Second provider (Forex.com)
- Regulatory compliance (FIFO)
- Advanced analytics (correlation heatmaps, volatility skew)
---
## File Structure Summary
```
tradingagents/
├── models/
│ ├── instrument.py [NEW] Base Instrument, CurrencyPair
├── config/
│ ├── forex_config.py [NEW] Forex configuration schema
├── dataflows/
│ ├── oanda_api.py [NEW]
│ ├── forexcom_api.py [NEW]
│ ├── forex_common.py [NEW]
│ └── forex_provider_factory.py [NEW]
├── agents/
│ ├── analysts/
│ │ ├── forex_technician.py [NEW]
│ │ └── macro_analyst.py [NEW]
│ ├── traders/
│ │ └── forex_trader.py [NEW]
│ └── [UPDATED] All agents refactored for Instrument abstraction
├── utils/
│ ├── forex_position_sizing.py [NEW]
│ ├── forex_metrics.py [NEW]
│ ├── market_monitor.py [NEW]
│ ├── forex_trade_journal.py [NEW]
├── backtest/
│ └── forex_backtest.py [NEW]
├── graph/
│ └── [UPDATED] Conditional logic for asset-specific analysis
└── llm_clients/
└── [UPDATED] Model selection for forex context
tests/
├── test_forex_data_sources.py [NEW]
├── test_forex_position_sizing.py [NEW]
├── test_instrument_abstraction.py [NEW]
├── test_risk_management_forex.py [NEW]
└── test_oanda_provider.py [NEW]
cli/
├── [UPDATED] main.py with forex commands
├── [UPDATED] config.py with ForexConfig
└── static/
└── [UPDATED] welcome.txt
```
---
## Success Criteria
**Phase 0**: Configuration loads without errors, supports multi-provider setup
**Phase 1**: Real-time data streams for EUR/USD, GBP/USD, USD/JPY
**Phase 2**: Agents work with any instrument type (equity or forex)
**Phase 3**: Backtest shows consistent profitability across pairs
**Phase 4**: No positions exceed max leverage; margin alerts trigger correctly
**Phase 5**: 24/5 operation handles disconnects gracefully
**Phase 6**: CLI trades EUR/USD via simulated orders
**Phase 7**: Test coverage >80% for new modules; backtest results reproducible
**Phase 8**: Documentation covers all forex features; setup takes <30 min
---
## Key Technical Decisions
| Decision | Rationale |
|----------|-----------|
| Factory pattern for providers | Easy to add new data sources (Forex.com, IB, etc.) |
| Instrument abstraction | Enables future crypto, commodities support |
| Config-driven trading mode | No code changes to switch between forex & equity |
| Micro-lot focus for MVP | Reduces capital requirements, good for testing |
| 24/5 monitoring separate from agents | Decouples market ops from trading logic |
| Backtesting module | Validate strategies before live trading |
| FIFO compliance tracking | Regulatory risk mitigation |
---
## References & Compliance
- **Forex Regulations**: FIFO rules (NFA, Canada), leverage limits by jurisdiction
- **Trading Standards**: ISO 4217 (currency codes), OANDA API v20 spec
- **Risk Management**: Position sizing formulas from "Money Management" (Vince, 1990)
- **Technical Analysis**: Standard forex indicators (RSI, MACD, Bollinger Bands)