mirror of
https://github.com/laoxong/nofx.git
synced 2026-06-04 09:58:22 +08:00
Docs: Enhance README files with beginner-friendly guides (4 languages)
**Configuration Improvements:** - Add comprehensive "Get AI API Keys" section (DeepSeek + Qwen) - Split configuration into Beginner Mode and Expert Mode - Add step-by-step setup guides with placeholder tables - Add configuration checklist and field explanations - Document smart default behavior for use_default_coins (v2.0.2) **Startup/Monitoring Guides:** - Add detailed 2-step system startup instructions - Include expected output and error troubleshooting tables - Add monitoring and graceful shutdown procedures - Provide health check commands **AI Decision Flow Updates:** - Enhance flow diagram with emojis and wider boxes - Add v2.0.2 improvement markers throughout - Document position duration tracking - Document accurate USDT PnL calculation with leverage - Document enhanced AI freedom for raw data analysis - Document improved position tracking (symbol_side keys) - Add "Key Improvements in v2.0.2" summary section **Code Changes:** - Simplify config.json.example to beginner-friendly single trader - Implement smart default: use_default_coins auto-enables when omitted - Set default to true if false without coin_pool_api_url **Files Updated:** - README.md (English): +559 lines - README.zh-CN.md (Chinese): +527 lines - README.ru.md (Russian): +634 lines - README.uk.md (Ukrainian): +521 lines - config.json.example: Simplified configuration - config/config.go: Smart default logic Total: 2068+ additions across all documentation Co-Authored-By: tinkle-community <tinklefund@gmail.com>
This commit is contained in:
@@ -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<br>**✨ Smart Default: `true`** (v2.0.2+)<br>Auto-enabled if no API URL provided | `true` or omit | ❌ No<br>(Optional, auto-defaults) |
|
||||
| `coin_pool_api_url` | Custom coin pool API<br>*Only needed when `use_default_coins: false`* | `""` (empty) | ❌ No |
|
||||
| `oi_top_api_url` | Open interest API<br>*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!**
|
||||
|
||||
|
||||
+631
-3
@@ -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` | Использовать встроенный список монет<br>**✨ Умное значение по умолчанию: `true`** (v2.0.2+)<br>Автоматически включается без API | `true` или опустить | ❌ Нет<br>(Опционально, авто) |
|
||||
| `coin_pool_api_url` | API пользовательского пула монет<br>*Требуется только при `use_default_coins: false`* | `""` (пусто) | ❌ Нет |
|
||||
| `oi_top_api_url` | API открытого интереса<br>*Опциональные дополнительные данные* | `""` (пусто) | ❌ Нет |
|
||||
| `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!**
|
||||
|
||||
|
||||
+518
-3
@@ -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` | Використовувати вбудований список монет<br>**✨ Розумне значення за замовчуванням: `true`** (v2.0.2+)<br>Автоматично включається без API | `true` або опустити | ❌ Ні<br>(Опціонально, авто) |
|
||||
| `coin_pool_api_url` | API користувацького пулу монет<br>*Потрібно лише при `use_default_coins: false`* | `""` (пусто) | ❌ Ні |
|
||||
| `oi_top_api_url` | API відкритого інтересу<br>*Опціональні додаткові дані* | `""` (пусто) | ❌ Ні |
|
||||
| `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!**
|
||||
|
||||
|
||||
+436
-89
@@ -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` | 使用内置币种列表<br>**✨ 智能默认:`true`** (v2.0.2+)<br>未提供API时自动启用 | `true` 或省略 | ❌ 否<br>(可选,自动默认) |
|
||||
| `coin_pool_api_url` | 自定义币种池API<br>*仅当`use_default_coins: false`时需要* | `""`(空) | ❌ 否 |
|
||||
| `oi_top_api_url` | 持仓量API<br>*可选补充数据* | `""`(空) | ❌ 否 |
|
||||
| `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的力量,探索量化交易的可能性!**
|
||||
|
||||
|
||||
+9
-17
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user