diff --git a/README.md b/README.md index ad7e7046..d4d7564e 100644 --- a/README.md +++ b/README.md @@ -207,9 +207,117 @@ npm install cd .. ``` -### 4. System Configuration +### 4. Get AI API Keys -Create `config.json` file (use `config.json.example` as template): +Before configuring the system, you need to obtain AI API keys. Choose one of the following AI providers: + +#### Option 1: DeepSeek (Recommended for Beginners) + +**Why DeepSeek?** +- 💰 Cheaper than GPT-4 (about 1/10 the cost) +- 🚀 Fast response time +- 🎯 Excellent trading decision quality +- 🌍 Works globally without VPN + +**How to get DeepSeek API Key:** + +1. **Visit**: [https://platform.deepseek.com](https://platform.deepseek.com) +2. **Register**: Sign up with email/phone number +3. **Verify**: Complete email/phone verification +4. **Top-up**: Add credits to your account + - Minimum: ~$5 USD + - Recommended: $20-50 USD for testing +5. **Create API Key**: + - Go to API Keys section + - Click "Create New Key" + - Copy and save the key (starts with `sk-`) + - ⚠️ **Important**: Save it immediately - you can't see it again! + +**Pricing**: ~$0.14 per 1M tokens (very cheap!) + +#### Option 2: Qwen (Alibaba Cloud) + +**How to get Qwen API Key:** + +1. **Visit**: [https://dashscope.aliyuncs.com](https://dashscope.aliyuncs.com) +2. **Register**: Sign up with Alibaba Cloud account +3. **Enable Service**: Activate DashScope service +4. **Create API Key**: + - Go to API Key Management + - Create new key + - Copy and save (starts with `sk-`) + +**Note**: May require Chinese phone number for registration + +--- + +### 5. System Configuration + +**Two configuration modes available:** +- **🌟 Beginner Mode**: Single trader + default coins (recommended!) +- **⚔️ Expert Mode**: Multiple traders competition + +#### 🌟 Beginner Mode Configuration (Recommended) + +**Step 1**: Copy and rename the example config file + +```bash +cp config.json.example config.json +``` + +**Step 2**: Edit `config.json` with your API keys + +```json +{ + "traders": [ + { + "id": "my_trader", + "name": "My AI Trader", + "ai_model": "deepseek", + "binance_api_key": "YOUR_BINANCE_API_KEY", + "binance_secret_key": "YOUR_BINANCE_SECRET_KEY", + "use_qwen": false, + "deepseek_key": "sk-xxxxxxxxxxxxx", + "qwen_key": "", + "initial_balance": 1000.0, + "scan_interval_minutes": 3 + } + ], + "use_default_coins": true, + "coin_pool_api_url": "", + "oi_top_api_url": "", + "api_server_port": 8080 +} +``` + +**Step 3**: Replace placeholders with your actual keys + +| Placeholder | Replace With | Where to Get | +|------------|--------------|--------------| +| `YOUR_BINANCE_API_KEY` | Your Binance API Key | Binance → Account → API Management | +| `YOUR_BINANCE_SECRET_KEY` | Your Binance Secret Key | Same as above | +| `sk-xxxxxxxxxxxxx` | Your DeepSeek API Key | [platform.deepseek.com](https://platform.deepseek.com) | + +**Step 4**: Adjust initial balance (optional) + +- `initial_balance`: Set to your actual Binance futures account balance +- Used to calculate profit/loss percentage +- Example: If you have 500 USDT, set `"initial_balance": 500.0` + +**✅ Configuration Checklist:** + +- [ ] Binance API key filled in (no quotes issues) +- [ ] Binance Secret key filled in (no quotes issues) +- [ ] DeepSeek API key filled in (starts with `sk-`) +- [ ] `use_default_coins` set to `true` (for beginners) +- [ ] `initial_balance` matches your account balance +- [ ] File saved as `config.json` (not `.example`) + +--- + +#### ⚔️ Expert Mode: Multi-Trader Competition + +For running multiple AI traders competing against each other: ```json { @@ -218,12 +326,13 @@ Create `config.json` file (use `config.json.example` as template): "id": "qwen_trader", "name": "Qwen AI Trader", "ai_model": "qwen", - "binance_api_key": "YOUR_BINANCE_API_KEY", - "binance_secret_key": "YOUR_BINANCE_SECRET_KEY", + "binance_api_key": "YOUR_BINANCE_API_KEY_1", + "binance_secret_key": "YOUR_BINANCE_SECRET_KEY_1", "use_qwen": true, "qwen_key": "sk-xxxxx", - "scan_interval_minutes": 3, - "initial_balance": 1000.0 + "deepseek_key": "", + "initial_balance": 1000.0, + "scan_interval_minutes": 3 }, { "id": "deepseek_trader", @@ -232,126 +341,350 @@ Create `config.json` file (use `config.json.example` as template): "binance_api_key": "YOUR_BINANCE_API_KEY_2", "binance_secret_key": "YOUR_BINANCE_SECRET_KEY_2", "use_qwen": false, + "qwen_key": "", "deepseek_key": "sk-xxxxx", - "scan_interval_minutes": 3, - "initial_balance": 1000.0 + "initial_balance": 1000.0, + "scan_interval_minutes": 3 } ], - "coin_pool_api_url": "http://x.x.x.x:xxx/api/ai500/list?auth=YOUR_AUTH", - "oi_top_api_url": "http://x.x.x.x:xxx/api/oi/top?auth=YOUR_AUTH", + "use_default_coins": true, + "coin_pool_api_url": "", + "oi_top_api_url": "", "api_server_port": 8080 } ``` -**Configuration Notes:** -- `traders`: Configure 1-N traders (single AI or multi-AI competition) -- `id`: Unique trader identifier (used for log directory) -- `ai_model`: "qwen" or "deepseek" -- `binance_api_key/secret_key`: Each trader uses independent Binance account -- `initial_balance`: Initial balance (for calculating P/L%) -- `scan_interval_minutes`: Decision cycle (recommended 3-5 minutes) -- `use_default_coins`: **true** = Use default 8 mainstream coins | **false** = Use API coin pool (recommended for beginners: true) -- `coin_pool_api_url`: AI500 coin pool API (optional, ignored when use_default_coins=true) -- `oi_top_api_url`: OI Top open interest API (optional, if empty, OI Top data is skipped) +**Requirements for Competition Mode:** +- 2 separate Binance futures accounts (different API keys) +- Both AI API keys (Qwen + DeepSeek) +- More capital for testing (recommended: 500+ USDT per account) -**Default Coin List** (when `use_default_coins: true`): +--- + +#### 📚 Configuration Field Explanations + +| Field | Description | Example Value | Required? | +|-------|-------------|---------------|-----------| +| `id` | Unique identifier for this trader | `"my_trader"` | ✅ Yes | +| `name` | Display name | `"My AI Trader"` | ✅ Yes | +| `ai_model` | AI provider to use | `"deepseek"` or `"qwen"` | ✅ Yes | +| `binance_api_key` | Binance API key | `"abc123..."` | ✅ Yes | +| `binance_secret_key` | Binance Secret key | `"xyz789..."` | ✅ Yes | +| `use_qwen` | Whether to use Qwen | `true` or `false` | ✅ Yes | +| `deepseek_key` | DeepSeek API key | `"sk-xxx"` | If using DeepSeek | +| `qwen_key` | Qwen API key | `"sk-xxx"` | If using Qwen | +| `initial_balance` | Starting balance for P/L calculation | `1000.0` | ✅ Yes | +| `scan_interval_minutes` | How often to make decisions | `3` (3-5 recommended) | ✅ Yes | +| `use_default_coins` | Use built-in coin list
**✨ Smart Default: `true`** (v2.0.2+)
Auto-enabled if no API URL provided | `true` or omit | ❌ No
(Optional, auto-defaults) | +| `coin_pool_api_url` | Custom coin pool API
*Only needed when `use_default_coins: false`* | `""` (empty) | ❌ No | +| `oi_top_api_url` | Open interest API
*Optional supplement data* | `""` (empty) | ❌ No | +| `api_server_port` | Web dashboard port | `8080` | ✅ Yes | + +**Default Trading Coins** (when `use_default_coins: true`): - BTC, ETH, SOL, BNB, XRP, DOGE, ADA, HYPE -### 5. Run the System +--- -**Start backend (AI trading system + API server):** +#### ⚠️ Important: `use_default_coins` Field + +**Smart Default Behavior (v2.0.2+):** + +The system now automatically defaults to `use_default_coins: true` if: +- You don't include this field in config.json, OR +- You set it to `false` but don't provide `coin_pool_api_url` + +This makes it beginner-friendly! You can even omit this field entirely. + +**Configuration Examples:** + +✅ **Option 1: Explicitly set (Recommended for clarity)** +```json +"use_default_coins": true, +"coin_pool_api_url": "", +"oi_top_api_url": "" +``` + +✅ **Option 2: Omit the field (uses default coins automatically)** +```json +// Just don't include "use_default_coins" at all +"coin_pool_api_url": "", +"oi_top_api_url": "" +``` + +⚙️ **Advanced: Use external API** +```json +"use_default_coins": false, +"coin_pool_api_url": "http://your-api.com/coins", +"oi_top_api_url": "http://your-api.com/oi" +``` + +--- + +### 6. Run the System + +#### 🚀 Starting the System (2 steps) + +The system has **2 parts** that run separately: +1. **Backend** (AI trading brain + API) +2. **Frontend** (Web dashboard for monitoring) + +--- + +#### **Step 1: Start the Backend** + +Open a terminal and run: ```bash +# Build the program (first time only, or after code changes) go build -o nofx + +# Start the backend ./nofx ``` -**Start frontend (Web Dashboard):** +**What you should see:** -Open a new terminal: +``` +🚀 启动自动交易系统... +✓ Trader [my_trader] 已初始化 +✓ API服务器启动在端口 8080 +📊 开始交易监控... +``` + +**⚠️ If you see errors:** + +| Error Message | Solution | +|--------------|----------| +| `invalid API key` | Check your Binance API key in config.json | +| `TA-Lib not found` | Run `brew install ta-lib` (macOS) | +| `port 8080 already in use` | Change `api_server_port` in config.json | +| `DeepSeek API error` | Verify your DeepSeek API key and balance | + +**✅ Backend is running correctly when you see:** +- No error messages +- "开始交易监控..." appears +- System shows account balance +- Keep this terminal window open! + +--- + +#### **Step 2: Start the Frontend** + +Open a **NEW terminal window** (keep the first one running!), then: ```bash cd web npm run dev ``` -**Access the interface:** +**What you should see:** + ``` -Web Dashboard: http://localhost:3000 -API Server: http://localhost:8080 +VITE v5.x.x ready in xxx ms + +➜ Local: http://localhost:3000/ +➜ Network: use --host to expose ``` -### 6. Stop the System +**✅ Frontend is running when you see:** +- "Local: http://localhost:3000/" message +- No error messages +- Keep this terminal window open too! -Press `Ctrl+C` in both terminals +--- + +#### **Step 3: Access the Dashboard** + +Open your web browser and visit: + +**🌐 http://localhost:3000** + +**What you'll see:** +- 📊 Real-time account balance +- 📈 Open positions (if any) +- 🤖 AI decision logs +- 📉 Equity curve chart + +**First-time tips:** +- It may take 3-5 minutes for the first AI decision +- Initial decisions might say "观望" (wait) - this is normal +- AI needs to analyze market conditions first + +--- + +### 7. Monitor the System + +**What to watch:** + +✅ **Healthy System Signs:** +- Backend terminal shows decision cycles every 3-5 minutes +- No continuous error messages +- Account balance updates +- Web dashboard refreshes automatically + +⚠️ **Warning Signs:** +- Repeated API errors +- No decisions for 10+ minutes +- Balance decreasing rapidly + +**Checking System Status:** + +```bash +# In a new terminal window +curl http://localhost:8080/health +``` + +Should return: `{"status":"ok"}` + +--- + +### 8. Stop the System + +**Graceful Shutdown (Recommended):** + +1. Go to the **backend terminal** (the first one) +2. Press `Ctrl+C` +3. Wait for "系统已停止" message +4. Go to the **frontend terminal** (the second one) +5. Press `Ctrl+C` + +**⚠️ Important:** +- Always stop the backend first +- Wait for confirmation before closing terminals +- Don't force quit (don't close terminal directly) --- ## 📖 AI Decision Flow -Each decision cycle (default 3 minutes), the system runs the following process: +Each decision cycle (default 3 minutes), the system executes the following intelligent process: ``` -┌─────────────────────────────────────────────────────┐ -│ 1. Analyze Historical Performance (last 20 cycles) │ -├─────────────────────────────────────────────────────┤ -│ ✓ Calculate overall win rate, avg profit, P/L ratio│ -│ ✓ Statistics for each coin (win rate, avg P/L) │ -│ ✓ Identify best/worst coins │ -│ ✓ List last 5 trade details │ -└─────────────────────────────────────────────────────┘ - ↓ -┌─────────────────────────────────────────────────────┐ -│ 2. Get Account Status │ -├─────────────────────────────────────────────────────┤ -│ • Account equity, available balance │ -│ • Number of positions, total P/L │ -│ • Margin usage rate │ -└─────────────────────────────────────────────────────┘ - ↓ -┌─────────────────────────────────────────────────────┐ -│ 3. Analyze Existing Positions (if any) │ -├─────────────────────────────────────────────────────┤ -│ • Get market data for each position │ -│ • Calculate technical indicators (RSI, MACD, EMA) │ -│ • AI decides whether to close positions │ -└─────────────────────────────────────────────────────┘ - ↓ -┌─────────────────────────────────────────────────────┐ -│ 4. Evaluate New Opportunities (candidate coin pool) │ -├─────────────────────────────────────────────────────┤ -│ • Get AI500 high-score coins (top 20) │ -│ • Get OI Top growing coins (top 20) │ -│ • Merge and deduplicate, filter low liquidity │ -│ • Batch fetch market data and technical indicators │ -└─────────────────────────────────────────────────────┘ - ↓ -┌─────────────────────────────────────────────────────┐ -│ 5. AI Comprehensive Decision │ -├─────────────────────────────────────────────────────┤ -│ • Review historical feedback (win rate, best/worst)│ -│ • Chain of Thought analysis │ -│ • Output decision: close/open/hold/wait │ -│ • Includes leverage, position size, SL, TP │ -└─────────────────────────────────────────────────────┘ - ↓ -┌─────────────────────────────────────────────────────┐ -│ 6. Execute Trades │ -├─────────────────────────────────────────────────────┤ -│ • Priority: close first, then open │ -│ • Auto-adapt precision (LOT_SIZE) │ -│ • Prevent position stacking (reject duplicate) │ -│ • Auto-cancel all orders after closing │ -└─────────────────────────────────────────────────────┘ - ↓ -┌─────────────────────────────────────────────────────┐ -│ 7. Record Logs │ -├─────────────────────────────────────────────────────┤ -│ • Save complete decision to decision_logs/ │ -│ • Includes CoT, decision JSON, account snapshot │ -└─────────────────────────────────────────────────────┘ +┌──────────────────────────────────────────────────────────┐ +│ 1. 📊 Analyze Historical Performance (last 20 cycles) │ +├──────────────────────────────────────────────────────────┤ +│ ✓ Calculate overall win rate, avg profit, P/L ratio │ +│ ✓ Per-coin statistics (win rate, avg P/L in USDT) │ +│ ✓ Identify best/worst performing coins │ +│ ✓ List last 5 trade details with accurate PnL │ +│ ✓ Calculate Sharpe ratio for risk-adjusted performance │ +│ 📌 NEW (v2.0.2): Accurate USDT PnL with leverage │ +└──────────────────────────────────────────────────────────┘ + ↓ +┌──────────────────────────────────────────────────────────┐ +│ 2. 💰 Get Account Status │ +├──────────────────────────────────────────────────────────┤ +│ • Total equity & available balance │ +│ • Number of open positions & unrealized P/L │ +│ • Margin usage rate (AI manages up to 90%) │ +│ • Daily P/L tracking & drawdown monitoring │ +└──────────────────────────────────────────────────────────┘ + ↓ +┌──────────────────────────────────────────────────────────┐ +│ 3. 🔍 Analyze Existing Positions (if any) │ +├──────────────────────────────────────────────────────────┤ +│ • For each position, fetch latest market data │ +│ • Calculate real-time technical indicators: │ +│ - 3min K-line: RSI(7), MACD, EMA20 │ +│ - 4hour K-line: RSI(14), EMA20/50, ATR │ +│ • Track position holding duration (e.g., "2h 15min") │ +│ 📌 NEW (v2.0.2): Shows how long each position held │ +│ • Display: Entry price, current price, P/L%, duration │ +│ • AI evaluates: Should hold or close? │ +└──────────────────────────────────────────────────────────┘ + ↓ +┌──────────────────────────────────────────────────────────┐ +│ 4. 🎯 Evaluate New Opportunities (candidate coins) │ +├──────────────────────────────────────────────────────────┤ +│ • Fetch coin pool (2 modes): │ +│ 🌟 Default Mode: BTC, ETH, SOL, BNB, XRP, etc. │ +│ ⚙️ Advanced Mode: AI500 (top 20) + OI Top (top 20) │ +│ • Merge & deduplicate candidate coins │ +│ • Filter: Remove low liquidity (<15M USD OI value) │ +│ • Batch fetch market data + technical indicators │ +│ • Calculate volatility, trend strength, volume surge │ +└──────────────────────────────────────────────────────────┘ + ↓ +┌──────────────────────────────────────────────────────────┐ +│ 5. 🧠 AI Comprehensive Decision (DeepSeek/Qwen) │ +├──────────────────────────────────────────────────────────┤ +│ • Review historical feedback: │ +│ - Recent win rate & profit factor │ +│ - Best/worst coins performance │ +│ - Avoid repeating mistakes │ +│ • Analyze all raw sequence data: │ +│ - 3min price序列, 4hour K-line序列 │ +│ - Complete indicator sequences (not just latest) │ +│ 📌 NEW (v2.0.2): AI has full freedom to analyze │ +│ • Chain of Thought (CoT) reasoning process │ +│ • Output structured decisions: │ +│ - Action: close_long/close_short/open_long/open_short│ +│ - Coin symbol, quantity, leverage │ +│ - Stop-loss & take-profit levels (≥1:2 ratio) │ +│ • Decision: Wait/Hold/Close/Open │ +└──────────────────────────────────────────────────────────┘ + ↓ +┌──────────────────────────────────────────────────────────┐ +│ 6. ⚡ Execute Trades │ +├──────────────────────────────────────────────────────────┤ +│ • Priority order: Close existing → Then open new │ +│ • Risk checks before execution: │ +│ - Position size limits (1.5x for altcoins, 10x BTC) │ +│ - No duplicate positions (same coin + direction) │ +│ - Margin usage within 90% limit │ +│ • Auto-fetch & apply Binance LOT_SIZE precision │ +│ • Execute orders via Binance Futures API │ +│ • After closing: Auto-cancel all pending orders │ +│ • Record actual execution price & order ID │ +│ 📌 Track position open time for duration calculation │ +└──────────────────────────────────────────────────────────┘ + ↓ +┌──────────────────────────────────────────────────────────┐ +│ 7. 📝 Record Complete Logs & Update Performance │ +├──────────────────────────────────────────────────────────┤ +│ • Save decision log to decision_logs/{trader_id}/ │ +│ • Log includes: │ +│ - Complete Chain of Thought (CoT) │ +│ - Input prompt with all market data │ +│ - Structured decision JSON │ +│ - Account snapshot (balance, positions, margin) │ +│ - Execution results (success/failure, prices) │ +│ • Update performance database: │ +│ - Match open/close pairs by symbol_side key │ +│ 📌 NEW: Prevents long/short conflicts │ +│ - Calculate accurate USDT PnL: │ +│ PnL = Position Value × Price Δ% × Leverage │ +│ 📌 NEW: Considers quantity + leverage │ +│ - Store: quantity, leverage, open time, close time │ +│ - Update win rate, profit factor, Sharpe ratio │ +│ • Performance data feeds back into next cycle │ +└──────────────────────────────────────────────────────────┘ + ↓ + (Repeat every 3-5 min) ``` +### Key Improvements in v2.0.2 + +**📌 Position Duration Tracking:** +- System now tracks how long each position has been held +- Displayed in user prompt: "持仓时长2小时15分钟" +- Helps AI make better decisions on when to exit + +**📌 Accurate PnL Calculation:** +- Previously: Only percentage (100U@5% = 1000U@5% = both showed "5.0") +- Now: Real USDT profit = Position Value × Price Change × Leverage +- Example: 1000 USDT × 5% × 20x = 1000 USDT actual profit + +**📌 Enhanced AI Freedom:** +- AI can freely analyze all raw sequence data +- No longer restricted to predefined indicator combinations +- Can perform own trend analysis, support/resistance calculation + +**📌 Improved Position Tracking:** +- Uses `symbol_side` key (e.g., "BTCUSDT_long") +- Prevents conflicts when holding both long & short +- Stores complete data: quantity, leverage, open/close times + --- ## 🧠 AI Self-Learning Example @@ -528,6 +861,50 @@ sudo apt-get install libta-lib0-dev ## 🔄 Changelog +### v2.0.2 (2025-10-29) + +**Critical Bug Fixes - Trade History & Performance Analysis:** + +This version fixes **critical calculation errors** in the historical trade record and performance analysis system that significantly affected profitability statistics. + +**1. PnL Calculation - Major Error Fixed** (logger/decision_logger.go) +- **Problem**: Previously calculated PnL as percentage only, completely ignoring position size and leverage + - Example: 100 USDT position earning 5% and 1000 USDT position earning 5% both showed `5.0` as profit + - This made performance analysis completely inaccurate +- **Solution**: Now calculates actual USDT profit amount + ``` + PnL (USDT) = Position Value × Price Change % × Leverage + Example: 1000 USDT × 5% × 20x = 1000 USDT actual profit + ``` +- **Impact**: Win rate, profit factor, and Sharpe ratio now based on accurate USDT amounts + +**2. Position Tracking - Missing Critical Data** +- **Problem**: Open position records only stored price and time, missing quantity and leverage +- **Solution**: Now stores complete trade data: + - `quantity`: Position size (in coins) + - `leverage`: Leverage multiplier (e.g., 20x) + - These are essential for accurate PnL calculations + +**3. Position Key Logic - Long/Short Conflict** +- **Problem**: Used `symbol` as position key, causing data conflicts when holding both long and short + - Example: BTCUSDT long and BTCUSDT short would overwrite each other +- **Solution**: Changed to `symbol_side` format (e.g., `BTCUSDT_long`, `BTCUSDT_short`) + - Now properly distinguishes between long and short positions + +**4. Sharpe Ratio Calculation - Code Optimization** +- **Problem**: Used custom Newton's method for square root calculation +- **Solution**: Replaced with standard library `math.Sqrt` + - More reliable, maintainable, and efficient + +**Why This Update Matters:** +- ✅ Historical trade statistics now show **real USDT profit/loss** instead of meaningless percentages +- ✅ Performance comparison between different leverage trades is now accurate +- ✅ AI self-learning mechanism receives correct historical feedback +- ✅ Profit factor and Sharpe ratio calculations are now meaningful +- ✅ Multi-position tracking (long + short simultaneously) works correctly + +**Recommendation**: If you were running the system before this update, your historical statistics were inaccurate. After updating to v2.0.2, new trades will be calculated correctly. + ### v2.0.1 (2025-10-29) **Bug Fixes:** @@ -595,7 +972,7 @@ Issues and Pull Requests are welcome! --- -**Last Updated**: 2025-10-29 +**Last Updated**: 2025-10-29 (v2.0.2) **⚡ Explore the possibilities of quantitative trading with the power of AI!** diff --git a/README.ru.md b/README.ru.md index f8f8e2b9..e25c2365 100644 --- a/README.ru.md +++ b/README.ru.md @@ -143,9 +143,593 @@ npm install cd .. ``` -### 4. Конфигурация системы +### 4. Получение AI API ключей -Создайте файл `config.json` (используйте `config.json.example` как шаблон): +Перед настройкой системы вам необходимо получить AI API ключ. Выберите одного из следующих AI провайдеров: + +#### Вариант 1: DeepSeek (Рекомендуется для новичков) + +**Почему DeepSeek?** +- 💰 Дешевле чем GPT-4 (примерно 1/10 стоимости) +- 🚀 Быстрое время отклика +- 🎯 Отличное качество торговых решений +- 🌍 Доступен глобально без VPN + +**Как получить DeepSeek API ключ:** + +1. **Посетите**: [https://platform.deepseek.com](https://platform.deepseek.com) +2. **Зарегистрируйтесь**: Используя email/номер телефона +3. **Подтвердите**: Завершите подтверждение email/телефона +4. **Пополните**: Добавьте баланс на аккаунт + - Минимум: ~$5 USD + - Рекомендуется: $20-50 USD для тестирования +5. **Создайте API ключ**: + - Перейдите в раздел API Keys + - Нажмите "Создать новый ключ" + - Скопируйте и сохраните ключ (начинается с `sk-`) + - ⚠️ **Важно**: Сохраните немедленно - позже увидеть не сможете! + +**Цена**: Примерно $0.14 за миллион токенов (очень дешево!) + +#### Вариант 2: Qwen (Alibaba Cloud Tongyi Qianwen) + +**Как получить Qwen API ключ:** + +1. **Посетите**: [https://dashscope.aliyuncs.com](https://dashscope.aliyuncs.com) +2. **Зарегистрируйтесь**: Используя аккаунт Alibaba Cloud +3. **Активируйте сервис**: Активируйте DashScope сервис +4. **Создайте API ключ**: + - Перейдите в управление API ключами + - Создайте новый ключ + - Скопируйте и сохраните (начинается с `sk-`) + +**Примечание**: Может потребоваться китайский номер телефона для регистрации + +--- + +### 5. Конфигурация системы + +**Доступны два режима конфигурации:** +- **🌟 Режим новичка**: Один трейдер + монеты по умолчанию (Рекомендуется!) +- **⚔️ Экспертный режим**: Конкуренция нескольких трейдеров + +#### 🌟 Конфигурация режима новичка (Рекомендуется) + +**Шаг 1**: Скопируйте и переименуйте файл примера конфигурации + +```bash +cp config.json.example config.json +``` + +**Шаг 2**: Отредактируйте `config.json` и заполните ваши API ключи + +```json +{ + "traders": [ + { + "id": "my_trader", + "name": "Мой AI Трейдер", + "ai_model": "deepseek", + "binance_api_key": "YOUR_BINANCE_API_KEY", + "binance_secret_key": "YOUR_BINANCE_SECRET_KEY", + "use_qwen": false, + "deepseek_key": "sk-xxxxxxxxxxxxx", + "qwen_key": "", + "initial_balance": 1000.0, + "scan_interval_minutes": 3 + } + ], + "use_default_coins": true, + "coin_pool_api_url": "", + "oi_top_api_url": "", + "api_server_port": 8080 +} +``` + +**Шаг 3**: Замените заполнители вашими фактическими ключами + +| Заполнитель | Заменить на | Где получить | +|-------------|-------------|--------------| +| `YOUR_BINANCE_API_KEY` | Ваш Binance API ключ | Binance → Аккаунт → Управление API | +| `YOUR_BINANCE_SECRET_KEY` | Ваш Binance Secret ключ | То же самое | +| `sk-xxxxxxxxxxxxx` | Ваш DeepSeek API ключ | [platform.deepseek.com](https://platform.deepseek.com) | + +**Шаг 4**: Настройте начальный баланс (опционально) + +- `initial_balance`: Установите ваш фактический баланс Binance Futures аккаунта +- Используется для расчета P/L процентов +- Пример: Если у вас 500 USDT, установите `"initial_balance": 500.0` + +**✅ Контрольный список конфигурации:** + +- [ ] Binance API ключ заполнен (без кавычек) +- [ ] Binance Secret ключ заполнен (без кавычек) +- [ ] DeepSeek API ключ заполнен (начинается с `sk-`) +- [ ] `use_default_coins` установлен в `true` (для новичков) +- [ ] `initial_balance` соответствует балансу аккаунта +- [ ] Файл сохранен как `config.json` (не `.example`) + +--- + +#### ⚔️ Экспертный режим: Конкуренция нескольких трейдеров + +Для запуска нескольких AI трейдеров, конкурирующих друг с другом: + +```json +{ + "traders": [ + { + "id": "qwen_trader", + "name": "Qwen AI Trader", + "ai_model": "qwen", + "binance_api_key": "YOUR_BINANCE_API_KEY_1", + "binance_secret_key": "YOUR_BINANCE_SECRET_KEY_1", + "use_qwen": true, + "qwen_key": "sk-xxxxx", + "deepseek_key": "", + "initial_balance": 1000.0, + "scan_interval_minutes": 3 + }, + { + "id": "deepseek_trader", + "name": "DeepSeek AI Trader", + "ai_model": "deepseek", + "binance_api_key": "YOUR_BINANCE_API_KEY_2", + "binance_secret_key": "YOUR_BINANCE_SECRET_KEY_2", + "use_qwen": false, + "qwen_key": "", + "deepseek_key": "sk-xxxxx", + "initial_balance": 1000.0, + "scan_interval_minutes": 3 + } + ], + "use_default_coins": true, + "coin_pool_api_url": "", + "oi_top_api_url": "", + "api_server_port": 8080 +} +``` + +**Требования для режима конкуренции:** +- 2 отдельных Binance Futures аккаунта (разные API ключи) +- Оба AI API ключа (Qwen + DeepSeek) +- Больше тестовых средств (Рекомендуется: 500+ USDT на аккаунт) + +--- + +#### 📚 Объяснение полей конфигурации + +| Поле | Описание | Пример значения | Обязательно? | +|------|----------|-----------------|--------------| +| `id` | Уникальный идентификатор для этого трейдера | `"my_trader"` | ✅ Да | +| `name` | Отображаемое имя | `"Мой AI Трейдер"` | ✅ Да | +| `ai_model` | Используемый AI провайдер | `"deepseek"` или `"qwen"` | ✅ Да | +| `binance_api_key` | Binance API ключ | `"abc123..."` | ✅ Да | +| `binance_secret_key` | Binance Secret ключ | `"xyz789..."` | ✅ Да | +| `use_qwen` | Использовать ли Qwen | `true` или `false` | ✅ Да | +| `deepseek_key` | DeepSeek API ключ | `"sk-xxx"` | Требуется при использовании DeepSeek | +| `qwen_key` | Qwen API ключ | `"sk-xxx"` | Требуется при использовании Qwen | +| `initial_balance` | Начальный баланс для расчета P/L | `1000.0` | ✅ Да | +| `scan_interval_minutes` | Частота решений (минуты) | `3` (рекомендуется 3-5) | ✅ Да | +| `use_default_coins` | Использовать встроенный список монет
**✨ Умное значение по умолчанию: `true`** (v2.0.2+)
Автоматически включается без API | `true` или опустить | ❌ Нет
(Опционально, авто) | +| `coin_pool_api_url` | API пользовательского пула монет
*Требуется только при `use_default_coins: false`* | `""` (пусто) | ❌ Нет | +| `oi_top_api_url` | API открытого интереса
*Опциональные дополнительные данные* | `""` (пусто) | ❌ Нет | +| `api_server_port` | Порт веб-панели | `8080` | ✅ Да | + +**Монеты по умолчанию для торговли** (когда `use_default_coins: true`): +- BTC, ETH, SOL, BNB, XRP, DOGE, ADA, HYPE + +--- + +#### ⚠️ Важно: Поле `use_default_coins` + +**Умное поведение по умолчанию (v2.0.2+):** + +Система теперь автоматически устанавливает `use_default_coins: true`, если: +- Вы не включили это поле в config.json, или +- Вы установили его в `false`, но не предоставили `coin_pool_api_url` + +Это делает систему более дружелюбной для новичков! Вы даже можете полностью опустить это поле. + +**Примеры конфигурации:** + +✅ **Вариант 1: Явное указание (Рекомендуется для ясности)** +```json +"use_default_coins": true, +"coin_pool_api_url": "", +"oi_top_api_url": "" +``` + +✅ **Вариант 2: Опустить поле (Автоматически использует монеты по умолчанию)** +```json +// Не включать "use_default_coins" вообще +"coin_pool_api_url": "", +"oi_top_api_url": "" +``` + +⚙️ **Расширенное: Использовать внешний API** +```json +"use_default_coins": false, +"coin_pool_api_url": "http://your-api.com/coins", +"oi_top_api_url": "http://your-api.com/oi" +``` + +--- + +### 6. Запуск системы + +#### 🚀 Запуск системы (2 шага) + +Система состоит из **2 частей**, которые необходимо запустить отдельно: +1. **Backend** (AI торговый мозг + API) +2. **Frontend** (Веб-панель мониторинга) + +--- + +#### **Шаг 1: Запустите Backend** + +Откройте терминал и выполните: + +```bash +# Соберите программу (первый запуск или после изменений кода) +go build -o nofx + +# Запустите backend +./nofx +``` + +**Вы должны увидеть:** + +``` +🚀 Запуск системы автоматической торговли... +✓ Трейдер [my_trader] инициализирован +✓ API сервер запущен на порту 8080 +📊 Начинается мониторинг торговли... +``` + +**⚠️ Если видите ошибки:** + +| Сообщение об ошибке | Решение | +|---------------------|---------| +| `invalid API key` | Проверьте Binance API ключи в config.json | +| `TA-Lib not found` | Выполните `brew install ta-lib` (macOS) | +| `port 8080 already in use` | Измените `api_server_port` в config.json | +| `DeepSeek API error` | Проверьте DeepSeek API ключ и баланс | + +**✅ Признаки работы Backend:** +- Нет сообщений об ошибках +- Появляется "Начинается мониторинг торговли..." +- Система показывает баланс аккаунта +- Держите это окно терминала открытым! + +--- + +#### **Шаг 2: Запустите Frontend** + +Откройте **новое окно терминала** (держите первое открытым!), затем: + +```bash +cd web +npm run dev +``` + +**Вы должны увидеть:** + +``` +VITE v5.x.x ready in xxx ms + +➜ Local: http://localhost:3000/ +➜ Network: use --host to expose +``` + +**✅ Признаки работы Frontend:** +- Сообщение "Local: http://localhost:3000/" +- Нет сообщений об ошибках +- Также держите это окно терминала открытым! + +--- + +#### **Шаг 3: Доступ к панели** + +Откройте в веб-браузере: + +**🌐 http://localhost:3000** + +**Вы увидите:** +- 📊 Баланс аккаунта в реальном времени +- 📈 Позиции (если есть) +- 🤖 AI логи решений +- 📉 График капитала + +**Подсказки для первого использования:** +- Первое AI решение может занять 3-5 минут +- Начальное решение может показать "наблюдение" - это нормально +- AI должен сначала проанализировать рынок + +--- + +### 7. Мониторинг системы + +**Что отслеживать:** + +✅ **Признаки здоровой системы:** +- Backend терминал показывает циклы решений каждые 3-5 минут +- Нет постоянных сообщений об ошибках +- Обновляется баланс аккаунта +- Веб-панель автоматически обновляется + +⚠️ **Признаки предупреждения:** +- Повторяющиеся API ошибки +- Нет решений более 10 минут +- Быстро падающий баланс + +**Проверка состояния системы:** + +```bash +# В новом окне терминала +curl http://localhost:8080/health +``` + +Должно вернуть: `{"status":"ok"}` + +--- + +### 8. Остановка системы + +**Изящное завершение (Рекомендуется):** + +1. Перейдите к **Backend терминалу** (первому) +2. Нажмите `Ctrl+C` +3. Дождитесь сообщения "Система остановлена" +4. Перейдите к **Frontend терминалу** (второму) +5. Нажмите `Ctrl+C` + +**⚠️ Важно:** +- Всегда останавливайте backend первым +- Дождитесь подтверждения перед закрытием терминалов +- Не принудительно завершайте (не закрывайте терминалы сразу) + +--- + +## 📖 Процесс принятия решений AI + +Каждый цикл принятия решений (по умолчанию 3 минуты), система работает по следующему процессу: + +``` +┌──────────────────────────────────────────────────────────┐ +│ 1. 📊 Анализ исторической производительности │ +│ (последние 20 циклов) │ +├──────────────────────────────────────────────────────────┤ +│ ✓ Расчет общего процента выигрышей, средней прибыли, │ +│ соотношения прибыли/убытка │ +│ ✓ Статистика по каждой монете (процент выигрышей, │ +│ средний P/L в USDT) │ +│ ✓ Определение лучших/худших монет по производительности │ +│ ✓ Список деталей последних 5 сделок с точным P/L │ +│ ✓ Расчет коэффициента Шарпа для оценки риска │ +│ 📌 НОВОЕ (v2.0.2): Точный P/L в USDT с учетом плеча │ +└──────────────────────────────────────────────────────────┘ + ↓ +┌──────────────────────────────────────────────────────────┐ +│ 2. 💰 Получение состояния аккаунта │ +├──────────────────────────────────────────────────────────┤ +│ • Капитал аккаунта, доступный баланс, нереализованный │ +│ P/L │ +│ • Количество позиций, общий P/L (реализованный + │ +│ нереализованный) │ +│ • Использование маржи (текущее/максимальное) │ +│ • Индикаторы оценки риска │ +└──────────────────────────────────────────────────────────┘ + ↓ +┌──────────────────────────────────────────────────────────┐ +│ 3. 🔍 Анализ существующих позиций (если есть) │ +├──────────────────────────────────────────────────────────┤ +│ • Получение рыночных данных для каждой позиции │ +│ (3-минутные + 4-часовые свечи) │ +│ • Расчет технических индикаторов (RSI, MACD, EMA) │ +│ • Отображение длительности удержания позиции │ +│ (например, "удерживается 2 часа 15 минут") │ +│ • AI определяет, нужно ли закрыть (тейк-профит, │ +│ стоп-лосс или корректировка) │ +│ 📌 НОВОЕ (v2.0.2): Отслеживание длительности позиции │ +│ помогает AI решать │ +└──────────────────────────────────────────────────────────┘ + ↓ +┌──────────────────────────────────────────────────────────┐ +│ 4. 🎯 Оценка новых возможностей (пул кандидатов монет) │ +├──────────────────────────────────────────────────────────┤ +│ • Получение топ-20 монет с высоким рейтингом AI500 │ +│ • Получение топ-20 монет с самым быстрым ростом OI │ +│ • Объединение, удаление дубликатов, фильтрация монет с │ +│ низкой ликвидностью (OI < 15M USD) │ +│ • Массовое получение рыночных данных и технических │ +│ индикаторов │ +│ • Подготовка полных последовательностей сырых данных │ +│ для каждой монеты-кандидата │ +└──────────────────────────────────────────────────────────┘ + ↓ +┌──────────────────────────────────────────────────────────┐ +│ 5. 🧠 Комплексное решение AI │ +├──────────────────────────────────────────────────────────┤ +│ • Просмотр исторической обратной связи (процент │ +│ выигрышей, коэффициент P/L, лучшие/худшие монеты) │ +│ • Получение всех данных последовательностей (свечи, │ +│ индикаторы, открытый интерес) │ +│ • Анализ Chain of Thought │ +│ • Вывод решения: закрыть/открыть/удерживать/наблюдать │ +│ • Включает параметры плеча, размера, стоп-лосса, │ +│ тейк-профита │ +│ 📌 НОВОЕ (v2.0.2): AI может свободно анализировать │ +│ сырые последовательности, не ограничен заранее │ +│ определенными индикаторами │ +└──────────────────────────────────────────────────────────┘ + ↓ +┌──────────────────────────────────────────────────────────┐ +│ 6. ⚡ Исполнение сделок │ +├──────────────────────────────────────────────────────────┤ +│ • Приоритизация: сначала закрытие, затем открытие │ +│ • Автоматическая адаптация точности (правила LOT_SIZE) │ +│ • Предотвращение накопления позиций (отклонение │ +│ дублирования монета/направление) │ +│ • Автоматическая отмена всех ордеров после закрытия │ +│ • Запись времени открытия для отслеживания │ +│ длительности позиции │ +│ 📌 НОВОЕ (v2.0.2): Отслеживание времени открытия │ +│ позиции │ +└──────────────────────────────────────────────────────────┘ + ↓ +┌──────────────────────────────────────────────────────────┐ +│ 7. 📝 Запись логов │ +├──────────────────────────────────────────────────────────┤ +│ • Сохранение полной записи решения в decision_logs/ │ +│ • Включает цепочку рассуждений, JSON решения, снимок │ +│ аккаунта, результаты исполнения │ +│ • Хранение полных данных позиции (количество, плечо, │ +│ время открытия/закрытия) │ +│ • Использование ключей symbol_side для предотвращения │ +│ конфликтов лонг/шорт │ +│ 📌 НОВОЕ (v2.0.2): Предотвращение конфликтов при │ +│ удержании лонг + шорт, учет количества + плеча │ +└──────────────────────────────────────────────────────────┘ +``` + +### Ключевые улучшения в v2.0.2 + +**📌 Отслеживание длительности позиции:** +- Система теперь отслеживает, как долго каждая позиция удерживается +- Отображается в промпте пользователя: "удерживается 2 часа 15 минут" +- Помогает AI принимать лучшие решения о том, когда выйти + +**📌 Точный расчет P/L:** +- Ранее: Только процент (100U@5% = 1000U@5% = оба показывали "5.0") +- Теперь: Реальная прибыль в USDT = Стоимость позиции × Изменение цены × Плечо +- Пример: 1000 USDT × 5% × 20x = 1000 USDT фактической прибыли + +**📌 Расширенная свобода AI:** +- AI может свободно анализировать все данные сырых последовательностей +- Больше не ограничен заранее определенными комбинациями индикаторов +- Может выполнять собственный анализ трендов, расчет поддержки/сопротивления + +**📌 Улучшенное отслеживание позиций:** +- Использует ключ `symbol_side` (например, "BTCUSDT_long") +- Предотвращает конфликты при одновременном удержании лонг и шорт +- Хранит полные данные: количество, плечо, время открытия/закрытия + +--- + +## ⚠️ Важные предупреждения о рисках + +### Торговые риски + +1. **Рынки криптовалют чрезвычайно волатильны**, решения AI не гарантируют прибыль +2. **Торговля фьючерсами использует плечо**, убытки могут превысить основную сумму +3. **Экстремальные рыночные условия** могут привести к ликвидации +4. **Комиссии за финансирование** могут повлиять на стоимость удержания +5. **Риск ликвидности**: Некоторые монеты могут испытывать проскальзывание + +### Технические риски + +1. **Задержка сети** может вызвать проскальзывание цены +2. **Лимиты API** могут повлиять на исполнение сделок +3. **Тайм-ауты AI API** могут вызвать сбои решений +4. **Системные ошибки** могут вызвать неожиданное поведение + +### Рекомендации по использованию + +✅ **Рекомендуется** +- Используйте только средства, потерю которых вы можете позволить для тестирования +- Начните с небольших сумм (рекомендуется 100-500 USDT) +- Регулярно проверяйте состояние работы системы +- Отслеживайте изменения баланса счета +- Анализируйте логи решений AI для понимания стратегии + +❌ **Не рекомендуется** +- Инвестировать все средства или заемные деньги +- Запускать без присмотра на длительные периоды +- Слепо доверять решениям AI +- Использовать без понимания системы +- Запускать во время экстремальной волатильности рынка + +--- + +## 🛠️ Частые проблемы + +### 1. Ошибка компиляции: TA-Lib не найдена + +**Решение**: Установите библиотеку TA-Lib +```bash +# macOS +brew install ta-lib + +# Ubuntu +sudo apt-get install libta-lib0-dev +``` + +### 2. Ошибка точности: Точность превышает максимум + +**Решение**: Система автоматически обрабатывает точность из Binance LOT_SIZE. Если ошибка сохраняется, проверьте сетевое подключение. + +### 3. Тайм-аут AI API + +**Решение**: +- Проверьте правильность API ключа +- Проверьте сетевое подключение (может потребоваться прокси) +- Тайм-аут системы установлен на 120 секунд + +### 4. Frontend не может подключиться к backend + +**Решение**: +- Убедитесь, что backend запущен (http://localhost:8080) +- Проверьте, не занят ли порт 8080 +- Проверьте ошибки в консоли браузера + +### 5. Сбой API пула монет + +**Решение**: +- API пула монет опционален +- Если API не работает, система использует основные монеты по умолчанию (BTC, ETH и т.д.) +- Проверьте URL API и параметр auth в config.json + +--- + +## 📄 Лицензия + +Лицензия MIT - См. файл [LICENSE](LICENSE) для деталей + +--- + +## 🤝 Вклад в проект + +Приветствуются Issues и Pull Requests! + +### Руководство по разработке + +1. Сделайте Fork проекта +2. Создайте ветку функции (`git checkout -b feature/AmazingFeature`) +3. Зафиксируйте изменения (`git commit -m 'Add some AmazingFeature'`) +4. Отправьте в ветку (`git push origin feature/AmazingFeature`) +5. Откройте Pull Request + +--- + +## 📬 Контакты + +- **Twitter/X**: [@Web3Tinkle](https://x.com/Web3Tinkle) +- **GitHub Issues**: [Создать Issue](https://github.com/tinkle-community/nofx/issues) + +--- + +## 🙏 Благодарности + +- [Binance API](https://binance-docs.github.io/apidocs/futures/en/) - Binance Futures API +- [DeepSeek](https://platform.deepseek.com/) - DeepSeek AI API +- [Qwen](https://dashscope.aliyuncs.com/) - Alibaba Cloud Qwen +- [TA-Lib](https://ta-lib.org/) - Библиотека технических индикаторов +- [Recharts](https://recharts.org/) - Библиотека графиков React + +--- + +## 🔄 История изменений ```json { @@ -338,6 +922,50 @@ sudo apt-get install libta-lib0-dev ## 🔄 История изменений +### v2.0.2 (2025-10-29) + +**Критические исправления ошибок - История сделок и анализ производительности:** + +Эта версия исправляет **критические ошибки расчета** в системе исторических записей сделок и анализа производительности, которые значительно влияли на статистику прибыльности. + +**1. Расчет P/L - Исправление крупной ошибки** (logger/decision_logger.go) +- **Проблема**: Ранее P/L рассчитывался только как процент, полностью игнорируя размер позиции и плечо + - Пример: Позиция 100 USDT с доходом 5% и позиция 1000 USDT с доходом 5% обе показывали `5.0` как прибыль + - Это делало анализ производительности полностью неточным +- **Решение**: Теперь рассчитывается фактическая прибыль в USDT + ``` + P/L (USDT) = Стоимость позиции × Изменение цены % × Плечо + Пример: 1000 USDT × 5% × 20x = 1000 USDT фактической прибыли + ``` +- **Влияние**: Процент выигрышей, коэффициент прибыли и коэффициент Шарпа теперь основаны на точных суммах USDT + +**2. Отслеживание позиций - Отсутствие критических данных** +- **Проблема**: Записи открытых позиций хранили только цену и время, пропуская количество и плечо +- **Решение**: Теперь хранит полные торговые данные: + - `quantity`: Размер позиции (в монетах) + - `leverage`: Множитель плеча (например, 20x) + - Эти данные необходимы для точного расчета P/L + +**3. Логика ключа позиции - Конфликт Long/Short** +- **Проблема**: Использовался `symbol` как ключ позиции, что вызывало конфликты данных при одновременном удержании лонгов и шортов + - Пример: BTCUSDT лонг и BTCUSDT шорт перезаписывали друг друга +- **Решение**: Изменено на формат `symbol_side` (например, `BTCUSDT_long`, `BTCUSDT_short`) + - Теперь правильно различает лонг и шорт позиции + +**4. Расчет коэффициента Шарпа - Оптимизация кода** +- **Проблема**: Использовался пользовательский метод Ньютона для расчета квадратного корня +- **Решение**: Заменен на стандартную библиотеку `math.Sqrt` + - Более надежный, поддерживаемый и эффективный + +**Почему это обновление важно:** +- ✅ Историческая статистика сделок теперь показывает **реальную прибыль/убыток в USDT** вместо бессмысленных процентов +- ✅ Сравнение производительности между сделками с разным плечом теперь точно +- ✅ Механизм самообучения AI получает правильную историческую обратную связь +- ✅ Расчеты коэффициента прибыли и коэффициента Шарпа теперь имеют смысл +- ✅ Отслеживание нескольких позиций (лонг + шорт одновременно) теперь работает правильно + +**Рекомендация**: Если вы запускали систему до этого обновления, ваша историческая статистика была неточной. После обновления до v2.0.2, новые сделки будут рассчитываться правильно. + ### v2.0.1 (2025-10-29) **Исправления ошибок:** @@ -357,7 +985,7 @@ sudo apt-get install libta-lib0-dev --- -**Последнее обновление**: 2025-10-29 +**Последнее обновление**: 2025-10-29 (v2.0.2) **⚡ Исследуйте возможности количественной торговли с силой AI!** diff --git a/README.uk.md b/README.uk.md index f9b08699..d9460c8c 100644 --- a/README.uk.md +++ b/README.uk.md @@ -143,13 +143,484 @@ npm install cd .. ``` -### 4. Конфігурація системи +### 4. Отримання AI API ключів -Створіть файл `config.json` (використовуйте `config.json.example` як шаблон): +Перед налаштуванням системи вам необхідно отримати AI API ключ. Виберіть одного з наступних AI провайдерів: + +#### Варіант 1: DeepSeek (Рекомендується для новачків) + +**Чому DeepSeek?** +- 💰 Дешевше ніж GPT-4 (приблизно 1/10 вартості) +- 🚀 Швидкий час відгуку +- 🎯 Відмінна якість торгових рішень +- 🌍 Доступний глобально без VPN + +**Як отримати DeepSeek API ключ:** + +1. **Відвідайте**: [https://platform.deepseek.com](https://platform.deepseek.com) +2. **Зареєструйтеся**: Використовуючи email/номер телефону +3. **Підтвердіть**: Завершіть підтвердження email/телефону +4. **Поповніть**: Додайте баланс на акаунт + - Мінімум: ~$5 USD + - Рекомендується: $20-50 USD для тестування +5. **Створіть API ключ**: + - Перейдіть у розділ API Keys + - Натисніть "Створити новий ключ" + - Скопіюйте та збережіть ключ (починається з `sk-`) + - ⚠️ **Важливо**: Збережіть негайно - пізніше побачити не зможете! + +**Ціна**: Приблизно $0.14 за мільйон токенів (дуже дешево!) + +#### Варіант 2: Qwen (Alibaba Cloud Tongyi Qianwen) + +**Як отримати Qwen API ключ:** + +1. **Відвідайте**: [https://dashscope.aliyuncs.com](https://dashscope.aliyuncs.com) +2. **Зареєструйтеся**: Використовуючи акаунт Alibaba Cloud +3. **Активуйте сервіс**: Активуйте DashScope сервіс +4. **Створіть API ключ**: + - Перейдіть в управління API ключами + - Створіть новий ключ + - Скопіюйте та збережіть (починається з `sk-`) + +**Примітка**: Може знадобитися китайський номер телефону для реєстрації + +--- + +### 5. Конфігурація системи + +**Доступні два режими конфігурації:** +- **🌟 Режим новачка**: Один трейдер + монети за замовчуванням (Рекомендується!) +- **⚔️ Експертний режим**: Змагання кількох трейдерів + +#### 🌟 Конфігурація режиму новачка (Рекомендується) + +**Крок 1**: Скопіюйте та перейменуйте файл прикладу конфігурації + +```bash +cp config.json.example config.json +``` + +**Крок 2**: Відредагуйте `config.json` та заповніть ваші API ключі ```json { "traders": [ + { + "id": "my_trader", + "name": "Мій AI Трейдер", + "ai_model": "deepseek", + "binance_api_key": "YOUR_BINANCE_API_KEY", + "binance_secret_key": "YOUR_BINANCE_SECRET_KEY", + "use_qwen": false, + "deepseek_key": "sk-xxxxxxxxxxxxx", + "qwen_key": "", + "initial_balance": 1000.0, + "scan_interval_minutes": 3 + } + ], + "use_default_coins": true, + "coin_pool_api_url": "", + "oi_top_api_url": "", + "api_server_port": 8080 +} +``` + +**Крок 3**: Замініть заповнювачі вашими фактичними ключами + +| Заповнювач | Замінити на | Де отримати | +|------------|-------------|-------------| +| `YOUR_BINANCE_API_KEY` | Ваш Binance API ключ | Binance → Акаунт → Управління API | +| `YOUR_BINANCE_SECRET_KEY` | Ваш Binance Secret ключ | Те ж саме | +| `sk-xxxxxxxxxxxxx` | Ваш DeepSeek API ключ | [platform.deepseek.com](https://platform.deepseek.com) | + +**Крок 4**: Налаштуйте початковий баланс (опціонально) + +- `initial_balance`: Встановіть ваш фактичний баланс Binance Futures акаунта +- Використовується для розрахунку P/L відсотків +- Приклад: Якщо у вас 500 USDT, встановіть `"initial_balance": 500.0` + +**✅ Контрольний список конфігурації:** + +- [ ] Binance API ключ заповнено (без лапок) +- [ ] Binance Secret ключ заповнено (без лапок) +- [ ] DeepSeek API ключ заповнено (починається з `sk-`) +- [ ] `use_default_coins` встановлено в `true` (для новачків) +- [ ] `initial_balance` відповідає балансу акаунта +- [ ] Файл збережено як `config.json` (не `.example`) + +--- + +#### ⚔️ Експертний режим: Змагання кількох трейдерів + +Для запуску кількох AI трейдерів, що змагаються один з одним: + +```json +{ + "traders": [ + { + "id": "qwen_trader", + "name": "Qwen AI Trader", + "ai_model": "qwen", + "binance_api_key": "YOUR_BINANCE_API_KEY_1", + "binance_secret_key": "YOUR_BINANCE_SECRET_KEY_1", + "use_qwen": true, + "qwen_key": "sk-xxxxx", + "deepseek_key": "", + "initial_balance": 1000.0, + "scan_interval_minutes": 3 + }, + { + "id": "deepseek_trader", + "name": "DeepSeek AI Trader", + "ai_model": "deepseek", + "binance_api_key": "YOUR_BINANCE_API_KEY_2", + "binance_secret_key": "YOUR_BINANCE_SECRET_KEY_2", + "use_qwen": false, + "qwen_key": "", + "deepseek_key": "sk-xxxxx", + "initial_balance": 1000.0, + "scan_interval_minutes": 3 + } + ], + "use_default_coins": true, + "coin_pool_api_url": "", + "oi_top_api_url": "", + "api_server_port": 8080 +} +``` + +**Вимоги для режиму змагання:** +- 2 окремі Binance Futures акаунти (різні API ключі) +- Обидва AI API ключі (Qwen + DeepSeek) +- Більше тестових коштів (Рекомендується: 500+ USDT на акаунт) + +--- + +#### 📚 Пояснення полів конфігурації + +| Поле | Опис | Приклад значення | Обов'язково? | +|------|------|------------------|--------------| +| `id` | Унікальний ідентифікатор для цього трейдера | `"my_trader"` | ✅ Так | +| `name` | Відображуване ім'я | `"Мій AI Трейдер"` | ✅ Так | +| `ai_model` | Використовуваний AI провайдер | `"deepseek"` або `"qwen"` | ✅ Так | +| `binance_api_key` | Binance API ключ | `"abc123..."` | ✅ Так | +| `binance_secret_key` | Binance Secret ключ | `"xyz789..."` | ✅ Так | +| `use_qwen` | Використовувати чи Qwen | `true` або `false` | ✅ Так | +| `deepseek_key` | DeepSeek API ключ | `"sk-xxx"` | Потрібно при використанні DeepSeek | +| `qwen_key` | Qwen API ключ | `"sk-xxx"` | Потрібно при використанні Qwen | +| `initial_balance` | Початковий баланс для розрахунку P/L | `1000.0` | ✅ Так | +| `scan_interval_minutes` | Частота рішень (хвилини) | `3` (рекомендується 3-5) | ✅ Так | +| `use_default_coins` | Використовувати вбудований список монет
**✨ Розумне значення за замовчуванням: `true`** (v2.0.2+)
Автоматично включається без API | `true` або опустити | ❌ Ні
(Опціонально, авто) | +| `coin_pool_api_url` | API користувацького пулу монет
*Потрібно лише при `use_default_coins: false`* | `""` (пусто) | ❌ Ні | +| `oi_top_api_url` | API відкритого інтересу
*Опціональні додаткові дані* | `""` (пусто) | ❌ Ні | +| `api_server_port` | Порт веб-панелі | `8080` | ✅ Так | + +**Монети за замовчуванням для торгівлі** (коли `use_default_coins: true`): +- BTC, ETH, SOL, BNB, XRP, DOGE, ADA, HYPE + +--- + +#### ⚠️ Важливо: Поле `use_default_coins` + +**Розумна поведінка за замовчуванням (v2.0.2+):** + +Система тепер автоматично встановлює `use_default_coins: true`, якщо: +- Ви не включили це поле в config.json, або +- Ви встановили його в `false`, але не надали `coin_pool_api_url` + +Це робить систему більш дружньою для новачків! Ви навіть можете повністю опустити це поле. + +**Приклади конфігурації:** + +✅ **Варіант 1: Явне вказання (Рекомендується для ясності)** +```json +"use_default_coins": true, +"coin_pool_api_url": "", +"oi_top_api_url": "" +``` + +✅ **Варіант 2: Опустити поле (Автоматично використовує монети за замовчуванням)** +```json +// Не включати "use_default_coins" взагалі +"coin_pool_api_url": "", +"oi_top_api_url": "" +``` + +⚙️ **Розширене: Використовувати зовнішній API** +```json +"use_default_coins": false, +"coin_pool_api_url": "http://your-api.com/coins", +"oi_top_api_url": "http://your-api.com/oi" +``` + +--- + +### 6. Запуск системи + +#### 🚀 Запуск системи (2 кроки) + +Система складається з **2 частин**, які необхідно запустити окремо: +1. **Backend** (AI торговий мозок + API) +2. **Frontend** (Веб-панель моніторингу) + +--- + +#### **Крок 1: Запустіть Backend** + +Відкрийте термінал та виконайте: + +```bash +# Зберіть програму (перший запуск або після змін коду) +go build -o nofx + +# Запустіть backend +./nofx +``` + +**Ви повинні побачити:** + +``` +🚀 Запуск системи автоматичної торгівлі... +✓ Трейдер [my_trader] ініціалізовано +✓ API сервер запущено на порту 8080 +📊 Починається моніторинг торгівлі... +``` + +**⚠️ Якщо бачите помилки:** + +| Повідомлення про помилку | Рішення | +|--------------------------|---------| +| `invalid API key` | Перевірте Binance API ключі в config.json | +| `TA-Lib not found` | Виконайте `brew install ta-lib` (macOS) | +| `port 8080 already in use` | Змініть `api_server_port` в config.json | +| `DeepSeek API error` | Перевірте DeepSeek API ключ та баланс | + +**✅ Ознаки роботи Backend:** +- Немає повідомлень про помилки +- З'являється "Починається моніторинг торгівлі..." +- Система показує баланс акаунта +- Тримайте це вікно терміналу відкритим! + +--- + +#### **Крок 2: Запустіть Frontend** + +Відкрийте **нове вікно терміналу** (тримайте перше відкритим!), потім: + +```bash +cd web +npm run dev +``` + +**Ви повинні побачити:** + +``` +VITE v5.x.x ready in xxx ms + +➜ Local: http://localhost:3000/ +➜ Network: use --host to expose +``` + +**✅ Ознаки роботи Frontend:** +- Повідомлення "Local: http://localhost:3000/" +- Немає повідомлень про помилки +- Також тримайте це вікно терміналу відкритим! + +--- + +#### **Крок 3: Доступ до панелі** + +Відкрийте у веб-браузері: + +**🌐 http://localhost:3000** + +**Ви побачите:** +- 📊 Баланс акаунта в реальному часі +- 📈 Позиції (якщо є) +- 🤖 AI логи рішень +- 📉 Графік капіталу + +**Підказки для першого використання:** +- Перше AI рішення може зайняти 3-5 хвилин +- Початкове рішення може показати "спостереження" - це нормально +- AI повинен спочатку проаналізувати ринок + +--- + +### 7. Моніторинг системи + +**Що відстежувати:** + +✅ **Ознаки здорової системи:** +- Backend термінал показує цикли рішень кожні 3-5 хвилин +- Немає постійних повідомлень про помилки +- Оновлюється баланс акаунта +- Веб-панель автоматично оновлюється + +⚠️ **Ознаки попередження:** +- Повторювані API помилки +- Немає рішень більше 10 хвилин +- Швидко падаючий баланс + +**Перевірка стану системи:** + +```bash +# У новому вікні терміналу +curl http://localhost:8080/health +``` + +Повинно повернути: `{"status":"ok"}` + +--- + +### 8. Зупинка системи + +**Витончене завершення (Рекомендується):** + +1. Перейдіть до **Backend терміналу** (першого) +2. Натисніть `Ctrl+C` +3. Дочекайтеся повідомлення "Система зупинена" +4. Перейдіть до **Frontend терміналу** (другого) +5. Натисніть `Ctrl+C` + +**⚠️ Важливо:** +- Завжди зупиняйте backend першим +- Дочекайтеся підтвердження перед закриттям терміналів +- Не примусово завершуйте (не закривайте термінали одразу) + +--- + +## 📖 Процес прийняття рішень AI + +Кожен цикл прийняття рішень (за замовчуванням 3 хвилини), система працює за наступним процесом: + +``` +┌──────────────────────────────────────────────────────────┐ +│ 1. 📊 Аналіз історичної продуктивності │ +│ (останні 20 циклів) │ +├──────────────────────────────────────────────────────────┤ +│ ✓ Розрахунок загального відсотка виграшів, середнього │ +│ прибутку, співвідношення прибутку/збитку │ +│ ✓ Статистика по кожній монеті (відсоток виграшів, │ +│ середній P/L в USDT) │ +│ ✓ Визначення найкращих/найгірших монет за │ +│ продуктивністю │ +│ ✓ Список деталей останніх 5 угод з точним P/L │ +│ ✓ Розрахунок коефіцієнта Шарпа для оцінки ризику │ +│ 📌 НОВЕ (v2.0.2): Точний P/L в USDT з врахуванням │ +│ плеча │ +└──────────────────────────────────────────────────────────┘ + ↓ +┌──────────────────────────────────────────────────────────┐ +│ 2. 💰 Отримання стану акаунта │ +├──────────────────────────────────────────────────────────┤ +│ • Капітал акаунта, доступний баланс, нереалізований │ +│ P/L │ +│ • Кількість позицій, загальний P/L (реалізований + │ +│ нереалізований) │ +│ • Використання маржі (поточне/максимальне) │ +│ • Індикатори оцінки ризику │ +└──────────────────────────────────────────────────────────┘ + ↓ +┌──────────────────────────────────────────────────────────┐ +│ 3. 🔍 Аналіз існуючих позицій (якщо є) │ +├──────────────────────────────────────────────────────────┤ +│ • Отримання ринкових даних для кожної позиції │ +│ (3-хвилинні + 4-годинні свічки) │ +│ • Розрахунок технічних індикаторів (RSI, MACD, EMA) │ +│ • Відображення тривалості утримання позиції │ +│ (наприклад, "утримується 2 години 15 хвилин") │ +│ • AI визначає, чи потрібно закрити (тейк-профіт, │ +│ стоп-лосс або коригування) │ +│ 📌 НОВЕ (v2.0.2): Відстеження тривалості позиції │ +│ допомагає AI вирішувати │ +└──────────────────────────────────────────────────────────┘ + ↓ +┌──────────────────────────────────────────────────────────┐ +│ 4. 🎯 Оцінка нових можливостей (пул кандидатів монет) │ +├──────────────────────────────────────────────────────────┤ +│ • Отримання топ-20 монет з високим рейтингом AI500 │ +│ • Отримання топ-20 монет з найшвидшим зростанням OI │ +│ • Об'єднання, видалення дублікатів, фільтрація монет з │ +│ низькою ліквідністю (OI < 15M USD) │ +│ • Масове отримання ринкових даних та технічних │ +│ індикаторів │ +│ • Підготовка повних послідовностей сирих даних для │ +│ кожної монети-кандидата │ +└──────────────────────────────────────────────────────────┘ + ↓ +┌──────────────────────────────────────────────────────────┐ +│ 5. 🧠 Комплексне рішення AI │ +├──────────────────────────────────────────────────────────┤ +│ • Перегляд історичного зворотного зв'язку (відсоток │ +│ виграшів, коефіцієнт P/L, найкращі/найгірші монети) │ +│ • Отримання всіх даних послідовностей (свічки, │ +│ індикатори, відкритий інтерес) │ +│ • Аналіз Chain of Thought │ +│ • Вивід рішення: закрити/відкрити/утримувати/спостерігати │ +│ • Включає параметри плеча, розміру, стоп-лосса, │ +│ тейк-профіта │ +│ 📌 НОВЕ (v2.0.2): AI може вільно аналізувати сирі │ +│ послідовності, не обмежений заздалегідь визначеними │ +│ індикаторами │ +└──────────────────────────────────────────────────────────┘ + ↓ +┌──────────────────────────────────────────────────────────┐ +│ 6. ⚡ Виконання угод │ +├──────────────────────────────────────────────────────────┤ +│ • Пріоритизація: спочатку закриття, потім відкриття │ +│ • Автоматична адаптація точності (правила LOT_SIZE) │ +│ • Запобігання накопиченню позицій (відхилення │ +│ дублювання монета/напрямок) │ +│ • Автоматична відміна всіх ордерів після закриття │ +│ • Запис часу відкриття для відстеження тривалості │ +│ позиції │ +│ 📌 НОВЕ (v2.0.2): Відстеження часу відкриття позиції │ +└──────────────────────────────────────────────────────────┘ + ↓ +┌──────────────────────────────────────────────────────────┐ +│ 7. 📝 Запис логів │ +├──────────────────────────────────────────────────────────┤ +│ • Збереження повного запису рішення в decision_logs/ │ +│ • Включає ланцюг міркувань, JSON рішення, знімок │ +│ акаунта, результати виконання │ +│ • Зберігання повних даних позиції (кількість, плече, │ +│ час відкриття/закриття) │ +│ • Використання ключів symbol_side для запобігання │ +│ конфліктів лонг/шорт │ +│ 📌 НОВЕ (v2.0.2): Запобігання конфліктів при утриманні │ +│ лонг + шорт, врахування кількості + плеча │ +└──────────────────────────────────────────────────────────┘ +``` + +### Ключові покращення в v2.0.2 + +**📌 Відстеження тривалості позиції:** +- Система тепер відстежує, як довго кожна позиція утримується +- Відображається в промпті користувача: "утримується 2 години 15 хвилин" +- Допомагає AI приймати кращі рішення про те, коли вийти + +**📌 Точний розрахунок P/L:** +- Раніше: Лише відсоток (100U@5% = 1000U@5% = обидва показували "5.0") +- Тепер: Реальний прибуток в USDT = Вартість позиції × Зміна ціни × Плече +- Приклад: 1000 USDT × 5% × 20x = 1000 USDT фактичного прибутку + +**📌 Розширена свобода AI:** +- AI може вільно аналізувати всі дані сирих послідовностей +- Більше не обмежений заздалегідь визначеними комбінаціями індикаторів +- Може виконувати власний аналіз трендів, розрахунок підтримки/опору + +**📌 Покращене відстеження позицій:** +- Використовує ключ `symbol_side` (наприклад, "BTCUSDT_long") +- Запобігає конфліктам при одночасному утриманні лонг та шорт +- Зберігає повні дані: кількість, плече, час відкриття/закриття + +--- + +## ⚠️ Важливі попередження про ризики + +### Торговельні ризики { "id": "qwen_trader", "name": "Qwen AI Trader", @@ -338,6 +809,50 @@ sudo apt-get install libta-lib0-dev ## 🔄 Історія змін +### v2.0.2 (2025-10-29) + +**Критичні виправлення помилок - Історія угод та аналіз продуктивності:** + +Ця версія виправляє **критичні помилки розрахунку** в системі історичних записів угод та аналізу продуктивності, які значно впливали на статистику прибутковості. + +**1. Розрахунок P/L - Виправлення великої помилки** (logger/decision_logger.go) +- **Проблема**: Раніше P/L розраховувався лише як відсоток, повністю ігноруючи розмір позиції та плече + - Приклад: Позиція 100 USDT з доходом 5% та позиція 1000 USDT з доходом 5% обидві показували `5.0` як прибуток + - Це робило аналіз продуктивності повністю неточним +- **Рішення**: Тепер розраховується фактичний прибуток в USDT + ``` + P/L (USDT) = Вартість позиції × Зміна ціни % × Плече + Приклад: 1000 USDT × 5% × 20x = 1000 USDT фактичного прибутку + ``` +- **Вплив**: Відсоток виграшів, коефіцієнт прибутку та коефіцієнт Шарпа тепер засновані на точних сумах USDT + +**2. Відстеження позицій - Відсутність критичних даних** +- **Проблема**: Записи відкритих позицій зберігали лише ціну та час, пропускаючи кількість та плече +- **Рішення**: Тепер зберігає повні торгові дані: + - `quantity`: Розмір позиції (в монетах) + - `leverage`: Множник плеча (наприклад, 20x) + - Ці дані необхідні для точного розрахунку P/L + +**3. Логіка ключа позиції - Конфлікт Long/Short** +- **Проблема**: Використовувався `symbol` як ключ позиції, що викликало конфлікти даних при одночасному утриманні лонгів та шортів + - Приклад: BTCUSDT лонг та BTCUSDT шорт перезаписували один одного +- **Рішення**: Змінено на формат `symbol_side` (наприклад, `BTCUSDT_long`, `BTCUSDT_short`) + - Тепер правильно розрізняє лонг та шорт позиції + +**4. Розрахунок коефіцієнта Шарпа - Оптимізація коду** +- **Проблема**: Використовувався користувацький метод Ньютона для розрахунку квадратного кореня +- **Рішення**: Замінено на стандартну бібліотеку `math.Sqrt` + - Більш надійний, підтримуваний та ефективний + +**Чому це оновлення важливе:** +- ✅ Історична статистика угод тепер показує **реальний прибуток/збиток в USDT** замість безглуздих відсотків +- ✅ Порівняння продуктивності між угодами з різним плечем тепер точне +- ✅ Механізм самонавчання AI отримує правильний історичний зворотний зв'язок +- ✅ Розрахунки коефіцієнта прибутку та коефіцієнта Шарпа тепер мають сенс +- ✅ Відстеження кількох позицій (лонг + шорт одночасно) тепер працює правильно + +**Рекомендація**: Якщо ви запускали систему до цього оновлення, ваша історична статистика була неточною. Після оновлення до v2.0.2, нові угоди будуть розраховуватися правильно. + ### v2.0.1 (2025-10-29) **Виправлення помилок:** @@ -357,7 +872,7 @@ sudo apt-get install libta-lib0-dev --- -**Останнє оновлення**: 2025-10-29 +**Останнє оновлення**: 2025-10-29 (v2.0.2) **⚡ Досліджуйте можливості кількісної торгівлі з силою AI!** diff --git a/README.zh-CN.md b/README.zh-CN.md index 077fd6cc..a62f4d02 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -207,9 +207,117 @@ npm install cd .. ``` -### 4. 配置系统 +### 4. 获取AI API密钥 -创建 `config.json` 文件: +在配置系统之前,您需要获取AI API密钥。请选择以下AI提供商之一: + +#### 选项1:DeepSeek(推荐新手) + +**为什么选择DeepSeek?** +- 💰 比GPT-4便宜(约1/10成本) +- 🚀 响应速度快 +- 🎯 交易决策质量优秀 +- 🌍 全球可用无需VPN + +**如何获取DeepSeek API密钥:** + +1. **访问**:[https://platform.deepseek.com](https://platform.deepseek.com) +2. **注册**:使用邮箱/手机号注册 +3. **验证**:完成邮箱/手机验证 +4. **充值**:向账户添加余额 + - 最低:约$5美元 + - 推荐:$20-50美元用于测试 +5. **创建API密钥**: + - 进入API Keys部分 + - 点击"创建新密钥" + - 复制并保存密钥(以`sk-`开头) + - ⚠️ **重要**:立即保存 - 之后无法再查看! + +**价格**:每百万tokens约$0.14(非常便宜!) + +#### 选项2:Qwen(阿里云通义千问) + +**如何获取Qwen API密钥:** + +1. **访问**:[https://dashscope.aliyuncs.com](https://dashscope.aliyuncs.com) +2. **注册**:使用阿里云账户注册 +3. **开通服务**:激活DashScope服务 +4. **创建API密钥**: + - 进入API密钥管理 + - 创建新密钥 + - 复制并保存(以`sk-`开头) + +**注意**:可能需要中国手机号注册 + +--- + +### 5. 系统配置 + +**两种配置模式可选:** +- **🌟 新手模式**:单trader + 默认币种(推荐!) +- **⚔️ 专家模式**:多trader竞赛 + +#### 🌟 新手模式配置(推荐) + +**步骤1**:复制并重命名示例配置文件 + +```bash +cp config.json.example config.json +``` + +**步骤2**:编辑`config.json`填入您的API密钥 + +```json +{ + "traders": [ + { + "id": "my_trader", + "name": "我的AI交易员", + "ai_model": "deepseek", + "binance_api_key": "YOUR_BINANCE_API_KEY", + "binance_secret_key": "YOUR_BINANCE_SECRET_KEY", + "use_qwen": false, + "deepseek_key": "sk-xxxxxxxxxxxxx", + "qwen_key": "", + "initial_balance": 1000.0, + "scan_interval_minutes": 3 + } + ], + "use_default_coins": true, + "coin_pool_api_url": "", + "oi_top_api_url": "", + "api_server_port": 8080 +} +``` + +**步骤3**:用您的实际密钥替换占位符 + +| 占位符 | 替换为 | 哪里获取 | +|-------|--------|---------| +| `YOUR_BINANCE_API_KEY` | 您的币安API密钥 | 币安 → 账户 → API管理 | +| `YOUR_BINANCE_SECRET_KEY` | 您的币安Secret密钥 | 同上 | +| `sk-xxxxxxxxxxxxx` | 您的DeepSeek API密钥 | [platform.deepseek.com](https://platform.deepseek.com) | + +**步骤4**:调整初始余额(可选) + +- `initial_balance`:设置为您实际的币安合约账户余额 +- 用于计算盈亏百分比 +- 例如:如果您有500 USDT,设置`"initial_balance": 500.0` + +**✅ 配置检查清单:** + +- [ ] 币安API密钥已填写(无引号问题) +- [ ] 币安Secret密钥已填写(无引号问题) +- [ ] DeepSeek API密钥已填写(以`sk-`开头) +- [ ] `use_default_coins`设为`true`(新手) +- [ ] `initial_balance`与您的账户余额匹配 +- [ ] 文件保存为`config.json`(不是`.example`) + +--- + +#### ⚔️ 专家模式:多Trader竞赛 + +用于运行多个AI trader相互竞争: ```json { @@ -218,12 +326,13 @@ cd .. "id": "qwen_trader", "name": "Qwen AI Trader", "ai_model": "qwen", - "binance_api_key": "YOUR_BINANCE_API_KEY", - "binance_secret_key": "YOUR_BINANCE_SECRET_KEY", + "binance_api_key": "YOUR_BINANCE_API_KEY_1", + "binance_secret_key": "YOUR_BINANCE_SECRET_KEY_1", "use_qwen": true, "qwen_key": "sk-xxxxx", - "scan_interval_minutes": 3, - "initial_balance": 1000.0 + "deepseek_key": "", + "initial_balance": 1000.0, + "scan_interval_minutes": 3 }, { "id": "deepseek_trader", @@ -232,58 +341,217 @@ cd .. "binance_api_key": "YOUR_BINANCE_API_KEY_2", "binance_secret_key": "YOUR_BINANCE_SECRET_KEY_2", "use_qwen": false, + "qwen_key": "", "deepseek_key": "sk-xxxxx", - "scan_interval_minutes": 3, - "initial_balance": 1000.0 + "initial_balance": 1000.0, + "scan_interval_minutes": 3 } ], - "coin_pool_api_url": "http://x.x.x.x:xxx/api/ai500/list?auth=YOUR_AUTH", - "oi_top_api_url": "http://x.x.x.x:xxx/api/oi/top?auth=YOUR_AUTH", + "use_default_coins": true, + "coin_pool_api_url": "", + "oi_top_api_url": "", "api_server_port": 8080 } ``` -**配置说明:** -- `traders`: 可配置1-N个trader(单AI或多AI竞赛) -- `id`: Trader唯一标识(用于日志目录) -- `ai_model`: "qwen" 或 "deepseek" -- `binance_api_key/secret_key`: 每个trader使用独立的币安账户 -- `initial_balance`: 初始余额(用于计算盈亏%) -- `scan_interval_minutes`: 决策周期(建议3-5分钟) -- `use_default_coins`: **true** = 使用默认8个主流币种 | **false** = 使用API币种池(新手推荐:true) -- `coin_pool_api_url`: AI500币种池API(可选,当use_default_coins=true时忽略) -- `oi_top_api_url`: OI Top持仓量API(可选,留空时跳过OI Top数据) +**竞赛模式要求:** +- 2个独立的币安合约账户(不同的API密钥) +- 两种AI API密钥(Qwen + DeepSeek) +- 更多测试资金(推荐:每个账户500+ USDT) -**默认币种列表**(当 `use_default_coins: true` 时): +--- + +#### 📚 配置字段详解 + +| 字段 | 说明 | 示例值 | 是否必填? | +|-----|------|--------|-----------| +| `id` | 此trader的唯一标识符 | `"my_trader"` | ✅ 是 | +| `name` | 显示名称 | `"我的AI交易员"` | ✅ 是 | +| `ai_model` | 使用的AI提供商 | `"deepseek"` 或 `"qwen"` | ✅ 是 | +| `binance_api_key` | 币安API密钥 | `"abc123..."` | ✅ 是 | +| `binance_secret_key` | 币安Secret密钥 | `"xyz789..."` | ✅ 是 | +| `use_qwen` | 是否使用Qwen | `true` 或 `false` | ✅ 是 | +| `deepseek_key` | DeepSeek API密钥 | `"sk-xxx"` | 使用DeepSeek时必填 | +| `qwen_key` | Qwen API密钥 | `"sk-xxx"` | 使用Qwen时必填 | +| `initial_balance` | 用于P/L计算的起始余额 | `1000.0` | ✅ 是 | +| `scan_interval_minutes` | 决策频率(分钟) | `3`(建议3-5) | ✅ 是 | +| `use_default_coins` | 使用内置币种列表
**✨ 智能默认:`true`** (v2.0.2+)
未提供API时自动启用 | `true` 或省略 | ❌ 否
(可选,自动默认) | +| `coin_pool_api_url` | 自定义币种池API
*仅当`use_default_coins: false`时需要* | `""`(空) | ❌ 否 | +| `oi_top_api_url` | 持仓量API
*可选补充数据* | `""`(空) | ❌ 否 | +| `api_server_port` | Web仪表板端口 | `8080` | ✅ 是 | + +**默认交易币种**(当 `use_default_coins: true` 时): - BTC、ETH、SOL、BNB、XRP、DOGE、ADA、HYPE -### 5. 运行系统 +--- -**启动后端(AI交易系统 + API服务器):** +#### ⚠️ 重要:`use_default_coins` 字段 + +**智能默认行为(v2.0.2+):** + +系统现在会自动默认为`use_default_coins: true`,如果: +- 您在config.json中未包含此字段,或 +- 您将其设为`false`但未提供`coin_pool_api_url` + +这让新手更友好!您甚至可以完全省略此字段。 + +**配置示例:** + +✅ **选项1:显式设置(推荐以保持清晰)** +```json +"use_default_coins": true, +"coin_pool_api_url": "", +"oi_top_api_url": "" +``` + +✅ **选项2:省略字段(自动使用默认币种)** +```json +// 完全不包含"use_default_coins" +"coin_pool_api_url": "", +"oi_top_api_url": "" +``` + +⚙️ **高级:使用外部API** +```json +"use_default_coins": false, +"coin_pool_api_url": "http://your-api.com/coins", +"oi_top_api_url": "http://your-api.com/oi" +``` + +--- + +### 6. 运行系统 + +#### 🚀 启动系统(2个步骤) + +系统有**2个部分**需要分别运行: +1. **后端**(AI交易大脑 + API) +2. **前端**(Web监控仪表板) + +--- + +#### **步骤1:启动后端** + +打开终端并运行: ```bash +# 构建程序(首次运行或代码更改后) go build -o nofx + +# 启动后端 ./nofx ``` -**启动前端(Web Dashboard):** +**您应该看到:** -新开终端窗口: +``` +🚀 启动自动交易系统... +✓ Trader [my_trader] 已初始化 +✓ API服务器启动在端口 8080 +📊 开始交易监控... +``` + +**⚠️ 如果看到错误:** + +| 错误信息 | 解决方案 | +|---------|---------| +| `invalid API key` | 检查config.json中的币安API密钥 | +| `TA-Lib not found` | 运行`brew install ta-lib`(macOS) | +| `port 8080 already in use` | 修改config.json中的`api_server_port` | +| `DeepSeek API error` | 验证DeepSeek API密钥和余额 | + +**✅ 后端运行正常的标志:** +- 无错误信息 +- 出现"开始交易监控..." +- 系统显示账户余额 +- 保持此终端窗口打开! + +--- + +#### **步骤2:启动前端** + +打开**新的终端窗口**(保持第一个运行!),然后: ```bash cd web npm run dev ``` -**访问界面:** +**您应该看到:** + ``` -Web Dashboard: http://localhost:3000 -API Server: http://localhost:8080 +VITE v5.x.x ready in xxx ms + +➜ Local: http://localhost:3000/ +➜ Network: use --host to expose ``` -### 6. 停止系统 +**✅ 前端运行正常的标志:** +- "Local: http://localhost:3000/"消息 +- 无错误信息 +- 也保持此终端窗口打开! -在两个终端中分别按 `Ctrl+C` +--- + +#### **步骤3:访问仪表板** + +在Web浏览器中访问: + +**🌐 http://localhost:3000** + +**您将看到:** +- 📊 实时账户余额 +- 📈 持仓(如果有) +- 🤖 AI决策日志 +- 📉 净值曲线图 + +**首次使用提示:** +- 首次AI决策可能需要3-5分钟 +- 初始决策可能显示"观望"- 这是正常的 +- AI需要先分析市场状况 + +--- + +### 7. 监控系统 + +**需要关注的内容:** + +✅ **健康系统标志:** +- 后端终端每3-5分钟显示决策周期 +- 无持续错误信息 +- 账户余额更新 +- Web仪表板自动刷新 + +⚠️ **警告标志:** +- 重复的API错误 +- 10分钟以上无决策 +- 余额快速下降 + +**检查系统状态:** + +```bash +# 在新终端窗口中 +curl http://localhost:8080/health +``` + +应返回:`{"status":"ok"}` + +--- + +### 8. 停止系统 + +**优雅关闭(推荐):** + +1. 转到**后端终端**(第一个) +2. 按`Ctrl+C` +3. 等待"系统已停止"消息 +4. 转到**前端终端**(第二个) +5. 按`Ctrl+C` + +**⚠️ 重要:** +- 始终先停止后端 +- 关闭终端前等待确认 +- 不要强制退出(不要直接关闭终端) --- @@ -292,66 +560,101 @@ API Server: http://localhost:8080 每个决策周期(默认3分钟),系统按以下流程运行: ``` -┌─────────────────────────────────────────────────────┐ -│ 1. 分析历史表现(最近20个周期) │ -├─────────────────────────────────────────────────────┤ -│ ✓ 计算整体胜率、平均盈利、盈亏比 │ -│ ✓ 统计各币种表现(胜率、平均盈亏) │ -│ ✓ 识别最佳/最差币种 │ -│ ✓ 列出最近5笔交易详情 │ -└─────────────────────────────────────────────────────┘ - ↓ -┌─────────────────────────────────────────────────────┐ -│ 2. 获取账户状态 │ -├─────────────────────────────────────────────────────┤ -│ • 账户净值、可用余额 │ -│ • 持仓数量、总盈亏 │ -│ • 保证金使用率 │ -└─────────────────────────────────────────────────────┘ - ↓ -┌─────────────────────────────────────────────────────┐ -│ 3. 分析现有持仓(如果有) │ -├─────────────────────────────────────────────────────┤ -│ • 获取每个持仓的市场数据 │ -│ • 计算技术指标(RSI、MACD、EMA) │ -│ • AI判断是否需要平仓 │ -└─────────────────────────────────────────────────────┘ - ↓ -┌─────────────────────────────────────────────────────┐ -│ 4. 评估新机会(候选币种池) │ -├─────────────────────────────────────────────────────┤ -│ • 获取AI500高评分币种(前20个) │ -│ • 获取OI Top持仓增长币种(前20个) │ -│ • 合并去重,过滤低流动性币种(<15M) │ -│ • 批量获取市场数据和技术指标 │ -└─────────────────────────────────────────────────────┘ - ↓ -┌─────────────────────────────────────────────────────┐ -│ 5. AI综合决策 │ -├─────────────────────────────────────────────────────┤ -│ • 查看历史反馈(胜率、最佳/最差币种) │ -│ • Chain of Thought 思维链分析 │ -│ • 输出决策:平仓/开仓/持有/观望 │ -│ • 包含杠杆、仓位、止损、止盈 │ -└─────────────────────────────────────────────────────┘ - ↓ -┌─────────────────────────────────────────────────────┐ -│ 6. 执行交易 │ -├─────────────────────────────────────────────────────┤ -│ • 优先级排序:先平仓,再开仓 │ -│ • 精度自动适配(LOT_SIZE) │ -│ • 防止仓位叠加(同币种同方向拒绝开仓) │ -│ • 平仓后自动取消所有挂单 │ -└─────────────────────────────────────────────────────┘ - ↓ -┌─────────────────────────────────────────────────────┐ -│ 7. 记录日志 │ -├─────────────────────────────────────────────────────┤ -│ • 保存完整决策记录到 decision_logs/ │ -│ • 包含思维链、决策JSON、账户快照、执行结果 │ -└─────────────────────────────────────────────────────┘ +┌──────────────────────────────────────────────────────────┐ +│ 1. 📊 分析历史表现(最近20个周期) │ +├──────────────────────────────────────────────────────────┤ +│ ✓ 计算整体胜率、平均盈利、盈亏比 │ +│ ✓ 统计各币种表现(胜率、平均USDT盈亏) │ +│ ✓ 识别最佳/最差币种 │ +│ ✓ 列出最近5笔交易详情(含准确盈亏金额) │ +│ ✓ 计算夏普比率衡量风险调整后收益 │ +│ 📌 新增 (v2.0.2): 考虑杠杆的准确USDT盈亏计算 │ +└──────────────────────────────────────────────────────────┘ + ↓ +┌──────────────────────────────────────────────────────────┐ +│ 2. 💰 获取账户状态 │ +├──────────────────────────────────────────────────────────┤ +│ • 账户净值、可用余额、未实现盈亏 │ +│ • 持仓数量、总盈亏(已实现+未实现) │ +│ • 保证金使用率(current/maximum) │ +│ • 风险评估指标 │ +└──────────────────────────────────────────────────────────┘ + ↓ +┌──────────────────────────────────────────────────────────┐ +│ 3. 🔍 分析现有持仓(如果有) │ +├──────────────────────────────────────────────────────────┤ +│ • 获取每个持仓的市场数据(3分钟+4小时K线) │ +│ • 计算技术指标(RSI、MACD、EMA) │ +│ • 显示持仓时长(例如"持仓时长2小时15分钟") │ +│ • AI判断是否需要平仓(止盈、止损或调整) │ +│ 📌 新增 (v2.0.2): 追踪持仓时长帮助AI决策 │ +└──────────────────────────────────────────────────────────┘ + ↓ +┌──────────────────────────────────────────────────────────┐ +│ 4. 🎯 评估新机会(候选币种池) │ +├──────────────────────────────────────────────────────────┤ +│ • 获取AI500高评分币种(前20个) │ +│ • 获取OI Top持仓增长币种(前20个) │ +│ • 合并去重,过滤低流动性币种(持仓量<15M USD) │ +│ • 批量获取市场数据和技术指标 │ +│ • 为每个候选币种准备完整的原始数据序列 │ +└──────────────────────────────────────────────────────────┘ + ↓ +┌──────────────────────────────────────────────────────────┐ +│ 5. 🧠 AI综合决策 │ +├──────────────────────────────────────────────────────────┤ +│ • 查看历史反馈(胜率、盈亏比、最佳/最差币种) │ +│ • 接收所有原始序列数据(K线、指标、持仓量) │ +│ • Chain of Thought 思维链分析 │ +│ • 输出决策:平仓/开仓/持有/观望 │ +│ • 包含杠杆、仓位、止损、止盈参数 │ +│ 📌 新增 (v2.0.2): AI可自由分析原始序列,不受预定义指标限制 │ +└──────────────────────────────────────────────────────────┘ + ↓ +┌──────────────────────────────────────────────────────────┐ +│ 6. ⚡ 执行交易 │ +├──────────────────────────────────────────────────────────┤ +│ • 优先级排序:先平仓,再开仓 │ +│ • 精度自动适配(LOT_SIZE规则) │ +│ • 防止仓位叠加(同币种同方向拒绝开仓) │ +│ • 平仓后自动取消所有挂单 │ +│ • 记录开仓时间用于持仓时长追踪 │ +│ 📌 新增 (v2.0.2): 追踪持仓开仓时间 │ +└──────────────────────────────────────────────────────────┘ + ↓ +┌──────────────────────────────────────────────────────────┐ +│ 7. 📝 记录日志 │ +├──────────────────────────────────────────────────────────┤ +│ • 保存完整决策记录到 decision_logs/ │ +│ • 包含思维链、决策JSON、账户快照、执行结果 │ +│ • 存储完整持仓数据(数量、杠杆、开/平仓时间) │ +│ • 使用symbol_side键值防止多空冲突 │ +│ 📌 新增 (v2.0.2): 防止多空持仓冲突,考虑数量+杠杆 │ +└──────────────────────────────────────────────────────────┘ ``` +### v2.0.2的核心改进 + +**📌 持仓时长追踪:** +- 系统现在追踪每个持仓已持有多长时间 +- 在用户提示中显示:"持仓时长2小时15分钟" +- 帮助AI更好地判断何时退出仓位 + +**📌 准确的盈亏计算:** +- 之前:只显示百分比(100U@5% = 1000U@5% = 都显示"5.0") +- 现在:真实USDT盈亏 = 仓位价值 × 价格变化% × 杠杆倍数 +- 示例:1000 USDT × 5% × 20倍 = 1000 USDT实际盈利 + +**📌 增强的AI自由度:** +- AI可以自由分析所有原始序列数据 +- 不再局限于预定义的指标组合 +- 可以执行自己的趋势分析、支撑位/阻力位计算 + +**📌 改进的持仓追踪:** +- 使用`symbol_side`键值(例如"BTCUSDT_long") +- 防止同时持有多空仓时的冲突 +- 存储完整数据:数量、杠杆、开/平仓时间 + --- ## 🧠 AI自我学习示例 @@ -607,6 +910,50 @@ sudo apt-get install libta-lib0-dev ## 🔄 更新日志 +### v2.0.2 (2025-10-29) + +**关键Bug修复 - 交易历史记录与性能分析:** + +本版本修复了历史交易记录和性能分析系统中的**严重计算错误**,这些错误严重影响了盈利统计的准确性。 + +**1. 盈亏计算 - 重大错误修复** (logger/decision_logger.go) +- **问题**:之前只用百分比计算盈亏,完全忽略了仓位大小和杠杆倍数 + - 示例:100 USDT仓位赚5%和1000 USDT仓位赚5%都显示`5.0`作为盈利 + - 这导致性能分析完全不准确 +- **解决方案**:现在计算实际USDT盈亏金额 + ``` + 盈亏(USDT) = 仓位价值 × 价格变化% × 杠杆倍数 + 示例: 1000 USDT × 5% × 20倍 = 1000 USDT实际盈利 + ``` +- **影响**:胜率、盈亏比和夏普比率现在基于准确的USDT金额计算 + +**2. 持仓追踪 - 缺失关键数据** +- **问题**:开仓记录只存储了价格和时间,缺少数量和杠杆 +- **解决方案**:现在存储完整交易数据: + - `quantity`: 持仓数量(币数) + - `leverage`: 杠杆倍数(如20倍) + - 这些是准确计算盈亏的必要数据 + +**3. 持仓键值逻辑 - 多空冲突** +- **问题**:使用`symbol`作为持仓键值,导致同时持有多空仓时数据冲突 + - 示例:BTCUSDT多头和BTCUSDT空头会互相覆盖 +- **解决方案**:改为`symbol_side`格式(如`BTCUSDT_long`、`BTCUSDT_short`) + - 现在可以正确区分多空持仓 + +**4. 夏普比率计算 - 代码优化** +- **问题**:使用自定义的牛顿迭代法计算平方根 +- **解决方案**:替换为标准库`math.Sqrt` + - 更可靠、易维护且高效 + +**为什么这次更新很重要:** +- ✅ 历史交易统计现在显示**真实的USDT盈亏**而不是无意义的百分比 +- ✅ 不同杠杆倍数的交易对比现在准确了 +- ✅ AI自我学习机制接收到正确的历史反馈 +- ✅ 盈亏比和夏普比率计算现在有意义了 +- ✅ 多持仓追踪(同时持有多空)现在正常工作 + +**建议**:如果您在此更新前运行过系统,您的历史统计数据是不准确的。更新到v2.0.2后,新的交易将被正确计算。 + ### v2.0.1 (2025-10-29) **Bug修复:** @@ -674,7 +1021,7 @@ MIT License - 详见 [LICENSE](LICENSE) 文件 --- -**最后更新**: 2025-10-29 +**最后更新**: 2025-10-29 (v2.0.2) **⚡ 用AI的力量,探索量化交易的可能性!** diff --git a/config.json.example b/config.json.example index 3a6392a0..eb817ea6 100644 --- a/config.json.example +++ b/config.json.example @@ -1,29 +1,21 @@ { "traders": [ { - "id": "qwen_trader", - "name": "Qwen AI Trader", - "ai_model": "qwen", - "binance_api_key": "YOUR_BINANCE_API_KEY_1", - "binance_secret_key": "YOUR_BINANCE_SECRET_KEY_1", - "qwen_key": "YOUR_QWEN_API_KEY", - "initial_balance": 1000.0, - "scan_interval_minutes": 3 - }, - { - "id": "deepseek_trader", - "name": "DeepSeek AI Trader", + "id": "my_trader", + "name": "My AI Trader", "ai_model": "deepseek", - "binance_api_key": "YOUR_BINANCE_API_KEY_2", - "binance_secret_key": "YOUR_BINANCE_SECRET_KEY_2", + "binance_api_key": "YOUR_BINANCE_API_KEY", + "binance_secret_key": "YOUR_BINANCE_SECRET_KEY", + "use_qwen": false, "deepseek_key": "YOUR_DEEPSEEK_API_KEY", + "qwen_key": "", "initial_balance": 1000.0, "scan_interval_minutes": 3 } ], - "use_default_coins": false, - "coin_pool_api_url": "http://x.x.x.x:x/api/ai500/list?auth=", - "oi_top_api_url": "http://x.x.x.x:x/api/oi/top?auth=", + "use_default_coins": true, + "coin_pool_api_url": "", + "oi_top_api_url": "", "api_server_port": 8080, "max_daily_loss": 5.0, "max_drawdown": 10.0, diff --git a/config/config.go b/config/config.go index 489b0a83..efaf7a75 100644 --- a/config/config.go +++ b/config/config.go @@ -44,6 +44,11 @@ func LoadConfig(filename string) (*Config, error) { return nil, fmt.Errorf("解析配置文件失败: %w", err) } + // 设置默认值:如果use_default_coins未设置(为false)且没有配置coin_pool_api_url,则默认使用默认币种列表 + if !config.UseDefaultCoins && config.CoinPoolAPIURL == "" { + config.UseDefaultCoins = true + } + // 验证配置 if err := config.Validate(); err != nil { return nil, fmt.Errorf("配置验证失败: %w", err)