364 lines
9.6 KiB
Markdown
364 lines
9.6 KiB
Markdown
# Historical Memory System
|
|
|
|
## Overview
|
|
|
|
The Historical Memory System automatically builds agent memories from historical stock data, eliminating the need for manual feedback. This enables agents to learn from thousands of real market situations and their outcomes.
|
|
|
|
## How It Works
|
|
|
|
### Traditional Memory System (Old)
|
|
```
|
|
1. Run analysis → Make decision
|
|
2. Wait for manual input: "This trade returned +15%"
|
|
3. Reflect and create memory
|
|
4. Store for future use
|
|
```
|
|
**Problem**: Requires manual feedback for every decision. Not scalable.
|
|
|
|
### Historical Memory System (New)
|
|
```
|
|
1. Select historical period (e.g., 2024-01-01)
|
|
2. Gather all data that existed on that date:
|
|
- Market conditions
|
|
- News
|
|
- Sentiment
|
|
- Fundamentals
|
|
3. Look forward 7 days → Measure actual returns
|
|
4. Create memory: (situation at T, outcome at T+7)
|
|
5. Repeat for many periods → Build rich memory base
|
|
```
|
|
**Benefit**: Automatically build thousands of memories from historical data!
|
|
|
|
---
|
|
|
|
## Memory Creation Process
|
|
|
|
For each historical sample:
|
|
|
|
### 1. **Data Collection** (at time T)
|
|
```python
|
|
Market Report:
|
|
- Stock price: $150.25
|
|
- RSI: 65 (bullish)
|
|
- MACD: Bullish crossover
|
|
- Volume: Above average
|
|
|
|
News Report:
|
|
- Earnings beat expectations by 12%
|
|
- New product launch announced
|
|
- Positive analyst upgrades
|
|
|
|
Sentiment Report:
|
|
- Reddit: 85% bullish
|
|
- Social volume: High
|
|
|
|
Fundamentals:
|
|
- P/E: 25.3
|
|
- Revenue growth: 15% YoY
|
|
- Strong balance sheet
|
|
```
|
|
|
|
### 2. **Outcome Measurement** (at time T+7 days)
|
|
```python
|
|
Actual return: +12.5%
|
|
```
|
|
|
|
### 3. **Agent-Specific Memory Creation**
|
|
|
|
#### Bull Researcher Memory:
|
|
```
|
|
SUCCESSFUL BULLISH ANALYSIS:
|
|
The bullish indicators (earnings beat + positive sentiment +
|
|
technical momentum) correctly predicted a +12.5% gain.
|
|
|
|
Lesson: In similar conditions, advocate strongly for BUY
|
|
with high conviction. This combination of signals is reliable.
|
|
```
|
|
|
|
#### Bear Researcher Memory:
|
|
```
|
|
INCORRECT BEARISH SIGNALS:
|
|
Despite any bearish concerns, stock rallied +12.5%.
|
|
|
|
Lesson: When fundamentals are strong and sentiment positive,
|
|
bearish arguments should be cautious. Short-term bearish
|
|
technical signals may be overridden by strong fundamentals.
|
|
```
|
|
|
|
#### Trader Memory:
|
|
```
|
|
TRADING OUTCOME:
|
|
Optimal action: BUY (aggressive position)
|
|
Stock returned +12.5%
|
|
|
|
Trading lesson: Strong fundamental catalysts (earnings beats)
|
|
combined with positive technical setup warrant 75-100%
|
|
position sizing.
|
|
```
|
|
|
|
#### Risk Manager Memory:
|
|
```
|
|
RISK ASSESSMENT:
|
|
Observed volatility: MEDIUM
|
|
Post-earnings volatility was managed
|
|
|
|
Risk lesson: Earnings-driven rallies typically show controlled
|
|
risk profile when fundamentals support the move. Standard
|
|
position sizing appropriate.
|
|
```
|
|
|
|
---
|
|
|
|
## Usage
|
|
|
|
### Step 1: Build Historical Memories
|
|
|
|
Run the memory builder script:
|
|
|
|
```bash
|
|
python scripts/build_historical_memories.py
|
|
```
|
|
|
|
This will:
|
|
- Fetch historical data for major stocks (AAPL, GOOGL, MSFT, NVDA, etc.)
|
|
- Sample monthly over past 2 years
|
|
- Measure 7-day forward returns for each sample
|
|
- Create agent-specific memories
|
|
- Save to `data/memories/` directory
|
|
|
|
**Output**:
|
|
```
|
|
🧠 Building historical memories for AAPL
|
|
Period: 2023-01-01 to 2025-01-01
|
|
Lookforward: 7 days
|
|
Sampling interval: 30 days
|
|
|
|
📊 Sampling 2023-01-01... Return: +3.2%
|
|
📊 Sampling 2023-02-01... Return: -1.5%
|
|
📊 Sampling 2023-03-01... Return: +5.8%
|
|
...
|
|
|
|
✅ Created 24 memory samples for AAPL
|
|
|
|
📊 MEMORY CREATION SUMMARY
|
|
bull : 360 memories
|
|
bear : 360 memories
|
|
trader : 360 memories
|
|
invest_judge : 360 memories
|
|
risk_manager : 360 memories
|
|
|
|
✅ Saved to data/memories/
|
|
```
|
|
|
|
### Step 2: Enable Historical Memories
|
|
|
|
Update your config to load memories:
|
|
|
|
```python
|
|
# In your script or tradingagents/default_config.py
|
|
config = DEFAULT_CONFIG.copy()
|
|
config["load_historical_memories"] = True # Enable loading
|
|
config["memory_dir"] = "data/memories" # Optional: custom path
|
|
```
|
|
|
|
### Step 3: Run Analysis
|
|
|
|
When you run an analysis, memories are automatically loaded:
|
|
|
|
```bash
|
|
python -m cli.main
|
|
```
|
|
|
|
**Console output**:
|
|
```
|
|
📚 Loading historical memories from data/memories...
|
|
✅ bull: Loaded 360 memories from bull_memory_20250125_143022.pkl
|
|
✅ bear: Loaded 360 memories from bear_memory_20250125_143022.pkl
|
|
✅ trader: Loaded 360 memories from trader_memory_20250125_143022.pkl
|
|
✅ invest_judge: Loaded 360 memories from invest_judge_memory_20250125_143022.pkl
|
|
✅ risk_manager: Loaded 360 memories from risk_manager_memory_20250125_143022.pkl
|
|
📚 Historical memory loading complete
|
|
```
|
|
|
|
Now when agents analyze a stock, they retrieve relevant historical memories:
|
|
|
|
```
|
|
Current situation: NVDA showing strong earnings beat,
|
|
bullish technicals, high social sentiment
|
|
|
|
Trader retrieves memories:
|
|
- Match 1 (similarity: 0.92): "Similar situation in AAPL 2024-03-15
|
|
led to +15% gain. Aggressive BUY recommended."
|
|
- Match 2 (similarity: 0.88): "GOOGL 2024-06-20 with similar pattern
|
|
returned +12%. Strong conviction warranted."
|
|
|
|
Trader decision: BUY 100 shares (informed by historical patterns)
|
|
```
|
|
|
|
---
|
|
|
|
## Configuration Options
|
|
|
|
### Memory Builder Configuration
|
|
|
|
Edit `scripts/build_historical_memories.py`:
|
|
|
|
```python
|
|
# Stocks to build memories for
|
|
tickers = [
|
|
"AAPL", "GOOGL", "MSFT", "NVDA", "TSLA", # Tech
|
|
"JPM", "BAC", "GS", # Finance
|
|
"XOM", "CVX", # Energy
|
|
# Add your preferred tickers
|
|
]
|
|
|
|
# Time period
|
|
start_date = "2023-01-01"
|
|
end_date = "2025-01-01"
|
|
|
|
# Lookforward period (days to measure returns)
|
|
lookforward_days = 7 # 1 week returns
|
|
# Options: 7 (weekly), 30 (monthly), 90 (quarterly)
|
|
|
|
# Sampling interval
|
|
interval_days = 30 # Sample monthly
|
|
# Options: 7 (weekly), 14 (bi-weekly), 30 (monthly)
|
|
```
|
|
|
|
### Runtime Configuration
|
|
|
|
```python
|
|
# default_config.py or your custom config
|
|
{
|
|
"load_historical_memories": True, # Load on startup
|
|
"memory_dir": "data/memories", # Memory directory
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Memory Types by Agent
|
|
|
|
| Agent | What They Learn | Memory Focus |
|
|
|-------|----------------|--------------|
|
|
| **Bull Researcher** | Which bullish signals are reliable | Patterns where BUY was correct |
|
|
| **Bear Researcher** | Which bearish signals are reliable | Patterns where SELL was correct |
|
|
| **Trader** | Optimal trading strategies | Position sizing, entry/exit timing |
|
|
| **Research Manager** | How to weigh bull vs bear arguments | Which perspective is more accurate |
|
|
| **Risk Manager** | How to assess volatility and risk | Position sizing, stop loss levels |
|
|
|
|
---
|
|
|
|
## Advanced Usage
|
|
|
|
### Custom Memory Building
|
|
|
|
Build memories programmatically:
|
|
|
|
```python
|
|
from tradingagents.agents.utils.historical_memory_builder import HistoricalMemoryBuilder
|
|
from tradingagents.default_config import DEFAULT_CONFIG
|
|
|
|
builder = HistoricalMemoryBuilder(DEFAULT_CONFIG)
|
|
|
|
# Build memories for specific stocks
|
|
memories = builder.populate_agent_memories(
|
|
tickers=["TSLA", "AMD", "PLTR"],
|
|
start_date="2024-01-01",
|
|
end_date="2024-12-01",
|
|
lookforward_days=14, # 2-week returns
|
|
interval_days=7 # Weekly samples
|
|
)
|
|
|
|
# Access specific agent memory
|
|
bull_memory = memories["bull"]
|
|
results = bull_memory.get_memories("Strong earnings beat with momentum", n_matches=3)
|
|
```
|
|
|
|
### Different Time Horizons
|
|
|
|
Create memories for different strategies:
|
|
|
|
```python
|
|
# Day trading (next day returns)
|
|
day_memories = builder.populate_agent_memories(
|
|
tickers=tickers,
|
|
lookforward_days=1,
|
|
interval_days=7
|
|
)
|
|
|
|
# Swing trading (weekly returns)
|
|
swing_memories = builder.populate_agent_memories(
|
|
tickers=tickers,
|
|
lookforward_days=7,
|
|
interval_days=14
|
|
)
|
|
|
|
# Position trading (monthly returns)
|
|
position_memories = builder.populate_agent_memories(
|
|
tickers=tickers,
|
|
lookforward_days=30,
|
|
interval_days=30
|
|
)
|
|
```
|
|
|
|
---
|
|
|
|
## Benefits
|
|
|
|
✅ **Automatic**: No manual feedback required
|
|
✅ **Scalable**: Build thousands of memories from historical data
|
|
✅ **Accurate**: Based on real market outcomes
|
|
✅ **Agent-Specific**: Each agent learns what's relevant to their role
|
|
✅ **Pattern Recognition**: Agents learn to recognize similar situations
|
|
✅ **Continuous Improvement**: Add new historical periods as data becomes available
|
|
|
|
---
|
|
|
|
## Comparison: Old vs New
|
|
|
|
| Aspect | Old System | New System |
|
|
|--------|-----------|------------|
|
|
| Memory Creation | Manual feedback required | Automatic from historical data |
|
|
| Scalability | ~10-20 memories | Thousands of memories |
|
|
| Effort | High (manual entry) | Low (one-time script) |
|
|
| Coverage | Limited recent periods | 2+ years of market conditions |
|
|
| Reliability | Depends on manual input | Based on real outcomes |
|
|
| Setup Time | Ongoing | One-time build |
|
|
|
|
---
|
|
|
|
## Files Created
|
|
|
|
```
|
|
tradingagents/
|
|
├── agents/utils/
|
|
│ ├── historical_memory_builder.py # Core memory builder
|
|
│ └── memory.py # Memory storage (existing)
|
|
├── default_config.py # Added memory config
|
|
└── graph/
|
|
└── trading_graph.py # Added memory loading
|
|
|
|
scripts/
|
|
└── build_historical_memories.py # Memory building script
|
|
|
|
data/
|
|
└── memories/ # Memory storage
|
|
├── bull_memory_20250125_143022.pkl
|
|
├── bear_memory_20250125_143022.pkl
|
|
├── trader_memory_20250125_143022.pkl
|
|
├── invest_judge_memory_20250125_143022.pkl
|
|
└── risk_manager_memory_20250125_143022.pkl
|
|
```
|
|
|
|
---
|
|
|
|
## Next Steps
|
|
|
|
1. **Build Memories**: Run `python scripts/build_historical_memories.py`
|
|
2. **Enable Loading**: Set `load_historical_memories: True` in config
|
|
3. **Run Analysis**: Agents now use historical patterns!
|
|
4. **Expand Coverage**: Add more tickers, longer periods, different time horizons
|
|
|
|
Your agents now learn from thousands of real market situations! 🚀
|