docs/guides/TROUBLESHOOTING.zh-CN.md
本指南帮助您在提交 bug 报告前自行诊断和修复常见问题。
提交 bug 前,请检查:
docker compose ps 或 ps aux | grep nofxcurl http://localhost:8080/api/health症状: AI 只开空仓,从不开多仓,即使市场看涨。
根本原因: 币安账户处于单向持仓模式而非双向持仓模式。
解决方案:
为什么会这样:
PositionSide(LONG) 和 PositionSide(SHORT) 参数关于子账户:
code=-4061 持仓方向不匹配错误信息: Order's position side does not match user's setting
解决方案: 同上 - 切换到双向持仓模式。
子账户限制最高5倍杠杆症状: 尝试使用 >5倍杠杆时订单失败。
解决方案:
{
"btc_eth_leverage": 5,
"altcoin_leverage": 5
}
检查以下内容:
API 权限:
账户余额:
交易对状态:
决策日志:
# 检查最新决策
ls -lt decision_logs/your_trader_id/ | head -5
cat decision_logs/your_trader_id/latest_file.json
可能原因:
如何检查:
# 查看最新决策推理
cat decision_logs/your_trader_id/$(ls -t decision_logs/your_trader_id/ | head -1)
查看 AI 的思维链(Chain-of-Thought)推理部分。
解决方案:
use_default_coins: true 或币种池 API 正常工作请记住: AI 交易是实验性的,不保证盈利。
需要检查的事项:
调整建议:
错误: ERROR [internal] load metadata for docker.io/library/...
症状:
docker compose build 或 docker compose up 卡住timeout、connection refused根本原因: 中国大陆访问 Docker Hub 受限或速度极慢。
解决方案 1: 配置 Docker 镜像加速器(推荐)
编辑 Docker 配置文件:
# Linux
sudo nano /etc/docker/daemon.json
# macOS (Docker Desktop)
# Settings → Docker Engine
添加国内镜像源:
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.1panel.live",
"https://hub.rat.dev",
"https://dockerpull.com",
"https://dockerhub.icu"
]
}
重启 Docker:
# Linux
sudo systemctl restart docker
# macOS/Windows
# 重启 Docker Desktop
重新构建:
docker compose build --no-cache
docker compose up -d
解决方案 2: 使用 VPN
docker compose build解决方案 3: 离线下载镜像
如果上述方法都不行:
使用镜像代理网站下载:
手动导入镜像:
# 下载镜像文件后
docker load -i golang-1.25-alpine.tar
docker load -i node-20-alpine.tar
docker load -i nginx-alpine.tar
验证镜像已加载:
docker images | grep golang
docker images | grep node
docker images | grep nginx
验���镜像加速器是否生效:
# 查看 Docker 信息
docker info | grep -A 10 "Registry Mirrors"
# 应该显示你配置的镜像源
相关 Issue: #168
错误: port 8080 already in use
解决方案:
# 查找占用端口的进程
lsof -i :8080
# 或
netstat -tulpn | grep 8080
# 杀死进程或在 .env 中更改端口
NOFX_BACKEND_PORT=8081
症状:
解决方案:
检查后端是否运行:
docker compose ps # 应显示 backend 为 "Up"
# 或
curl http://localhost:8080/api/health # 应返回 {"status":"ok"}
检查端口配置:
.env 设置匹配CORS 问题:
常见错误:
code=-1021, msg=Timestamp for this request is outside of the recvWindowinvalid signaturetimestamp 错误根本原因: 系统时间不准确,与币安服务器时间相差超过允许范围(通常是 5 秒)。
解决方案 1: 同步系统时间(推荐)
# 方法 1: 使用 ntpdate (最常用)
sudo ntpdate pool.ntp.org
# 方法 2: 使用其他 NTP 服务器
sudo ntpdate -s time.nist.gov
sudo ntpdate -s ntp.aliyun.com # 阿里云 NTP (中国大陆快)
# 方法 3: 启用自动时间同步 (Linux)
sudo timedatectl set-ntp true
# 验证时间是否正确
date
# 应该显示正确的当前时间
Docker 环境特别注意:
如果使用 Docker,容器时间可能与宿主机不同步:
# 检查容器时间
docker exec nofx-backend date
# 如果时间错误,重启 Docker 服务
sudo systemctl restart docker
# 或在 docker-compose.yml 中添加时区设置
environment:
- TZ=Asia/Shanghai # 或您的时区
解决方案 2: 验证 API 密钥
如果时间同步后仍有错误:
检查 API 密钥:
重新生成 API 密钥:
解决方案 3: 检查速率限制
币安有严格的 API 速率限制:
相关 Issue: #60
解决方案:
强制刷新:
Ctrl+Shift+R (Windows/Linux) 或 Cmd+Shift+R (Mac)Cmd+Option+R清除浏览器缓存:
检查 SWR 轮询:
可能原因:
解决方案:
database is locked 错误原因: SQLite 数据库被多个进程访问。
解决方案:
# 停止所有 NOFX 进程
docker compose down
# 或
pkill nofx
# 重启
docker compose up -d
# 或
./nofx
检查:
PostgreSQL 容器状态
docker compose ps postgres
docker compose exec postgres pg_isready -U nofx -d nofx
直接检查数据库数据
./scripts/view_pg_data.sh # 快速总览
docker compose exec postgres \
psql -U nofx -d nofx -c "SELECT COUNT(*) FROM traders;"
磁盘空间
df -h # 确保磁盘未满
Docker:
# 查看最后 100 行
docker compose logs backend --tail=100
# 实时跟踪日志
docker compose logs -f backend
# 保存到文件
docker compose logs backend --tail=500 > backend_logs.txt
手动运行:
# 如果不是通过 Docker,而是手动运行 ./nofx,可直接在终端查看日志
打开开发者工具:
F12 或右键 → 检查Console(控制台)标签:
Network(网络)标签:
捕获截图:
Win+Shift+SCmd+Shift+4# 列出最近的决策日志
ls -lt decision_logs/your_trader_id/ | head -10
# 查看最新决策
cat decision_logs/your_trader_id/$(ls -t decision_logs/your_trader_id/ | head -1) | jq .
# 搜索特定交易对
grep -r "BTCUSDT" decision_logs/your_trader_id/
# 查找执行交易的决策
grep -r '"action": "open_' decision_logs/your_trader_id/
决策日志中要查看的内容:
chain_of_thought: AI 的推理过程user_prompt: AI 收到的市场数据decision: 最终决策(动作、交易对、杠杆等)account_state: 决策时的账户余额、保证金、持仓execution_result: 交易是否成功# 后端健康状态
curl http://localhost:8080/api/health
# 列出所有交易员
curl http://localhost:8080/api/traders
# 检查特定交易员状态
curl http://localhost:8080/api/status?trader_id=your_trader_id
# 获取账户信息
curl http://localhost:8080/api/account?trader_id=your_trader_id
# 检查所有容器
docker compose ps
# 检查资源使用
docker stats
# 重启特定服务
docker compose restart backend
docker compose restart frontend
# 检查数据库中的交易员
docker compose exec postgres \
psql -U nofx -d nofx -c "SELECT id, name, ai_model_id, exchange_id, is_running FROM traders;"
# 检查 AI 模型
docker compose exec postgres \
psql -U nofx -d nofx -c "SELECT id, name, provider, enabled FROM ai_models;"
# 检查系统配置
docker compose exec postgres \
psql -U nofx -d nofx -c "SELECT key, value FROM system_config;"
如果尝试了上述所有方法仍有问题:
收集信息:
提交 Bug 报告:
加入社区:
完全重置 (⚠️ 将丢失交易历史):
# 停止所有服务
docker compose down
# 可选:备份 PostgreSQL 数据
docker compose exec postgres \
pg_dump -U nofx -d nofx > backup_nofx.sql
# 删除所有持久化卷(全新开始)
docker compose down -v
# 重启
docker compose up -d --build
# 通过 Web UI 重新配置
open http://localhost:3000
部分重置(保留配置,清除日志):
# 清除决策日志
rm -rf decision_logs/*
# 清除 Docker 缓存并重建
docker compose down
docker compose build --no-cache
docker compose up -d
最后更新: 2025-11-02