chore: Organize workspace structure - move docs, workflows, scripts to subdirectories

Organization:
- Created docs/ with setup/, guides/, history/ subdirectories
- Created workflows/ with trading/, analytics/, telegram/, archive/ subdirectories
- Created scripts/ with docker/, setup/, testing/ subdirectories
- Created tests/ for TypeScript test files
- Created archive/ for unused reference files

Moved files:
- 17 documentation files → docs/
- 16 workflow JSON files → workflows/
- 10 shell scripts → scripts/
- 4 test files → tests/
- 5 unused files → archive/

Updated:
- README.md with new file structure and documentation paths

Deleted:
- data/ (empty directory)
- screenshots/ (empty directory)

Critical files remain in root:
- telegram_command_bot.py (active bot - used by Dockerfile)
- watch-restart.sh (systemd service dependency)
- All Dockerfiles and docker-compose files
- All environment files

Validation:
 Containers running (trading-bot-v4, telegram-trade-bot, postgres)
 API responding (positions endpoint tested)
 Telegram bot functional (/status command tested)
 All critical files present in root

No code changes - purely organizational.
System continues running without interruption.

Recovery: git revert HEAD or git reset --hard cleanup-before
This commit is contained in:
mindesbunister
2025-10-27 12:59:25 +01:00
parent f8f289232a
commit 14d5de2c64
48 changed files with 37 additions and 14 deletions

View File

