Files
cbazzaandClaude Sonnet 4.5 4f47b8e2fe feat: Add P&L Tracking with automatic MT5 history import (V1.9)
Added comprehensive P&L tracking system with automatic MT5 history import:

New Features:
- Automatic MT5 history sync (hourly)
- Entry+Exit deal matching for complete positions
- Real P&L calculation (profit + commission + swap)
- Real Win Rate from closed MT5 trades
- Multi-period analysis (Today, Week, Month, All-Time)
- Live performance dashboard
- Performance metrics (Profit Factor, Max Drawdown, Win/Loss Ratio)
- Recent trades display

Files Added:
- mt5_pnl_tracker.py: Core P&L tracking module (950 lines)
- integrate_pnl_tracker.py: Notebook integration script
- PNL_TRACKER_GUIDE.md: Complete documentation
- PNL_QUICK_START.md: 3-step quick start guide
- BOT_IMPROVEMENTS_SUMMARY.md: Complete improvements timeline

Notebook Changes:
- Added Cells 85-90 (6 new cells for P&L tracking)
- Cell 85: Section header (Markdown)
- Cell 86: Setup P&L tracker
- Cell 87: Initial MT5 history sync
- Cell 88: Add P&L sync to scheduler
- Cell 89: Usage instructions (Markdown)
- Cell 90: Live dashboard display

Scheduler:
- Added pnl_sync job (every 1 hour)
- Automatically imports last 7 days from MT5
- Matches Entry/Exit deals
- Calculates real P&L

Database:
- mt5_deals table: Raw MT5 deals
- matched_positions table: Complete trades (Entry+Exit)
- pnl_summary table: Aggregated metrics

Benefits:
- Know real Win Rate (not estimates)
- Track actual profit/loss accurately
- Validate strategy performance
- Data-driven threshold optimization
- Performance trend analysis

Total Cells: 85 → 91
Version: V1.6 → V1.9

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-21 10:05:50 +01:00

