Files
trading_bot_v4/.env
mindesbunister 6d5991172a feat: Implement ATR-based dynamic TP2 system and fix P&L calculation
- Add ATR-based dynamic TP2 scaling from 0.7% to 3.0% based on volatility
- New config options: useAtrBasedTargets, atrMultiplierForTp2, minTp2Percent, maxTp2Percent
- Enhanced settings UI with ATR controls and updated risk calculator
- Fix external closure P&L calculation using unrealized P&L instead of volatile current price
- Update execute and test endpoints to use calculateDynamicTp2() function
- Maintain 25% runner system for capturing extended moves (4-5% targets)
- Add environment variables for ATR-based configuration
- Better P&L accuracy for manual position closures
2025-11-07 17:01:22 +01:00

386 lines
12 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Trading Bot v4 - Environment Variables Template
# Copy this file to .env.local and fill in your values
#
# IMPORTANT: Never commit .env.local to git!
# ================================
# REQUIRED - DRIFT PROTOCOL TRADING
# ================================
# Your Solana wallet private key (base58 format)
# ⚠️ SECURITY: Use a dedicated trading wallet with limited funds
# Get from: Phantom → Settings → Export Private Key
# Or: solana-keygen new --outfile ~/trading-wallet.json
DRIFT_WALLET_PRIVATE_KEY=[91,24,199,66,154,166,231,159,121,123,20,165,118,229,96,114,145,170,28,1,59,164,186,37,170,234,46,107,26,119,205,206,39,1,96,252,82,190,199,68,182,144,131,53,153,66,255,138,238,57,28,249,224,239,172,252,157,230,171,224,154,252,142,171]
# Drift environment
# Options: mainnet-beta (production), devnet (testing)
DRIFT_ENV=mainnet-beta
# Drift Program ID (default - don't change unless using custom program)
DRIFT_PROGRAM_ID=dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH
# API secret key for authenticating n8n webhook requests
# Generate with: openssl rand -hex 32
# Or: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
API_SECRET_KEY=2a344f0149442c857fb56c038c0c7d1b113883b830bec792c76f1e0efa15d6bb
# ================================
# REQUIRED - SOLANA RPC ENDPOINT
# ================================
# Solana RPC URL (Required for blockchain access)
#
# RECOMMENDED: Helius (best performance, free tier available)
# Get free API key at: https://helius.dev
SOLANA_RPC_URL=https://mainnet.helius-rpc.com/?api-key=7485e2bf-0681-4215-be31-76e2707f31cc
# Alternative RPC providers (if not using Helius):
#
# QuickNode: https://solana-mainnet.quiknode.pro/YOUR_ENDPOINT/
# Alchemy: https://solana-mainnet.g.alchemy.com/v2/YOUR_ALCHEMY_KEY
# Ankr: https://rpc.ankr.com/solana
# Public (not recommended): https://api.mainnet-beta.solana.com
# ================================
# REQUIRED - PYTH NETWORK (Price Feeds)
# ================================
# Pyth Hermes WebSocket endpoint (for real-time prices)
# Default: https://hermes.pyth.network (no API key needed)
PYTH_HERMES_URL=https://hermes.pyth.network
# Alternative Pyth endpoints:
# Stable: https://hermes-beta.pyth.network
# Devnet: https://hermes-dev.pyth.network
# ================================
# TRADING CONFIGURATION (Optional - Override defaults)
# ================================
# Position sizing
# Base position size in USD (default: 50 for safe testing)
# Example: 50 with 10x leverage = $500 notional position
MAX_POSITION_SIZE_USD=210
# Leverage multiplier (1-20, default: 10)
# Higher leverage = bigger gains AND bigger losses
LEVERAGE=10
# Risk parameters (as percentages)
# Stop Loss: Close 100% of position when price drops this much
# Example: -1.5% on 10x = -15% account loss
STOP_LOSS_PERCENT=-1
# ================================
# DUAL STOP SYSTEM (Advanced)
# ================================
# Enable dual stop system to avoid wicks while guaranteeing exit
# When enabled, places TWO stop orders:
# 1. Soft Stop (TRIGGER_LIMIT) - Avoids false breakouts/wicks
# 2. Hard Stop (TRIGGER_MARKET) - Guarantees exit if price keeps falling
USE_DUAL_STOPS=true
# Soft Stop (Primary, Stop-Limit)
# Triggers first, tries to avoid wicks
SOFT_STOP_PERCENT=-1.5
SOFT_STOP_BUFFER=0.4 # Buffer between trigger and limit (0.4% = limit at -1.9%)
# Hard Stop (Backup, Stop-Market)
# Only triggers if soft stop doesn't fill
# Guarantees exit during strong breakdowns
HARD_STOP_PERCENT=-2.5
# Take Profit 1: Close 50% of position at this profit level
# Example: +0.7% on 10x = +7% account gain
TAKE_PROFIT_1_PERCENT=0.4
# Take Profit 1 Size: What % of position to close at TP1
# Example: 50 = close 50% of position
TAKE_PROFIT_1_SIZE_PERCENT=75
# Take Profit 2: Close remaining 50% at this profit level
# Example: +1.5% on 10x = +15% account gain
TAKE_PROFIT_2_PERCENT=0.7
# Take Profit 2 Size: What % of remaining position to close at TP2
# Example: 100 = close all remaining position
TAKE_PROFIT_2_SIZE_PERCENT=0
# ATR-based dynamic targets (capture big moves like 4-5% drops)
# Enable dynamic TP2 based on market volatility
USE_ATR_BASED_TARGETS=true
# ATR multiplier for TP2 calculation (TP2 = ATR × this value)
# Example: ATR=0.8% × 2.0 = 1.6% TP2 target
ATR_MULTIPLIER_FOR_TP2=2.0
# Minimum TP2 level regardless of ATR (safety floor)
MIN_TP2_PERCENT=0.7
# Maximum TP2 level cap (prevents excessive targets)
# Example: 3.0% = 30% account gain at 10x leverage
MAX_TP2_PERCENT=3.0
# Emergency Stop: Hard stop if this level is breached
# Example: -2.0% on 10x = -20% account loss (rare but protects from flash crashes)
EMERGENCY_STOP_PERCENT=-2
# Dynamic stop-loss adjustments
# Move SL to breakeven when profit reaches this level
BREAKEVEN_TRIGGER_PERCENT=0.3
# Lock in profit when price reaches this level
PROFIT_LOCK_TRIGGER_PERCENT=1
# How much profit to lock (move SL to this profit level)
PROFIT_LOCK_PERCENT=0.6
# Risk limits
# Stop trading if daily loss exceeds this amount (USD)
# Example: -150 = stop trading after losing $150 in a day
MAX_DAILY_DRAWDOWN=-1000
# Maximum number of trades allowed per hour (prevents overtrading)
MAX_TRADES_PER_HOUR=20
# Minimum time between trades in minutes (cooldown period)
# Example: 10 = 10 minutes between trades
MIN_TIME_BETWEEN_TRADES=1
# DEX execution settings
# Maximum acceptable slippage on market orders (percentage)
# Example: 1.0 = accept up to 1% slippage
SLIPPAGE_TOLERANCE=1
# How often to check prices (milliseconds)
# Example: 2000 = check every 2 seconds
PRICE_CHECK_INTERVAL_MS=2000
# Order confirmation timeout (milliseconds)
# Example: 30000 = wait up to 30 seconds for order confirmation
CONFIRMATION_TIMEOUT_MS=30000
# ================================
# N8N WORKFLOW INTEGRATION (Optional but recommended)
# ================================
# n8n instance URL (for workflow automation)
# Get from: https://n8n.io (cloud) or self-hosted
# Example: https://your-username.app.n8n.cloud
N8N_WEBHOOK_URL=https://flow.egonetix.de/webhook/3371ad7c-0866-4161-90a4-f251de4aceb8
# n8n API key (if using n8n API directly)
N8N_API_KEY=your_n8n_api_key
# TradingView webhook secret (for validating incoming alerts)
# Must match the secret in your TradingView alert URL
# Generate with: openssl rand -hex 16
TRADINGVIEW_WEBHOOK_SECRET=your_tradingview_webhook_secret
# ================================
# NOTIFICATIONS (Optional - for trade alerts)
# ================================
# Telegram Bot (recommended for mobile alerts)
# 1. Create bot: Message @BotFather on Telegram, send /newbot
# 2. Get token from BotFather
# 3. Get chat ID: Message @userinfobot or your bot, it will show your chat ID
TELEGRAM_BOT_TOKEN=8240234365:AAEm6hg_XOm54x8ctnwpNYreFKRAEvWU3uY
TELEGRAM_CHAT_ID=579304651
# Discord Webhook (good for team channels)
# 1. Go to Discord channel settings
# 2. Integrations → Webhooks → New Webhook
# 3. Copy webhook URL
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/YOUR_WEBHOOK_ID/YOUR_WEBHOOK_TOKEN
# Email (SMTP) - for important alerts
# Gmail setup:
# 1. Enable 2FA on your Google account
# 2. Generate App Password: https://myaccount.google.com/apppasswords
# 3. Use the 16-character app password below
EMAIL_SMTP_HOST=smtp.gmail.com
EMAIL_SMTP_PORT=587
EMAIL_SMTP_SECURE=false
EMAIL_FROM=your-email@gmail.com
EMAIL_TO=notification-email@gmail.com
EMAIL_USER=your-email@gmail.com
EMAIL_PASSWORD=your_16_character_app_password
# Other SMTP providers:
# Outlook: smtp-mail.outlook.com:587
# Yahoo: smtp.mail.yahoo.com:587
# SendGrid: smtp.sendgrid.net:587
# ================================
# DATABASE (Optional - Phase 3 feature)
# ================================
# PostgreSQL connection string
# Format: postgresql://username:password@host:port/database
#
# IMPORTANT: Use different URLs for different environments:
# - Docker container (runtime): trading-bot-postgres (container name)
# - Local development (Prisma CLI): localhost:5432
#
# The URL below is for Docker runtime. For Prisma migrations from host:
# DATABASE_URL="postgresql://postgres:postgres@localhost:5432/trading_bot_v4" npx prisma migrate dev
#
# PostgreSQL Database (for trade history and analytics)
DATABASE_URL=postgresql://postgres:postgres@trading-bot-postgres:5432/trading_bot_v4
# Cloud PostgreSQL providers:
# - Supabase: https://supabase.com (free tier available)
# - Neon: https://neon.tech (serverless, free tier)
# - Railway: https://railway.app
# - Heroku Postgres
# Database connection pool settings (optional)
DATABASE_POOL_MIN=2
DATABASE_POOL_MAX=10
# ================================
# SECURITY & ACCESS CONTROL
# ================================
# JWT secret for API authentication (if implementing auth)
# Generate with: openssl rand -hex 64
JWT_SECRET=your_jwt_secret_here
# Allowed origins for CORS (comma-separated)
# Example: http://localhost:3000,https://yourdomain.com
ALLOWED_ORIGINS=http://localhost:3000
# Rate limiting (requests per minute)
RATE_LIMIT_PER_MINUTE=60
# IP whitelist (comma-separated, leave empty to allow all)
# Example: 192.168.1.100,10.0.0.5
IP_WHITELIST=
# ================================
# DEVELOPMENT & DEBUGGING
# ================================
# Node environment (development, production, test)
NODE_ENV=production
# Log level (debug, info, warn, error)
# Use 'debug' for detailed logs during development
LOG_LEVEL=info
# Enable detailed logging for specific modules
DEBUG=drift:*,pyth:*,trading:*
# Enable dry run mode (simulate trades without executing)
# Set to 'true' for testing without real money
DRY_RUN=false
# API server port (default: 3000)
PORT=3000
# Enable performance monitoring
ENABLE_METRICS=false
# Sentry DSN (for error tracking in production)
SENTRY_DSN=
# ================================
# MONITORING & ANALYTICS (Optional)
# ================================
# DataDog API key (for metrics and logs)
DATADOG_API_KEY=
# Grafana Cloud endpoint
GRAFANA_ENDPOINT=
# New Relic license key
NEW_RELIC_LICENSE_KEY=
# ================================
# NOTES & QUICK REFERENCE
# ================================
# Typical Production Setup:
# - MAX_POSITION_SIZE_USD=1000 (start with $1k)
# - LEVERAGE=10 (10x multiplier)
# - Helius RPC (best performance)
# - Telegram notifications enabled
# - DRY_RUN=false
# - LOG_LEVEL=info
#
# Safe Testing Setup:
# - MAX_POSITION_SIZE_USD=50 (only $50 per trade)
# - LEVERAGE=10 (still test with leverage)
# - DRY_RUN=false (test with real tiny amounts)
# - LOG_LEVEL=debug (see everything)
#
# Recommended Daily Limits:
# - MAX_DAILY_DRAWDOWN=-150 (stop at -15% loss)
# - MAX_TRADES_PER_HOUR=6 (prevent overtrading)
# - MIN_TIME_BETWEEN_TRADES=10 (10min cooldown)
#
# Expected Risk Per Trade (with defaults):
# - Max Loss: $7.50 (50 * 10 * 0.015)
# - TP1 Gain: $3.50 (50 * 10 * 0.007)
# - TP2 Gain: $7.50 (50 * 10 * 0.015)
# - Full Win: $11.00 (TP1 + TP2)
#
# Getting API Keys:
# - Helius: https://helius.dev (free tier: 100k requests/day)
# - Telegram: @BotFather on Telegram
# - Discord: Channel Settings → Integrations → Webhooks
# - Gmail: myaccount.google.com/apppasswords (need 2FA enabled)
#
# Testing Checklist:
# [ ] Copy this file to .env.local
# [ ] Fill in DRIFT_WALLET_PRIVATE_KEY
# [ ] Fill in SOLANA_RPC_URL (Helius recommended)
# [ ] Fill in API_SECRET_KEY (random 32-byte hex)
# [ ] Set MAX_POSITION_SIZE_USD=50 for testing
# [ ] Run: npx tsx v4/test-price-monitor.ts
# [ ] Run: npx tsx v4/test-position-manager.ts
# [ ] Run: npx tsx v4/test-full-flow.ts (careful: real trade!)
# [ ] Configure TradingView alerts
# [ ] Import n8n-workflow-v4.json
# [ ] Test with manual TradingView alert
#
# Security Reminders:
# ⚠️ Never commit .env.local to git
# ⚠️ Use a dedicated trading wallet
# ⚠️ Start with small position sizes
# ⚠️ Keep private keys secure
# ⚠️ Use hardware wallet for large amounts
# ⚠️ Rotate API keys regularly
# ⚠️ Monitor for suspicious activity
#
# Support & Documentation:
# - v4/README.md - Project overview
# - v4/SETUP.md - Detailed setup guide
# - v4/TESTING.md - Testing procedures
# - v4/QUICKREF_PHASE2.md - Quick reference
# - TRADING_BOT_V4_MANUAL.md - Complete manual
# - PHASE_2_COMPLETE_REPORT.md - Feature summary
USE_TRAILING_STOP=true
TRAILING_STOP_PERCENT=0.3
TRAILING_STOP_ACTIVATION=0.4
MIN_QUALITY_SCORE=60
SOLANA_ENABLED=true
SOLANA_POSITION_SIZE=210
SOLANA_LEVERAGE=10
ETHEREUM_ENABLED=false
ETHEREUM_POSITION_SIZE=50
ETHEREUM_LEVERAGE=1
ENABLE_POSITION_SCALING=false
MIN_SCALE_QUALITY_SCORE=75
MIN_PROFIT_FOR_SCALE=0.4
MAX_SCALE_MULTIPLIER=2
SCALE_SIZE_PERCENT=50
MIN_ADX_INCREASE=5
MAX_PRICE_POSITION_FOR_SCALE=70
TRAILING_STOP_ATR_MULTIPLIER=1.5
TRAILING_STOP_MIN_PERCENT=0.25
TRAILING_STOP_MAX_PERCENT=0.9