@@ -0,0 +1,505 @@
# n8n Workflow Setup Guide - Trading Bot v4
Complete guide to set up the automated trading workflow in n8n.
---
## 🔐 Security Model (Simplified)
This workflow uses **ONE secret** for authentication:
**API_SECRET_KEY** - Authenticates n8n → v4 Trading Bot API
- Set in `v4/.env` (generate with: `openssl rand -hex 32`)
- Set in n8n environment variables (must match v4)
- Used when calling `/api/trading/check-risk` and `/api/trading/execute`
**Your TradingView webhook** (`https://flow.egonetix.de/webhook/tradingview-webhook`) is directly accessible. If you need additional security, use `n8n-workflow-complete.json` which includes optional TradingView secret validation.
---
## 📋 Workflow Overview
```
TradingView Alert (Webhook)
Parse Signal (SOL/BTC/ETH, LONG/SHORT)
Check Risk Limits (API call to /api/trading/check-risk)
Execute Trade (API call to /api/trading/execute)
Format Message (Success/Error/Blocked)
Send Telegram Notification
```
**Two workflow versions available:**
- `n8n-workflow-simple.json` - **Recommended** - Direct flow without secret validation
- `n8n-workflow-complete.json` - With optional TradingView webhook secret validation
---
## 🚀 Quick Setup
### Step 1: Import Workflow
1. Open your n8n instance (e.g., https://flow.egonetix.de)
2. Click **"+ New Workflow"**
3. Click **"⋮"** (three dots) → **"Import from File"**
4. Select `n8n-workflow-simple.json` (recommended) or `n8n-workflow-complete.json`
5. Click **"Import"**
### Step 2: Configure Environment Variables
In n8n, go to **Settings****Environment Variables** and add:
```bash
# Your trading bot API URL (where v4 is running)
TRADING_BOT_API_URL=http://your-server:3000
# API secret key (must match v4/.env)
API_SECRET_KEY=your_secret_key_from_v4_env
# Telegram credentials
TELEGRAM_CHAT_ID=your_telegram_chat_id
```
**Note:** `TRADINGVIEW_WEBHOOK_SECRET` is only needed if using `n8n-workflow-complete.json`
### Step 3: Configure Telegram Credentials
1. In n8n, click **"Telegram - Send Notification"** node
2. Click **"Create New Credential"**
3. Enter your **Telegram Bot Token**
4. Save credential
### Step 4: Get Webhook URL
1. Click **"Webhook - TradingView Alert"** node
2. Click **"Test URL"** or **"Production URL"**
3. Copy the webhook URL (should be: `https://flow.egonetix.de/webhook/tradingview-webhook`)
4. Save this for TradingView setup
### Step 5: Activate Workflow
1. Toggle **"Active"** switch at top right
2. Workflow is now listening for webhooks!
---
## 🔧 Detailed Configuration
### Webhook Node Configuration
**Node:** `Webhook - TradingView Alert`
- **HTTP Method:** POST
- **Path:** `tradingview-webhook` (or customize)
- **Response:** Return on Last Node
- **Raw Body:** Enabled
**What it does:** Receives TradingView alerts directly via webhook
**Your webhook URL:** `https://flow.egonetix.de/webhook/tradingview-webhook`
### Parse TradingView Signal Node
**Node:** `Parse TradingView Signal`
- **Type:** Code (Function)
- **Language:** JavaScript
**What it does:**
- Extracts symbol, action, timeframe from TradingView alert
- Normalizes data for v4 API (SOL→SOLUSDT, buy→long, etc.)
- Supports various TradingView alert formats
**Supported formats:**
```json
{
"symbol": "SOLUSDT",
"action": "buy",
"timeframe": "5",
"price": "140.25",
"timestamp": "2025-10-23T10:00:00Z"
}
```
Or:
```json
{
"ticker": "SOL-PERP",
"signal_type": "long",
"interval": "5m",
"close": "140.25"
}
```
### Check Risk Limits Node
**Node:** `Check Risk Limits`
- **URL:** `{{$env.TRADING_BOT_API_URL}}/api/trading/check-risk`
- **Method:** POST
- **Headers:**
- `Authorization: Bearer {{$env.API_SECRET_KEY}}`
- `Content-Type: application/json`
- **Body:**
```json
{
"symbol": "{{$json.apiPayload.symbol}}",
"direction": "{{$json.apiPayload.direction}}"
}
```
**What it does:**
- Checks daily drawdown limits
- Validates trades per hour
- Ensures cooldown period passed
### Execute Trade Node
**Node:** `Execute Trade on Drift`
- **URL:** `{{$env.TRADING_BOT_API_URL}}/api/trading/execute`
- **Method:** POST
- **Timeout:** 30000ms (30 seconds)
- **Headers:**
- `Authorization: Bearer {{$env.API_SECRET_KEY}}`
- `Content-Type: application/json`
- **Body:**
```json
{
"symbol": "SOLUSDT",
"direction": "long",
"timeframe": "5",
"signalStrength": "strong",
"signalPrice": 140.25
}
```
**What it does:**
- Opens position on Drift Protocol
- Starts automatic monitoring
- Returns trade details (entry price, TP/SL levels)
### Format Message Nodes
**Three formatting nodes for different scenarios:**
1. **Format Success Message** - Trade executed successfully
2. **Format Error Message** - Trade execution failed
3. **Format Risk Blocked Message** - Trade blocked by risk limits
**Output example (Success):**
```
🟢 TRADE EXECUTED
📊 Symbol: SOL-PERP
📈 Direction: LONG
💰 Entry Price: $140.2350
💵 Position Size: $500.00
⚡ Leverage: 10x
🎯 Targets:
Stop Loss: $137.90 (-1.5%)
TP1: $140.98 (+0.7%)
TP2: $142.10 (+1.5%)
📊 Slippage: 0.015%
⏰ Time: 10/23/2025, 10:00:00 AM
✅ Position is now being monitored automatically.
Auto-exit at TP/SL levels.
```
### Telegram Node
**Node:** `Telegram - Send Notification`
- **Chat ID:** `{{$env.TELEGRAM_CHAT_ID}}`
- **Text:** `{{$json.message}}`
- **Parse Mode:** Markdown
**What it does:** Sends formatted notification to your Telegram
---
## 🎯 TradingView Alert Setup
### Alert Configuration
1. **In TradingView:** Right-click chart → Add Alert
2. **Condition:** Your indicator/strategy (e.g., Green Dot appears)
3. **Alert Name:** "SOL Long Signal" (or similar)
4. **Webhook URL:**
```
https://flow.egonetix.de/webhook/tradingview-webhook
```
**No secret parameter needed!** Just the direct webhook URL.
### Alert Message (JSON)
Use this format in the **Message** field:
```json
{
"symbol": "{{ticker}}",
"action": "{{strategy.order.action}}",
"timeframe": "{{interval}}",
"price": "{{close}}",
"timestamp": "{{timenow}}",
"strategy": "5min_scalp",
"strength": "strong"
}
```
**Important fields:**
- `symbol`: Stock/crypto symbol (SOLUSDT, BTCUSD, etc.)
- `action`: "buy"/"sell" or "long"/"short"
- `timeframe`: Chart interval (5, 15, 60, etc.)
- `price`: Current price from TradingView
### Notification Settings
✅ **Enable:**
- Webhook URL
- Notify on app
- Play sound (optional)
❌ **Disable:**
- Send email (n8n handles notifications)
---
## 🧪 Testing
### Test 1: Webhook Connection
```bash
# Send test webhook from command line
curl -X POST https://flow.egonetix.de/webhook/tradingview-webhook \
-H "Content-Type: application/json" \
-d '{
"symbol": "SOLUSDT",
"action": "buy",
"timeframe": "5",
"price": "140.25",
"timestamp": "2025-10-23T10:00:00Z"
}'
```
### Test 2: Check n8n Executions
1. In n8n, click **"Executions"** tab
2. Find your test execution
3. Click to view detailed flow
4. Check each node for errors
### Test 3: Verify API Response
Expected response from `/api/trading/execute`:
```json
{
"success": true,
"trade": {
"id": "trade-1234567890",
"symbol": "SOL-PERP",
"direction": "long",
"entryPrice": 140.235,
"positionSize": 500,
"leverage": 10,
"stopLoss": 137.90,
"takeProfit1": 140.98,
"takeProfit2": 142.10
}
}
```
### Test 4: Telegram Message
You should receive a formatted Telegram message with trade details.
---
## 🔍 Troubleshooting
### Webhook Not Receiving Data
**Problem:** n8n workflow not triggering
**Solutions:**
1. Check webhook is **Active** (toggle at top)
2. Verify webhook URL in TradingView matches n8n: `https://flow.egonetix.de/webhook/tradingview-webhook`
3. Test with curl command (see Testing section)
4. Check n8n logs for errors
### Invalid Secret Error
**Problem:** "Unauthorized Webhook" message
**Solutions:**
- **Only applies if using `n8n-workflow-complete.json`**
- If using `n8n-workflow-simple.json`, this error won't occur
### API Authentication Failed
**Problem:** "401 Unauthorized" from trading bot
**Solutions:**
1. Verify `API_SECRET_KEY` in n8n matches v4 `.env`
2. Check `Authorization` header format: `Bearer YOUR_KEY`
3. Regenerate key if needed: `openssl rand -hex 32`
### Trade Not Executing
**Problem:** Risk check passed but no position opened
**Solutions:**
1. Check v4 API logs: `docker-compose logs -f trading-bot`
2. Verify Drift wallet has sufficient collateral
3. Check SOLANA_RPC_URL is working
4. Ensure DRIFT_WALLET_PRIVATE_KEY is correct
5. Test with curl:
```bash
curl -X POST http://localhost:3000/api/trading/execute \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"symbol":"SOLUSDT","direction":"long","timeframe":"5"}'
```
### Telegram Not Sending
**Problem:** No Telegram notifications
**Solutions:**
1. Verify Telegram Bot Token in credentials
2. Check TELEGRAM_CHAT_ID is correct
3. Ensure bot is started (send /start to your bot)
4. Test Telegram node individually in n8n
---
## 📊 Monitoring
### View Executions
In n8n:
1. Click **"Executions"** tab
2. Filter by **"Success"** or **"Error"**
3. Click execution to see detailed flow
### Check Active Positions
Query via API:
```bash
curl -H "Authorization: Bearer YOUR_API_KEY" \
http://localhost:3000/api/trading/positions
```
Or check Drift UI: https://drift.trade
### View Bot Logs
```bash
# Docker logs
docker-compose logs -f trading-bot
# Or if using scripts
cd v4 && ./docker-logs.sh
```
---
## 🔐 Security Best Practices
1. **Use Strong Secrets**
```bash
# Generate secure random secrets
openssl rand -hex 32 # For API keys
openssl rand -hex 16 # For webhook secrets
```
2. **Protect Environment Variables**
- Never commit `.env` files
- Use n8n's environment variable encryption
- Rotate secrets regularly
3. **IP Whitelisting** (optional)
- Restrict webhook access to TradingView IPs
- Use n8n's IP filtering if available
4. **Monitor Failed Attempts**
- Set up alerts for unauthorized webhook attempts
- Review n8n execution logs regularly
---
## 🎓 Advanced Configuration
### Custom Risk Parameters
Modify `Check Risk Limits` node to send additional parameters:
```json
{
"symbol": "SOL-PERP",
"direction": "long",
"customPositionSize": 100,
"customLeverage": 5
}
```
### Multiple Strategies
Clone the workflow for different strategies:
1. Duplicate workflow
2. Change webhook path: `/webhook/tradingview-5min` vs `/webhook/tradingview-15min`
3. Use different risk parameters per timeframe
### Advanced Notifications
Add Discord/Email nodes in parallel with Telegram:
1. Add Discord webhook node
2. Add SMTP email node
3. Connect all to message formatter nodes
---
## 📞 Support
**Workflow Issues:**
- Check n8n documentation: https://docs.n8n.io
- Review execution logs in n8n
**API Issues:**
- See `v4/TESTING.md` for API testing
- Check `v4/DOCKER.md` for container logs
**Trading Issues:**
- See `TRADING_BOT_V4_MANUAL.md` for complete guide
- Check Drift Protocol status
---
## ✅ Checklist
Before going live:
- [ ] Import workflow to n8n
- [ ] Configure all environment variables
- [ ] Add Telegram credentials
- [ ] Copy webhook URL
- [ ] Configure TradingView alert with webhook
- [ ] Test with small position size ($10-50)
- [ ] Verify Telegram notification received
- [ ] Check position opened on Drift
- [ ] Monitor first 5-10 trades closely
- [ ] Gradually increase position size
---
**Your automated trading system is now complete! 🎉**
When TradingView fires an alert → n8n executes the trade → You get a Telegram notification → Bot monitors and auto-exits at TP/SL!

421
docs/guides/TESTING.md Normal file
View File

@@ -0,0 +1,421 @@
# Phase 2 Testing Guide
## 🧪 Test Scripts Overview
Phase 2 includes three comprehensive test scripts to validate the autonomous trading system.
---
## 1. test-price-monitor.ts
**Purpose**: Test Pyth Network price monitoring
**What it tests**:
- WebSocket connection to Pyth Hermes
- Price updates for multiple symbols (SOL, BTC, ETH)
- Update frequency and reliability
- RPC polling fallback
- Price caching
**How to run**:
```bash
cd v4
npx tsx test-price-monitor.ts
```
**Expected output**:
```
🧪 Testing Pyth Price Monitor...
📊 Monitoring: SOL-PERP, BTC-PERP, ETH-PERP
⏱️ Duration: 30 seconds
📡 Source: Pyth Network (WebSocket + Polling)
✅ Price monitor started!
💰 SOL-PERP $ 140.2350 (+0.000%) [1 updates]
💰 BTC-PERP $43251.8700 (+0.000%) [1 updates]
💰 ETH-PERP $ 2345.6200 (+0.000%) [1 updates]
💰 SOL-PERP $ 140.2351 (+0.001%) [2 updates]
...
📊 Test Results:
SOL-PERP:
Updates: 15 (0.50/sec)
Avg Price: $140.2355
Min Price: $140.2340
Max Price: $140.2370
Range: $0.0030 (0.002%)
Last Update: 0.1s ago
✅ PASS: Good update rate (0.50/sec)
✅ PASS: Recent updates (0.1s ago)
🎉 Price monitor test complete!
```
**What to check**:
- ✅ Updates should be 0.3-2 per second per symbol
- ✅ Last update should be < 5 seconds ago
- ✅ No connection errors
- ✅ All symbols receiving updates
**If WebSocket fails**:
- Will automatically fall back to RPC polling
- Updates will be ~0.5/sec (every 2 seconds)
- This is normal and acceptable
---
## 2. test-position-manager.ts
**Purpose**: Test position tracking and monitoring logic
**What it tests**:
- Adding trades to position manager
- Real-time price monitoring integration
- Exit condition checks (SL/TP1/TP2/Emergency)
- Status reporting
- Multi-position support
**How to run**:
```bash
cd v4
npx tsx test-position-manager.ts
```
**Expected output**:
```
🧪 Testing Position Manager...
📝 Test 1: Adding simulated LONG trade...
✅ Long trade added
Entry: $140.0
SL: $137.90 (-1.5%)
TP1: $140.98 (+0.7%)
TP2: $142.10 (+1.5%)
📝 Test 2: Adding simulated SHORT trade...
✅ Short trade added
Entry: $43000
SL: $43645.00 (+1.5%)
TP1: $42699.00 (-0.7%)
TP2: $42355.00 (-1.5%)
📝 Test 3: Checking manager status...
✅ Status: {
"isMonitoring": true,
"activeTradesCount": 2,
"symbols": ["SOL-PERP", "BTC-PERP"]
}
📝 Test 4: Monitoring positions for 60 seconds...
(Real prices from Pyth will update every 2s)
Watch for automatic exit conditions!
⏱️ 10s - Active trades: 2
⏱️ 20s - Active trades: 2
⏱️ 30s - Active trades: 2
...
📝 Test 5: Final status check...
📝 Test 6: Closing all remaining positions...
🎉 Position manager test complete!
```
**What to check**:
- ✅ Both trades added successfully
- ✅ Manager started monitoring (check console logs)
- ✅ Real prices fetched from Pyth every 2s
- ✅ Exit conditions checked every 2s
- ✅ If price hits targets, trades close automatically
- ✅ Clean shutdown without errors
**During the test**:
- Watch the console for price update logs
- If real market price hits a target, exit will trigger
- Most likely no exits will occur (targets unlikely to hit in 60s)
- This tests the monitoring loop, not actual exits
---
## 3. test-full-flow.ts
**Purpose**: End-to-end test with real trade execution
**What it tests**:
- Complete flow: Signal → Execute → Monitor → Auto-exit
- API authentication
- Drift position opening
- Position manager integration
- Real-time P&L tracking
- Automatic exit execution
**⚠️ WARNING**: This executes a REAL trade on Drift!
**Prerequisites**:
1. Set position size to small amount ($10-50)
2. Have USDC in Drift account
3. Server running (`npm run dev`)
4. Environment configured
**How to run**:
```bash
cd v4
npx tsx test-full-flow.ts
```
**Expected output**:
```
🧪 Testing Full Trading Flow (END-TO-END)
⚠️ WARNING: This will execute a REAL trade on Drift!
Make sure position size is small ($10-50)
Press Ctrl+C to cancel, or wait 5 seconds to continue...
📝 Step 1: Executing trade...
Payload: {
"symbol": "SOLUSDT",
"direction": "long",
"timeframe": "5"
}
✅ Trade executed!
ID: trade-1234567890
Symbol: SOL-PERP
Direction: LONG
Entry Price: $ 140.2350
Position Size: $ 50.00
Leverage: 10x
📝 Step 2: Monitoring position...
Duration: 120 seconds (2 minutes)
Updates: Every 10 seconds
Waiting for automatic exit...
⏱️ 10s elapsed...
Current Price: $140.2451
Unrealized P&L: $0.72 (+1.44% account)
TP1 Hit: No
SL Moved: No
⏱️ 20s elapsed...
Current Price: $140.3501
Unrealized P&L: $8.22 (+16.44% account)
TP1 Hit: YES ✅
SL Moved: YES ✅
⏱️ 30s elapsed...
✅ TRADE CLOSED AUTOMATICALLY!
Position no longer in active list
📝 Step 3: Final check...
✅ Trade successfully closed automatically!
Check your Drift account for final P&L
🎉 End-to-end test complete!
```
**What to check**:
- ✅ Trade executes successfully
- ✅ Position manager starts monitoring
- ✅ Price updates every 10 seconds
- ✅ P&L calculated correctly
- ✅ TP1 detection works
- ✅ SL moves to breakeven after TP1
- ✅ Position closes automatically
- ✅ Final P&L matches Drift UI
**Possible outcomes**:
1. **TP1 Hit → TP2 Hit** (Best case):
- Price reaches +0.7%, closes 50%
- SL moves to breakeven
- Price reaches +1.5%, closes remaining 50%
- Total profit: +$70-220 (depending on size)
2. **TP1 Hit → SL at Breakeven** (Break even):
- Price reaches +0.7%, closes 50%
- Price reverses, hits breakeven SL
- Closes remaining 50% at entry
- Total profit: +$35-70 (from TP1)
3. **SL Hit** (Loss):
- Price drops to -1.5%
- Closes 100% of position
- Total loss: -$7.50-15 (on $50 position)
4. **No Exit in 2 Minutes** (Common):
- Targets not reached yet
- Position still active
- Will auto-close when targets hit
- This is normal!
---
## 🎯 Testing Strategy
### Week 1: Component Testing
```bash
# Day 1-2: Price monitoring
npx tsx test-price-monitor.ts
# Run 5-10 times, verify consistent updates
# Day 3-4: Position manager
npx tsx test-position-manager.ts
# Run 5-10 times, verify tracking works
# Day 5-7: Full flow (supervised)
npx tsx test-full-flow.ts
# Run with $10 positions
# Watch each trade closely
```
### Week 2: Live Testing
```bash
# Execute real trades via TradingView
# Monitor logs in real-time
# Verify auto-exits work
# Check P&L on Drift
# Start with 5-10 trades
# Gradually increase position size
```
### Week 3: Production
```bash
# Let bot run fully autonomous
# Check positions 2-3x per day
# Review daily P&L
# Adjust parameters if needed
```
---
## 📊 What Success Looks Like
### Price Monitor Test:
- ✅ 0.3-2 updates per second per symbol
- ✅ No dropped connections
- ✅ < 5 second lag between updates
- ✅ All symbols updating
### Position Manager Test:
- ✅ Trades added without errors
- ✅ Monitoring loop running
- ✅ Price checks every 2 seconds
- ✅ Clean shutdown
### Full Flow Test:
- ✅ Trade executes on Drift
- ✅ Position manager activates
- ✅ P&L tracks correctly
- ✅ Auto-exit when targets hit
- ✅ Matches Drift UI exactly
---
## 🐛 Common Issues
### "Cannot find module"
```bash
# Install missing dependency
npm install @pythnetwork/price-service-client
```
### "Drift service not initialized"
```bash
# Check .env.local has:
DRIFT_WALLET_PRIVATE_KEY=your_key_here
SOLANA_RPC_URL=your_rpc_url
```
### "API_KEY not set"
```bash
# Add to .env.local:
API_KEY=your_secret_key_here
```
### "WebSocket connection failed"
```bash
# Normal - will fall back to polling
# RPC polling happens every 2s
# If RPC also fails, check SOLANA_RPC_URL
```
### "Position not auto-closing"
```bash
# Check:
1. Is price actually hitting targets?
2. Are logs showing price checks?
3. Is position manager running?
4. Check slippage tolerance
# Most likely: Targets not hit yet (normal!)
```
---
## 💡 Pro Tips
1. **Run price monitor first**
- Validates Pyth connection
- Shows update frequency
- Reveals RPC issues early
2. **Test position manager next**
- Confirms monitoring logic
- Tests multi-position support
- No real trades = safe
3. **Full flow test last**
- Only after components work
- Start with $10-20 positions
- Watch first 5-10 trades
4. **Monitor the logs**
- Console shows all price updates
- Exit conditions logged
- Helps debug issues
5. **Compare with Drift UI**
- Verify positions match
- Check P&L accuracy
- Confirm closes executed
---
## 📞 Next Steps
After all tests pass:
1. **Configure TradingView alerts**
- Use n8n webhook URL
- Test with manual triggers
2. **Start with small positions**
- $10-50 per trade
- 5-10 test trades
- Supervised monitoring
3. **Scale up gradually**
- Increase to $100-300
- Add more symbols
- Reduce supervision
4. **Monitor performance**
- Track win rate
- Review P&L
- Adjust parameters
5. **Prepare for Phase 3**
- Database setup
- Risk manager config
- Notification channels
---
**Ready to test? Start with test-price-monitor.ts! 🚀**

View File

@@ -0,0 +1,166 @@
# n8n Workflow Verification Report
## ✅ All Nodes Tested & Verified
### 1. Webhook Node
- **Type**: `n8n-nodes-base.webhook` (v1)
- **Method**: POST
- **Path**: `tradingview-bot-v4`
- **Status**: ✅ Working (standard n8n webhook)
### 2. Parse Signal Node ✓
- **Type**: `n8n-nodes-base.set` (v3.2) - Same as working trader workflow
- **Fields**:
- `rawMessage`: Captures full body
- `symbol`: Regex match for SOL/BTC/ETH → Maps to Drift perps
- `direction`: Regex match for buy/sell/long/short
- `timeframe`: Fixed to "5"
- **Status**: ✅ Working (uses proven Edit Fields node)
### 3. Check Risk Node ✓
- **Type**: `n8n-nodes-base.httpRequest` (v4)
- **Method**: ✅ POST (FIXED - was missing)
- **URL**: `http://10.0.0.48:3001/api/trading/check-risk`
- **Headers**:
- ✅ Authorization: Bearer token
- ✅ Content-Type: application/json
- **Body**: JSON with symbol and direction
- **API Test**: ✅ PASSED
```bash
curl -X POST http://10.0.0.48:3001/api/trading/check-risk \
-H "Authorization: Bearer 2a344f0149442c857fb56c038c0c7d1b113883b830bec792c76f1e0efa15d6bb" \
-H "Content-Type: application/json" \
-d '{"symbol":"SOL-PERP","direction":"long"}'
# Response: {"allowed":true,"details":"All risk checks passed"}
```
### 4. Risk Passed? Node ✓
- **Type**: `n8n-nodes-base.if` (v1)
- **Condition**: `$json.allowed === true`
- **Status**: ✅ Working (standard IF node)
### 5. Execute Trade Node ✓
- **Type**: `n8n-nodes-base.httpRequest` (v4)
- **Method POST**:
- **URL**: `http://10.0.0.48:3001/api/trading/execute`
- **Headers**:
- ✅ Authorization: Bearer token
- ✅ Content-Type: application/json
- **Body**: JSON with symbol, direction, timeframe, signalStrength
- **Timeout**: 30000ms (30 seconds)
- **Status**: ✅ Configured correctly
### 6. Trade Success? Node ✓
- **Type**: `n8n-nodes-base.if` (v1)
- **Condition**: `$json.success === true`
- **Status**: ✅ Working (standard IF node)
### 7. Format Success Node ✓
- **Type**: `n8n-nodes-base.set` (v3.2)
- **Message Format**:
```
🟢 TRADE OPENED
[raw message]
📊 Symbol: [symbol]
📈 Direction: [direction]
⏰ [time]
✅ Position monitored automatically
```
- **Status**: ✅ Working (uses proven Edit Fields)
### 8. Format Error Node ✓
- **Type**: `n8n-nodes-base.set` (v3.2)
- **Message Format**:
```
🔴 TRADE FAILED
[raw message]
❌ Error: [error]
⏰ [time]
```
- **Status**: ✅ Working (uses proven Edit Fields)
### 9. Format Risk Node ✓
- **Type**: `n8n-nodes-base.set` (v3.2)
- **Message Format**:
```
⚠️ TRADE BLOCKED
[raw message]
🛑 Risk limits exceeded
⏰ [time]
```
- **Status**: ✅ Working (uses proven Edit Fields)
### 10-12. Telegram Nodes ✓
- **Type**: `n8n-nodes-base.telegram` (v1.1) - Same as working trader workflow
- **Chat ID**: 579304651
- **Credential**: Using existing "Telegram account" credential
- **Status**: ✅ Working (same config as proven workflow)
## Workflow Flow Verification ✓
```
Webhook
Parse Signal (Edit Fields)
Check Risk (HTTP POST) ← API tested ✅
Risk Passed? (IF condition)
↓ YES ↓ NO
Execute Trade Format Risk
(HTTP POST) ↓
↓ Telegram Risk
Trade Success?
↓ YES ↓ NO
Format Format
Success Error
↓ ↓
Telegram Telegram
Success Error
```
## JSON Validation ✓
- **Status**: ✅ Valid JSON structure
- **File**: `/home/icke/traderv4/n8n-complete-workflow.json`
## API Endpoints Verified ✓
### Check Risk Endpoint
```bash
curl -X POST http://10.0.0.48:3001/api/trading/check-risk \
-H "Authorization: Bearer 2a344f0149442c857fb56c038c0c7d1b113883b830bec792c76f1e0efa15d6bb" \
-H "Content-Type: application/json" \
-d '{"symbol":"SOL-PERP","direction":"long"}'
Response: {"allowed":true,"details":"All risk checks passed"}
```
### Execute Trade Endpoint
- Endpoint exists and is protected by same auth
- Will execute trades when Drift wallet is configured
- Returns `success: true/false` with trade details
## Known Issues: NONE ✅
All nodes use working, proven node types from your existing n8n-trader-workflow.json
## Import Instructions
1. Delete old broken workflow from n8n (if imported)
2. Import fresh: `/home/icke/traderv4/n8n-complete-workflow.json`
3. Update Telegram credential reference if needed
4. Activate workflow
5. Test with: `curl -X POST [your-n8n-webhook-url] -H "Content-Type: application/json" -d '{"body":"Buy SOL | Entry: 140.50"}'`
## Webhook URL Format
After activation: `https://[your-n8n-domain]/webhook/tradingview-bot-v4`
---
**VERIFICATION COMPLETE - ALL SYSTEMS GO!**

View File

@@ -0,0 +1,107 @@
# Exit Orders Test Results ✅
## Test Details
- **Date:** October 26, 2025
- **Position Size:** $10 base × 5x leverage = $50 notional
- **Symbol:** SOL-PERP
- **Direction:** LONG
- **Entry Price:** $197.4950
## Results: SUCCESS ✅
### Transaction Signatures
**Entry Order:**
```
2Bio8oUhhNXkYxY9g5RsR3KUpb3mCX3ZWrQoqFTZ9DQY7rq5w7reCwu8qyHEq1cZdBK5TRo7n9qhC9nj7HtUvWKG
```
[View on Solscan](https://solscan.io/tx/2Bio8oUhhNXkYxY9g5RsR3KUpb3mCX3ZWrQoqFTZ9DQY7rq5w7reCwu8qyHEq1cZdBK5TRo7n9qhC9nj7HtUvWKG)
**TP1 Order (75% at +0.5%):**
```
4G8rXJ5vhLZAhNaNJ46qwbDoMEhxab7kTibaQtrBHuSkzmd6FPtLyELbt7Lc8CpTLMtN1ut9sjz9F9o1FhRhgzLU
```
Target: $198.4825
[View on Solscan](https://solscan.io/tx/4G8rXJ5vhLZAhNaNJ46qwbDoMEhxab7kTibaQtrBHuSkzmd6FPtLyELbt7Lc8CpTLMtN1ut9sjz9F9o1FhRhgzLU)
**TP2 Order (100% at +2.5%):**
```
5Zo56K8ZLkz3uEVVuQUakZQ3uMCQSXrkWG1EwtxSZVQB2pxQwKp2gbPUGEDyPZobyBv4TYMEBGf5kBpLWfCPYMEr
```
Target: $202.4324
[View on Solscan](https://solscan.io/tx/5Zo56K8ZLkz3uEVVuQUakZQ3uMCQSXrkWG1EwtxSZVQB2pxQwKp2gbPUGEDyPZobyBv4TYMEBGf5kBpLWfCPYMEr)
**Stop Loss Order (at -0.9%):**
```
5U9ZxYFyD99j8MXcthqqjy6DjACqedEWfidWsCb69RtQfSe7iBYvRWrFJVJ5PGe2nJYtvRrMo2szuDCD8ztBrebs
```
Target: $195.7175
[View on Solscan](https://solscan.io/tx/5U9ZxYFyD99j8MXcthqqjy6DjACqedEWfidWsCb69RtQfSe7iBYvRWrFJVJ5PGe2nJYtvRrMo2szuDCD8ztBrebs)
## Verification
### Check on Drift UI
Visit [https://app.drift.trade/](https://app.drift.trade/) and connect with wallet:
```
3dG7wayp7b9NBMo92D2qL2sy1curSC4TTmskFpaGDrtA
```
You should see:
1. Active SOL-PERP position (~0.2532 SOL)
2. Three open orders (TP1, TP2, SL) showing as "Limit" orders with "Reduce Only" flag
3. Orders should be visible in the "Orders" tab
## Implementation Details
### What Changed
1. **lib/drift/orders.ts:** Added `placeExitOrders()` function that creates reduce-only LIMIT orders
2. **app/api/trading/execute/route.ts:** Calls `placeExitOrders()` after opening position
3. **config/trading.ts:** Added `takeProfit1SizePercent` and `takeProfit2SizePercent` config fields
### Order Types Used
- **Entry:** Market order (immediate execution)
- **Exit orders:** Reduce-only LIMIT orders
- Reduce-only = can only close position, not increase it
- LIMIT = visible in order book, executes when price reached
- Alternative: Trigger-market orders (more guaranteed execution but may slip)
### Position Manager
The bot still runs the position manager which:
- Monitors price in real-time via Pyth
- Will also close positions via market orders when targets hit
- Acts as a backup/fallback if LIMIT orders don't fill
## Risk Assessment
**Safe for production** with following considerations:
1. **LIMIT order risk:** May not fill if market gaps past price (e.g., flash crash through stop loss)
2. **Solution:** Position manager provides backup via market orders
3. **Recommendation:** For more safety-critical stops, consider implementing trigger-market orders
## Next Steps (Optional Enhancements)
1. **Add trigger-market for SL:** More guaranteed execution on stop loss
2. **Order cancellation:** Cancel old orders when position closes manually
3. **Multiple timeframes:** Support different TP/SL per timeframe
4. **Dynamic sizing:** Adjust TP sizes based on signal strength
## Test Command
```bash
cd /home/icke/traderv4
./test-exit-orders.sh
```
## Monitoring
```bash
# Check logs
docker logs trading-bot-v4 -f
# Check position manager status
curl http://localhost:3001/api/status
```
---
**Status: TESTED AND WORKING ✅**
The implementation successfully places on-chain TP/SL orders that are visible in the Drift UI. All three exit orders were placed successfully in the live test with real funds.

View File

@@ -0,0 +1,328 @@
# Trading Bot v4 - Phase 1 Complete! 🎉
## ✅ What's Been Built
### Core Components
1. **Configuration System** (`v4/config/trading.ts`)
- Trading parameters (leverage, stops, targets)
- Market configurations (SOL, BTC, ETH)
- Environment variable support
- Validation and merging logic
2. **Drift Integration** (`v4/lib/drift/`)
- `client.ts` - Drift SDK client wrapper
- `orders.ts` - Market order execution (open/close)
- Account health monitoring
- Position tracking
- Oracle price feeds
3. **API Endpoints** (`v4/app/api/trading/`)
- `execute/route.ts` - Execute trades from n8n
- `check-risk/route.ts` - Pre-trade risk validation
- Authentication with API keys
- Error handling
4. **Documentation**
- `SETUP.md` - Detailed setup instructions
- `.env.example` - Environment template
- `test-drift-v4.ts` - Integration test script
### n8n Integration
- ✅ Workflow JSON exported (`n8n-workflow-v4.json`)
- ✅ TradingView webhook → n8n → Trading Bot flow
- ✅ Multi-channel notifications (Telegram/Discord)
- ✅ Risk checks before execution
- ✅ Trade confirmation messages
## 🎯 How It Works
### Signal Flow
```
1. TradingView Alert (5min chart, green/red dot)
2. Webhook to n8n (with secret validation)
3. n8n extracts signal data
4. n8n calls /api/trading/check-risk
5. If approved, n8n calls /api/trading/execute
6. Bot opens position on Drift Protocol
7. n8n sends Telegram/Discord notification
8. Trade is live! (monitoring in Phase 2)
```
### Example Trade Execution
```
Signal: BUY SOLUSDT @ $100.00
Configuration:
- Position: $1,000
- Leverage: 10x
- Total: $10,000
Order Placement:
✅ Market buy executed
✅ Fill price: $100.02 (0.02% slippage)
✅ Size: 99.98 SOL
Targets Set:
🔴 Stop Loss: $98.52 (-1.5% = -$150 account loss)
🟡 TP1 (50%): $100.72 (+0.7% = +$70 account gain)
🟢 TP2 (50%): $101.52 (+1.5% = +$150 account gain)
Status: Position active, monitoring will start in Phase 2
```
## 🧪 Testing
### Test Your Setup
```bash
# 1. Navigate to v4 directory
cd v4
# 2. Run integration test
npx tsx test-drift-v4.ts
# Expected output:
# ✅ Config loaded
# ✅ Drift service initialized
# ✅ USDC Balance: $XXX.XX
# ✅ Account health: ...
# ✅ All tests passed!
```
### Test API Endpoints
```bash
# 1. Start Next.js server
npm run dev
# 2. Test risk check
curl -X POST http://localhost:3000/api/trading/check-risk \
-H "Authorization: Bearer YOUR_API_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{"symbol":"SOL-PERP","direction":"long"}'
# Expected: {"allowed":true,"details":"All risk checks passed"}
```
### Test Full Flow (CAREFUL!)
```bash
# This will open a REAL position!
curl -X POST http://localhost:3000/api/trading/execute \
-H "Authorization: Bearer YOUR_API_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"symbol": "SOLUSDT",
"direction": "long",
"timeframe": "5",
"signalStrength": "strong"
}'
```
## 🚧 What's Missing (Phase 2)
### Critical Components
1. **Price Monitoring System**
- Pyth WebSocket integration
- Real-time price updates (every 2s)
- Price cache management
2. **Position Manager**
- Track active trades
- Monitor P&L in real-time
- Handle multiple concurrent positions
3. **Auto Exit Logic**
- Check SL/TP1/TP2 conditions
- Execute market closes automatically
- Move SL to breakeven after TP1
- Lock profit at triggers
4. **Risk Manager**
- Daily P&L tracking
- Trades per hour limiting
- Cooldown enforcement
- Account health monitoring
5. **Database Integration**
- Save trades to PostgreSQL
- Trade history
- P&L reporting
- Performance analytics
6. **Notifications**
- Telegram trade updates
- Discord rich embeds
- Email reports
- Exit notifications
## 📝 Setup Checklist
Before going live:
- [ ] `.env.local` configured with all required variables
- [ ] Drift wallet funded with USDC
- [ ] Drift account initialized at drift.trade
- [ ] Test script passes (`npx tsx v4/test-drift-v4.ts`)
- [ ] n8n workflow imported and activated
- [ ] n8n environment variables set
- [ ] Telegram bot configured
- [ ] TradingView alert created
- [ ] Test alert triggered successfully
- [ ] Small test trade executed successfully ($100)
- [ ] Position verified in Drift UI
## 🎬 Quick Start Guide
### 1. Environment Setup
```bash
# Copy environment template
cp v4/.env.example .env.local
# Edit .env.local and add:
# - DRIFT_WALLET_PRIVATE_KEY
# - API_SECRET_KEY
# - SOLANA_RPC_URL (if not already set)
```
### 2. Test Drift Connection
```bash
npx tsx v4/test-drift-v4.ts
```
### 3. Configure n8n
```
1. Import n8n-workflow-v4.json
2. Set TRADING_BOT_API_URL
3. Set API_SECRET_KEY
4. Set TRADINGVIEW_WEBHOOK_SECRET
5. Configure Telegram credentials
6. Activate workflow
```
### 4. Configure TradingView
```
1. Create alert on 5min chart
2. Set webhook URL: https://your-n8n.com/webhook/tradingview-signal?secret=SECRET
3. Set message format (see SETUP.md)
4. Enable "Webhook URL" notification
5. Test alert
```
### 5. Start Trading!
```
Manually trigger TradingView alert
Check n8n execution logs
Verify position opened in Drift
Monitor position at drift.trade
Manually close for now (Phase 2 will auto-close)
```
## 💡 Important Notes
### Current Limitations
1. **No automatic exits** - You must manually close positions or wait for Drift's liquidation
2. **No price monitoring** - Bot doesn't track prices after entry
3. **No risk limits** - All trades are approved (risk check is placeholder)
4. **No trade history** - Trades aren't saved to database yet
### Workarounds for Phase 1
1. **Monitor positions manually** at https://drift.trade
2. **Set up Drift UI alerts** for your TP/SL levels
3. **Close positions manually** when targets hit
4. **Track trades in a spreadsheet** for now
5. **Use small position sizes** ($100-500 recommended)
## 🔐 Security Reminders
-`.env.local` is gitignored (don't commit it!)
- ✅ API keys should be random (use `openssl rand -hex 32`)
- ✅ Use a dedicated wallet for trading
- ✅ Keep private keys secure
- ✅ Start with small positions
- ✅ Monitor closely during testing
## 📊 Recommended Testing Strategy
### Week 1: Paper Testing
- Use $100 position size
- Trade 5-10 times
- Manually close all positions
- Track results in spreadsheet
### Week 2: Small Live
- Increase to $300 position size
- Let some positions hit TP/SL naturally
- Monitor slippage and execution
- Verify n8n notifications
### Week 3: Scale Up
- Gradually increase to $500-1000
- Add more symbols
- Fine-tune parameters
- Prepare for Phase 2 (auto-exits)
## 🎯 Next Development Priorities
### Phase 2 Features (in order)
1. **Pyth Price Monitor** (critical for auto-exits)
2. **Position Manager** (track active trades)
3. **Auto Exit Logic** (SL/TP execution)
4. **Database Integration** (trade history)
5. **Risk Manager** (daily limits)
6. **Enhanced Notifications** (trade updates)
Want me to build Phase 2 next?
## 📞 Support
If you encounter issues:
1. Check `v4/SETUP.md` for troubleshooting
2. Review `TRADING_BOT_V4_MANUAL.md` for full documentation
3. Test with `v4/test-drift-v4.ts`
4. Check Drift UI for account status
5. Review n8n execution logs
---
## 🎉 Congratulations!
You now have a clean, working Trading Bot v4 foundation with:
- ✅ Drift Protocol integration
- ✅ n8n automation
- ✅ TradingView webhooks
- ✅ Market order execution
- ✅ Telegram notifications
**The bot can now execute trades automatically when TradingView signals come in!**
Ready to test it? Follow the Quick Start Guide above.
Want to add auto-exits? Let me know and I'll build Phase 2!
🚀 Happy trading!

View File

@@ -0,0 +1,531 @@
# Trading Bot v4 - Phase 2 Complete! 🎉
## ✅ What's New in Phase 2
### 🎯 Fully Automated Trading System
**Phase 1** could only open positions. **Phase 2** adds:
- ✅ Real-time price monitoring (Pyth Network WebSocket)
- ✅ Automatic exit execution (TP1/TP2/SL)
- ✅ Smart position management
- ✅ Dynamic stop-loss adjustments
- ✅ Emergency stops
**The bot is now 100% autonomous!**
---
## 📦 New Components
### 1. Pyth Price Monitor (`lib/pyth/price-monitor.ts`)
**Real-time price feeds with dual approach:**
- WebSocket subscription (sub-second updates)
- RPC polling fallback (every 2s)
- Price caching for instant access
- Multi-symbol support
```typescript
// Monitors SOL, BTC, ETH prices simultaneously
// Updates every ~400ms via Pyth WebSocket
// Falls back to polling if WebSocket stalls
```
### 2. Position Manager (`lib/trading/position-manager.ts`)
**Tracks and manages active trades:**
- Monitors multiple positions simultaneously
- Checks exit conditions every 2 seconds
- Executes market closes automatically
- Tracks P&L in real-time
- Handles TP1 partial closes
```typescript
// Manages the complete trade lifecycle:
// Entry → Monitoring → TP1 (50%) → SL to BE → TP2 (50%) → Exit
```
### 3. Positions API (`app/api/trading/positions/route.ts`)
**GET endpoint for monitoring:**
- View all active trades
- Real-time P&L
- Monitoring status
- Trade statistics
```bash
GET /api/trading/positions
# Returns all active positions with live P&L
```
---
## 🔄 Complete Trade Flow
### Signal to Exit (Fully Automated)
```
1. TradingView Alert
2. n8n Webhook
3. Risk Check
4. Execute Trade (API)
5. Drift Position Opened
6. Position Manager Activated
7. Pyth Price Monitor Started
8. Price Checked Every 2 Seconds
9a. TP1 Hit → Close 50%, SL to Breakeven
9b. TP2 Hit → Close Remaining 50%
OR
9c. SL Hit → Close 100%
10. Position Closed Automatically
11. Remove from Monitoring
```
### Example Auto-Exit Scenario
```
Entry: BUY SOL @ $100.00
Position: $10,000 (10x leverage)
Target Prices:
- SL: $98.50 (-1.5%)
- TP1: $100.70 (+0.7%)
- TP2: $101.50 (+1.5%)
- Emergency: $98.00 (-2.0%)
--- Price moves to $100.72 ---
✅ TP1 TRIGGERED!
- Close 50% position ($5,000)
- Realized P&L: +$70 (+7% account)
- Move SL to $100.15 (breakeven)
- Trade is now RISK-FREE
--- Price continues to $101.52 ---
✅ TP2 TRIGGERED!
- Close remaining 50% ($5,000)
- Realized P&L: +$150 (+15% account)
- Total P&L: +$220 (+22% account)
- Position fully closed
✅ TRADE COMPLETE (fully automated!)
```
---
## 🧪 Testing Phase 2
### 1. Test Price Monitor
```bash
# Create test script
cat > v4/test-price-monitor.ts << 'EOF'
import { getPythPriceMonitor } from './lib/pyth/price-monitor'
async function test() {
const monitor = getPythPriceMonitor()
await monitor.start({
symbols: ['SOL-PERP'],
onPriceUpdate: (update) => {
console.log(`💰 ${update.symbol}: $${update.price.toFixed(4)}`)
},
})
// Run for 30 seconds
await new Promise(resolve => setTimeout(resolve, 30000))
await monitor.stop()
}
test()
EOF
# Run test
npx tsx v4/test-price-monitor.ts
# Expected output:
# 💰 SOL-PERP: $140.2350
# 💰 SOL-PERP: $140.2351
# 💰 SOL-PERP: $140.2348
# (updates every ~1-2 seconds)
```
### 2. Test Position Manager
```bash
# Create test script
cat > v4/test-position-manager.ts << 'EOF'
import { getPositionManager } from './lib/trading/position-manager'
async function test() {
const manager = getPositionManager()
// Add fake trade for testing
await manager.addTrade({
id: 'test-1',
positionId: 'test-sig',
symbol: 'SOL-PERP',
direction: 'long',
entryPrice: 140.0,
entryTime: Date.now(),
positionSize: 10000,
leverage: 10,
stopLossPrice: 137.9,
tp1Price: 140.98,
tp2Price: 142.1,
emergencyStopPrice: 137.2,
currentSize: 10000,
tp1Hit: false,
slMovedToBreakeven: false,
slMovedToProfit: false,
realizedPnL: 0,
unrealizedPnL: 0,
peakPnL: 0,
priceCheckCount: 0,
lastPrice: 140.0,
lastUpdateTime: Date.now(),
})
console.log('✅ Trade added to manager')
console.log('📊 Status:', manager.getStatus())
// Monitor for 60 seconds
await new Promise(resolve => setTimeout(resolve, 60000))
// Close all
await manager.closeAll()
}
test()
EOF
# Run test
npx tsx v4/test-position-manager.ts
# Expected: Price monitoring starts, updates every 2s
```
### 3. Test Full Flow (Live Trade)
```bash
# 1. Start your server
npm run dev
# 2. Trigger a TradingView alert
# (or use curl to simulate)
curl -X POST http://localhost:3000/api/trading/execute \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"symbol": "SOLUSDT",
"direction": "long",
"timeframe": "5"
}'
# 3. Check positions
curl http://localhost:3000/api/trading/positions \
-H "Authorization: Bearer YOUR_API_KEY"
# 4. Watch the logs for auto-exits!
```
---
## 📊 API Endpoints
### Execute Trade (from Phase 1)
```bash
POST /api/trading/execute
Authorization: Bearer YOUR_API_KEY
{
"symbol": "SOLUSDT",
"direction": "long",
"timeframe": "5"
}
# Now automatically adds to position manager!
```
### Get Active Positions (NEW)
```bash
GET /api/trading/positions
Authorization: Bearer YOUR_API_KEY
# Response:
{
"success": true,
"monitoring": {
"isActive": true,
"tradeCount": 2,
"symbols": ["SOL-PERP", "BTC-PERP"]
},
"positions": [{
"id": "trade-123",
"symbol": "SOL-PERP",
"direction": "long",
"entryPrice": 140.00,
"currentPrice": 140.52,
"unrealizedPnL": 52.00,
"profitPercent": 0.37,
"accountPnL": 3.7,
"tp1Hit": false,
...
}]
}
```
---
## 🎯 Key Features
### 1. Smart Exit Logic
**TP1 Hit (50% close):**
- Automatically closes 50% of position
- Moves SL to breakeven (+0.15% for fees)
- Trade becomes risk-free
- Lets remaining 50% run
**Profit Lock (+1.0%):**
- When price reaches +1.0% profit
- Moves SL to +0.4% profit
- Guarantees minimum profit even if reverses
**Emergency Stop (-2.0%):**
- Hard stop at -2% (before normal SL)
- Protects against flash crashes
- Closes 100% immediately
### 2. Real-Time Monitoring
**Price Updates:**
- Pyth WebSocket: ~400ms latency
- RPC Fallback: 2-second polling
- Caching for instant access
**Exit Checks:**
- Evaluated every 2 seconds
- Prioritized (Emergency > SL > TP1 > TP2)
- Market orders for instant execution
### 3. Multi-Position Support
**Can monitor:**
- Multiple symbols simultaneously (SOL, BTC, ETH)
- Multiple positions per symbol
- Different strategies per position
- Independent exit conditions
---
## 📝 Updated Setup Checklist
**Phase 1 (Required):**
- [x] Drift integration working
- [x] n8n webhook configured
- [x] TradingView alerts set up
- [x] API endpoints tested
**Phase 2 (New):**
- [ ] Install Pyth SDK: `npm install @pythnetwork/price-service-client`
- [ ] Test price monitor: `npx tsx v4/test-price-monitor.ts`
- [ ] Test position manager: `npx tsx v4/test-position-manager.ts`
- [ ] Execute test trade with auto-exits
- [ ] Monitor first automated exit
- [ ] Verify TP1 → SL adjustment works
---
## 💡 Configuration
### Risk Parameters (Optimized for 5min)
```env
# Position sizing
MAX_POSITION_SIZE_USD=1000
LEVERAGE=10
# Exit targets (optimized for DEX)
STOP_LOSS_PERCENT=-1.5 # -15% account
TAKE_PROFIT_1_PERCENT=0.7 # +7% account (50% close)
TAKE_PROFIT_2_PERCENT=1.5 # +15% account (50% close)
EMERGENCY_STOP_PERCENT=-2.0 # -20% hard stop
# Dynamic adjustments
BREAKEVEN_TRIGGER_PERCENT=0.4 # Move SL at +4% account
PROFIT_LOCK_TRIGGER_PERCENT=1.0 # Move SL at +10% account
PROFIT_LOCK_PERCENT=0.4 # Lock +4% profit
# Monitoring
PRICE_CHECK_INTERVAL_MS=2000 # Check every 2s
SLIPPAGE_TOLERANCE=1.0 # 1% max slippage
```
---
## 🚧 What's Still Missing (Phase 3)
### Optional Enhancements:
1. **Database Integration**
- Save trades to PostgreSQL
- Historical P&L tracking
- Performance analytics
2. **Risk Manager**
- Daily P&L limits
- Trades per hour enforcement
- Cooldown periods
- Account health checks
3. **Notifications**
- Telegram: Entry/Exit alerts
- Discord: Rich trade embeds
- Email: Daily reports
4. **Web Dashboard**
- View active trades
- P&L charts
- Trade history
- Manual controls
**Note:** These are optional. The bot is fully functional without them!
---
## ⚠️ Important Notes
### Current Status
**Fully Automated:**
- Opens positions from TradingView signals
- Monitors prices in real-time
- Closes positions at TP/SL automatically
- No manual intervention needed
**Production Ready:**
- Tested with live trades
- Handles multiple positions
- Robust error handling
- WebSocket with fallback
### Recommendations
1. **Start Small:** Use $100-300 positions first
2. **Monitor Closely:** Watch first 5-10 automated exits
3. **Check Logs:** Review price updates and exit decisions
4. **Verify Fills:** Confirm on Drift UI after exits
5. **Adjust Parameters:** Fine-tune based on results
### Testing Strategy
**Week 1: Supervised Auto-Trading**
- Execute 5-10 trades
- Watch each auto-exit in real-time
- Verify SL moves to breakeven after TP1
- Check slippage on closes
**Week 2: Full Automation**
- Let bot run unsupervised
- Check positions 2-3x per day
- Review daily P&L
- Adjust parameters if needed
**Week 3: Scale Up**
- Increase position size
- Add more symbols
- Fine-tune timing
- Prepare statistics
---
## 🎉 Congratulations!
**You now have a FULLY AUTOMATED trading bot!**
Features:
- ✅ Auto-entry (TradingView → n8n → Drift)
- ✅ Real-time monitoring (Pyth WebSocket)
- ✅ Auto-exit (TP1/TP2/SL with market orders)
- ✅ Smart risk management (breakeven, profit lock)
- ✅ Multi-position support
- ✅ Emergency stops
**The bot handles everything from signal to exit!**
---
## 📞 Next Steps
1. **Install Pyth SDK:**
```bash
npm install @pythnetwork/price-service-client
```
2. **Test price monitoring:**
```bash
npx tsx v4/test-price-monitor.ts
```
3. **Execute a test trade:**
- Trigger TradingView alert
- Watch for auto-execution
- Monitor price checks in logs
- Wait for automatic exit
4. **Scale up:**
- Start with small positions
- Monitor first 10 trades
- Increase size gradually
- Add more symbols
**Ready to let it run? The bot's got this! 🚀**
---
## 🐛 Troubleshooting
### "Price monitor not starting"
- Check SOLANA_RPC_URL is set
- Verify Pyth Hermes is accessible
- Try: `curl https://hermes.pyth.network/api/`
### "Position not auto-closing"
- Check position manager logs
- Verify price is actually hitting targets
- Check Drift has liquidity
- Review slippage tolerance
### "WebSocket disconnecting"
- Normal - will reconnect automatically
- Polling fallback takes over
- Check RPC provider limits
### "Exits too slow"
- Normal DEX lag (1-3 seconds)
- Market orders execute ASAP
- Check slippage on closes
- Consider tighter targets
---
**Phase 2 Complete! 🎊**
*Time to watch the bot trade on its own!*

View File

@@ -0,0 +1,564 @@
# 🎉 Phase 2 Complete Summary
## What We Built
Phase 2 transforms the trading bot from **manual monitoring** to **fully autonomous trading**!
### Before Phase 2:
- ✅ Could open positions from TradingView signals
- ❌ Required manual monitoring
- ❌ Required manual exit execution
- ❌ No real-time price tracking
### After Phase 2:
- ✅ Opens positions automatically
- ✅ Monitors prices in real-time
- ✅ Executes exits automatically (TP1/TP2/SL)
- ✅ Adjusts stop-loss dynamically
- ✅ Handles multiple positions
- ✅ Emergency stops for protection
**The bot now runs completely on its own!** 🚀
---
## 📦 New Components
### 1. Pyth Price Monitor (`lib/pyth/price-monitor.ts`)
- **260 lines** of production-ready code
- WebSocket connection to Pyth Hermes
- RPC polling fallback (every 2s)
- Multi-symbol support (SOL, BTC, ETH)
- Price caching for instant access
- Automatic reconnection
- Error handling and logging
**Key Features**:
- Sub-second WebSocket updates (~400ms latency)
- Reliable fallback if WebSocket fails
- Monitors multiple markets simultaneously
- Cached prices for instant queries
### 2. Position Manager (`lib/trading/position-manager.ts`)
- **460+ lines** of autonomous trading logic
- Tracks all active trades
- Monitors prices every 2 seconds
- Executes market orders automatically
- Smart stop-loss adjustments
- Real-time P&L calculations
**Key Features**:
- **TP1 Logic**: Closes 50% at +0.7%, moves SL to breakeven
- **TP2 Logic**: Closes remaining 50% at +1.5%
- **Stop Loss**: Closes 100% at -1.5%
- **Emergency Stop**: Hard stop at -2.0%
- **Profit Lock**: Moves SL to +0.4% when price hits +1.0%
- **Multi-Position**: Handles multiple trades across symbols
### 3. Positions API (`app/api/trading/positions/route.ts`)
- Query active positions
- Real-time P&L
- Monitoring status
- Trade statistics
---
## 🔄 Complete Autonomous Flow
```
1. TradingView Alert (5-min chart signal)
2. n8n Webhook Receives Signal
3. Risk Validation Check
4. Execute Trade API Called
5. Drift Position Opened (Market Order)
6. Position Manager Activated ⭐ NEW
7. Pyth Price Monitor Started ⭐ NEW
8. Price Checked Every 2 Seconds ⭐ NEW
┌─────────────────┐
│ Exit Monitoring │
└─────────────────┘
┌───────────┴───────────┐
│ │
↓ ↓
TP1 (+0.7%) SL (-1.5%)
Close 50% Close 100%
Move SL to BE Exit Trade
Price Continues
TP2 (+1.5%)
Close 50%
Trade Complete!
```
**No manual intervention required at any step!**
---
## 💰 Example Trade Scenario
### Entry
```
Signal: BUY SOL @ $140.00
Position: $1,000
Leverage: 10x
Notional: $10,000
Targets:
- SL: $137.90 (-1.5% = -$150 account)
- TP1: $140.98 (+0.7% = +$70 account)
- TP2: $142.10 (+1.5% = +$150 account)
- Emergency: $137.20 (-2.0% = -$200 account)
```
### TP1 Hit (+0.7%)
```
✅ Price reaches $140.98
Automatic Actions:
1. Close 50% position ($5,000)
2. Realized P&L: +$70 (+7% account)
3. Move SL to $140.21 (breakeven + 0.15%)
4. Trade now RISK-FREE
Status:
- Remaining Position: $5,000
- Realized Profit: +$70
- New SL: Breakeven (no risk!)
```
### TP2 Hit (+1.5%)
```
✅ Price reaches $142.10
Automatic Actions:
1. Close remaining 50% ($5,000)
2. Realized P&L: +$150 (+15% account)
Final Results:
- Total P&L: +$220 (+22% account)
- Win Rate: 100%
- Risk: $0 (was risk-free after TP1)
- Trade Duration: ~15-45 minutes
```
### Alternative: TP1 → SL at Breakeven
```
✅ TP1 hit, closed 50%, SL moved to BE
❌ Price reverses, hits $140.21
Automatic Actions:
1. Close remaining 50% at breakeven
Final Results:
- Total P&L: +$70 (+7% account)
- Win Rate: 100%
- Risk: $0 (SL was at breakeven)
```
### Worst Case: Direct SL Hit
```
❌ Price drops to $137.90
Automatic Actions:
1. Close 100% position immediately
Final Results:
- Total P&L: -$150 (-15% account)
- Loss contained to plan
- No emotional decisions
- Move on to next trade
```
---
## 🎯 Key Features
### Smart Risk Management
**TP1 Profit Taking (50%)**:
- Locks in partial profit
- Reduces position risk
- Moves SL to breakeven
- Lets remaining position run
**Dynamic Stop-Loss**:
- **After TP1**: Moves to breakeven (+0.15% for fees)
- **At +1.0% profit**: Moves to +0.4% profit
- **Never moves backward**: Only forward
- **Protects gains**: Ensures minimum profit
**Emergency Protection**:
- Hard stop at -2.0%
- Executes before normal SL
- Protects against flash crashes
- No questions asked
### Real-Time Monitoring
**Price Updates**:
- Pyth WebSocket: ~400ms latency
- RPC Polling: 2-second intervals
- Cached for instant access
- Reliable fallback system
**Exit Checks**:
- Every 2 seconds
- Prioritized: Emergency > SL > TP1 > TP2
- Market orders for instant execution
- Slippage tolerance: 1%
**Multi-Position**:
- Track multiple symbols
- Independent strategies
- Different parameters per trade
- Simultaneous monitoring
---
## 📊 API Endpoints
### POST /api/trading/execute
**Executes trade and starts monitoring**
Request:
```json
{
"symbol": "SOLUSDT",
"direction": "long",
"timeframe": "5"
}
```
Response:
```json
{
"success": true,
"message": "Position opened and monitoring started",
"trade": {
"id": "trade-1234567890",
"symbol": "SOL-PERP",
"direction": "long",
"entryPrice": 140.235,
"positionSize": 1000,
"leverage": 10,
"stopLossPrice": 137.90,
"tp1Price": 140.98,
"tp2Price": 142.10
}
}
```
### GET /api/trading/positions
**Query active positions**
Response:
```json
{
"success": true,
"monitoring": {
"isActive": true,
"tradeCount": 2,
"symbols": ["SOL-PERP", "BTC-PERP"]
},
"positions": [{
"id": "trade-1234567890",
"symbol": "SOL-PERP",
"direction": "long",
"entryPrice": 140.235,
"currentPrice": 140.521,
"unrealizedPnL": 20.36,
"profitPercent": 0.20,
"accountPnL": 2.04,
"tp1Hit": false,
"slMovedToBreakeven": false,
"positionSize": 10000,
"currentSize": 10000,
"leverage": 10,
"stopLossPrice": 137.90,
"tp1Price": 140.98,
"tp2Price": 142.10,
"entryTime": 1234567890000,
"lastUpdateTime": 1234567892000,
"priceCheckCount": 42
}]
}
```
---
## 🧪 Testing Phase 2
Three comprehensive test scripts included:
### 1. test-price-monitor.ts
Tests Pyth price monitoring
- WebSocket connection
- Update frequency
- Multi-symbol support
- Fallback system
```bash
npx tsx v4/test-price-monitor.ts
```
### 2. test-position-manager.ts
Tests position tracking and logic
- Trade tracking
- Exit condition checks
- Multi-position handling
- Status reporting
```bash
npx tsx v4/test-position-manager.ts
```
### 3. test-full-flow.ts
End-to-end test with real trade
- Complete autonomous flow
- Real Drift execution
- Live monitoring
- Automatic exits
```bash
npx tsx v4/test-full-flow.ts
```
See `TESTING.md` for detailed testing guide.
---
## 📝 Documentation
### New Documents:
-`PHASE_2_COMPLETE.md` - Feature overview
-`TESTING.md` - Comprehensive testing guide
- ✅ Updated `SETUP.md` - Phase 2 setup
### Existing Documents (Updated):
-`TRADING_BOT_V4_MANUAL.md` - Complete manual
-`QUICKSTART_V4.md` - Quick start guide
-`N8N_SETUP_GUIDE.md` - n8n configuration
---
## ⚙️ Configuration
### Environment Variables
```env
# Required
DRIFT_WALLET_PRIVATE_KEY=your_base58_key
SOLANA_RPC_URL=your_rpc_url
API_KEY=your_secret_key
# Optional (Defaults shown)
MAX_POSITION_SIZE_USD=1000
LEVERAGE=10
STOP_LOSS_PERCENT=-1.5
TAKE_PROFIT_1_PERCENT=0.7
TAKE_PROFIT_2_PERCENT=1.5
EMERGENCY_STOP_PERCENT=-2.0
BREAKEVEN_TRIGGER_PERCENT=0.4
PROFIT_LOCK_TRIGGER_PERCENT=1.0
PROFIT_LOCK_PERCENT=0.4
PRICE_CHECK_INTERVAL_MS=2000
SLIPPAGE_TOLERANCE=1.0
```
### Risk Parameters
Optimized for 5-minute scalping with 10x leverage:
- **Position**: $1,000 account capital
- **Leverage**: 10x ($10,000 notional)
- **SL**: -1.5% position = -$150 account (15%)
- **TP1**: +0.7% position = +$70 account (7%)
- **TP2**: +1.5% position = +$150 account (15%)
- **Emergency**: -2.0% position = -$200 hard stop (20%)
**Max Risk per Trade**: 15% of account
**Max Reward per Trade**: 22% of account (if both TPs hit)
**Risk/Reward Ratio**: 1:1.47
---
## 🚀 Production Ready
### What's Working:
- ✅ Fully autonomous trading
- ✅ Real-time price monitoring
- ✅ Automatic exit execution
- ✅ Multi-position support
- ✅ Dynamic risk management
- ✅ Emergency protection
- ✅ Robust error handling
- ✅ Comprehensive logging
### What's Optional (Phase 3):
- ⏳ Database persistence
- ⏳ Trade history
- ⏳ Risk manager enforcement
- ⏳ Enhanced notifications
- ⏳ Performance analytics
- ⏳ Web dashboard
**You can start trading NOW!**
---
## 📈 Expected Performance
### Target Metrics (5-Min Scalping):
- **Win Rate**: 60-70% (realistic for DEX)
- **Avg Win**: +7% to +22% account
- **Avg Loss**: -15% account
- **Trades/Day**: 5-15 (depends on signals)
- **Daily Target**: +2% to +5% account
- **Max Drawdown**: -15% per trade, -30% daily
### Sample Day:
```
Trade 1: +7% (TP1 only)
Trade 2: +22% (TP1 + TP2)
Trade 3: -15% (SL)
Trade 4: +7% (TP1 only)
Trade 5: +22% (TP1 + TP2)
Daily P&L: +43% 🎉
```
### Risk Management:
- Max 1-2 concurrent positions
- 10-minute cooldown between trades
- Max 6 trades per hour
- Max -15% loss per trade
- Daily stop at -30%
---
## 🎓 Next Steps
### Week 1: Supervised Trading
1. Run test scripts to validate
2. Execute 5-10 small trades ($10-50)
3. Watch each auto-exit in real-time
4. Verify SL moves after TP1
5. Check P&L matches Drift UI
### Week 2: Scale Up
1. Increase to $100-300 positions
2. Add more symbols (BTC, ETH)
3. Reduce monitoring frequency
4. Trust the automation
5. Track win rate and P&L
### Week 3: Full Automation
1. Let bot run unsupervised
2. Check positions 2-3x per day
3. Review daily P&L reports
4. Adjust parameters if needed
5. Prepare statistics for Phase 3
---
## 🐛 Known Limitations
1. **WebSocket may disconnect**
- Normal behavior
- Automatically reconnects
- Polling fallback takes over
- No impact on monitoring
2. **DEX Slippage**
- Market orders have 1% tolerance
- Large positions may slip more
- Stick to small-mid size
- Check fills on Drift UI
3. **RPC Rate Limits**
- Some RPCs limit requests
- Use paid RPC for production
- Helius recommended
- Fallback between sources
4. **No Position Persistence**
- Positions stored in memory
- Server restart = lose tracking
- Phase 3 adds database
- Won't lose Drift positions (safe)
---
## 🔒 Security Reminders
1. **Private Key Security**
- Never commit to git
- Use dedicated trading wallet
- Keep small balances
- Backup securely
2. **API Key Protection**
- Strong random key
- Not in public code
- Rotate regularly
- Monitor usage
3. **Position Sizing**
- Start small ($10-50)
- Max 2-5% of portfolio
- Never risk more than 20%
- Scale gradually
---
## 🎉 Congratulations!
You now have a **fully autonomous trading bot**!
### What You Built:
- ✅ 700+ lines of production code
- ✅ Real-time price monitoring
- ✅ Automatic position management
- ✅ Smart risk management
- ✅ Multi-position support
- ✅ Comprehensive testing
- ✅ Full documentation
### What It Does:
- Receives TradingView signals
- Opens positions on Drift
- Monitors prices in real-time
- Executes exits automatically
- Adjusts stops dynamically
- Protects your capital
- **Runs 24/7 without supervision!**
---
## 📞 Support
### Documentation:
- `PHASE_2_COMPLETE.md` - This file
- `TESTING.md` - Testing guide
- `SETUP.md` - Setup instructions
- `TRADING_BOT_V4_MANUAL.md` - Complete manual
### Common Issues:
- See `TESTING.md` troubleshooting section
- Check `.env.local` configuration
- Review console logs
- Verify Drift UI matches
---
**Phase 2 is COMPLETE! Time to watch it trade! 🚀**
*Remember: Start small, monitor closely, scale gradually!*

View File

@@ -0,0 +1,289 @@
# 🚀 Phase 2 Quick Reference
## What's New
**Fully Autonomous Trading**
- Opens positions from signals
- Monitors prices in real-time
- Closes automatically at TP/SL
- Adjusts stops dynamically
---
## Quick Start
### 1. Install
```bash
./install-phase2.sh
```
### 2. Configure
```bash
# Edit .env.local:
DRIFT_WALLET_PRIVATE_KEY=your_key
SOLANA_RPC_URL=your_rpc
API_KEY=your_secret
```
### 3. Test
```bash
cd v4
# Test price monitoring
npx tsx test-price-monitor.ts
# Test position manager
npx tsx test-position-manager.ts
# Test full flow (REAL TRADE!)
npx tsx test-full-flow.ts
```
### 4. Trade
```bash
# Start server
npm run dev
# Trigger TradingView alert
# Bot handles everything!
```
---
## Key Features
### Smart Exits
- **TP1 (+0.7%)**: Close 50%, move SL to breakeven
- **TP2 (+1.5%)**: Close remaining 50%
- **SL (-1.5%)**: Close 100%
- **Emergency (-2.0%)**: Hard stop
### Dynamic SL
- After TP1: Move to breakeven
- At +1.0% profit: Move to +0.4%
- Never moves backward
- Protects all gains
### Real-Time
- Pyth WebSocket (~400ms)
- Polling fallback (2s)
- Checks every 2 seconds
- Market orders for speed
---
## API Endpoints
### Execute Trade
```bash
POST /api/trading/execute
{
"symbol": "SOLUSDT",
"direction": "long",
"timeframe": "5"
}
```
### Get Positions
```bash
GET /api/trading/positions
```
---
## Trade Example
### Entry
```
Signal: LONG SOL @ $140.00
Position: $1,000 (10x = $10,000)
SL: $137.90 (-1.5% = -$150)
TP1: $140.98 (+0.7% = +$70)
TP2: $142.10 (+1.5% = +$150)
```
### TP1 Hit
```
✅ Price: $140.98
→ Close 50% (+$70)
→ Move SL to $140.21 (breakeven)
→ Risk = $0
```
### TP2 Hit
```
✅ Price: $142.10
→ Close 50% (+$150)
→ Total P&L: +$220 (+22%)
→ Trade complete!
```
---
## Testing Checklist
- [ ] Run install-phase2.sh
- [ ] Configure .env.local
- [ ] Test price monitor (no risk)
- [ ] Test position manager (no risk)
- [ ] Test full flow with $10-50 position
- [ ] Watch first 5-10 auto-exits
- [ ] Verify on Drift UI
- [ ] Scale up gradually
---
## Configuration
### Risk Parameters
```env
MAX_POSITION_SIZE_USD=1000
LEVERAGE=10
STOP_LOSS_PERCENT=-1.5
TAKE_PROFIT_1_PERCENT=0.7
TAKE_PROFIT_2_PERCENT=1.5
EMERGENCY_STOP_PERCENT=-2.0
```
### Monitoring
```env
PRICE_CHECK_INTERVAL_MS=2000
SLIPPAGE_TOLERANCE=1.0
```
---
## Troubleshooting
### "Cannot find module"
```bash
npm install @pythnetwork/price-service-client
```
### "Drift service not initialized"
```bash
# Check .env.local has:
DRIFT_WALLET_PRIVATE_KEY=...
SOLANA_RPC_URL=...
```
### "WebSocket disconnected"
```
Normal - will reconnect automatically
Polling fallback handles updates
```
### "Position not closing"
```
Check:
1. Is price hitting targets?
2. Are logs showing price checks?
3. Is position manager running?
Most likely: Targets not hit yet!
```
---
## Performance Targets
### 5-Minute Scalping
- **Win Rate**: 60-70%
- **Avg Win**: +7% to +22%
- **Avg Loss**: -15%
- **Daily Target**: +2% to +5%
- **Trades/Day**: 5-15
### Example Day
```
Trade 1: +7% (TP1)
Trade 2: +22% (TP1+TP2)
Trade 3: -15% (SL)
Trade 4: +7% (TP1)
Trade 5: +22% (TP1+TP2)
Daily: +43% 🎉
```
---
## Safety Rules
1. **Start small**: $10-50 positions
2. **Monitor closely**: First 10 trades
3. **Verify exits**: Check Drift UI
4. **Scale gradually**: Increase 2x weekly
5. **Max risk**: Never > 20% per trade
---
## Documentation
- `PHASE_2_COMPLETE.md` - Full features
- `PHASE_2_SUMMARY.md` - Overview
- `TESTING.md` - Testing guide
- `SETUP.md` - Setup instructions
- `TRADING_BOT_V4_MANUAL.md` - Complete manual
---
## What's Next (Phase 3)
- Database integration
- Trade history persistence
- Risk manager enforcement
- Enhanced notifications
- Performance analytics
- Web dashboard
**But you can trade NOW!**
---
## Support
### Common Commands
```bash
# Install Phase 2
./install-phase2.sh
# Test monitoring
cd v4 && npx tsx test-price-monitor.ts
# Test manager
cd v4 && npx tsx test-position-manager.ts
# Test full flow
cd v4 && npx tsx test-full-flow.ts
# Start server
npm run dev
# Check positions
curl http://localhost:3000/api/trading/positions \
-H "Authorization: Bearer YOUR_API_KEY"
```
### Files Changed
```
New:
+ v4/lib/pyth/price-monitor.ts
+ v4/lib/trading/position-manager.ts
+ v4/app/api/trading/positions/route.ts
+ v4/test-price-monitor.ts
+ v4/test-position-manager.ts
+ v4/test-full-flow.ts
+ v4/PHASE_2_COMPLETE.md
+ v4/PHASE_2_SUMMARY.md
+ v4/TESTING.md
+ install-phase2.sh
Updated:
~ v4/app/api/trading/execute/route.ts
~ v4/SETUP.md
```
---
**Phase 2 Complete! Let the bot trade! 🚀**
*Start small, monitor closely, scale gradually!*

View File

@@ -0,0 +1,66 @@
╔════════════════════════════════════════════════════════════════╗
║ TELEGRAM /status COMMAND ║
║ ✅ READY TO USE ║
╚════════════════════════════════════════════════════════════════╝
📱 HOW TO USE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. Open your Telegram bot chat
2. Send: /status
3. Get instant position info!
📊 WHAT YOU'LL SEE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ Current P&L ($ and % of account)
✅ Entry price & current price
✅ TP1, TP2, and SL levels with status
✅ Position size & leverage
✅ Trade age in minutes
🎯 EXAMPLE OUTPUT
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🟢 SOL-PERP 📈 LONG
💰 P&L: $3.50 (+0.70% account)
📊 Price Change: +0.07%
Entry: $142.5000
Current: $142.6000
Targets:
TP1: $143.4975 ⏳
TP2: $144.6375
SL: $140.3625
Position: $500.00 @ 10x
Age: 5 min
🔧 TECHNICAL STATUS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ Container: telegram-trade-bot (Running)
✅ Network: Connected to trading-bot-v4
✅ API: Authenticated & tested
✅ Command: /status handler active
📝 ALL COMMANDS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
/status → Show current position
/buySOL → Long SOL
/sellSOL → Short SOL
/buyBTC → Long BTC
/sellBTC → Short BTC
/buyETH → Long ETH
/sellETH → Short ETH
🔐 SECURITY
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ Only works in YOUR chat (579304651)
✅ API authentication required
✅ Internal Docker network
✅ No internet exposure
🎉 READY!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Open Telegram and send /status to try it now!
Next: Open a position, then check /status to see it in action! 🚀

View File

@@ -0,0 +1,172 @@
# Telegram /status Command - Implementation Summary
## ✅ **Feature Complete**
You can now send `/status` in your Telegram channel to get real-time information about your open position on Drift Protocol.
---
## 📊 What You'll See
### When No Position Is Open:
```
📊 No open positions
All clear! Ready for new signals.
```
### When You Have an Open Position:
```
🟢 SOL-PERP 📈 LONG
💰 P&L: $3.50 (+0.70% account)
📊 Price Change: +0.07%
Entry: $142.5000
Current: $142.6000
Targets:
TP1: $143.4975 ✅ (if hit)
TP2: $144.6375 ⏳
SL: $140.3625
Position: $500.00 @ 10x
Age: 5 min
```
### Legend:
- 🟢 = Profit | 🔴 = Loss | ⚪ = Breakeven
- 📈 = Long | 📉 = Short
- ✅ = Target hit | ⏳ = Pending
---
## 🚀 How to Use
1. Open your Telegram bot chat
2. Send: `/status`
3. Get instant position info!
You can send it anytime - while trading, after hours, whenever you want to check your position.
---
## 🔧 What Changed
### Files Modified:
1. **`telegram_command_bot.py`**
- Added `status_command()` function
- Fetches data from trading bot API
- Formats beautiful status messages
2. **`docker-compose.telegram-bot.yml`**
- Added `TRADING_BOT_URL` environment variable
- Added `API_SECRET_KEY` environment variable
3. **`.env.telegram-bot`**
- Added trading bot URL (internal Docker network)
- Added API secret key for authentication
### New Environment Variables:
```bash
TRADING_BOT_URL=http://trading-bot-v4:3000
API_SECRET_KEY=2a344f0149442c857fb56c038c0c7d1b113883b830bec792c76f1e0efa15d6bb
```
---
## ✅ Verification
**Container Status:**
```bash
docker ps | grep telegram-trade-bot
# Output: Up About a minute
```
**Bot Logs:**
```bash
docker logs telegram-trade-bot --tail 10
# Shows: ✅ Commands: /status - Show open positions
```
**API Connectivity Test:**
```bash
docker exec telegram-trade-bot python3 -c "import requests; r=requests.get('http://trading-bot-v4:3000/api/trading/positions', headers={'Authorization': 'Bearer 2a344f0149442c857fb56c038c0c7d1b113883b830bec792c76f1e0efa15d6bb'}); print(r.status_code)"
# Output: 200 ✅
```
---
## 🎯 Live Example Use Cases
### Morning Check:
```
You: /status
Bot: 🟢 SOL-PERP 📈 LONG
💰 P&L: $8.25 (+1.65% account)
TP1: $143.50 ✅
Runner position active!
```
### During Volatile Move:
```
You: /status
Bot: 🔴 SOL-PERP 📈 LONG
💰 P&L: -$3.75 (-0.75% account)
Current: $141.80
SL: $140.36 (still safe!)
```
### Multiple Times Per Day:
- Check before meetings
- Monitor during lunch
- Quick check before bed
- Anytime you're curious!
---
## 🔐 Security
**Only works in YOUR Telegram chat** (TELEGRAM_CHAT_ID=579304651)
**Requires API authentication** (API_SECRET_KEY)
**Internal Docker network** (not exposed to internet)
**Same security as main trading bot**
---
## 📝 Available Commands
Your Telegram bot now supports:
| Command | Description |
|---------|-------------|
| `/status` | Show current open position |
| `/buySOL` | Open long SOL position |
| `/sellSOL` | Open short SOL position |
| `/buyBTC` | Open long BTC position |
| `/sellBTC` | Open short BTC position |
| `/buyETH` | Open long ETH position |
| `/sellETH` | Open short ETH position |
---
## 🎉 Ready to Use!
Your Telegram bot is running and ready. Just send `/status` to try it out!
**Container:** `telegram-trade-bot` ✅ Running
**Network:** Connected to `trading-bot-v4`
**API:** Authenticated and tested ✅
**Commands:** `/status` handler active ✅
---
## 📚 Documentation Updated
-`TELEGRAM_BOT_README.md` - Updated with /status usage
-`TEST_STATUS_COMMAND.md` - Testing guide
-`TELEGRAM_STATUS_IMPLEMENTATION.md` - This file
---
**Next time you open a position, send `/status` to see it in action!** 🚀

View File

@@ -0,0 +1,110 @@
# Testing the /status Command
## ✅ Feature Implemented
The Telegram bot now supports the `/status` command to show current open positions.
## What It Shows
When you send `/status` in your Telegram chat, you'll receive:
### If No Positions Are Open:
```
📊 No open positions
All clear! Ready for new signals.
```
### If Position Is Open:
```
🟢 SOL-PERP 📈 LONG
💰 P&L: $3.50 (+0.70% account)
📊 Price Change: +0.07%
Entry: $142.5000
Current: $142.6000
Targets:
TP1: $143.4975 ⏳
TP2: $144.6375
SL: $140.3625
Position: $500.00 @ 10x
Age: 5 min
```
### Emojis Used:
- 🟢 Green = Position in profit
- 🔴 Red = Position in loss
- ⚪ White = Breakeven
- 📈 = Long position
- 📉 = Short position
- ✅ = Target hit
- ⏳ = Target pending
## Technical Details
### How It Works:
1. User sends `/status` in Telegram
2. Bot calls `GET /api/trading/positions` on trading-bot-v4:3000
3. Bot parses response and formats position data
4. Bot sends formatted message back to user
### Files Modified:
- `telegram_command_bot.py` - Added `status_command()` handler
- `docker-compose.telegram-bot.yml` - Added environment variables
- `.env.telegram-bot` - Added `TRADING_BOT_URL` and `API_SECRET_KEY`
### Environment Variables Required:
```bash
TRADING_BOT_URL=http://trading-bot-v4:3000
API_SECRET_KEY=<same as main .env file>
```
## Testing
### 1. Test from Terminal (API):
```bash
curl -H "Authorization: Bearer YOUR_API_SECRET_KEY" \
http://localhost:3001/api/trading/positions | jq .
```
### 2. Test from Telegram:
- Open your Telegram bot chat
- Send: `/status`
- Should receive position info or "No open positions"
### 3. Test with Active Position:
- Execute a test trade first:
- Send `/buySOL` or use settings page "Test LONG"
- Then send `/status`
- Should see full position details
## Verification
✅ Container running:
```bash
docker ps | grep telegram-trade-bot
```
✅ Logs showing /status handler:
```bash
docker logs telegram-trade-bot --tail 20
```
✅ Network connectivity:
```bash
docker exec telegram-trade-bot python3 -c "import requests; r=requests.get('http://trading-bot-v4:3000/api/trading/positions', headers={'Authorization': 'Bearer YOUR_KEY'}); print(r.status_code)"
```
Should output: `200`
## Next Steps
You can now monitor your positions in real-time from your phone!
Just send `/status` anytime to check:
- Current P&L
- How close you are to TP/SL
- How long the trade has been open

557
docs/setup/DOCKER.md Normal file
View File

@@ -0,0 +1,557 @@
# Trading Bot v4 - Docker Deployment Guide
Complete guide for containerized deployment with Docker and Docker Compose.
---
## 📋 Table of Contents
1. [Quick Start](#quick-start)
2. [Production Deployment](#production-deployment)
3. [Development Setup](#development-setup)
4. [Configuration](#configuration)
5. [Docker Commands](#docker-commands)
6. [Troubleshooting](#troubleshooting)
7. [Best Practices](#best-practices)
---
## 🚀 Quick Start
### Prerequisites
```bash
# Install Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# Install Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# Verify installation
docker --version
docker-compose --version
```
### Minimal Setup (Production)
```bash
# 1. Navigate to v4 directory
cd v4
# 2. Create .env file from template
cp .env.example .env
# 3. Edit .env with your credentials
nano .env # or vim, code, etc.
# 4. Build and start
docker-compose up -d
# 5. View logs
docker-compose logs -f trading-bot
# 6. Check status
docker-compose ps
```
---
## 🏭 Production Deployment
### Step 1: Prepare Environment
```bash
cd v4
# Create production .env file
cp .env.example .env
# Edit required fields (minimum required)
DRIFT_WALLET_PRIVATE_KEY=your_base58_private_key
SOLANA_RPC_URL=https://mainnet.helius-rpc.com/?api-key=YOUR_KEY
API_SECRET_KEY=$(openssl rand -hex 32)
PYTH_HERMES_URL=https://hermes.pyth.network
# Trading config (safe defaults)
MAX_POSITION_SIZE_USD=50
LEVERAGE=10
DRY_RUN=false
# Database password (if using PostgreSQL)
POSTGRES_PASSWORD=$(openssl rand -hex 16)
```
### Step 2: Build Image
```bash
# Build with cache
docker-compose build
# Build without cache (clean build)
docker-compose build --no-cache
# Build with progress output
docker-compose build --progress=plain
```
### Step 3: Start Services
```bash
# Start all services in background
docker-compose up -d
# Start specific service
docker-compose up -d trading-bot
# Start with recreation (force restart)
docker-compose up -d --force-recreate
```
### Step 4: Verify Deployment
```bash
# Check running containers
docker-compose ps
# View logs
docker-compose logs -f trading-bot
# Check health
docker-compose exec trading-bot wget -qO- http://localhost:3000/api/health
# Test API
curl -H "Authorization: Bearer YOUR_API_KEY" \
http://localhost:3000/api/trading/positions
```
### Step 5: Monitor
```bash
# Follow logs in real-time
docker-compose logs -f
# View resource usage
docker stats
# Check container details
docker inspect trading-bot-v4
```
---
## 🔧 Development Setup
### Hot Reload Development
```bash
cd v4
# Create dev .env
cp .env.example .env
# Set to devnet for safety
echo "DRIFT_ENV=devnet" >> .env
echo "DRY_RUN=true" >> .env
echo "MAX_POSITION_SIZE_USD=10" >> .env
# Start development container
docker-compose -f docker-compose.dev.yml up
# Rebuild on code changes
docker-compose -f docker-compose.dev.yml up --build
```
### Debug Mode
```bash
# Start with Node.js debugger
docker-compose -f docker-compose.dev.yml up
# Attach debugger in VS Code:
# 1. Open Debug panel (Ctrl+Shift+D)
# 2. Select "Attach to Docker"
# 3. Set breakpoints
# 4. Start debugging
# Or use Chrome DevTools:
# Open: chrome://inspect
# Click: "Configure" → Add localhost:9229
```
### Run Tests in Container
```bash
# Execute tests
docker-compose exec trading-bot npm test
# Run specific test
docker-compose exec trading-bot npx tsx v4/test-price-monitor.ts
# Shell access for manual testing
docker-compose exec trading-bot sh
```
---
## ⚙️ Configuration
### Environment Variables
Create `.env` file in `v4/` directory:
```env
# Required
DRIFT_WALLET_PRIVATE_KEY=your_key
SOLANA_RPC_URL=your_rpc
API_SECRET_KEY=your_secret
# Optional overrides
MAX_POSITION_SIZE_USD=50
LEVERAGE=10
LOG_LEVEL=info
```
See `.env.example` for complete list.
### Docker Compose Override
Create `docker-compose.override.yml` for local customizations:
```yaml
version: '3.9'
services:
trading-bot:
ports:
- "3001:3000" # Use different port
environment:
LOG_LEVEL: debug # More verbose logging
volumes:
- ./custom-config:/app/config # Custom config directory
```
### Resource Limits
Edit `docker-compose.yml`:
```yaml
deploy:
resources:
limits:
cpus: '2' # Max 2 CPU cores
memory: 2G # Max 2GB RAM
reservations:
cpus: '1' # Reserve 1 core
memory: 1G # Reserve 1GB
```
---
## 🎮 Docker Commands Reference
### Container Management
```bash
# Start services
docker-compose up -d
# Stop services
docker-compose stop
# Stop and remove containers
docker-compose down
# Restart specific service
docker-compose restart trading-bot
# View container status
docker-compose ps
# View resource usage
docker stats trading-bot-v4
```
### Logs & Debugging
```bash
# View all logs
docker-compose logs
# Follow logs in real-time
docker-compose logs -f trading-bot
# Last 100 lines
docker-compose logs --tail=100 trading-bot
# Logs since timestamp
docker-compose logs --since 2024-10-23T10:00:00
# Shell access
docker-compose exec trading-bot sh
# Run command in container
docker-compose exec trading-bot node -v
```
### Database Operations
```bash
# Access PostgreSQL CLI
docker-compose exec postgres psql -U postgres -d trading_bot_v4
# Backup database
docker-compose exec postgres pg_dump -U postgres trading_bot_v4 > backup.sql
# Restore database
docker-compose exec -T postgres psql -U postgres trading_bot_v4 < backup.sql
# View database logs
docker-compose logs postgres
```
### Cleanup
```bash
# Stop and remove containers
docker-compose down
# Remove containers and volumes
docker-compose down -v
# Remove everything including images
docker-compose down --rmi all -v
# Clean up unused Docker resources
docker system prune -a
```
### Image Management
```bash
# Build image
docker-compose build
# Rebuild without cache
docker-compose build --no-cache
# Pull latest base images
docker-compose pull
# View images
docker images | grep trading-bot
# Remove old images
docker rmi trading-bot-v4:old
```
---
## 🔍 Troubleshooting
### Container Won't Start
```bash
# Check logs for errors
docker-compose logs trading-bot
# Verify environment variables
docker-compose config
# Check if port is already in use
sudo lsof -i :3000
# Rebuild from scratch
docker-compose down -v
docker-compose build --no-cache
docker-compose up -d
```
### Connection Issues
```bash
# Test internal network
docker-compose exec trading-bot ping postgres
# Check exposed ports
docker-compose port trading-bot 3000
# Verify RPC connection
docker-compose exec trading-bot wget -qO- $SOLANA_RPC_URL
# Test Pyth connection
docker-compose exec trading-bot wget -qO- https://hermes.pyth.network
```
### Performance Issues
```bash
# Check resource usage
docker stats
# View container processes
docker top trading-bot-v4
# Increase resources in docker-compose.yml
deploy:
resources:
limits:
cpus: '2'
memory: 2G
# Restart with new limits
docker-compose up -d
```
### Database Issues
```bash
# Check database health
docker-compose exec postgres pg_isready
# View database connections
docker-compose exec postgres psql -U postgres -c "SELECT * FROM pg_stat_activity"
# Reset database
docker-compose down -v postgres
docker-compose up -d postgres
```
### Permission Issues
```bash
# Fix volume permissions
sudo chown -R 1001:1001 ./logs
sudo chmod -R 755 ./logs
# Run as root (not recommended)
docker-compose run --user root trading-bot sh
```
---
## ✅ Best Practices
### Security
1. **Never commit .env files**
```bash
echo ".env" >> .gitignore
echo ".env.*" >> .gitignore
```
2. **Use secrets for sensitive data**
```yaml
services:
trading-bot:
secrets:
- drift_private_key
secrets:
drift_private_key:
file: ./secrets/drift_key.txt
```
3. **Run as non-root user** (already configured in Dockerfile)
4. **Limit container capabilities**
```yaml
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE
```
### Performance
1. **Use multi-stage builds** (already configured)
2. **Mount volumes for persistence**
```yaml
volumes:
- ./logs:/app/logs
- postgres-data:/var/lib/postgresql/data
```
3. **Set resource limits**
```yaml
deploy:
resources:
limits:
memory: 1G
```
4. **Use BuildKit for faster builds**
```bash
DOCKER_BUILDKIT=1 docker-compose build
```
### Monitoring
1. **Health checks** (already configured)
2. **Log rotation**
```yaml
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
```
3. **Metrics collection**
```bash
# Export container metrics
docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"
```
### Deployment
1. **Use tagged images**
```bash
docker tag trading-bot-v4:latest trading-bot-v4:1.0.0
```
2. **Automated backups**
```bash
# Backup script
docker-compose exec postgres pg_dump -U postgres trading_bot_v4 | \
gzip > backup-$(date +%Y%m%d).sql.gz
```
3. **Blue-green deployment**
```bash
# Start new version on different port
docker-compose -f docker-compose.blue.yml up -d
# Test new version
curl http://localhost:3001/api/health
# Switch traffic (nginx/traefik)
# Stop old version
docker-compose -f docker-compose.green.yml down
```
---
## 🔗 Additional Resources
- **Docker Docs**: https://docs.docker.com
- **Docker Compose**: https://docs.docker.com/compose
- **Node.js Docker**: https://nodejs.org/en/docs/guides/nodejs-docker-webapp
- **Next.js Docker**: https://nextjs.org/docs/deployment#docker-image
---
## 📞 Support
For issues specific to:
- **Docker setup**: Check this guide first
- **Trading bot**: See `../TRADING_BOT_V4_MANUAL.md`
- **Phase 2 features**: See `PHASE_2_COMPLETE.md`
- **Testing**: See `TESTING.md`
---
**Ready to deploy! 🚀**

View File

@@ -0,0 +1,317 @@
# n8n Database Integration Setup Guide
## Overview
This guide shows you how to connect your n8n instance to the Trading Bot v4 PostgreSQL database for automated analysis and insights.
## Database Connection Details
⚠️ **IMPORTANT:** n8n is on a **different Docker network** than the trading bot postgres. You MUST use the host machine IP or localhost.
### ✅ CORRECT Connection (n8n is on different network)
```
Type: PostgreSQL
Host: host.docker.internal (or your machine's IP like 172.18.0.1)
Port: 5432
Database: trading_bot_v4
User: postgres
Password: postgres
SSL Mode: disable
```
### Alternative: Use localhost with host networking
If `host.docker.internal` doesn't work, find your docker network gateway:
```bash
docker inspect n8n --format '{{range .NetworkSettings.Networks}}{{.Gateway}}{{end}}'
# Result: 172.18.0.1 (use this as Host)
```
### Network Details (for reference)
- **n8n network:** `compose_files_default` (172.18.0.0/16)
- **Trading bot network:** `traderv4_trading-net` (172.28.0.0/16)
- **PostgreSQL container:** `trading-bot-postgres` on traderv4_trading-net (172.28.0.2)
- **PostgreSQL exposed port:** 5432 → localhost:5432
Since they're on different networks, use the **host machine as bridge**.
## Setup Steps
### 1. Access n8n
Open your browser and navigate to:
```
http://localhost:8098
```
### 2. Create PostgreSQL Credential
1. Click on **Credentials** in the left sidebar
2. Click **Add Credential**
3. Search for **Postgres** and select it
4. Fill in the connection details (see above)
5. Name it: **Trading Bot Database**
6. Click **Test Connection** to verify
7. Click **Save**
### 3. Import Workflows
Four pre-built workflow templates are ready in your workspace:
#### A. Database Analytics (n8n-database-analytics.json)
**Purpose:** Query and analyze closed trades with statistical calculations
**Features:**
- Fetches last 100 closed trades
- Calculates win rate, P&L, profit factor
- Breaks down by symbol, direction, and exit reason
- Identifies best performing setups
**To import:**
1. Go to **Workflows****Add Workflow**
2. Click **...** menu → **Import from File**
3. Select `n8n-database-analytics.json`
4. Update PostgreSQL node to use "Trading Bot Database" credential
5. Click **Save**
6. Click **Execute Workflow** to test
#### B. Daily Trading Report (n8n-daily-report.json)
**Purpose:** Automated daily summary at midnight (stores in DailyStats table)
**Features:**
- Runs automatically at 00:05 every day
- Calculates yesterday's performance
- Breaks down by symbol
- Stores in DailyStats table for historical tracking
- Calculates win rate, profit factor, avg hold time
**To import:**
1. Import workflow from file
2. Update both PostgreSQL nodes with "Trading Bot Database" credential
3. **Activate** the workflow (toggle in top right)
4. Will run automatically at midnight
#### C. Pattern Analysis (n8n-pattern-analysis.json)
**Purpose:** Discover which times/conditions produce best results
**Features:**
- **Hourly Analysis:** Which hours have best win rate
- **Daily Analysis:** Which days perform best
- **Hold Time Analysis:** Optimal position duration
- Generates actionable recommendations
**Example insights:**
- "Focus trading around 14:00-16:00 (75% win rate)"
- "Trade more on Tuesday, avoid Friday"
- "Target exits in 15-30 min range"
**To import:**
1. Import workflow
2. Update all 3 PostgreSQL nodes with credential
3. Run manually to see insights
#### D. Stop Loss Analysis (n8n-stop-loss-analysis.json)
**Purpose:** Optimize stop loss distances and understand exit patterns
**Features:**
- Exit reason breakdown (stopped out vs targets hit)
- Stop distance effectiveness (tight vs wide stops)
- Symbol-specific stop performance
- Calculates profit factor (avg win / avg loss)
- Recommendations for stop optimization
**Example insights:**
- "⚠️ High stop hit rate - consider wider stops"
- "💡 Normal (1-1.5%) stops perform 45% better than tight stops"
- "✅ Risk/reward ratio is positive"
**To import:**
1. Import workflow
2. Update all 3 PostgreSQL nodes with credential
3. Run manually to analyze
## Database Schema Reference
### Trade Table (Main table)
Key fields for analysis:
```sql
id, symbol, direction, entryPrice, exitPrice, quantity,
notionalSize, realizedPnL, realizedPnLPercent,
entryTime, exitTime, holdTimeSeconds,
stopLossPrice, takeProfitPrice1, takeProfitPrice2,
exitReason, status, isTestTrade
```
### Common Queries
#### Get all closed trades (last 30 days)
```sql
SELECT * FROM "Trade"
WHERE status = 'closed'
AND "isTestTrade" = false
AND "entryTime" >= NOW() - INTERVAL '30 days'
ORDER BY "entryTime" DESC;
```
#### Calculate win rate
```sql
SELECT
COUNT(*) as total_trades,
COUNT(CASE WHEN "realizedPnL" > 0 THEN 1 END) as wins,
ROUND(COUNT(CASE WHEN "realizedPnL" > 0 THEN 1 END)::numeric / COUNT(*) * 100, 2) as win_rate
FROM "Trade"
WHERE status = 'closed' AND "isTestTrade" = false;
```
#### Best performing symbols
```sql
SELECT
symbol,
COUNT(*) as trades,
SUM("realizedPnL") as total_pnl,
AVG("realizedPnL") as avg_pnl
FROM "Trade"
WHERE status = 'closed' AND "isTestTrade" = false
GROUP BY symbol
ORDER BY total_pnl DESC;
```
## Workflow Automation Ideas
### 1. Performance Alerts
**Trigger:** Schedule (every 6 hours)
**Query:** Check if win rate drops below 50% in last 24h
**Action:** Send Telegram notification to pause trading
### 2. Best Setup Detector
**Trigger:** Manual or daily
**Query:** Find symbol + direction + time combinations with >70% win rate
**Action:** Save insights to config for bot to prioritize
### 3. Drawdown Monitor
**Trigger:** After each trade (webhook)
**Query:** Calculate rolling 10-trade P&L
**Action:** Auto-reduce position size if in drawdown
### 4. Exit Optimization
**Trigger:** Weekly
**Query:** Compare TP1 vs TP2 hit rates and P&L
**Action:** Recommend adjustment to TP levels
## Connecting Workflows to Trading Bot
### Webhook from Trading Bot to n8n
In your n8n workflow:
1. Add **Webhook** trigger node
2. Set HTTP Method: POST
3. Note the webhook URL: `http://localhost:8098/webhook/your-unique-id`
In trading bot code (e.g., after trade closes):
```typescript
// Send trade data to n8n for analysis
await fetch('http://localhost:8098/webhook/your-unique-id', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
tradeId: trade.id,
symbol: trade.symbol,
pnl: trade.realizedPnL,
exitReason: trade.exitReason
})
});
```
### Update Bot Config from n8n
In your n8n workflow (after analysis):
1. Add **HTTP Request** node
2. URL: `http://trading-bot-v4:3000/api/settings`
3. Method: POST
4. Body: Updated config based on analysis
Example - adjust stop loss based on analysis:
```json
{
"STOP_LOSS_PERCENT": 1.5,
"USE_DUAL_STOPS": true
}
```
## Advanced Use Cases
### Machine Learning Integration
Use n8n to:
1. Export trade data to CSV
2. Send to Python ML service via HTTP
3. Receive predictions
4. Update bot configuration
### Multi-Timeframe Analysis
Create workflow that:
1. Queries trades by hour/day/week
2. Identifies patterns at each timeframe
3. Generates trading schedule recommendations
### Risk Management Automation
Build workflow that:
1. Monitors account balance
2. Calculates daily/weekly profit target
3. Auto-pauses bot after hitting target
4. Resumes trading next day/week
## Troubleshooting
### Connection Refused
- Verify PostgreSQL container is running: `docker ps | grep postgres`
- Check port mapping: `docker port trading-bot-postgres`
- Ensure n8n and postgres are on same Docker network
### Query Timeouts
- Add indexes to frequently queried columns
- Limit result sets with `LIMIT` clause
- Use date range filters to reduce dataset
### Empty Results
- Check `isTestTrade` filter (you may want to include test trades for testing)
- Verify date range in queries
- Ensure trades have been closed (`status = 'closed'`)
## Testing Your Setup
### Quick Test Query
In n8n, create a workflow with:
1. Manual Trigger
2. PostgreSQL node with query:
```sql
SELECT COUNT(*) as total_trades,
MAX("entryTime") as last_trade
FROM "Trade";
```
3. Execute and verify results
### Verify Test Trade Flag
```sql
SELECT
"isTestTrade",
COUNT(*) as count
FROM "Trade"
GROUP BY "isTestTrade";
```
Expected output:
- `false`: Production trades
- `true`: Test trades from /api/trading/test-db
## Next Steps
1. **Import all 4 workflows** and test each one
2. **Activate the Daily Report** workflow for automated tracking
3. **Run Pattern Analysis** to discover your best trading times
4. **Run Stop Loss Analysis** to optimize risk management
5. **Create custom workflows** based on your specific needs
## Support
If you encounter issues:
1. Check n8n logs: `docker logs n8n`
2. Check postgres logs: `docker logs trading-bot-postgres`
3. Test database connection from host: `psql -h localhost -p 5432 -U postgres -d trading_bot_v4`
4. Verify bot is writing to database: Check `/analytics` page in web UI
---
**Pro Tip:** Start with the Pattern Analysis workflow to understand your trading patterns, then use those insights to create automated optimization workflows!

View File

@@ -0,0 +1,213 @@
# n8n Trading Bot v4 Workflow - Setup Instructions
## Step 1: Create API Credential in n8n
1. Go to n8n → **Credentials****New Credential**
2. Search for **"Header Auth"**
3. Configure:
- **Name**: `Trading Bot API Key`
- **Name** (field): `Authorization`
- **Value**: `Bearer 2a344f0149442c857fb56c038c0c7d1b113883b830bec792c76f1e0efa15d6bb`
4. Click **Save**
## Step 2: Update Your Telegram Credential
Make sure your Telegram Bot credential exists in n8n:
- **Credential Name**: `Telegram Bot`
- **Chat ID**: `579304651` (or change in workflow to your ID)
## Step 3: Import the Workflow
1. Download: `/home/icke/traderv4/n8n-complete-workflow.json`
2. Go to n8n → **Workflows****Import from File**
3. Select the downloaded JSON file
4. Click **Import**
## Step 4: Configure Credentials
After importing, update the credential references:
### For "Check Risk" and "Execute Trade" nodes:
- Click on the node
- Under **Authentication****Credential for Header Auth**
- Select: `Trading Bot API Key` (the one you created in Step 1)
### For all Telegram nodes:
- Click on each Telegram node
- Under **Credential for Telegram API**
- Select your Telegram Bot credential
## Step 5: Test the Webhook
1. **Activate** the workflow
2. Get the webhook URL (shown in the Webhook node)
3. Test with curl:
```bash
curl -X POST "https://your-n8n-instance.com/webhook/tradingview-bot-v4" \\
-H "Content-Type: application/json" \\
-d '{"body": "Buy SOL | Entry: 140.50"}'
```
## Workflow Flow
```
TradingView Alert
[Webhook] Receives signal
[Parse Signal] Extracts data (symbol, direction, timeframe)
[Check Risk] Validates trade (API call)
[Risk Passed?] Decision
↓ ↓
YES NO
↓ ↓
[Execute Trade] [Risk Blocked Message]
[Trade Success?] Decision
↓ ↓
SUCCESS FAILED
↓ ↓
[Success Msg] [Error Msg]
```
## Expected Telegram Notifications
### Success Message:
```
🟢 TRADE OPENED SUCCESSFULLY
Buy SOL | Entry: 140.50
📊 Symbol: SOL-PERP
📈 Direction: LONG
💰 Entry: $140.5000
💵 Size: $500.00
⚡ Leverage: 10x
🎯 Take Profit:
TP1: $141.48 (+0.7%)
TP2: $142.63 (+1.5%)
🛑 Stop Loss:
SL: $138.39 (-1.5%)
📊 Slippage: 0.023%
⏰ 14:32
✅ Position monitored automatically
🤖 Auto-exit at TP/SL levels
```
### Risk Blocked Message:
```
⚠️ TRADE BLOCKED - RISK LIMITS
Buy SOL | Entry: 140.50
📊 Symbol: SOL-PERP
📈 Direction: LONG
🛑 Reason: Daily drawdown limit reached
📝 Details: Check risk management settings
⏰ 14:32
✅ Trade will be allowed when conditions improve
```
### Error Message:
```
🔴 TRADE EXECUTION FAILED
Buy SOL | Entry: 140.50
📊 Symbol: SOL-PERP
📈 Direction: LONG
❌ Error: Drift wallet not configured
⏰ 14:32
⚠️ Check bot logs:
docker logs trading-bot-v4 --tail=50
```
## TradingView Alert Format
Your TradingView alerts should send data in this format:
**Simple format (recommended):**
```
Buy SOL | Entry: 140.50
```
or
```
Sell BTC | Entry: 67890.00
```
The workflow will automatically detect:
- **Symbol**: SOL, BTC, ETH (defaults to SOL if not found)
- **Direction**: Buy/Long → long, Sell/Short → short
- **Timeframe**: Fixed at 5 minutes
## API Endpoints Used
1. **Risk Check**: `http://10.0.0.48:3001/api/trading/check-risk`
- Method: POST
- Body: `{"symbol": "SOL-PERP", "direction": "long"}`
2. **Execute Trade**: `http://10.0.0.48:3001/api/trading/execute`
- Method: POST
- Body: `{"symbol": "SOL-PERP", "direction": "long", "timeframe": "5", "signalStrength": "strong"}`
## Troubleshooting
### "Connection refused" error:
- Check if trading bot is running: `docker ps | grep trading-bot`
- Verify the bot is accessible: `curl http://10.0.0.48:3001/api/trading/positions`
### "Unauthorized" error:
- Check API key credential is set correctly
- Verify the Bearer token format: `Bearer <your-api-key>`
### Telegram not sending:
- Verify your Telegram bot token is valid
- Check chat ID is correct (must be a number)
- Test Telegram node independently
### No response from webhook:
- Make sure workflow is **activated**
- Check webhook path matches your TradingView alert
- Verify n8n is accessible from TradingView
## Quick Commands
```bash
# Check bot status
docker ps | grep trading-bot
# View bot logs
docker logs trading-bot-v4 --tail=50 -f
# Test API directly
curl -X POST http://10.0.0.48:3001/api/trading/check-risk \\
-H "Authorization: Bearer 2a344f0149442c857fb56c038c0c7d1b113883b830bec792c76f1e0efa15d6bb" \\
-H "Content-Type: application/json" \\
-d '{"symbol":"SOL-PERP","direction":"long"}'
# Check active positions
curl http://localhost:3001/api/trading/positions \\
-H "Authorization: Bearer 2a344f0149442c857fb56c038c0c7d1b113883b830bec792c76f1e0efa15d6bb"
```
## Next Steps
1. ✅ Import workflow
2. ✅ Configure credentials
3. ✅ Activate workflow
4. ⚠️ Configure Drift wallet in trading bot (see main README.md)
5. 🚀 Set up TradingView alerts
6. 💰 Start trading!

View File

@@ -0,0 +1,60 @@
# Settings Management Setup
## Initial Setup
After deploying the trading bot, you need to make the `.env` file writable by the container:
```bash
chmod 666 /home/icke/traderv4/.env
```
This allows the web UI to save settings changes directly to the `.env` file.
## Security Note
The `.env` file contains sensitive information (private keys, API keys). The file permissions of `666` (rw-rw-rw-) allow the containerized application to write settings, but the file is still protected by:
1. File system permissions (only accessible on the host)
2. Docker isolation (container runs as non-root user)
3. Network isolation (not exposed to internet)
For production environments, consider:
- Using secrets management (e.g., Docker secrets, Kubernetes secrets)
- Environment variable injection from secure vaults
- Read-only .env with separate settings database
## How It Works
1. User edits settings in web UI at http://10.0.0.48:3001/settings
2. Click "Save Settings" → API writes to `/app/.env` (mounted from host)
3. Click "Restart Bot" → Watcher restarts container
4. Container reloads settings from updated .env file
5. New configuration takes effect
## Take Profit Configuration
You can now customize BOTH the price level AND the position size for each TP:
### TP1 (Take Profit 1)
- **Price %**: When to trigger the exit (e.g., +0.7% = exit at 0.7% profit)
- **Size %**: What % of position to close (e.g., 60 = close 60% of position)
### TP2 (Take Profit 2)
- **Price %**: When to trigger the second exit (e.g., +1.5% = exit at 1.5% profit)
- **Size %**: What % of REMAINING position to close (e.g., 100 = close rest)
### Example Strategy
**Conservative (70/30 split):**
- TP1: +0.5% price, 70% size → Lock in most profit early
- TP2: +2.0% price, 30% size → Let remainder run
**Aggressive (30/70 split):**
- TP1: +1.0% price, 30% size → Take small profit
- TP2: +3.0% price, 70% size → Let most position run for bigger gains
**Balanced (50/50 split - default):**
- TP1: +0.7% price, 50% size
- TP2: +1.5% price, 50% size
The risk calculator in the web UI will dynamically show expected gains based on your settings.

315
docs/setup/SETUP.md Normal file
View File

@@ -0,0 +1,315 @@
# Trading Bot v4 - Setup Instructions
## <20> Phase Overview
- **Phase 1**: Basic trade execution (✅ COMPLETE)
- **Phase 2**: Automatic exits with real-time monitoring (✅ COMPLETE)
- **Phase 3**: Database, risk manager, notifications (Coming soon)
## <20>🚀 Quick Setup
### 1. Install Dependencies
Since v4 uses the existing project structure, dependencies should already be installed. If not:
```bash
npm install
```
Required packages (should already be in package.json):
- `@solana/web3.js`
- `@coral-xyz/anchor`
- `@drift-labs/sdk`
- `@pythnetwork/price-service-client` (for Phase 2 price monitoring)
### 2. Configure Environment Variables
Add these to your `.env.local`:
```env
# Drift Trading (v4)
DRIFT_WALLET_PRIVATE_KEY=your_base58_private_key_here
DRIFT_ENV=mainnet-beta
API_SECRET_KEY=your_random_secret_for_n8n
# Already configured (from v3)
SOLANA_RPC_URL=https://mainnet.helius-rpc.com/?api-key=YOUR_KEY
# Optional: Override default risk parameters
MAX_POSITION_SIZE_USD=1000
LEVERAGE=10
STOP_LOSS_PERCENT=-1.5
TAKE_PROFIT_1_PERCENT=0.7
TAKE_PROFIT_2_PERCENT=1.5
MAX_DAILY_DRAWDOWN=-150
MAX_TRADES_PER_HOUR=6
```
### 3. Get Your Drift Wallet Private Key
```bash
# If using Phantom wallet, export private key from Settings
# Then convert to base58 format (it's usually already in base58)
# Test your key works:
node -e "const {Keypair} = require('@solana/web3.js'); const kp = Keypair.fromSecretKey(Buffer.from('YOUR_KEY', 'base58')); console.log('Wallet:', kp.publicKey.toString())"
```
### 4. Initialize Drift Account
If you haven't already:
1. Go to https://drift.trade
2. Connect your wallet
3. Deposit USDC for trading
4. Initialize your account (one-time setup)
### 5. Test Drift Connection
Create a test script:
```bash
# Create test file
cat > test-drift-v4.ts << 'EOF'
import { initializeDriftService } from './v4/lib/drift/client'
async function test() {
console.log('🧪 Testing Drift connection...')
const drift = await initializeDriftService()
const balance = await drift.getUSDCBalance()
console.log(`💰 USDC Balance: $${balance.toFixed(2)}`)
const positions = await drift.getAllPositions()
console.log(`📊 Active positions: ${positions.length}`)
const health = await drift.getAccountHealth()
console.log(`💊 Free collateral: $${health.freeCollateral.toFixed(2)}`)
await drift.disconnect()
console.log('✅ Test complete!')
}
test().catch(console.error)
EOF
# Run test
npx tsx test-drift-v4.ts
```
### 6. Configure n8n Webhook
1. **Import workflow** from `n8n-workflow-v4.json`
2. **Set environment variables** in n8n:
- `TRADING_BOT_API_URL=https://your-bot-domain.com`
- `API_SECRET_KEY=your_secret_key`
- `TRADINGVIEW_WEBHOOK_SECRET=another_secret`
3. **Activate workflow**
4. **Copy webhook URL**
### 7. Configure TradingView Alert
1. Create alert on your 5-minute chart
2. **Webhook URL**: `https://your-n8n.com/webhook/tradingview-signal?secret=YOUR_SECRET`
3. **Message** (JSON):
```json
{
"action": "{{strategy.order.action}}",
"symbol": "{{ticker}}",
"timeframe": "{{interval}}",
"price": "{{close}}",
"timestamp": "{{timenow}}",
"signal_type": "buy",
"strength": "strong"
}
```
4. Enable **Webhook URL** notification
5. Test alert
### 8. Test Full Flow
```bash
# 1. Start your Next.js server
npm run dev
# 2. Trigger TradingView alert manually
# 3. Check n8n execution logs
# 4. Check your bot API logs
# 5. Check Drift account for position
```
## 🔧 API Endpoints
### Execute Trade
```bash
POST http://localhost:3000/api/trading/execute
Authorization: Bearer YOUR_API_SECRET_KEY
Content-Type: application/json
{
"symbol": "SOLUSDT",
"direction": "long",
"timeframe": "5",
"signalStrength": "strong"
}
```
### Check Risk
```bash
POST http://localhost:3000/api/trading/check-risk
Authorization: Bearer YOUR_API_SECRET_KEY
Content-Type: application/json
{
"symbol": "SOL-PERP",
"direction": "long"
}
```
## 🧪 Testing
### Test with curl (without n8n)
```bash
# Test risk check
curl -X POST http://localhost:3000/api/trading/check-risk \
-H "Authorization: Bearer YOUR_API_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{"symbol":"SOL-PERP","direction":"long"}'
# Test trade execution (CAREFUL - THIS WILL OPEN A REAL POSITION!)
curl -X POST http://localhost:3000/api/trading/execute \
-H "Authorization: Bearer YOUR_API_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"symbol": "SOLUSDT",
"direction": "long",
"timeframe": "5",
"signalStrength": "strong"
}'
```
### Test with Postman
1. Import collection from docs
2. Set environment variables
3. Run tests
## 📁 v4 File Structure
```
v4/
├── config/
│ └── trading.ts # Trading configuration
├── lib/
│ ├── drift/
│ │ ├── client.ts # Drift SDK client ✅
│ │ └── orders.ts # Order execution ✅
│ ├── pyth/
│ │ └── price-monitor.ts # Real-time prices ✅ (Phase 2)
│ └── trading/
│ └── position-manager.ts # Auto-exit logic ✅ (Phase 2)
└── app/
└── api/
└── trading/
├── execute/
│ └── route.ts # Execute trade endpoint ✅
├── check-risk/
│ └── route.ts # Risk check endpoint ✅
└── positions/
└── route.ts # Query positions ✅ (Phase 2)
```
## ✅ Phase 1 Complete
- ✅ Drift Protocol integration
- ✅ Market order execution (open/close)
- ✅ n8n webhook endpoint (execute trade)
- ✅ Basic risk check endpoint
- ✅ Trading configuration
- ✅ TradingView symbol normalization
## ✅ Phase 2 Complete
- ✅ Pyth price monitoring (WebSocket + polling)
- ✅ Position manager (track active trades)
- ✅ Auto-exit logic (TP1/TP2/SL/Emergency)
- ✅ Dynamic SL adjustment (breakeven, profit lock)
- ✅ Multi-position support
- ✅ Positions query endpoint
## 🚧 Coming Next (Phase 3)
- ⏳ Database integration (PostgreSQL/Prisma)
- ⏳ Trade history persistence
- ⏳ Risk manager (daily limits, cooldowns, frequency checks)
- ⏳ Enhanced notifications (Telegram/Discord/Email)
- ⏳ Performance analytics
- ⏳ Web dashboard for monitoring
## 🔐 Security
**IMPORTANT:**
- Never commit `.env.local` to git
- Keep your private key secure
- Use a dedicated trading wallet
- Start with small position sizes
- Test on devnet first if possible
## 💡 Tips
1. **Start small**: Use $100 position size first
2. **Test signals**: Manually trigger alerts to test flow
3. **Monitor closely**: Watch first 5-10 trades carefully
4. **Check Drift UI**: Verify positions at https://drift.trade
5. **Backup strategy**: Have emergency close ready
## 🆘 Troubleshooting
### "Drift service not initialized"
- Make sure DRIFT_WALLET_PRIVATE_KEY is set
- Check wallet has SOL for gas fees
- Verify Drift account is initialized
### "Insufficient collateral"
- Deposit more USDC to Drift account
- Check account health at drift.trade
- Reduce position size
### "Webhook not working"
- Verify n8n workflow is active
- Check API_SECRET_KEY matches
- Test with curl first
### "Order execution failed"
- Check market is active on Drift
- Verify minimum order size
- Check RPC connection
- Review Drift UI for errors
## 📞 Next Steps
1. Test Drift connection
2. Deploy to production
3. Configure n8n webhook
4. Set up TradingView alerts
5. Start with paper trading (small size)
6. Scale up after 10+ successful trades
## 🎓 Resources
- Drift Protocol: https://drift.trade
- Drift Docs: https://docs.drift.trade
- n8n Workflow: See `TRADING_BOT_V4_MANUAL.md`
- Full Manual: See `QUICKSTART_V4.md`
---
**Ready to trade! 🚀**
*Remember: Always start with small position sizes and monitor closely.*

View File

@@ -0,0 +1,151 @@
# Telegram Trading Bot - Quick Reference
## 🚀 Quick Setup (3 steps)
### 1. Import n8n workflow
- Open: http://10.0.0.48:8098
- Import: `telegram-manual-trade-FINAL.json`
- Connect last node to "Check Risk" in Money Machine
- Activate workflow
### 2. Get Telegram Bot Token
Run on your phone:
```
Open Telegram → @BotFather → /newbot → follow instructions
```
You'll get a token like: `123456789:ABCdefGHIjklMNOpqrsTUVwxyz`
### 3. Run setup
```bash
./complete_telegram_setup.sh
```
Paste your bot token when asked.
---
## 📱 Using it on your phone
### Check Position Status
Send `/status` to see your current open position with:
- Real-time P&L (both $ amount and % of account)
- Entry price and current price
- TP1, TP2, and SL levels with status indicators
- Position size and leverage
- Trade age in minutes
Example output:
```
🟢 SOL-PERP 📈 LONG
💰 P&L: $3.50 (+0.70% account)
📊 Price Change: +0.07%
Entry: $142.5000
Current: $142.6000
Targets:
TP1: $143.4975 ⏳
TP2: $144.6375
SL: $140.3625
Position: $500.00 @ 10x
Age: 5 min
```
### Execute Trades
Just send messages to your Telegram chat:
```
buy sol
sell btc
buy eth
sell sol
```
Or use commands:
```
/buySOL
/sellBTC
/buyETH
/status
```
The bot will:
1. ✅ Parse your message
2. ✅ Forward to n8n webhook
3. ✅ n8n sends to your trading bot
4. ✅ Trade executes with risk checks
5. ✅ You get confirmation in Telegram
---
## 🔧 Management
**View logs:**
```bash
docker logs -f telegram-trade-bot
```
**Restart bot:**
```bash
docker restart telegram-trade-bot
```
**Stop bot:**
```bash
docker-compose -f docker-compose.telegram-bot.yml down
```
**Start bot:**
```bash
docker-compose -f docker-compose.telegram-bot.yml --env-file .env.telegram-bot up -d
```
---
## 📋 Configuration Files
- `.env.telegram-bot` - Bot token and webhook URL
- `docker-compose.telegram-bot.yml` - Docker configuration
- `telegram_trade_bot.py` - Bot source code
---
## 🐛 Troubleshooting
**Bot not responding?**
```bash
docker logs telegram-trade-bot
```
**Check if bot is running:**
```bash
docker ps | grep telegram
```
**Test webhook manually:**
```bash
curl -X POST http://10.0.0.48:8098/webhook/manual-trade \
-H "Content-Type: application/json" \
-d '{"text": "buy sol"}'
```
**Check n8n workflow:**
- Is it activated?
- Is the webhook URL correct?
- Is it connected to Check Risk node?
---
## ✅ Supported Commands
From your phone, send any of these:
- `buy sol` / `buy btc` / `buy eth`
- `sell sol` / `sell btc` / `sell eth`
- `long sol` / `short btc` (same as buy/sell)
The bot extracts:
- **Symbol**: SOL, BTC, or ETH (defaults to SOL)
- **Direction**: sell/short = short position, anything else = long position
Commands are case-insensitive: `BUY SOL`, `Buy Sol`, `buy sol` all work!