755 lines
18 KiB
Markdown
Raw Permalink 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.
# 💰 P&L Tracker Complete Guide
**Status:** ✅ FULLY INTEGRATED
**Date:** 2026-01-21
**Cells Added:** 6 new cells (Positions 85-90)
**Version:** V1.9
---
## ✅ What Was Implemented
I've added **complete P&L tracking with automatic MT5 history import** to your trading bot!
### 6 New Cells:
**Cell 85:** Markdown - Section Header
```
💰 P&L TRACKING & PERFORMANCE ANALYTICS (V1.9)
- Automatic MT5 History Import
- Real P&L Calculation
- Win Rate Analysis
- Performance Metrics
```
**Cell 86:** Code - Setup P&L Tracker
```python
pnl_tracker = MT5PnLTracker(db_path="trading_bot.db")
pnl_tracker.connect_db()
```
**Cell 87:** Code - Initial MT5 History Sync
```python
sync_results = pnl_tracker.sync_and_update(days_back=30)
# Imports last 30 days of MT5 trading history
```
**Cell 88:** Code - Add to Scheduler
```python
# Automatic hourly sync
scheduler.add_job(scheduled_pnl_sync, ...)
```
**Cell 89:** Markdown - Usage Instructions
**Cell 90:** Code - Live Dashboard Display
```python
dashboard = pnl_tracker.generate_dashboard()
# Shows All-Time, Month, Week, Today performance
```
---
## 🚀 How to Start
### Step 1: Open Notebook
```bash
jupyter notebook TradingBot_V1.6_Adaptive_Complete_CORRECTED.ipynb
```
### Step 2: Restart Kernel (CRITICAL!)
```
Menu: Kernel → Restart & Clear Output
Confirm: Yes
```
**Why critical?**
- Loads new `mt5_pnl_tracker.py` module
- Clears old cached imports
- Fresh start with new P&L system
### Step 3: Run All Cells
```
Menu: Cell → Run All
```
**What happens:**
1. All existing cells run normally (Cells 1-84)
2. Cell 86 initializes P&L tracker
3. Cell 87 imports MT5 history (last 30 days)
4. Cell 88 adds hourly auto-sync to scheduler
5. Cell 90 displays live P&L dashboard!
### Step 4: Verify Installation
**After Run All, scroll to Cell 87:**
**Expected Output:**
```
📥 Importing MT5 history...
This will import last 30 days of trades from MT5
Please wait...
================================================================================
✅ SYNC SUCCESSFUL!
================================================================================
📥 Import Results:
New Deals: 184
Matched Positions: 92
📊 Current Performance:
Total Trades: 92
Win Rate: 78.3%
Net P&L: $1,245.67
================================================================================
```
**Cell 88 Output:**
```
🔄 Adding P&L sync to scheduler...
✅ P&L sync scheduled (every 1 hour)
Syncs last 7 days from MT5
📋 Active Scheduler Jobs:
• adaptive_trading_check: interval[0:01:00]
• threshold_optimization: cron[day='*' hour='0']
• enhanced_trailing_stop: interval[0:01:00]
• position_monitor: interval[0:05:00]
• pnl_sync: interval[1:00:00]
✅ Scheduler updated successfully!
```
**Cell 90 Output (Dashboard):**
```
================================================================================
💰 MT5 P&L TRACKER - LIVE PERFORMANCE DASHBOARD
================================================================================
Generated: 2026-01-21 14:30:15
================================================================================
📊 ALL TIME PERFORMANCE
================================================================================
Total Trades: 92
Winning Trades: 72 (78.3%)
Losing Trades: 20
Net Profit: $1,245.67
Total Profit: $1,580.00
Total Loss: $334.33
Profit Factor: 4.72
Average Win: $21.94
Average Loss: $16.72
Largest Win: $45.50
Largest Loss: $28.00
Max Drawdown: $-112.50
Avg Duration: 4.2 hours
Total Pips: 1,850.5
================================================================================
📅 THIS MONTH
================================================================================
Trades: 24 (79.2% WR)
Net Profit: $456.00
Profit/Loss: +$580.00 / -$124.00
================================================================================
📅 THIS WEEK
================================================================================
Trades: 8 (87.5% WR)
Net Profit: $168.50
Profit/Loss: +$195.00 / -$26.50
================================================================================
📅 TODAY
================================================================================
Trades: 2 (100.0% WR)
Net Profit: $42.50
Profit/Loss: +$42.50 / -$0.00
================================================================================
================================================================================
📜 RECENT TRADES (Last 10)
================================================================================
position_id symbol type entry_time exit_time net_profit pips duration_hours status
12345678 XAUUSD LONG 2026-01-21 10:00 2026-01-21 14:00 22.50 15.0 4.0 ✅ WIN
12345677 XAUUSD LONG 2026-01-20 23:45 2026-01-21 03:30 18.75 12.5 3.8 ✅ WIN
12345676 XAUUSD SHORT 2026-01-20 18:30 2026-01-20 22:15 -14.20 -9.5 3.8 ❌ LOSS
...
================================================================================
✅ Dashboard refresh complete!
Last updated: 2026-01-21 14:30:15
================================================================================
```
---
## 🎯 What Now Runs Automatically
### 1. Hourly MT5 History Sync
**Every hour:**
```
1. Connects to MT5
2. Imports deals from last 7 days
3. Matches Entry + Exit deals to create complete positions
4. Calculates P&L for each position
5. Updates database
```
**Job name:** `pnl_sync`
**Frequency:** Every 1 hour
**Data synced:** Last 7 days
### 2. Real-Time P&L Calculation
**For each closed position:**
```
1. Finds Entry deal (IN)
2. Finds Exit deal (OUT)
3. Calculates:
- Gross Profit = Exit.profit
- Commission = Entry.commission + Exit.commission
- Swap = Entry.swap + Exit.swap
- Net P&L = Gross + Commission + Swap
- Pips = (Exit.price - Entry.price) / pip_value
4. Stores in matched_positions table
```
### 3. Performance Metrics
**Automatically calculates:**
- **Win Rate** = (Winning Trades / Total Trades) × 100
- **Profit Factor** = |Total Profit / Total Loss|
- **Max Drawdown** = Largest cumulative loss from peak
- **Average Win** = Mean profit of winning trades
- **Average Loss** = Mean loss of losing trades
### 4. Multi-Period Analysis
**Four timeframes:**
1. **All Time** - Complete trading history
2. **This Month** - Last 30 days
3. **This Week** - Last 7 days
4. **Today** - Current day only
---
## 📊 How to Use P&L Tracker
### View Live Dashboard
**Run Cell 90 anytime to refresh:**
```python
# Cell 90 already has this code
dashboard = pnl_tracker.generate_dashboard()
print(dashboard)
```
**Shows:**
- All-time performance summary
- Monthly/Weekly/Daily breakdown
- Recent 10 trades
- Win/Loss status
### Manual Sync (if needed)
**Force immediate sync:**
```python
# In a new cell or Cell 87
sync_results = pnl_tracker.sync_and_update(days_back=30)
if sync_results['success']:
print(f"✅ Synced: {sync_results['summary']['new_deals']} new deals")
print(f"📊 Matched: {sync_results['summary']['matched_positions']} positions")
else:
print(f"❌ Error: {sync_results.get('error')}")
```
### Get Specific Period Metrics
**Custom analysis:**
```python
# In a new cell
all_time = pnl_tracker.calculate_pnl_metrics('all')
print(f"All-time Win Rate: {all_time['win_rate']:.1f}%")
print(f"Profit Factor: {all_time['profit_factor']:.2f}")
month = pnl_tracker.calculate_pnl_metrics('month')
print(f"This month: {month['total_trades']} trades, ${month['net_profit']:.2f}")
week = pnl_tracker.calculate_pnl_metrics('week')
today = pnl_tracker.calculate_pnl_metrics('today')
```
### View Recent Trades
**Get last N trades:**
```python
# In a new cell
recent = pnl_tracker.get_recent_trades(limit=20)
print(recent.to_string(index=False))
```
### Export to DataFrame
**For further analysis:**
```python
# In a new cell
import pandas as pd
# Get all matched positions
query = "SELECT * FROM matched_positions ORDER BY exit_time DESC"
df = pd.read_sql_query(query, pnl_tracker.conn)
# Analyze by session (if you track session data)
print(df.groupby('symbol')['net_profit'].agg(['count', 'sum', 'mean']))
# Analyze by hour
df['hour'] = pd.to_datetime(df['entry_time']).dt.hour
hourly = df.groupby('hour')['net_profit'].sum()
print(hourly.sort_values(ascending=False))
```
---
## 🎯 Integration with Existing Features
### 1. Dynamic Threshold Optimizer
**P&L data enhances threshold optimization:**
```python
# The threshold optimizer can now use REAL Win Rate from MT5!
# Get real Win Rate
metrics = pnl_tracker.calculate_pnl_metrics('month')
real_win_rate = metrics['win_rate']
# Compare with bot's internal tracking
print(f"Real MT5 Win Rate: {real_win_rate:.1f}%")
print(f"Bot Internal WR: {threshold_optimizer.current_win_rate:.1f}%")
# Use real data for optimization
if real_win_rate < 60:
print("⚠️ Real WR below target → Increase threshold")
elif real_win_rate > 70:
print("✅ Real WR excellent → Consider lower threshold for more trades")
```
### 2. Enhanced Signal Scoring
**Validate enhanced scoring impact:**
```python
# Compare P&L before/after enhanced scoring implementation
# Get trades from last 30 days
recent_metrics = pnl_tracker.calculate_pnl_metrics('month')
# If you added enhanced scoring recently, you can:
# 1. Compare Win Rate before/after
# 2. Check if Profit Factor improved
# 3. Analyze if drawdown reduced
print(f"Recent Performance:")
print(f" Win Rate: {recent_metrics['win_rate']:.1f}%")
print(f" Profit Factor: {recent_metrics['profit_factor']:.2f}")
print(f" Max Drawdown: ${recent_metrics['max_drawdown']:.2f}")
```
### 3. Enhanced Trailing Stop
**Measure trailing stop effectiveness:**
```python
# Check average profit per winning trade
metrics = pnl_tracker.calculate_pnl_metrics('all')
print(f"Average Win: ${metrics['avg_win']:.2f}")
print(f"Average Loss: ${metrics['avg_loss']:.2f}")
print(f"Win/Loss Ratio: {abs(metrics['avg_win'] / metrics['avg_loss']):.2f}")
# If Win/Loss ratio improved after enhanced trailing stop:
# → Trailing stop is working! (Locking profits, cutting losses faster)
```
---
## 📈 Advanced Features
### 1. Database Structure
**Three main tables:**
#### `mt5_deals` - Raw MT5 deals
```sql
deal_id, ticket, order, time, type, entry, magic,
position_id, volume, price, commission, swap, profit,
symbol, comment, imported_at
```
#### `matched_positions` - Complete trades (Entry + Exit)
```sql
position_id, symbol, type, volume,
entry_price, exit_price, entry_time, exit_time,
profit, commission, swap, net_profit, pips,
is_win, duration_hours, magic, matched_at
```
#### `pnl_summary` - Aggregated metrics
```sql
period_type, period_start, period_end,
total_trades, win_rate, net_profit, profit_factor,
max_drawdown, calculated_at
```
### 2. Direct SQL Queries
**Custom analysis:**
```python
import sqlite3
import pandas as pd
conn = sqlite3.connect("trading_bot.db")
# Get best trading hours
query = """
SELECT
strftime('%H', entry_time) as hour,
COUNT(*) as trades,
SUM(CASE WHEN is_win = 1 THEN 1 ELSE 0 END) as wins,
ROUND(AVG(CASE WHEN is_win = 1 THEN 1.0 ELSE 0 END) * 100, 1) as win_rate,
ROUND(SUM(net_profit), 2) as total_profit
FROM matched_positions
GROUP BY hour
ORDER BY total_profit DESC
LIMIT 10
"""
best_hours = pd.read_sql_query(query, conn)
print(best_hours)
conn.close()
```
### 3. Session-Based Analysis
**If you add session tracking to matched_positions:**
```python
# After adding session column to matched_positions
# (requires modifying mt5_pnl_tracker.py to detect session from entry_time)
query = """
SELECT
session,
COUNT(*) as trades,
ROUND(AVG(CASE WHEN is_win = 1 THEN 1.0 ELSE 0 END) * 100, 1) as win_rate,
ROUND(SUM(net_profit), 2) as total_profit
FROM matched_positions
GROUP BY session
ORDER BY total_profit DESC
"""
session_analysis = pd.read_sql_query(query, pnl_tracker.conn)
print(session_analysis)
```
---
## ⚠️ Important Notes
### 1. First Sync May Take Time
**Initial sync imports 30 days:**
- 100+ deals → Takes 5-10 seconds
- 500+ deals → Takes 20-30 seconds
- 1000+ deals → Takes 40-60 seconds
**Normal! Be patient during first run.**
### 2. MT5 Must Be Running
**P&L sync requires:**
- ✅ MT5 Terminal running
- ✅ Account logged in
- ✅ Trading history available
**If sync fails:**
```
❌ SYNC FAILED
Error: MT5 initialization failed
```
**Solution:**
1. Check MT5 is running
2. Verify account connected
3. Re-run Cell 87
### 3. Hourly Sync Is Automatic
**After initial setup:**
- Bot automatically syncs every hour
- No manual intervention needed
- Runs in background via scheduler
**To check sync status:**
```python
# Check last sync time
import sqlite3
conn = sqlite3.connect("trading_bot.db")
cursor = conn.cursor()
cursor.execute("SELECT MAX(imported_at) FROM mt5_deals")
last_import = cursor.fetchone()[0]
print(f"Last MT5 import: {last_import}")
conn.close()
```
### 4. Magic Number Filter (Optional)
**If you want to track only bot trades:**
```python
# Cell 86 - Modify initialization
pnl_tracker = MT5PnLTracker(
db_path="trading_bot.db",
magic_number=123456 # Your bot's magic number
)
```
**Benefits:**
- Excludes manual trades
- Tracks only bot performance
- More accurate bot metrics
**To find your magic number:**
```python
# In MT5 or in your bot config
# Usually set in execute_trade_v2_adaptive()
# Check Cell 25 or trading config
```
---
## 🆘 Troubleshooting
### Problem 1: "ModuleNotFoundError: mt5_pnl_tracker"
**Error:**
```
ModuleNotFoundError: No module named 'mt5_pnl_tracker'
```
**Solution:**
```python
# Add to Cell 1 (after imports)
import sys
sys.path.append('/path/to/Place-Order-Trading-Bot')
```
Or verify file exists:
```bash
ls Place-Order-Trading-Bot/mt5_pnl_tracker.py
```
### Problem 2: "No deals found"
**Message:**
```
✅ SYNC SUCCESSFUL!
📥 Import Results:
New Deals: 0
Matched Positions: 0
```
**Possible reasons:**
1. **No trading history in MT5**
- Check MT5 → Account History
- Verify date range
2. **Magic number filter too restrictive**
- Set `magic_number=None` to include all trades
3. **History already imported**
- Normal on subsequent syncs
- Only new deals are imported
**Solution:**
```python
# Try longer period
sync_results = pnl_tracker.sync_and_update(days_back=60)
```
### Problem 3: "MT5 initialization failed"
**Error:**
```
❌ SYNC FAILED
Error: MT5 initialization failed
```
**Solutions:**
1. **Check MT5 is running:**
```python
import MetaTrader5 as mt5
if not mt5.initialize():
print(f"Error: {mt5.last_error()}")
else:
print("✅ MT5 connected")
mt5.shutdown()
```
2. **Restart MT5 Terminal**
3. **Check account login:**
- MT5 → File → Login to Trade Account
4. **Verify MT5 Python package:**
```bash
python -m pip install --upgrade MetaTrader5
```
### Problem 4: Positions Not Matching
**Message:**
```
✅ SYNC SUCCESSFUL!
📥 Import Results:
New Deals: 50
Matched Positions: 0
```
**Reason:** Only open positions (no closed trades yet)
**Solution:** Wait for trades to close, then re-sync
### Problem 5: Scheduler Conflict
**Error:**
```
ConflictingIdError: Job identifier (pnl_sync) conflicts with...
```
**Solution:**
```python
# Cell 88 - Remove old job first
scheduler.remove_job('pnl_sync')
# Then re-run Cell 88
```
---
## ✅ Verification Checklist
After setup, verify:
- [ ] Kernel restarted
- [ ] All cells ran without errors
- [ ] Cell 86 output: "✅ P&L Tracker initialized"
- [ ] Cell 87 output: "✅ SYNC SUCCESSFUL"
- [ ] Cell 88 shows `pnl_sync` in scheduler jobs
- [ ] Cell 90 displays dashboard with metrics
- [ ] Recent trades shown (if trades exist)
- [ ] Scheduler shows 5 jobs total (including pnl_sync)
---
## 🎯 Success Metrics
**When fully working, you'll see:**
1. **Real-Time P&L Dashboard**
- Updates every time you run Cell 90
- Shows accurate Win Rate from MT5
- Tracks total profit/loss
2. **Hourly Auto-Sync**
- New trades automatically imported
- No manual intervention needed
- Always up-to-date metrics
3. **Comprehensive Performance Data**
- All-time statistics
- Period-based analysis
- Trade-by-trade breakdown
4. **Integration with Optimizations**
- Dynamic Thresholds use real Win Rate
- Enhanced Scoring validation
- Trailing Stop effectiveness measurement
---
## 🎉 You Now Have
**Automatic MT5 History Import** - Never manually track trades again
**Real P&L Calculation** - Accurate profit/loss from closed trades
**Multi-Period Analysis** - Today, Week, Month, All-Time
**Win Rate Tracking** - Real Win Rate from MT5, not estimates
**Performance Metrics** - Profit Factor, Drawdown, Win/Loss Ratio
**Live Dashboard** - Always up-to-date performance view
**Hourly Auto-Sync** - Runs in background automatically
**= Complete P&L tracking system integrated with your trading bot!**
---
## 📚 Additional Resources
- **MT5 Python Documentation:** https://www.mql5.com/en/docs/integration/python_metatrader5
- **SQLite Documentation:** https://www.sqlite.org/docs.html
- **Pandas Documentation:** https://pandas.pydata.org/docs/
---
## 🎯 Next Steps
1. **Run the notebook** - Restart kernel → Run All
2. **Verify P&L sync** - Check Cell 87 output
3. **View dashboard** - Scroll to Cell 90
4. **Monitor hourly sync** - Check logs every hour
5. **Analyze performance** - Use dashboard to track Win Rate, P&L
6. **Optimize based on data** - Adjust thresholds based on real metrics
---
**Questions?** See existing documentation:
- [OPTIMIZATION_INTEGRATION_GUIDE.md](OPTIMIZATION_INTEGRATION_GUIDE.md) - For other optimizations
- [CONFIGURATION_GUIDE.md](CONFIGURATION_GUIDE.md) - For config settings
- [QUICK_START_OPTIMIZATIONS.md](QUICK_START_OPTIMIZATIONS.md) - For Option E setup
---
🎯 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>