Files
nofx/docs/token-estimation.zh-CN.md

138 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 📊 Token 估算分析与候选币种上限指南
> 版本v1.0 | 更新2026-03-27
> 适用:策略配置 · 模型选择 · 候选币种数量决策
---
## 目录
- [Token 估算公式](#-token-估算公式)
- [系统提示词的准确性分析](#-系统提示词的准确性分析)
- [典型配置下的安全币种数量](#-典型配置下的安全币种数量)
- [模型上限参考](#-模型上限参考)
- [MaxCandidateCoins 常量说明](#-maxcandidatecoins-常量说明)
---
## 📐 Token 估算公式
代码入口:`store/strategy.go``EstimateTokens()`
整体结构:
```
total = (staticTokens + N × perCoinTokens) × 1.15
```
其中 `1.15` 为 15% 安全边际。
### 静态部分(与候选币数量无关)
```
SystemPrompt = baseChars / 2zh或 / 4en
baseChars ≈ 3000zh/ 4000en+ 自定义提示段落长度
FixedOverhead = 200 tokens时间戳、账户信息、章节标题
RankingData = (OILimit × 60 + NetFlowLimit × 80 + PriceLimit × durations × 40) / 4
staticTokens = SystemPrompt + FixedOverhead + RankingData
≈ 1500 + 200 + 650 = 2350 tokens默认中文配置
```
### 每枚币的 Token 开销
```
# 每行指标额外字符数I
I = EnableEMA×20 + EnableMACD×30 + EnableRSI×15
+ EnableATR×15 + EnableBOLL×25 + EnableVolume×10
# 每枚币的市场数据 token
marketPerCoin = (T × K × (80 + I) + 100) / 4
↑ T=时间框架数 K=每TF K线数
↑ 100 = OI + 资金费率固定开销
# 每枚币的量化数据 token
quantPerCoin = (EnableQuantOI×300 + EnableQuantNetflow×300) / 4
perCoinTokens = marketPerCoin + quantPerCoin
```
### 反向公式:最大安全币数
```
budget = modelContextLimit × 0.80 / 1.15
maxSafeCoins = floor((budget - staticTokens) / perCoinTokens)
```
---
## 📊 典型配置下的安全币种数量
**基准131K 模型DeepSeek / Grok / Qwen**80% 警戒线
### 三种配置的 perCoinTokens
| 配置 | T | K | I | quantPerCoin | perCoinTokens |
| ------------------------------------------ | --- | --- | --- | ------------ | ------------- |
| **最小**单TF无指标无量化 | 1 | 10 | 0 | 0 | **225** |
| **默认**3TF仅VolumeQuantOI+Netflow | 3 | 20 | 10 | 600 | **1525** |
| **最大**4TF全部指标全量化 | 4 | 30 | 115 | 600 | **6025** |
### 各模型下的最大安全币数
| 模型上限 | 最小配置 | 默认配置 | 最大配置 |
| ------------------------------ | ------------ | ------------ | ----------- |
| 131KDeepSeek / Grok / Qwen | ≥10封顶 | ≥10封顶 | **14** |
| 128KOpenAI GPT-4 | ≥10封顶 | ≥10封顶 | **14** |
| 200KClaude | ≥10封顶 | ≥10封顶 | ≥10封顶 |
| 1MGemini / Minimax | ≥10封顶 | ≥10封顶 | ≥10封顶 |
---
## 🤖 模型上限参考
来源:`store/strategy.go``ModelContextLimits`
| 模型 | Context 上限 | 80% 警戒线 |
| -------- | ------------ | ---------- |
| deepseek | 131,072 | 104,858 |
| openai | 128,000 | 102,400 |
| claude | 200,000 | 160,000 |
| qwen | 131,072 | 104,858 |
| gemini | 1,000,000 | 800,000 |
| grok | 131,072 | 104,858 |
| kimi | 131,072 | 104,858 |
| minimax | 1,000,000 | 800,000 |
---
## 🔒 MaxCandidateCoins 常量说明
来源:`store/strategy.go` 第 14-20 行
```go
const (
MaxCandidateCoins = 10 // UI 硬限制:用户最多设定的候选币数量
MaxPositions = 3 // 最大同时持仓数
MaxTimeframes = 4 // 最大时间框架数
MinKlineCount = 10 // 最少 K 线数
MaxKlineCount = 30 // 最多 K 线数
)
```
### 为什么 MaxCandidateCoins = 10
- **默认配置**下 10 枚币约用 **~20,000 tokens**~15% of 131K完全安全
- **极端配置**4TF + 全指标10 枚币约用 **~72,000 tokens**~55% of 131K仍有充足余量
- 因此 10 是保守且安全的 UI 上限:在所有模型和配置组合下均不会触发 token 限制
### 建议使用范围
| 用户类型 | 建议配置 | 最大建议币数 |
| ------------------- | ----------------------- | ------------ |
| 新手 / 使用默认配置 | 3TF, K=20, 仅 Volume | 10-20 枚 |
| 进阶 / 启用部分指标 | 3TF, K=20, EMA+MACD+RSI | 10-15 枚 |
| 高级 / 全部指标 | 3-4TF, K=20-30, 全指标 | 5-10 枚 |