1 line
136 KiB
JSON
1 line
136 KiB
JSON
{"repo": "akuntk/ai-trading", "files": {"deploy.sh": {"d30b26b6f49d40172b35f66511f488accffa16d1": {"t": 1785745967.6362112, "n": 7134, "h": "1ffc06a7df162d01", "c": "#!/bin/bash\n\n# AI交易系统本地部署脚本\n# 支持 Linux 和 macOS\n\nset -e\n\n# 颜色定义\nRED='\\033[0;31m'\nGREEN='\\033[0;32m'\nYELLOW='\\033[1;33m'\nBLUE='\\033[0;34m'\nNC='\\033[0m' # No Color\n\n# 日志函数\nlog_info() {\n echo -e \"${BLUE}[信息]${NC} $1\"\n}\n\nlog_success() {\n echo -e \"${GREEN}[成功]${NC} $1\"\n}\n\nlog_warning() {\n echo -e \"${YELLOW}[警告]${NC} $1\"\n}\n\nlog_error() {\n echo -e \"${RED}[错误]${NC} $1\"\n}\n\n# 检查当前目录\ncheck_project_directory() {\n if [ ! -f \"go.mod\" ]; then\n log_error \"请确保在项目根目录(AIZH)运行此脚本\"\n exit 1\n fi\n log_success \"检测到项目根目录,开始部署...\"\n}\n\n# 检查Go环境\ncheck_go_environment() {\n log_info \"检查Go环境...\"\n\n if ! command -v go &> /dev/null; then\n log_error \"未检测到Go环境\"\n echo \"请从 https://golang.org/dl/ 下载并安装Go 1.25或更高版本\"\n exit 1\n fi\n\n GO_VERSION=$(go version | awk '{print $3}')\n log_success \"Go环境正常,版本:$GO_VERSION\"\n\n # 检查Go版本是否满足要求\n GO_MAJOR=$(echo $GO_VERSION | sed 's/go//' | cut -d. -f1)\n GO_MINOR=$(echo $GO_VERSION | sed 's/go//' | cut -d. -f2)\n\n if [ \"$GO_MAJOR\" -lt 1 ] || ([ \"$GO_MAJOR\" -eq 1 ] && [ \"$GO_MINOR\" -lt 21 ]); then\n log_error \"Go版本过低,需要Go 1.21或更高版本\"\n exit 1\n fi\n}\n\n# 检查Node.js环境\ncheck_node_environment() {\n log_info \"检查Node.js环境...\"\n\n if ! command -v node &> /dev/null; then\n log_error \"未检测到Node.js环境\"\n echo \"请从 https://nodejs.org/ 下载并安装Node.js 18或更高版本\"\n exit 1\n fi\n\n NODE_VERSION=$(node --version)\n log_success \"Node.js环境正常,版本:$NODE_VERSION\"\n\n # 检查Node.js版本是否满足要求\n NODE_MAJOR=$(echo $NODE_VERSION | sed 's/v//' | cut -d. -f1)\n\n if [ \"$NODE_MAJOR\" -lt 18 ]; then\n log_error \"Node.js版本过低,需要Node.js 18或更高版本\"\n exit 1\n fi\n}\n\n# 安装后端依赖\ninstall_go_dependencies() {\n log_info \"安装Go模块依赖...\"\n\n go mod download\n if [ $? -ne 0 ]; then\n log_error \"Go模块下载失败\"\n echo \"请检查网络连接或设置Go代理:\"\n echo \"export GOPROXY=https://goproxy.cn,direct\"\n exit 1\n fi\n\n log_success \"Go依赖安装完成\"\n}\n\n# 初始化配置文件\ninit_config_files() {\n log_info \"初始化配置文件...\"\n\n # 检查config.json\n if [ ! -f \"config.json\" ]; then\n log_info \"创建默认配置文件...\"\n cat > config.json << EOF\n{\n \"api_server_port\": 8080,\n \"beta_mode\": false,\n \"jwt_secret\": \"your-jwt-secret-key-change-in-production\",\n \"auto_update_enabled\": true,\n \"version_check_interval\": \"1h\"\n}\nEOF\n log_success \"配置文件已创建:config.json\"\n else\n log_success \"配置文件已存在:config.json\"\n fi\n\n # 检查.env文件\n if [ ! -f \".env\" ]; then\n log_info \"创建环境变量文件...\"\n cat > .env << EOF\n# AI交易系统环境变量\nAPP_VERSION=1.0.0\nBUILD_TIME=$(date '+%Y-%m-%d %H:%M:%S')\nJWT_SECRET=your-jwt-secret-key-change-in-production\nBETA_MODE=false\nAPI_PORT=8080\n\n# 数据库配置\nDB_PATH=./data/nofx.db\n\n# 交易所API配置(请替换为实际密钥)\nBINANCE_API_KEY=\nBINANCE_SECRET_KEY=\n\n# AI模型配置\nDEEPSEEK_API_KEY=\nQWEN_API_KEY=\n\n# Telegram通知(可选)\nTELEGRAM_BOT_TOKEN=\nTELEGRAM_CHAT_ID=\nEOF\n log_success \"环境变量文件已创建:.env\"\n log_warning \"⚠️ 警告:请编辑.env文件,填入实际的API密钥\"\n else\n log_success \"环境变量文件已存在:.env\"\n fi\n\n # 创建必要的目录\n mkdir -p data logs\n log_success \"数据目录已创建\"\n}\n\n# 安装前端依赖\ninstall_node_dependencies() {\n log_info \"安装前端依赖...\"\n\n cd web\n npm install\n if [ $? -ne 0 ]; then\n log_error \"前端依赖安装失败\"\n echo \"请检查Node.js版本和网络连接\"\n cd ..\n exit 1\n fi\n log_success \"前端依赖安装完成\"\n cd ..\n}\n\n# 构建后端\nbuild_backend() {\n log_info \"编译后端程序...\"\n\n # 设置编译目标\n OUTPUT_NAME=\"nofx\"\n if [[ \"$OSTYPE\" == \"msys\" || \"$OSTYPE\" == \"win32\" ]]; then\n OUTPUT_NAME=\"nofx.exe\"\n fi\n\n go build -o $OUTPUT_NAME .\n if [ $? -ne 0 ]; then\n log_error \"后端编译失败\"\n exit 1\n fi\n\n log_success \"后端编译完成:$OUTPUT_NAME\"\n}\n\n# 启动后端服务\nstart_backend() {\n log_info \"启动后端API服务器...\"\n\n # 设置可执行权限\n if [ -f \"nofx\" ]; then\n chmod +x nofx\n fi\n\n # 启动后端(后台运行)\n nohup ./nofx > logs/backend.log 2>&1 &\n BACKEND_PID=$!\n echo $BACKEND_PID > .backend_pid\n\n log_success \"后端API服务器已启动,PID: $BACKEND_PID\"\n\n # 等待后端启动\n log_info \"等待后端服务启动...\"\n sleep 5\n\n # 检查后端是否启动成功\n if curl -s -f http://localhost:8080/api/health > /dev/null 2>&1; then\n log_success \"后端API服务器启动成功\"\n else\n log_warning \"⚠️ 警告:后端服务可能未完全启动,请检查日志:logs/backend.log\"\n fi\n}\n\n# 启动前端服务\nstart_frontend() {\n log_info \"启动前端开发服务器...\"\n\n cd web\n # 启动前端(后台运行)\n nohup npm run dev > ../logs/frontend.log 2>&1 &\n FRONTEND_PID=$!\n echo $FRONTEND_PID > ../.frontend_pid\n cd ..\n\n log_success \"前端开发服务器已启动,PID: $FRONTEND_PID\"\n\n # 等待前端启动\n sleep 3\n}\n\n# 显示部署结果\nshow_deployment_result() {\n echo \"\"\n echo \"=========================================\"\n log_success \"🎉 部署完成!\"\n echo \"=========================================\"\n echo -e \"${BLUE}访问地址:${NC}\"\n echo \" - 前端界面: http://localhost:3000\"\n echo \" - API服务器: http://localhost:8080\"\n echo \" - 版本管理: http://localhost:3000/version\"\n echo \"\"\n echo -e \"${YELLOW}默认账户信息:${NC}\"\n echo \" - 管理员邮箱: admin@example.com\"\n echo \" - 管理员密码: admin123\"\n echo \"\"\n echo -e \"${BLUE}重要提示:${NC}\"\n echo \" 1. 请编辑 .env 文件,填入实际的API密钥\"\n echo \" 2. 首次登录需要设置2FA验证\"\n echo \" 3. 在版本管理页面可以检查和安装更新\"\n echo \" 4. 使用 ./stop.sh 停止所有服务\"\n echo \" 5. 日志文件位置: logs/\"\n echo \"\"\n\n # 询问是否打开浏览器\n read -p \"是否自动打开浏览器?(y/n): \" choice\n if [[ \"$choice\" == \"y\" || \"$choice\" == \"Y\" ]]; then\n log_info \"正在打开浏览器...\"\n if command -v open &> /dev/null; then\n open http://localhost:3000\n elif command -v xdg-open &> /dev/null; then\n xdg-open http://localhost:3000\n elif command -v gnome-open &> /dev/null; then\n gnome-open http://localhost:3000\n else\n log_warning \"无法自动打开浏览器,请手动访问:http://localhost:3000\"\n fi\n fi\n}\n\n# 显示帮助信息\nshow_help() {\n echo \"AI交易系统本地部署脚本\"\n echo \"\"\n echo \"用法: $0 [选项]\"\n echo \"\"\n echo \"选项:\"\n echo \" -h, --help 显示此帮助信息\"\n echo \" -v, --verbose 详细输出\"\n echo \" --dev 开发模式\"\n echo \" --prod 生产模式\"\n echo \"\"\n echo \"环境变量:\"\n echo \" NODE_ENV 运行环境 (development/production)\"\n echo \" API_PORT API服务器端口 (默认: 8080)\"\n echo \" WEB_PORT Web服务器端口 (默认: 3000)\"\n}\n\n# 解析命令行参数\nVERBOSE=false\nMODE=\"development\"\n\nwhile [[ $# -gt 0 ]]; do\n case $1 in\n -h|--help)\n show_help\n exit 0\n ;;\n -v|--verbose)\n VERBOSE=true\n shift\n ;;\n --dev)\n MODE=\"development\"\n shift\n ;;\n --prod)\n MODE=\"production\"\n shift\n ;;\n *)\n log_error \"未知参数: $1\"\n show_help\n exit 1\n ;;\n esac\ndone\n\n# 主函数\nmain() {\n echo \"🚀 AI交易系统本地部署脚本\"\n echo \"========================================\"\n echo \"运行模式: $MODE\"\n echo \"\"\n\n # 执行部署步骤\n check_project_directory\n check_go_environment\n check_node_environment\n install_go_dependencies\n init_config_files\n install_node_dependencies\n build_backend\n start_backend\n start_frontend\n show_deployment_result\n\n log_success \"部署脚本执行完成!\"\n}\n\n# 错误处理\ntrap 'log_error \"部署过程中发生错误\"; exit 1' ERR\n\n# 运行主函数\nmain \"$@\""}, "103c47826174658716d027f65a0bf165b93f4805": {"t": 1785758353.4429889, "n": 7134, "h": "1ffc06a7df162d01", "c": "#!/bin/bash\n\n# AI交易系统本地部署脚本\n# 支持 Linux 和 macOS\n\nset -e\n\n# 颜色定义\nRED='\\033[0;31m'\nGREEN='\\033[0;32m'\nYELLOW='\\033[1;33m'\nBLUE='\\033[0;34m'\nNC='\\033[0m' # No Color\n\n# 日志函数\nlog_info() {\n echo -e \"${BLUE}[信息]${NC} $1\"\n}\n\nlog_success() {\n echo -e \"${GREEN}[成功]${NC} $1\"\n}\n\nlog_warning() {\n echo -e \"${YELLOW}[警告]${NC} $1\"\n}\n\nlog_error() {\n echo -e \"${RED}[错误]${NC} $1\"\n}\n\n# 检查当前目录\ncheck_project_directory() {\n if [ ! -f \"go.mod\" ]; then\n log_error \"请确保在项目根目录(AIZH)运行此脚本\"\n exit 1\n fi\n log_success \"检测到项目根目录,开始部署...\"\n}\n\n# 检查Go环境\ncheck_go_environment() {\n log_info \"检查Go环境...\"\n\n if ! command -v go &> /dev/null; then\n log_error \"未检测到Go环境\"\n echo \"请从 https://golang.org/dl/ 下载并安装Go 1.25或更高版本\"\n exit 1\n fi\n\n GO_VERSION=$(go version | awk '{print $3}')\n log_success \"Go环境正常,版本:$GO_VERSION\"\n\n # 检查Go版本是否满足要求\n GO_MAJOR=$(echo $GO_VERSION | sed 's/go//' | cut -d. -f1)\n GO_MINOR=$(echo $GO_VERSION | sed 's/go//' | cut -d. -f2)\n\n if [ \"$GO_MAJOR\" -lt 1 ] || ([ \"$GO_MAJOR\" -eq 1 ] && [ \"$GO_MINOR\" -lt 21 ]); then\n log_error \"Go版本过低,需要Go 1.21或更高版本\"\n exit 1\n fi\n}\n\n# 检查Node.js环境\ncheck_node_environment() {\n log_info \"检查Node.js环境...\"\n\n if ! command -v node &> /dev/null; then\n log_error \"未检测到Node.js环境\"\n echo \"请从 https://nodejs.org/ 下载并安装Node.js 18或更高版本\"\n exit 1\n fi\n\n NODE_VERSION=$(node --version)\n log_success \"Node.js环境正常,版本:$NODE_VERSION\"\n\n # 检查Node.js版本是否满足要求\n NODE_MAJOR=$(echo $NODE_VERSION | sed 's/v//' | cut -d. -f1)\n\n if [ \"$NODE_MAJOR\" -lt 18 ]; then\n log_error \"Node.js版本过低,需要Node.js 18或更高版本\"\n exit 1\n fi\n}\n\n# 安装后端依赖\ninstall_go_dependencies() {\n log_info \"安装Go模块依赖...\"\n\n go mod download\n if [ $? -ne 0 ]; then\n log_error \"Go模块下载失败\"\n echo \"请检查网络连接或设置Go代理:\"\n echo \"export GOPROXY=https://goproxy.cn,direct\"\n exit 1\n fi\n\n log_success \"Go依赖安装完成\"\n}\n\n# 初始化配置文件\ninit_config_files() {\n log_info \"初始化配置文件...\"\n\n # 检查config.json\n if [ ! -f \"config.json\" ]; then\n log_info \"创建默认配置文件...\"\n cat > config.json << EOF\n{\n \"api_server_port\": 8080,\n \"beta_mode\": false,\n \"jwt_secret\": \"your-jwt-secret-key-change-in-production\",\n \"auto_update_enabled\": true,\n \"version_check_interval\": \"1h\"\n}\nEOF\n log_success \"配置文件已创建:config.json\"\n else\n log_success \"配置文件已存在:config.json\"\n fi\n\n # 检查.env文件\n if [ ! -f \".env\" ]; then\n log_info \"创建环境变量文件...\"\n cat > .env << EOF\n# AI交易系统环境变量\nAPP_VERSION=1.0.0\nBUILD_TIME=$(date '+%Y-%m-%d %H:%M:%S')\nJWT_SECRET=your-jwt-secret-key-change-in-production\nBETA_MODE=false\nAPI_PORT=8080\n\n# 数据库配置\nDB_PATH=./data/nofx.db\n\n# 交易所API配置(请替换为实际密钥)\nBINANCE_API_KEY=\nBINANCE_SECRET_KEY=\n\n# AI模型配置\nDEEPSEEK_API_KEY=\nQWEN_API_KEY=\n\n# Telegram通知(可选)\nTELEGRAM_BOT_TOKEN=\nTELEGRAM_CHAT_ID=\nEOF\n log_success \"环境变量文件已创建:.env\"\n log_warning \"⚠️ 警告:请编辑.env文件,填入实际的API密钥\"\n else\n log_success \"环境变量文件已存在:.env\"\n fi\n\n # 创建必要的目录\n mkdir -p data logs\n log_success \"数据目录已创建\"\n}\n\n# 安装前端依赖\ninstall_node_dependencies() {\n log_info \"安装前端依赖...\"\n\n cd web\n npm install\n if [ $? -ne 0 ]; then\n log_error \"前端依赖安装失败\"\n echo \"请检查Node.js版本和网络连接\"\n cd ..\n exit 1\n fi\n log_success \"前端依赖安装完成\"\n cd ..\n}\n\n# 构建后端\nbuild_backend() {\n log_info \"编译后端程序...\"\n\n # 设置编译目标\n OUTPUT_NAME=\"nofx\"\n if [[ \"$OSTYPE\" == \"msys\" || \"$OSTYPE\" == \"win32\" ]]; then\n OUTPUT_NAME=\"nofx.exe\"\n fi\n\n go build -o $OUTPUT_NAME .\n if [ $? -ne 0 ]; then\n log_error \"后端编译失败\"\n exit 1\n fi\n\n log_success \"后端编译完成:$OUTPUT_NAME\"\n}\n\n# 启动后端服务\nstart_backend() {\n log_info \"启动后端API服务器...\"\n\n # 设置可执行权限\n if [ -f \"nofx\" ]; then\n chmod +x nofx\n fi\n\n # 启动后端(后台运行)\n nohup ./nofx > logs/backend.log 2>&1 &\n BACKEND_PID=$!\n echo $BACKEND_PID > .backend_pid\n\n log_success \"后端API服务器已启动,PID: $BACKEND_PID\"\n\n # 等待后端启动\n log_info \"等待后端服务启动...\"\n sleep 5\n\n # 检查后端是否启动成功\n if curl -s -f http://localhost:8080/api/health > /dev/null 2>&1; then\n log_success \"后端API服务器启动成功\"\n else\n log_warning \"⚠️ 警告:后端服务可能未完全启动,请检查日志:logs/backend.log\"\n fi\n}\n\n# 启动前端服务\nstart_frontend() {\n log_info \"启动前端开发服务器...\"\n\n cd web\n # 启动前端(后台运行)\n nohup npm run dev > ../logs/frontend.log 2>&1 &\n FRONTEND_PID=$!\n echo $FRONTEND_PID > ../.frontend_pid\n cd ..\n\n log_success \"前端开发服务器已启动,PID: $FRONTEND_PID\"\n\n # 等待前端启动\n sleep 3\n}\n\n# 显示部署结果\nshow_deployment_result() {\n echo \"\"\n echo \"=========================================\"\n log_success \"🎉 部署完成!\"\n echo \"=========================================\"\n echo -e \"${BLUE}访问地址:${NC}\"\n echo \" - 前端界面: http://localhost:3000\"\n echo \" - API服务器: http://localhost:8080\"\n echo \" - 版本管理: http://localhost:3000/version\"\n echo \"\"\n echo -e \"${YELLOW}默认账户信息:${NC}\"\n echo \" - 管理员邮箱: admin@example.com\"\n echo \" - 管理员密码: admin123\"\n echo \"\"\n echo -e \"${BLUE}重要提示:${NC}\"\n echo \" 1. 请编辑 .env 文件,填入实际的API密钥\"\n echo \" 2. 首次登录需要设置2FA验证\"\n echo \" 3. 在版本管理页面可以检查和安装更新\"\n echo \" 4. 使用 ./stop.sh 停止所有服务\"\n echo \" 5. 日志文件位置: logs/\"\n echo \"\"\n\n # 询问是否打开浏览器\n read -p \"是否自动打开浏览器?(y/n): \" choice\n if [[ \"$choice\" == \"y\" || \"$choice\" == \"Y\" ]]; then\n log_info \"正在打开浏览器...\"\n if command -v open &> /dev/null; then\n open http://localhost:3000\n elif command -v xdg-open &> /dev/null; then\n xdg-open http://localhost:3000\n elif command -v gnome-open &> /dev/null; then\n gnome-open http://localhost:3000\n else\n log_warning \"无法自动打开浏览器,请手动访问:http://localhost:3000\"\n fi\n fi\n}\n\n# 显示帮助信息\nshow_help() {\n echo \"AI交易系统本地部署脚本\"\n echo \"\"\n echo \"用法: $0 [选项]\"\n echo \"\"\n echo \"选项:\"\n echo \" -h, --help 显示此帮助信息\"\n echo \" -v, --verbose 详细输出\"\n echo \" --dev 开发模式\"\n echo \" --prod 生产模式\"\n echo \"\"\n echo \"环境变量:\"\n echo \" NODE_ENV 运行环境 (development/production)\"\n echo \" API_PORT API服务器端口 (默认: 8080)\"\n echo \" WEB_PORT Web服务器端口 (默认: 3000)\"\n}\n\n# 解析命令行参数\nVERBOSE=false\nMODE=\"development\"\n\nwhile [[ $# -gt 0 ]]; do\n case $1 in\n -h|--help)\n show_help\n exit 0\n ;;\n -v|--verbose)\n VERBOSE=true\n shift\n ;;\n --dev)\n MODE=\"development\"\n shift\n ;;\n --prod)\n MODE=\"production\"\n shift\n ;;\n *)\n log_error \"未知参数: $1\"\n show_help\n exit 1\n ;;\n esac\ndone\n\n# 主函数\nmain() {\n echo \"🚀 AI交易系统本地部署脚本\"\n echo \"========================================\"\n echo \"运行模式: $MODE\"\n echo \"\"\n\n # 执行部署步骤\n check_project_directory\n check_go_environment\n check_node_environment\n install_go_dependencies\n init_config_files\n install_node_dependencies\n build_backend\n start_backend\n start_frontend\n show_deployment_result\n\n log_success \"部署脚本执行完成!\"\n}\n\n# 错误处理\ntrap 'log_error \"部署过程中发生错误\"; exit 1' ERR\n\n# 运行主函数\nmain \"$@\""}}, "docs/i18n/zh-CN/README.md": {"d30b26b6f49d40172b35f66511f488accffa16d1": {"t": 1785747208.522971, "n": 25448, "h": "d703a079ac4cede6", "c": "# 🤖 NOFX - AI交易操作系统\n\n[](https://golang.org/)\n[](https://reactjs.org/)\n[](https://www.typescriptlang.org/)\n[](LICENSE)\n[](https://amber.ac)\n\n**语言 / Languages:** [English](../../../README.md) | [中文](../zh-CN/README.md) | [Українська](../uk/README.md) | [Русский](../ru/README.md) | [日本語](../ja/README.md)\n\n**官方推特:** [@nofx_ai](https://x.com/nofx_ai)\n\n**📚 文档中心:** [文档首页](../../README.md) | [快速开始](../../getting-started/README.zh-CN.md) | [更新日志](../../../CHANGELOG.zh-CN.md) | [社区指南](../../community/README.md)\n\n---\n\n## 📑 目录\n\n- [🚀 通用AI交易操作系统](#-通用ai交易操作系统)\n- [👥 开发者社区](#-开发者社区)\n- [🆕 最新更新](#-最新更新)\n- [📸 系统截图](#-系统截图)\n- [✨ 当前实现](#-当前实现---加密货币市场)\n- [🔮 路线图](#-路线图---通用市场扩展)\n- [🏗️ 技术架构](#️-技术架构)\n- [💰 注册币安账户](#-注册币安账户省手续费)\n- [🚀 快速开始](#-快速开始)\n- [📖 AI决策流程](#-ai决策流程)\n- [🧠 AI自我学习示例](#-ai自我学习示例)\n- [📊 Web界面功能](#-web界面功能)\n- [🎛️ API接口](#️-api接口)\n- [📝 决策日志格式](#-决策日志格式)\n- [🔧 风险控制详解](#-风险控制详解)\n- [⚠️ 重要风险提示](#️-重要风险提示)\n- [🛠️ 常见问题](#️-常见问题)\n- [📈 性能优化建议](#-性能优化建议)\n- [🔄 更新日志](#-更新日志)\n- [📄 开源协议](#-开源协议)\n- [🤝 贡献指南](#-贡献指南)\n\n---\n\n## 🚀 通用AI交易操作系统\n\n**NOFX** 是通用架构的 **AI交易操作系统(Agentic Trading OS)**。我们已在加密市场打通\"**多智能体决策 → 统一风控 → 低延迟执行 → 真实/纸面账户复盘**\"的闭环,正按同一技术栈扩展到**股票、期货、期权、外汇等所有市场**。\n\n### 🎯 核心特性\n\n- **通用数据与回测层**:跨市场、跨周期、跨交易所统一表示与因子库,沉淀可迁移的\"策略记忆\"\n- **多智能体自博弈与自进化**:策略自动对战择优,按账户级 PnL 与风险约束持续迭代\n- **执行与风控一体化**:低延迟路由、滑点/风控沙箱、账户级限额,一键切换市场\n\n### 🏢 由 [Amber.ac](https://amber.ac) 背书\n\n### 👥 核心团队\n\n- **Tinkle** - [@Web3Tinkle](https://x.com/Web3Tinkle)\n- **Zack** - [@0x_ZackH](https://x.com/0x_ZackH)\n\n### 💼 种子轮融资进行中\n\n我们正在进行**种子轮融资**。\n\n**投资咨询**,请通过 Twitter 私信联系 **Tinkle** 或 **Zack**。\n\n**商务合作**,请私信官方推特 [@nofx_ai](https://x.com/nofx_ai)。\n\n---\n\n> ⚠️ **风险提示**:本系统为实验性项目,AI自动交易存在重大风险,强烈建议仅用于学习研究或小额资金测试!\n\n## 👥 开发者社区\n\n加入我们的Telegram开发者社区,讨论、分享想法并获得支持:\n\n**💬 [NOFX开发者社区](https://t.me/nofx_dev_community)**\n\n---\n\n## 🆕 最新更新\n\n### 🚀 多交易所支持!\n\nNOFX现已支持**三大交易所**:Binance、Hyperliquid和Aster DEX!\n\n#### **Hyperliquid交易所**\n\n高性能的去中心化永续期货交易所!\n\n**核心特性:**\n- ✅ 完整交易支持(做多/做空、杠杆、止损/止盈)\n- ✅ 自动精度处理(订单数量和价格)\n- ✅ 统一trader接口(无缝切换交易所)\n- ✅ 支持主网和测试网\n- ✅ 无需API密钥 - 只需以太坊私钥\n\n**为什么选择Hyperliquid?**\n- 🔥 比中心化交易所手续费更低\n- 🔒 非托管 - 你掌控自己的资金\n- ⚡ 快速执行与链上结算\n- 🌍 无需KYC\n\n**快速开始:**\n1. 获取你的MetaMask私钥(去掉`0x`前缀)\n2. ~~在config.json中设置`\"exchange\": \"hyperliquid\"`~~ *通过Web界面配置*\n3. 添加`\"hyperliquid_private_key\": \"your_key\"`\n4. 开始交易!\n\n详见[配置指南](#-备选使用hyperliquid交易所)。\n\n#### **Aster DEX交易所**(新!v2.0.2)\n\n兼容Binance的去中心化永续期货交易所!\n\n**核心特性:**\n- ✅ Binance风格API(从Binance轻松迁移)\n- ✅ Web3钱包认证(安全且去中心化)\n- ✅ 完整交易支持,自动精度处理\n- ✅ 比中心化交易所手续费更低\n- ✅ 兼容EVM(以太坊、BSC、Polygon等)\n\n**为什么选择Aster?**\n- 🎯 **兼容Binance API** - 需要最少的代码修改\n- 🔐 **API钱包系统** - 独立交易钱包提升安全性\n- 💰 **有竞争力的手续费** - 比大多数中心化交易所更低\n- 🌐 **多链支持** - 在你喜欢的EVM链上交易\n\n**快速开始:**\n1. 通过[推荐链接注册Aster](https://www.asterdex.com/en/referral/fdfc0e)(享手续费优惠)\n2. 访问[Aster API钱包](https://www.asterdex.com/en/api-wallet)\n3. 连接你的主钱包并创建API钱包\n4. 复制API Signer地址和私钥\n5. 在config.json中设置`\"exchange\": \"aster\"`\n6. 添加`\"aster_user\"`、`\"aster_signer\"`和`\"aster_private_key\"`\n\n---\n\n## 📸 系统截图\n\n### 🏆 竞赛模式 - AI实时对战\n\n*多AI排行榜和实时性能对比图表,展示Qwen vs DeepSeek实时交易对战*\n\n### 📊 交易详情 - 完整交易仪表盘\n\n*专业交易界面,包含权益曲线、实时持仓、AI决策日志,支持展开查看输入提示词和AI思维链推理过程*\n\n---\n\n## ✨ 当前实现 - 加密货币市场\n\nNOFX 目前已在**加密货币市场全面运行**,具备以下经过验证的能力:\n\n### 🏆 多智能体竞赛框架\n- **实时智能体对战**:Qwen vs DeepSeek 模型实时交易竞赛\n- **独立账户管理**:每个智能体维护独立的决策日志和性能指标\n- **实时性能对比**:实时 ROI 追踪、胜率统计、正面对抗分析\n- **自进化循环**:智能体从历史表现中学习,持续改进\n\n### 🧠 AI 自学习与优化\n- **历史反馈系统**:每次决策前分析最近 20 个交易周期\n- **智能性能分析**:\n - 识别表现最佳/最差资产\n - 计算胜率、盈亏比、以真实 USDT 计的平均盈利\n - 避免重复错误(连续亏损模式)\n - 强化成功策略(高胜率模式)\n- **动态策略调整**:AI 根据回测结果自主调整交易风格\n\n### 📊 通用市场数据层(加密货币实现)\n- **多时间框架分析**:3分钟实时 + 4小时趋势数据\n- **技术指标**:EMA20/50、MACD、RSI(7/14)、ATR\n- **持仓量追踪**:市场情绪、资金流向分析\n- **流动性过滤**:自动过滤低流动性资产(<15M USD)\n- **跨交易所支持**:Binance、Hyperliquid、Aster DEX,统一数据接口\n\n### 🎯 统一风控系统\n- **仓位限制**:单资产限制(山寨币≤1.5x净值,BTC/ETH≤10x净值)\n- **可配置杠杆**:根据资产类别和账户类型动态调整 1x 到 50x\n- **保证金管理**:总使用率≤90%,AI 控制分配\n- **风险回报强制执行**:强制≥1:2 的止损止盈比\n- **防叠加保护**:防止同一资产/方向的重复仓位\n\n### ⚡ 低延迟执行引擎\n- **多交易所 API 集成**:Binance Futures、Hyperliquid DEX、Aster DEX\n- **自动精度处理**:每个交易所智能订单大小和价格格式化\n- **优先级执行**:先平仓现有持仓,再开新仓\n- **滑点控制**:执行前验证,实时精度检查\n\n### 🎨 专业监控界面\n- **币安风格仪表板**:专业暗色主题,实时更新\n- **净值曲线**:历史账户价值追踪(USD/百分比切换)\n- **性能图表**:多智能体 ROI 对比,实时更新\n- **完整决策日志**:每笔交易的完整思维链(CoT)推理\n- **5秒数据刷新**:实时账户、持仓和盈亏更新\n\n---\n\n## 🔮 路线图 - 通用市场扩展\n\nNOFX 的使命是成为所有金融市场的**通用 AI 交易操作系统**。\n\n**愿景:** 相同架构。相同智能体框架。所有市场。\n\n**扩展市场:**\n- 📈 **股票市场**:美股、A股、港股\n- 📊 **期货市场**:商品期货、指数期货\n- 🎯 **期权交易**:股票期权、加密期权\n- 💱 **外汇市场**:主要货币对、交叉盘\n\n**即将推出的功能:**\n- 增强AI能力(GPT-4、Claude 3、Gemini Pro、灵活prompt模板)\n- 新交易所集成(OKX、Bybit、Lighter、EdgeX + CEX/Perp-DEX)\n- 项目结构重构(高内聚低耦合、SOLID原则)\n- 安全性增强(API密钥AES-256加密、RBAC、2FA改进)\n- 用户体验改进(移动端响应式、TradingView图表、告警系统)\n\n📖 **详细路线图和时间表,请参阅:**\n- **中文:** [路线图文档](../../roadmap/README.zh-CN.md)\n- **English:** [Roadmap Documentation](../../roadmap/README.md)\n\n---\n\n## 🏗️ 技术架构\n\nNOFX 采用现代化的模块化架构:\n\n- **后端:** Go + Gin 框架,SQLite 数据库\n- **前端:** React 18 + TypeScript + Vite + TailwindCSS\n- **多交易所支持:** Binance、Hyperliquid、Aster DEX\n- **AI 集成:** DeepSeek、Qwen 及自定义 OpenAI 兼容 API\n- **状态管理:** 前端 Zustand,后端数据库驱动\n- **实时更新:** SWR,5-10 秒轮询间隔\n\n**核心特性:**\n- 🗄️ 数据库驱动的配置(无需编辑 JSON)\n- 🔐 JWT 认证,支持可选的 2FA\n- 📊 实时性能跟踪和分析\n- 🤖 多 AI 竞赛模式,实时对比\n- 🔌 RESTful API,完整的配置和监控\n\n📖 **详细架构文档,请查看:**\n- **中文版:** [架构文档](../../architecture/README.zh-CN.md)\n- **English:** [Architecture Documentation](../../architecture/README.md)\n\n---\n\n## 💰 注册币安账户(省手续费!)\n\n使用本系统前,您需要一个币安合约账户。**使用我们的推荐链接注册可享受手续费优惠:**\n\n**🎁 [注册币安 - 享手续费折扣](https://www.binance.com/join?ref=TINKLEVIP)**\n\n### 注册步骤:\n\n1. **点击上方链接** 访问币安注册页面\n2. **完成注册** 使用邮箱/手机号注册\n3. **完成KYC身份认证**(合约交易必须)\n4. **开通合约账户**:\n - 进入币安首页 → 衍生品 → U本位合约\n - 点击\"立即开通\"激活合约交易\n5. **创建API密钥**:\n - 进入账户 → API管理\n - 创建新的API密钥,**务必勾选\"合约\"权限**\n - 保存API Key和Secret Key(~~config.json中需要~~ *Web界面中需要*)\n - **重要**:添加IP白名单以确保安全\n\n### 手续费优惠说明:\n\n- ✅ **现货交易**:最高享30%手续费返佣\n- ✅ **合约交易**:最高享30%手续费返佣\n- ✅ **终身有效**:永久享受交易手续费折扣\n\n---\n\n## 🚀 快速开始\n\n### 🐳 方式A:Docker 一键部署(最简单 - 新手推荐!)\n\n**⚡ 使用Docker只需3步即可开始交易 - 无需安装任何环境!**\n\nDocker会自动处理所有依赖(Go、Node.js、TA-Lib)和环境配置,完美适合新手!\n\n#### 步骤1:准备配置文件\n```bash\n# 复制配置文件模板\ncp config.json.example config.json\n\n# 编辑并填入你的API密钥\nnano config.json # 或使用其他编辑器\n```\n\n⚠️ **注意**: 基础config.json仍需要一些设置,但~~交易员配置~~现在通过Web界面进行。\n\n#### 步骤2:一键启动\n```bash\n# 方式1:使用便捷脚本(推荐)\nchmod +x start.sh\n./start.sh start --build\n\n\n# 方式2:直接使用docker compose\n# 如果您还在使用旧的独立 `docker-compose`,请升级到 Docker Desktop 或 Docker 20.10+\ndocker compose up -d --build\n```\n\n#### 步骤3:访问控制台\n在浏览器中打开:**http://localhost:3000**\n\n**就是这么简单!🎉** 你的AI交易系统已经运行起来了!\n\n#### 管理你的系统\n```bash\n./start.sh logs # 查看日志\n./start.sh status # 检查状态\n./start.sh stop # 停止服务\n./start.sh restart # 重启服务\n```\n\n**📖 详细的Docker部署教程、故障排查和高级配置:**\n- **中文**: 查看 [DOCKER_DEPLOY.md](DOCKER_DEPLOY.md)\n- **English**: See [DOCKER_DEPLOY.en.md](DOCKER_DEPLOY.en.md)\n- **日本語**: [DOCKER_DEPLOY.ja.md](DOCKER_DEPLOY.ja.md)を参照\n\n---\n\n### 📦 方式B:手动安装(开发者)\n\n**注意**:如果你使用了上面的Docker部署,请跳过本节。手动安装仅在你需要修改代码或不想使用Docker时需要。\n\n### 1. 环境要求\n\n- **Go 1.21+**\n- **Node.js 18+**\n- **TA-Lib** 库(技术指标计算)\n\n#### 安装 TA-Lib\n\n**macOS:**\n```bash\nbrew install ta-lib\n```\n\n**Ubuntu/Debian:**\n```bash\nsudo apt-get install libta-lib0-dev\n```\n\n**其他系统**: 参考 [TA-Lib官方文档](https://github.com/markcheno/go-talib)\n\n### 2. 克隆项目\n\n```bash\ngit clone <repository-url>\ncd nofx\n```\n\n### 3. 安装依赖\n\n**后端:**\n```bash\ngo mod download\n```\n\n**前端:**\n```bash\ncd web\nnpm install\ncd ..\n```\n\n### 4. 获取AI API密钥\n\n在配置系统之前,您需要获取AI API密钥。请选择以下AI提供商之一:\n\n#### 选项1:DeepSeek(推荐新手)\n\n**为什么选择DeepSeek?**\n- 💰 比GPT-4便宜(约1/10成本)\n- 🚀 响应速度快\n- 🎯 交易决策质量优秀\n- 🌍 全球可用无需VPN\n\n**如何获取DeepSeek API密钥:**\n\n1. **访问**:[https://platform.deepseek.com](https://platform.deepseek.com)\n2. **注册**:使用邮箱/手机号注册\n3. **验证**:完成邮箱/手机验证\n4. **充值**:向账户添加余额\n - 最低:约$5美元\n - 推荐:$20-50美元用于测试\n5. **创建API密钥**:\n - 进入API Keys部分\n - 点击\"创建新密钥\"\n - 复制并保存密钥(以`sk-`开头)\n - ⚠️ **重要**:立即保存 - 之后无法再查看!\n\n**价格**:每百万tokens约$0.14(非常便宜!)\n\n#### 选项2:Qwen(阿里云通义千问)\n\n**如何获取Qwen API密钥:**\n\n1. **访问**:[https://dashscope.console.aliyun.com](https://dashscope.console.aliyun.com)\n2. **注册**:使用阿里云账户注册\n3. **开通服务**:激活DashScope服务\n4. **创建API密钥**:\n - 进入API密钥管理\n - 创建新密钥\n - 复制并保存(以`sk-`开头)\n\n**注意**:可能需要中国手机号注册\n\n---\n\n### 5. 系统配置\n\n**两种配置模式可选:**\n- **🌟 新手模式**:单trader + 默认币种(推荐!)\n- **⚔️ 专家模式**:多trader竞赛\n\n#### 🌟 新手模式配置(推荐)\n\n~~**步骤1**:复制并重命名示例配置文件~~\n\n```bash\ncp config.json.example config.json\n```\n\n~~**步骤2**:编辑`config.json`填入您的API密钥~~ \n\n*现在通过Web界面配置,无需编辑JSON文件*\n\n```json\n{\n \"traders\": [\n {\n \"id\": \"my_trader\",\n \"name\": \"我的AI交易员\",\n \"ai_model\": \"deepseek\",\n \"binance_api_key\": \"YOUR_BINANCE_API_KEY\",\n \"binance_secret_key\": \"YOUR_BINANCE_SECRET_KEY\",\n \"use_qwen\": false,\n \"deepseek_key\": \"sk-xxxxxxxxxxxxx\",\n \"qwen_key\": \"\",\n \"initial_balance\": 1000.0,\n \"scan_interval_minutes\": 3\n }\n ],\n \"leverage\": {\n \"btc_eth_leverage\": 5,\n \"altcoin_leverage\": 5\n },\n \"use_default_coins\": true,\n \"coin_pool_api_url\": \"\",\n \"oi_top_api_url\": \"\",\n \"api_server_port\": 8080\n}\n```\n\n**步骤3**:用您的实际密钥替换占位符\n\n| 占位符 | 替换为 | 哪里获取 |\n|-------|--------|---------|\n| `YOUR_BINANCE_API_KEY` | 您的币安API密钥 | 币安 → 账户 → API管理 |\n| `YOUR_BINANCE_SECRET_KEY` | 您的币安Secret密钥 | 同上 |\n| `sk-xxxxxxxxxxxxx` | 您的DeepSeek API密钥 | [platform.deepseek.com](https://platform.deepseek.com) |\n\n**步骤4**:调整初始余额(可选)\n\n- `initial_balance`:设置为您实际的币安合约账户余额\n- 用于计算盈亏百分比\n- 例如:如果您有500 USDT,设置`\"initial_balance\": 500.0`\n\n**✅ 配置检查清单:**\n\n- [ ] 币安API密钥已填写(无引号问题)\n- [ ] 币安Secret密钥已填写(无引号问题)\n- [ ] DeepSeek API密钥已填写(以`sk-`开头)\n- [ ] `use_default_coins`设为`true`(新手)\n- [ ] `initial_balance`与您的账户余额匹配\n- [ ] 文件保存为`config.json`(不是`.example`)\n\n---\n\n#### 🔷 备选:使用Hyperliquid交易所\n\n**NOFX也支持Hyperliquid** - 去中心化永续期货交易所。使用Hyperliquid而非Binance:\n\n**步骤1**:获取以太坊私钥(用于Hyperliquid身份验证)\n\n1. 打开**MetaMask**(或任何以太坊钱包)\n2. 导出你的私钥\n3. **去掉`0x`前缀**\n4. 在[Hyperliquid](https://hyperliquid.xyz)上为钱包充值\n\n~~**步骤2**:为Hyperliquid配置`config.json`~~ *通过Web界面配置*\n\n```json\n{\n \"traders\": [\n {\n \"id\": \"hyperliquid_trader\",\n \"name\": \"My Hyperliquid Trader\",\n \"enabled\": true,\n \"ai_model\": \"deepseek\",\n \"exchange\": \"hyperliquid\",\n \"hyperliquid_private_key\": \"your_private_key_without_0x\",\n \"hyperliquid_wallet_addr\": \"your_ethereum_address\",\n \"hyperliquid_testnet\": false,\n \"deepseek_key\": \"sk-xxxxxxxxxxxxx\",\n \"initial_balance\": 1000.0,\n \"scan_interval_minutes\": 3\n }\n ],\n \"use_default_coins\": true,\n \"api_server_port\": 8080\n}\n```\n\n**与Binance配置的关键区别:**\n- 用`hyperliquid_private_key`替换`binance_api_key` + `binance_secret_key`\n- 添加`\"exchange\": \"hyperliquid\"`字段\n- 设置`hyperliquid_testnet: false`用于主网(或`true`用于测试网)\n\n**⚠️ 安全警告**:切勿分享你的私钥!使用专门的钱包进行交易,而非主钱包。\n\n---\n\n#### 🔶 备选:使用Aster DEX交易所\n\n**NOFX也支持Aster DEX** - 兼容Binance的去中心化永续期货交易所!\n\n**为什么选择Aster?**\n- 🎯 兼容Binance API(轻松迁移)\n- 🔐 API钱包安全系统\n- 💰 更低的交易手续费\n- 🌐 多链支持(ETH、BSC、Polygon)\n- 🌍 无需KYC\n\n**步骤1**:注册并创建Aster API钱包\n\n1. 通过[推荐链接注册Aster](https://www.asterdex.com/en/referral/fdfc0e)(享手续费优惠)\n2. 访问[Aster API钱包](https://www.asterdex.com/en/api-wallet)\n3. 连接你的主钱包(MetaMask、WalletConnect等)\n4. 点击\"创建API钱包\"\n5. **立即保存这3项:**\n - 主钱包地址(User)\n - API钱包地址(Signer)\n - API钱包私钥(⚠️ 仅显示一次!)\n\n~~**步骤2**:为Aster配置`config.json`~~ *通过Web界面配置*\n\n```json\n{\n \"traders\": [\n {\n \"id\": \"aster_deepseek\",\n \"name\": \"Aster DeepSeek Trader\",\n \"enabled\": true,\n \"ai_model\": \"deepseek\",\n \"exchange\": \"aster\",\n\n \"aster_user\": \"0xYOUR_MAIN_WALLET_ADDRESS_HERE\",\n \"aster_signer\": \"0xYOUR_API_WALLET_SIGNER_ADDRESS_HERE\",\n \"aster_private_key\": \"your_api_wallet_private_key_without_0x_prefix\",\n\n \"deepseek_key\": \"sk-xxxxxxxxxxxxx\",\n \"initial_balance\": 1000.0,\n \"scan_interval_minutes\": 3\n }\n ],\n \"use_default_coins\": true,\n \"api_server_port\": 8080,\n \"leverage\": {\n \"btc_eth_leverage\": 5,\n \"altcoin_leverage\": 5\n }\n}\n```\n\n**关键配置字段:**\n- `\"exchange\": \"aster\"` - 设置交易所为Aster\n- `aster_user` - 你的主钱包地址\n- `aster_signer` - API钱包地址(来自步骤1)\n- `aster_private_key` - API钱包私钥(去掉`0x`前缀)\n\n**⚠️ 安全提示**:\n- API钱包与主钱包分离(额外的安全层)\n- 切勿分享API私钥\n- 你可以随时在[asterdex.com](https://www.asterdex.com/en/api-wallet)撤销API钱包访问\n\n---\n\n#### ⚔️ 专家模式:多Trader竞赛\n\n用于运行多个AI trader相互竞争:\n\n```json\n{\n \"traders\": [\n {\n \"id\": \"qwen_trader\",\n \"name\": \"Qwen AI Trader\",\n \"ai_model\": \"qwen\",\n \"binance_api_key\": \"YOUR_BINANCE_API_KEY_1\",\n \"binance_secret_key\": \"YOUR_BINANCE_SECRET_KEY_1\",\n \"use_qwen\": true,\n \"qwen_key\": \"sk-xxxxx\",\n \"deepseek_key\": \"\",\n \"initial_balance\": 1000.0,\n \"scan_interval_minutes\": 3\n },\n {\n \"id\": \"deepseek_trader\",\n \"name\": \"DeepSeek AI Trader\",\n \"ai_model\": \"deepseek\",\n \"binance_api_key\": \"YOUR_BINANCE_API_KEY_2\",\n \"binance_secret_key\": \"YOUR_BINANCE_SECRET_KEY_2\",\n \"use_qwen\": false,\n \"qwen_key\": \"\",\n \"deepseek_key\": \"sk-xxxxx\",\n \"initial_balance\": 1000.0,\n \"scan_interval_minutes\": 3\n }\n ],\n \"use_default_coins\": true,\n \"coin_pool_api_url\": \"\",\n \"oi_top_api_url\": \"\",\n \"api_server_port\": 8080\n}\n```\n\n**竞赛模式要求:**\n- 2个独立的币安合约账户(不同的API密钥)\n- 两种AI API密钥(Qwen + DeepSeek)\n- 更多测试资金(推荐:每个账户500+ USDT)\n\n---\n\n#### 📚 配置字段详解\n\n| 字段 | 说明 | 示例值 | 是否必填? |\n|-----|------|--------|-----------|\n| `id` | 此trader的唯一标识符 | `\"my_trader\"` | ✅ 是 |\n| `name` | 显示名称 | `\"我的AI交易员\"` | ✅ 是 |\n| `enabled` | 是否启用此trader<br>设为`false`可跳过启动 | `true` 或 `false` | ✅ 是 |\n| `ai_model` | 使用的AI提供商 | `\"deepseek\"` 或 `\"qwen\"` 或 `\"custom\"` | ✅ 是 |\n| `exchange` | 使用的交易所 | `\"binance\"` 或 `\"hyperliquid\"` 或 `\"aster\"` | ✅ 是 |\n| `binance_api_key` | 币安API密钥 | `\"abc123...\"` | 使用Binance时必填 |\n| `binance_secret_key` | 币安Secret密钥 | `\"xyz789...\"` | 使用Binance时必填 |\n| `hyperliquid_private_key` | Hyperliquid私钥<br>⚠️ 去掉`0x`前缀 | `\"your_key...\"` | 使用Hyperliquid时必填 |\n| `hyperliquid_wallet_addr` | Hyperliquid钱包地址 | `\"0xabc...\"` | 使用Hyperliquid时必填 |\n| `hyperliquid_testnet` | 是否使用测试网 | `true` 或 `false` | ❌ 否(默认false) |\n| `use_qwen` | 是否使用Qwen | `true` 或 `false` | ✅ 是 |\n| `deepseek_key` | DeepSeek API密钥 | `\"sk-xxx\"` | 使用DeepSeek时必填 |\n| `qwen_key` | Qwen API密钥 | `\"sk-xxx\"` | 使用Qwen时必填 |\n| `initial_balance` | 用于P/L计算的起始余额 | `1000.0` | ✅ 是 |\n| `scan_interval_minutes` | 决策频率(分钟) | `3`(建议3-5) | ✅ 是 |\n| **`leverage`** | **杠杆配置 (v2.0.3+)** | 见下文 | ✅ 是 |\n| `btc_eth_leverage` | BTC/ETH最大杠杆<br>⚠️ 子账户:≤5倍 | `5`(默认,安全)<br>`50`(主账户最大) | ✅ 是 |\n| `altcoin_leverage` | 山寨币最大杠杆<br>⚠️ 子账户:≤5倍 | `5`(默认,安全)<br>`20`(主账户最大) | ✅ 是 |\n| `use_default_coins` | 使用内置币种列表<br>**✨ 智能默认:`true`** (v2.0.2+)<br>未提供API时自动启用 | `true` 或省略 | ❌ 否<br>(可选,自动默认) |\n| `coin_pool_api_url` | 自定义币种池API<br>*仅当`use_default_coins: false`时需要* | `\"\"`(空) | ❌ 否 |\n| `oi_top_api_url` | 持仓量API<br>*可选补充数据* | `\"\"`(空) | ❌ 否 |\n| `api_server_port` | Web仪表板端口 | `8080` | ✅ 是 |\n\n**默认交易币种**(当 `use_default_coins: true` 时):\n- BTC、ETH、SOL、BNB、XRP、DOGE、ADA、HYPE\n\n---\n\n#### ⚙️ 杠杆配置 (v2.0.3+)\n\n**什么是杠杆配置?**\n\n杠杆设置控制AI每次交易可以使用的最大杠杆。这对于风险管理至关重要,特别是对于有杠杆限制的币安子账户。\n\n**配置格式:**\n\n```json\n\"leverage\": {\n \"btc_eth_leverage\": 5, // BTC和ETH的最大杠杆\n \"altcoin_leverage\": 5 // 所有其他币种的最大杠杆\n}\n```\n\n**⚠️ 重要:币安子账户限制**\n\n- **子账户**:币安限制为**≤5倍杠杆**\n- **主账户**:可使用最高20倍(山寨币)或50倍(BTC/ETH)\n- 如果您使用子账户并设置杠杆>5倍,交易将**失败**,错误信息:`Subaccounts are restricted from using leverage greater than 5x`\n\n**推荐设置:**\n\n| 账户类型 | BTC/ETH杠杆 | 山寨币杠杆 | 风险级别 |\n|---------|------------|-----------|---------|\n| **子账户** | `5` | `5` | ✅ 安全(默认) |\n| **主账户(保守)** | `10` | `10` | 🟡 中等 |\n| **主账户(激进)** | `20` | `15` | 🔴 高 |\n| **主账户(最大)** | `50` | `20` | 🔴🔴 非常高 |\n\n**示例:**\n\n**安全配置(子账户或保守):**\n```json\n\"leverage\": {\n \"btc_eth_leverage\": 5,\n \"altcoin_leverage\": 5\n}\n```\n\n**激进配置(仅主账户):**\n```json\n\"leverage\": {\n \"btc_eth_leverage\": 20,\n \"altcoin_leverage\": 15\n}\n```\n\n**AI如何使用杠杆:**\n\n- AI可以选择**从1倍到您配置的最大值之间的任何杠杆**\n- 例如,当`altcoin_leverage: 20`时,AI可能根据市场情况决定使用5倍、10倍或20倍\n- 配置设置的是**上限**,而不是固定值\n- AI在选择杠杆时会考虑波动性、风险回报比和账户余额\n\n---\n\n#### ⚠️ 重要:`use_default_coins` 字段\n\n**智能默认行为(v2.0.2+):**\n\n系统现在会自动默认为`use_default_coins: true`,如果:\n- 您在config.json中未包含此字段,或\n- 您将其设为`false`但未提供`coin_pool_api_url`\n\n这让新手更友好!您甚至可以完全省略此字段。\n\n**配置示例:**\n\n✅ **选项1:显式设置(推荐以保持清晰)**\n```json\n\"use_default_coins\": true,\n\"coin_pool_api_url\": \"\",\n\"oi_top_api_url\": \"\"\n```\n\n✅ **选项2:省略字段(自动使用默认币种)**\n```json\n// 完全不包含\"use_default_coins\"\n\"coin_pool_api_url\": \"\",\n\"oi_top_api_url\": \"\"\n```\n\n⚙️ **高级:使用外部API**\n```json\n\"use_default_coins\": false,\n\"coin_pool_api_url\": \"http://your-api.com/coins\",\n\"oi_top_api_url\": \"http://your-api.com/oi\"\n```\n\n---\n\n### 6. 运行系统\n\n#### 🚀 启动系统(2个步骤)\n\n系统有**2个部分**需要分别运行:\n1. **后端**(AI交易大脑 + API)\n2. **前端**(Web监控仪表板)\n\n---\n\n#### **步骤1:启动后端**\n\n打开终端并运行:\n\n```bash\n# 构建程序(首次运行或代码更改后)\ngo build -o nofx\n\n# 启动后端\n./nofx\n```\n\n**您应该看到:**\n\n```\n🚀 启动自动交易系统...\n✓ Trader [my_trader] 已初始化\n✓ API服务器启动在端口 8080\n📊 开始交易监控...\n```\n\n**⚠️ 如果看到错误:**\n\n| 错误信息 | 解决方案 |\n|---------|---------|\n| `invalid API key` | ~~检查config.json中的币安API密钥~~ *检查Web界面中的API密钥* |\n| `TA-Lib not found` | 运行`brew install ta-lib`(macOS) |\n| `port 8080 already in use` | ~~修改config.json中的`api_server_port`~~ *修改.env文件中的`API_PORT`* |\n| `DeepSeek API error` | 验证DeepSeek API密钥和余额 |\n\n**✅ 后端运行正常的标志:**\n- 无错误信息\n- 出现\"开始交易监控...\"\n- 系统显示账户余额\n- 保持此终端窗口打开!\n\n---\n\n#### **步骤2:启动前端**\n\n打开**新的终端窗口**(保持第一个运行!),然后:\n\n```bash\ncd web\nnpm run dev\n```\n\n**您应该看到:**\n\n```\nVITE v5.x.x ready in xxx ms\n\n➜ Local: http://localhost:3000/\n➜ Network: use --host to expose\n```\n\n**✅ 前端运行正常的标志:**\n- \"Local: http://localhost:3000/\"消息\n- 无错误信息\n- 也保持此终端窗口打开!\n\n---\n\n#### **步骤3:访问仪表板**\n\n在Web浏览器中访问:\n\n**🌐 http://localhost:3000**\n\n**您将看到:**\n- 📊 实时账户余额\n- 📈 持仓(如果有)\n- 🤖 AI决策日志\n- 📉 净值曲线图\n\n**首次使用提示:**\n- 首次AI决策可能需要3-5分钟\n- 初始决策可能显示\"观望\"- 这是正常的\n- AI需要先分析市场状况\n\n---\n\n### 7. 监控系统\n\n**需要关注的内容:**\n\n✅ **健康系统标志:**\n- 后端终端每3-5分钟显示决策周期\n- 无持续错误信息\n- 账户余额更新\n- Web仪表板自动刷新\n\n⚠️ **警告标志:**\n- 重复的API错误\n- 10分钟以上无决策\n- 余额快速下降\n\n**检查系统状态:**\n\n```bash\n# 在新终端窗口中\ncurl http://localhost:8080/api/health\n```\n\n应返回:`{\"status\":\"ok\"}`\n\n---\n\n### 8. 停止系统\n\n**优雅关闭(推荐):**\n\n1. 转到**后端终端**(第一个)\n2. 按`Ctrl+C`\n3. 等待\"系统已停止\"消息\n4. 转到**前端终端**(第二个)\n5. 按`Ctrl+C`\n\n**⚠️ 重要:**\n- 始终先停止后端\n- 关闭终端前等待确认\n- 不要强制退出(不要直接关闭终端)\n\n---\n\n## 📖 AI决策流程\n\n每个决策周期(默认3分钟),系统按以下流程运行:\n\n### 步骤1: 📊 分析历史表现(最近20个周期)\n- ✓ 计算整体胜率、平均盈利、盈亏比\n- ✓ 统计各币种表现(胜率、平均USDT盈亏)\n- ✓ 识别最佳/最差币种\n- ✓ 列出最近5笔交易详情(含准确盈亏金额)\n- ✓ 计算夏普比率衡量风险调整后收益\n- 📌 **新增 (v2.0.2)**: 考虑杠杆的准确USDT盈亏计算\n\n**↓**\n\n### 步骤2: 💰 获取账户状态\n- 账户净值、可用余额、未实现盈亏\n- 持仓数量、总盈亏(已实现+未实现)\n- 保证金使用率(current/maximum)\n- 风险评估指标\n\n**↓**\n\n### 步骤3: 🔍 分析现有持仓(如果有)\n- 获取每个持仓的市场数据(3分钟+4小时K线)\n- 计算技术指标(RSI、MACD、EMA)\n- 显示持仓时长(例如\"持仓时长2小时15分钟\")\n- AI判断是否需要平仓(止盈、止损或调整)\n- 📌 **新增 (v2.0.2)**: 追踪持仓时长帮助AI决策\n\n**↓**\n\n### 步骤4: 🎯 评估新机会(候选币种池)\n- 获取币种池(2种模式):\n - 🌟 **默认模式**: BTC、ETH、SOL、BNB、XRP等\n - ⚙️ **高级模式**: AI500(前20) + OI Top(前20)\n- 合并去重,过滤低流动性币种(持仓量<15M USD)\n- 批量获取市场数据和技术指标\n- 为每个候选币种准备完整的原始数据序列\n\n**↓**\n\n### 步骤5: 🧠 AI综合决策\n- 查看历史反馈(胜率、盈亏比、最佳/最差币种)\n- 接收所有原始序列数据(K线、指标、持仓量)\n- Chain of Thought 思维链分析\n- 输出决策:平仓/开仓/持有/观望\n- 包含杠杆、仓位、止损、止盈参数\n- 📌 **新增 (v2.0.2)**: AI可自由分析原始序列,不受预定义指标限制\n\n**↓**\n\n### 步骤6: ⚡ 执行交易\n- 优先级排序:先平仓,再开仓\n- 精度自动适配(LOT_SIZE规则)\n- 防止仓位叠加(同币种同方向拒绝开仓)\n- 平仓后自动取消所有挂单\n- 记录开仓时间用于持仓时长追踪\n- 📌 追踪持仓开仓时间\n\n**↓**\n\n### 步骤7: 📝 记录日志\n- 保存完整决策记录到 `decision_logs/`\n- 包含思维链、决策JSON、账户快照、执行结果\n- 存储完整持仓数据(数量、杠杆、开/平仓时间)\n- 使用 `symbol_side` 键值防止多空冲突\n- 📌 **新增 (v2.0.2)**: 防止多空持仓冲突,考虑数量+杠杆\n\n**↓**\n\n**🔄 (每3-5分钟重复一次)**\n\n### v2.0.2的核心改进\n\n**📌 持仓时长追踪:**\n- 系统现在追踪每个持仓已持有多长时间\n- 在用户提示中显示:\"持仓时长2小时15分钟\"\n- 帮助AI更好地判断何时退出仓位\n\n**📌 准确的盈亏计算:**\n- 之前:只显示百分比(100U@5% = 1000U@5% = 都显示\"5.0\")\n- 现在:真实USDT盈亏 = 仓位价值 × 价格变化% × 杠杆倍数\n- 示例:1000 USDT × 5% × 20倍 = 1000 USDT实际盈利\n\n**📌 增强的AI自由度:**\n- AI可以自由分析所有原始序列数据\n- 不再局限于预定义的指标组合\n- 可以执行自己的趋势分析、支撑位/阻力位计算\n\n**📌 改进的持仓追踪:**\n- 使用`symbol_side`键值(例如\"BTCUSDT_long\")\n- 防止同时持有多空仓时的冲突\n- 存储完整数据:数量、杠杆、开/平仓时间\n\n---\n\n## 🧠 AI自我学习示例\n\n### 历史反馈(Prompt中自动添加)\n\n```markdown\n## 📊 历史表现反馈\n\n### 整体表现\n- **总交易数**: 15 笔 (盈利: 8 | 亏损: 7)\n- **胜率**: 53.3%\n- **平均盈利**: +3.2% | 平均亏损: -2.1%\n- **盈亏比**: 1.52:1\n\n### 最近交易\n1. BTCUSDT LONG: 95000.0000 → 97500.0000 = +2.63% ✓\n2. ETHUSDT SHORT: 3500.0000 → 3450.0000 = +1.43% ✓\n3. SOLUSDT LONG: 185.0000 → 180.0000 = -2.70% ✗\n4. BNBUSDT LONG: 610.0000 → 625.0000 = +2.46% ✓\n5. ADAUSDT LONG: 0.8500 → 0.8300 = -2.35% ✗\n\n### 币种表现\n- **最佳**: BTCUSDT (胜率75%, 平均+2.5%)\n- **最差**: SOLUSDT (胜率25%, 平均-1.8%)\n```\n\n### AI如何使用反馈\n\n1. **避免连续亏损币种**: 看到SOLUSDT连续3次止损,AI会避开或更谨慎\n2. **强化成功策略**: BTC突破做多胜率75%,AI会继续这个模式\n3. **动态调整风格**: 胜率<40%时变保守,盈亏比>2时保持激进\n4. **识别市场环境**: 连续亏损可能说明市场震荡,减少交易频率\n\n---\n\n## 📊 Web界面功能\n\n### 1. 竞赛页面(Competition)\n\n- **🏆 排行榜**: 实时收益率排名,金色边框突出显示领先者\n- **📈 性能对比图**: 双AI收益率曲线对比(紫色vs蓝色)\n- **⚔️ Head-to-Head**: 直接对比,显示领先差距\n- **实时数据**: 总净值、盈亏%、持仓数、保证金使用率\n\n### 2. 详情页面(Details)\n\n- **账户净值曲线**: 历史走势图(美元/百分比切换)\n- **统计信息**: 总周期、成功/失败、开仓/平仓统计\n- **持仓表格**: 所有持仓详情(入场价、当前价、盈亏%、强平价)\n- **AI决策日志**: 最近决策记录(可展开思维链)\n\n### 3. 实时更新\n\n- 系统状态、账户信息、持仓列表:**每5秒刷新**\n- 决策日志、统计信息:**每10秒刷新**\n- 收益率图表:**每10秒刷新**\n\n---\n\n## 🎛️ API接口\n\n### 竞赛相关\n\n```bash\nGET /api/competition # 竞赛排行榜(所有trader)\nGET /api/traders # Trader列表\n```\n\n### 单Trader相关\n\n```bash\nGET /api/status?trader_id=xxx # 系统状态\nGET /api/account?trader_id=xxx # 账户信息\nGET /api/positions?trader_id=xxx # 持仓列表\nGET /api/equity-history?trader_id=xxx # 净值历史(图表数据)\nGET /api/decisions/latest?trader_id=xxx # 最新5条决策\nGET /api/statistics?trader_id=xxx # 统计信息\n```\n\n### 系统接口\n\n```bash\nGET /api/health # 健康检查\nGET /api/config # 系统配置\n```\n\n---\n\n## 📝 决策日志格式\n\n每次AI决策都会生成详细的JSON日志:\n\n### 日志文件路径\n```\ndecision_logs/\n├── qwen_trader/\n│ └── decision_20251028_153042_cycle15.json\n└── deepseek_trader/\n └── decision_20251028_153045_cycle15.json\n```\n\n### 日志内容示例\n\n```json\n{\n \"timestamp\": \"2025-10-28T15:30:42+08:00\",\n \"cycle_number\": 15,\n \"cot_trace\": \"当前持仓:ETHUSDT多头盈利+2.3%,趋势良好继续持有...\",\n \"decision_json\": \"[{\\\"symbol\\\":\\\"BTCUSDT\\\",\\\"action\\\":\\\"open_long\\\"...}]\",\n \"account_state\": {\n \"total_balance\": 1045.80,\n \"available_balance\": 823.40,\n \"position_count\": 3,\n \"margin_used_pct\": 21.3\n },\n \"positions\": [...],\n \"candidate_coins\": [\"BTCUSDT\", \"ETHUSDT\", ...],\n \"decisions\": [\n {\n \"action\": \"open_long\",\n \"symbol\": \"BTCUSDT\",\n \"quantity\": 0.015,\n \"leverage\": 50,\n \"price\": 95800.0,\n \"order_id\": 123456789,\n \"success\": true\n }\n ],\n \"execution_log\": [\"✓ BTCUSDT open_long 成功\"],\n \"success\": true\n}\n```\n\n---\n\n## 🔧 风险控制详解\n\n### 单币种仓位限制\n\n| 币种类型 | 仓位价值上限 | 杠杆 | 保证金占用 | 示例(1000U账户) |\n|---------|-------------|------|-----------|------------------|\n| 山寨币 | 1.5倍净值 | 20x | 7.5% | 最多开1500U仓位 = 75U保证金 |\n| BTC/ETH | 10倍净值 | 50x | 20% | 最多开10000U仓位 = 200U保证金 |\n\n### 为什么这样设计?\n\n1. **高杠杆 + 小仓位 = 分散风险**\n - 20倍杠杆,1500U仓位,只需75U保证金\n - 可以同时开10+个小仓位,分散单币种风险\n\n2. **单币种风险可控**\n - 山寨币仓位≤1.5倍净值,5%反向波动 = 7.5%损失\n - BTC仓位≤10倍净值,2%反向波动 = 20%损失\n\n3. **不限制总保证金使用率**\n - AI根据市场机会自主决策保证金使用率\n - 上限90%,但不强制满仓\n - 有好机会就开仓,没机会就观望\n\n### 防止过度交易\n\n- **同币种同方向不允许重复开仓**: 防止AI连续开同一个仓位导致超限\n- **先平仓后开仓**: 换仓时确保先释放保证金\n- **止损止盈强制检查**: 风险回报比≥1:2\n\n---\n\n## ⚠️ 重要风险提示\n\n### 交易风险\n\n1. **加密货币市场波动极大**,AI决策不保证盈利\n2. **合约交易使用杠杆**,亏损可能超过本金\n3. **市场极端行情**下可能出现爆仓风险\n4. **资金费率**可能影响持仓成本\n5. **流动性风险**:某些币种可能出现滑点\n\n### 技术风险\n\n1. **网络延迟**可能导致价格滑点\n2. **API限流**可能影响交易执行\n3. **AI API超时**可能导致决策失败\n4. **系统Bug**可能引发意外行为\n\n### 使用建议\n\n✅ **建议做法**\n- 仅使用可承受损失的资金测试\n- 从小额资金开始(建议100-500 USDT)\n- 定期检查系统运行状态\n- 监控账户余额变化\n- 分析AI决策日志,理解策略\n\n❌ **不建议做法**\n- 投入全部资金或借贷资金\n- 长时间无人监控运行\n- 盲目信任AI决策\n- 在不理解系统的情况下使用\n- 在市场极端波动时运行\n\n---\n\n## 🛠️ 常见问题\n\n### 1. 编译错误:TA-Lib not found\n\n**解决**: 安装TA-Lib库\n```bash\n# macOS\nbrew install ta-lib\n\n# Ubuntu\nsudo apt-get install libta-lib0-dev\n```\n\n### 2. 精度错误:Precision is over the maximum\n\n**解决**: 系统已自动处理精度,从Binance获取LOT_SIZE。如仍报错,检查网络连接。\n\n### 3. AI API超时\n\n**解决**:\n- 检查API密钥是否正确\n- 检查网络连接(可能需要代理)\n- 系统超时时间已设置为120秒\n\n### 4. 前端无法连接后端\n\n**解决**:\n- 确保后端正在运行(http://localhost:8080)\n- 检查端口8080是否被占用\n- 查看浏览器控制台错误信息\n\n### 5. 币种池API失败\n\n**解决**:\n- 币种池API是可选的\n- 如果API失败,系统会使用默认主流币种(BTC、ETH等)\n- ~~检查config.json中的API URL和auth参数~~ *检查Web界面中的配置*\n\n---\n\n## 📈 性能优化建议\n\n1. **合理设置决策周期**: 建议3-5分钟,避免过度交易\n2. **控制候选币种数量**: 系统默认分析AI500前20 + OI Top前20\n3. **定期清理日志**: 避免占用过多磁盘空间\n4. **监控API调用次数**: 避免触发Binance限流(权重限制)\n5. **小额资金测试**: 先用100-500 USDT测试策略有效性\n\n---\n\n## 🔄 更新日志\n\n📖 **详细的版本历史和更新,请查看:**\n\n- **中文版:** [CHANGELOG.zh-CN.md](../../../CHANGELOG.zh-CN.md)\n- **English:** [CHANGELOG.md](../../../CHANGELOG.md)\n\n**最新版本:** v3.0.0 (2025-10-30) - 重大架构变革\n\n**近期亮点:**\n- 🚀 完整系统重新设计,基于Web的配置平台\n- 🗄️ 数据库驱动架构(SQLite)\n- 🎨 无需编辑JSON - 全部通过Web界面配置\n- 🔧 AI模型与交易所任意组合\n- 📊 增强的API层,提供全面的端点\n\n---\n\n## 📄 开源协议\n\n本项目采用 **GNU Affero 通用公共许可证 v3.0 (AGPL-3.0)** - 详见 [LICENSE](LICENSE) 文件\n\n**这意味着什么:**\n- ✅ 你可以使用、修改和分发此软件\n- ✅ 你必须公开你修改版本的源代码\n- ✅ 如果你在服务器上运行修改版本,必须向用户提供源代码\n- ✅ 所有衍生作品也必须使用 AGPL-3.0 许可证\n\n如需商业许可或有疑问,请联系维护者。\n\n---\n\n## 🤝 贡献\n\n欢迎提交Issue和Pull Request!\n\n### 开发指南\n\n1. Fork项目\n2. 创建功能分支 (`git checkout -b feature/AmazingFeature`)\n3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)\n4. 推送到分支 (`git push origin feature/AmazingFeature`)\n5. 开启Pull Request\n\n---\n\n## 📬 联系方式\n\n### 🐛 技术支持\n- **GitHub Issues**: [提交Issue](https://github.com/tinkle-community/nofx/issues)\n- **开发者社区**: [Telegram群组](https://t.me/nofx_dev_community)\n\n---\n\n## 🙏 致谢\n\n- [Binance API](https://binance-docs.github.io/apidocs/futures/cn/) - 币安合约API\n- [DeepSeek](https://platform.deepseek.com/) - DeepSeek AI API\n- [Qwen](https://dashscope.console.aliyun.com/) - 阿里云通义千问\n- [TA-Lib](https://ta-lib.org/) - 技术指标库\n- [Recharts](https://recharts.org/) - React图表库\n\n---\n\n**最后更新**: 2025-10-29 (v2.0.2)\n\n**⚡ 用AI的力量,探索量化交易的可能性!**\n\n---\n\n## ⭐ Star History\n\n[](https://star-history.com/#tinkle-community/nofx&Date)\n"}, "103c47826174658716d027f65a0bf165b93f4805": {"t": 1785758355.614718, "n": 25448, "h": "d703a079ac4cede6", "c": "# 🤖 NOFX - AI交易操作系统\n\n[](https://golang.org/)\n[](https://reactjs.org/)\n[](https://www.typescriptlang.org/)\n[](LICENSE)\n[](https://amber.ac)\n\n**语言 / Languages:** [English](../../../README.md) | [中文](../zh-CN/README.md) | [Українська](../uk/README.md) | [Русский](../ru/README.md) | [日本語](../ja/README.md)\n\n**官方推特:** [@nofx_ai](https://x.com/nofx_ai)\n\n**📚 文档中心:** [文档首页](../../README.md) | [快速开始](../../getting-started/README.zh-CN.md) | [更新日志](../../../CHANGELOG.zh-CN.md) | [社区指南](../../community/README.md)\n\n---\n\n## 📑 目录\n\n- [🚀 通用AI交易操作系统](#-通用ai交易操作系统)\n- [👥 开发者社区](#-开发者社区)\n- [🆕 最新更新](#-最新更新)\n- [📸 系统截图](#-系统截图)\n- [✨ 当前实现](#-当前实现---加密货币市场)\n- [🔮 路线图](#-路线图---通用市场扩展)\n- [🏗️ 技术架构](#️-技术架构)\n- [💰 注册币安账户](#-注册币安账户省手续费)\n- [🚀 快速开始](#-快速开始)\n- [📖 AI决策流程](#-ai决策流程)\n- [🧠 AI自我学习示例](#-ai自我学习示例)\n- [📊 Web界面功能](#-web界面功能)\n- [🎛️ API接口](#️-api接口)\n- [📝 决策日志格式](#-决策日志格式)\n- [🔧 风险控制详解](#-风险控制详解)\n- [⚠️ 重要风险提示](#️-重要风险提示)\n- [🛠️ 常见问题](#️-常见问题)\n- [📈 性能优化建议](#-性能优化建议)\n- [🔄 更新日志](#-更新日志)\n- [📄 开源协议](#-开源协议)\n- [🤝 贡献指南](#-贡献指南)\n\n---\n\n## 🚀 通用AI交易操作系统\n\n**NOFX** 是通用架构的 **AI交易操作系统(Agentic Trading OS)**。我们已在加密市场打通\"**多智能体决策 → 统一风控 → 低延迟执行 → 真实/纸面账户复盘**\"的闭环,正按同一技术栈扩展到**股票、期货、期权、外汇等所有市场**。\n\n### 🎯 核心特性\n\n- **通用数据与回测层**:跨市场、跨周期、跨交易所统一表示与因子库,沉淀可迁移的\"策略记忆\"\n- **多智能体自博弈与自进化**:策略自动对战择优,按账户级 PnL 与风险约束持续迭代\n- **执行与风控一体化**:低延迟路由、滑点/风控沙箱、账户级限额,一键切换市场\n\n### 🏢 由 [Amber.ac](https://amber.ac) 背书\n\n### 👥 核心团队\n\n- **Tinkle** - [@Web3Tinkle](https://x.com/Web3Tinkle)\n- **Zack** - [@0x_ZackH](https://x.com/0x_ZackH)\n\n### 💼 种子轮融资进行中\n\n我们正在进行**种子轮融资**。\n\n**投资咨询**,请通过 Twitter 私信联系 **Tinkle** 或 **Zack**。\n\n**商务合作**,请私信官方推特 [@nofx_ai](https://x.com/nofx_ai)。\n\n---\n\n> ⚠️ **风险提示**:本系统为实验性项目,AI自动交易存在重大风险,强烈建议仅用于学习研究或小额资金测试!\n\n## 👥 开发者社区\n\n加入我们的Telegram开发者社区,讨论、分享想法并获得支持:\n\n**💬 [NOFX开发者社区](https://t.me/nofx_dev_community)**\n\n---\n\n## 🆕 最新更新\n\n### 🚀 多交易所支持!\n\nNOFX现已支持**三大交易所**:Binance、Hyperliquid和Aster DEX!\n\n#### **Hyperliquid交易所**\n\n高性能的去中心化永续期货交易所!\n\n**核心特性:**\n- ✅ 完整交易支持(做多/做空、杠杆、止损/止盈)\n- ✅ 自动精度处理(订单数量和价格)\n- ✅ 统一trader接口(无缝切换交易所)\n- ✅ 支持主网和测试网\n- ✅ 无需API密钥 - 只需以太坊私钥\n\n**为什么选择Hyperliquid?**\n- 🔥 比中心化交易所手续费更低\n- 🔒 非托管 - 你掌控自己的资金\n- ⚡ 快速执行与链上结算\n- 🌍 无需KYC\n\n**快速开始:**\n1. 获取你的MetaMask私钥(去掉`0x`前缀)\n2. ~~在config.json中设置`\"exchange\": \"hyperliquid\"`~~ *通过Web界面配置*\n3. 添加`\"hyperliquid_private_key\": \"your_key\"`\n4. 开始交易!\n\n详见[配置指南](#-备选使用hyperliquid交易所)。\n\n#### **Aster DEX交易所**(新!v2.0.2)\n\n兼容Binance的去中心化永续期货交易所!\n\n**核心特性:**\n- ✅ Binance风格API(从Binance轻松迁移)\n- ✅ Web3钱包认证(安全且去中心化)\n- ✅ 完整交易支持,自动精度处理\n- ✅ 比中心化交易所手续费更低\n- ✅ 兼容EVM(以太坊、BSC、Polygon等)\n\n**为什么选择Aster?**\n- 🎯 **兼容Binance API** - 需要最少的代码修改\n- 🔐 **API钱包系统** - 独立交易钱包提升安全性\n- 💰 **有竞争力的手续费** - 比大多数中心化交易所更低\n- 🌐 **多链支持** - 在你喜欢的EVM链上交易\n\n**快速开始:**\n1. 通过[推荐链接注册Aster](https://www.asterdex.com/en/referral/fdfc0e)(享手续费优惠)\n2. 访问[Aster API钱包](https://www.asterdex.com/en/api-wallet)\n3. 连接你的主钱包并创建API钱包\n4. 复制API Signer地址和私钥\n5. 在config.json中设置`\"exchange\": \"aster\"`\n6. 添加`\"aster_user\"`、`\"aster_signer\"`和`\"aster_private_key\"`\n\n---\n\n## 📸 系统截图\n\n### 🏆 竞赛模式 - AI实时对战\n\n*多AI排行榜和实时性能对比图表,展示Qwen vs DeepSeek实时交易对战*\n\n### 📊 交易详情 - 完整交易仪表盘\n\n*专业交易界面,包含权益曲线、实时持仓、AI决策日志,支持展开查看输入提示词和AI思维链推理过程*\n\n---\n\n## ✨ 当前实现 - 加密货币市场\n\nNOFX 目前已在**加密货币市场全面运行**,具备以下经过验证的能力:\n\n### 🏆 多智能体竞赛框架\n- **实时智能体对战**:Qwen vs DeepSeek 模型实时交易竞赛\n- **独立账户管理**:每个智能体维护独立的决策日志和性能指标\n- **实时性能对比**:实时 ROI 追踪、胜率统计、正面对抗分析\n- **自进化循环**:智能体从历史表现中学习,持续改进\n\n### 🧠 AI 自学习与优化\n- **历史反馈系统**:每次决策前分析最近 20 个交易周期\n- **智能性能分析**:\n - 识别表现最佳/最差资产\n - 计算胜率、盈亏比、以真实 USDT 计的平均盈利\n - 避免重复错误(连续亏损模式)\n - 强化成功策略(高胜率模式)\n- **动态策略调整**:AI 根据回测结果自主调整交易风格\n\n### 📊 通用市场数据层(加密货币实现)\n- **多时间框架分析**:3分钟实时 + 4小时趋势数据\n- **技术指标**:EMA20/50、MACD、RSI(7/14)、ATR\n- **持仓量追踪**:市场情绪、资金流向分析\n- **流动性过滤**:自动过滤低流动性资产(<15M USD)\n- **跨交易所支持**:Binance、Hyperliquid、Aster DEX,统一数据接口\n\n### 🎯 统一风控系统\n- **仓位限制**:单资产限制(山寨币≤1.5x净值,BTC/ETH≤10x净值)\n- **可配置杠杆**:根据资产类别和账户类型动态调整 1x 到 50x\n- **保证金管理**:总使用率≤90%,AI 控制分配\n- **风险回报强制执行**:强制≥1:2 的止损止盈比\n- **防叠加保护**:防止同一资产/方向的重复仓位\n\n### ⚡ 低延迟执行引擎\n- **多交易所 API 集成**:Binance Futures、Hyperliquid DEX、Aster DEX\n- **自动精度处理**:每个交易所智能订单大小和价格格式化\n- **优先级执行**:先平仓现有持仓,再开新仓\n- **滑点控制**:执行前验证,实时精度检查\n\n### 🎨 专业监控界面\n- **币安风格仪表板**:专业暗色主题,实时更新\n- **净值曲线**:历史账户价值追踪(USD/百分比切换)\n- **性能图表**:多智能体 ROI 对比,实时更新\n- **完整决策日志**:每笔交易的完整思维链(CoT)推理\n- **5秒数据刷新**:实时账户、持仓和盈亏更新\n\n---\n\n## 🔮 路线图 - 通用市场扩展\n\nNOFX 的使命是成为所有金融市场的**通用 AI 交易操作系统**。\n\n**愿景:** 相同架构。相同智能体框架。所有市场。\n\n**扩展市场:**\n- 📈 **股票市场**:美股、A股、港股\n- 📊 **期货市场**:商品期货、指数期货\n- 🎯 **期权交易**:股票期权、加密期权\n- 💱 **外汇市场**:主要货币对、交叉盘\n\n**即将推出的功能:**\n- 增强AI能力(GPT-4、Claude 3、Gemini Pro、灵活prompt模板)\n- 新交易所集成(OKX、Bybit、Lighter、EdgeX + CEX/Perp-DEX)\n- 项目结构重构(高内聚低耦合、SOLID原则)\n- 安全性增强(API密钥AES-256加密、RBAC、2FA改进)\n- 用户体验改进(移动端响应式、TradingView图表、告警系统)\n\n📖 **详细路线图和时间表,请参阅:**\n- **中文:** [路线图文档](../../roadmap/README.zh-CN.md)\n- **English:** [Roadmap Documentation](../../roadmap/README.md)\n\n---\n\n## 🏗️ 技术架构\n\nNOFX 采用现代化的模块化架构:\n\n- **后端:** Go + Gin 框架,SQLite 数据库\n- **前端:** React 18 + TypeScript + Vite + TailwindCSS\n- **多交易所支持:** Binance、Hyperliquid、Aster DEX\n- **AI 集成:** DeepSeek、Qwen 及自定义 OpenAI 兼容 API\n- **状态管理:** 前端 Zustand,后端数据库驱动\n- **实时更新:** SWR,5-10 秒轮询间隔\n\n**核心特性:**\n- 🗄️ 数据库驱动的配置(无需编辑 JSON)\n- 🔐 JWT 认证,支持可选的 2FA\n- 📊 实时性能跟踪和分析\n- 🤖 多 AI 竞赛模式,实时对比\n- 🔌 RESTful API,完整的配置和监控\n\n📖 **详细架构文档,请查看:**\n- **中文版:** [架构文档](../../architecture/README.zh-CN.md)\n- **English:** [Architecture Documentation](../../architecture/README.md)\n\n---\n\n## 💰 注册币安账户(省手续费!)\n\n使用本系统前,您需要一个币安合约账户。**使用我们的推荐链接注册可享受手续费优惠:**\n\n**🎁 [注册币安 - 享手续费折扣](https://www.binance.com/join?ref=TINKLEVIP)**\n\n### 注册步骤:\n\n1. **点击上方链接** 访问币安注册页面\n2. **完成注册** 使用邮箱/手机号注册\n3. **完成KYC身份认证**(合约交易必须)\n4. **开通合约账户**:\n - 进入币安首页 → 衍生品 → U本位合约\n - 点击\"立即开通\"激活合约交易\n5. **创建API密钥**:\n - 进入账户 → API管理\n - 创建新的API密钥,**务必勾选\"合约\"权限**\n - 保存API Key和Secret Key(~~config.json中需要~~ *Web界面中需要*)\n - **重要**:添加IP白名单以确保安全\n\n### 手续费优惠说明:\n\n- ✅ **现货交易**:最高享30%手续费返佣\n- ✅ **合约交易**:最高享30%手续费返佣\n- ✅ **终身有效**:永久享受交易手续费折扣\n\n---\n\n## 🚀 快速开始\n\n### 🐳 方式A:Docker 一键部署(最简单 - 新手推荐!)\n\n**⚡ 使用Docker只需3步即可开始交易 - 无需安装任何环境!**\n\nDocker会自动处理所有依赖(Go、Node.js、TA-Lib)和环境配置,完美适合新手!\n\n#### 步骤1:准备配置文件\n```bash\n# 复制配置文件模板\ncp config.json.example config.json\n\n# 编辑并填入你的API密钥\nnano config.json # 或使用其他编辑器\n```\n\n⚠️ **注意**: 基础config.json仍需要一些设置,但~~交易员配置~~现在通过Web界面进行。\n\n#### 步骤2:一键启动\n```bash\n# 方式1:使用便捷脚本(推荐)\nchmod +x start.sh\n./start.sh start --build\n\n\n# 方式2:直接使用docker compose\n# 如果您还在使用旧的独立 `docker-compose`,请升级到 Docker Desktop 或 Docker 20.10+\ndocker compose up -d --build\n```\n\n#### 步骤3:访问控制台\n在浏览器中打开:**http://localhost:3000**\n\n**就是这么简单!🎉** 你的AI交易系统已经运行起来了!\n\n#### 管理你的系统\n```bash\n./start.sh logs # 查看日志\n./start.sh status # 检查状态\n./start.sh stop # 停止服务\n./start.sh restart # 重启服务\n```\n\n**📖 详细的Docker部署教程、故障排查和高级配置:**\n- **中文**: 查看 [DOCKER_DEPLOY.md](DOCKER_DEPLOY.md)\n- **English**: See [DOCKER_DEPLOY.en.md](DOCKER_DEPLOY.en.md)\n- **日本語**: [DOCKER_DEPLOY.ja.md](DOCKER_DEPLOY.ja.md)を参照\n\n---\n\n### 📦 方式B:手动安装(开发者)\n\n**注意**:如果你使用了上面的Docker部署,请跳过本节。手动安装仅在你需要修改代码或不想使用Docker时需要。\n\n### 1. 环境要求\n\n- **Go 1.21+**\n- **Node.js 18+**\n- **TA-Lib** 库(技术指标计算)\n\n#### 安装 TA-Lib\n\n**macOS:**\n```bash\nbrew install ta-lib\n```\n\n**Ubuntu/Debian:**\n```bash\nsudo apt-get install libta-lib0-dev\n```\n\n**其他系统**: 参考 [TA-Lib官方文档](https://github.com/markcheno/go-talib)\n\n### 2. 克隆项目\n\n```bash\ngit clone <repository-url>\ncd nofx\n```\n\n### 3. 安装依赖\n\n**后端:**\n```bash\ngo mod download\n```\n\n**前端:**\n```bash\ncd web\nnpm install\ncd ..\n```\n\n### 4. 获取AI API密钥\n\n在配置系统之前,您需要获取AI API密钥。请选择以下AI提供商之一:\n\n#### 选项1:DeepSeek(推荐新手)\n\n**为什么选择DeepSeek?**\n- 💰 比GPT-4便宜(约1/10成本)\n- 🚀 响应速度快\n- 🎯 交易决策质量优秀\n- 🌍 全球可用无需VPN\n\n**如何获取DeepSeek API密钥:**\n\n1. **访问**:[https://platform.deepseek.com](https://platform.deepseek.com)\n2. **注册**:使用邮箱/手机号注册\n3. **验证**:完成邮箱/手机验证\n4. **充值**:向账户添加余额\n - 最低:约$5美元\n - 推荐:$20-50美元用于测试\n5. **创建API密钥**:\n - 进入API Keys部分\n - 点击\"创建新密钥\"\n - 复制并保存密钥(以`sk-`开头)\n - ⚠️ **重要**:立即保存 - 之后无法再查看!\n\n**价格**:每百万tokens约$0.14(非常便宜!)\n\n#### 选项2:Qwen(阿里云通义千问)\n\n**如何获取Qwen API密钥:**\n\n1. **访问**:[https://dashscope.console.aliyun.com](https://dashscope.console.aliyun.com)\n2. **注册**:使用阿里云账户注册\n3. **开通服务**:激活DashScope服务\n4. **创建API密钥**:\n - 进入API密钥管理\n - 创建新密钥\n - 复制并保存(以`sk-`开头)\n\n**注意**:可能需要中国手机号注册\n\n---\n\n### 5. 系统配置\n\n**两种配置模式可选:**\n- **🌟 新手模式**:单trader + 默认币种(推荐!)\n- **⚔️ 专家模式**:多trader竞赛\n\n#### 🌟 新手模式配置(推荐)\n\n~~**步骤1**:复制并重命名示例配置文件~~\n\n```bash\ncp config.json.example config.json\n```\n\n~~**步骤2**:编辑`config.json`填入您的API密钥~~ \n\n*现在通过Web界面配置,无需编辑JSON文件*\n\n```json\n{\n \"traders\": [\n {\n \"id\": \"my_trader\",\n \"name\": \"我的AI交易员\",\n \"ai_model\": \"deepseek\",\n \"binance_api_key\": \"YOUR_BINANCE_API_KEY\",\n \"binance_secret_key\": \"YOUR_BINANCE_SECRET_KEY\",\n \"use_qwen\": false,\n \"deepseek_key\": \"sk-xxxxxxxxxxxxx\",\n \"qwen_key\": \"\",\n \"initial_balance\": 1000.0,\n \"scan_interval_minutes\": 3\n }\n ],\n \"leverage\": {\n \"btc_eth_leverage\": 5,\n \"altcoin_leverage\": 5\n },\n \"use_default_coins\": true,\n \"coin_pool_api_url\": \"\",\n \"oi_top_api_url\": \"\",\n \"api_server_port\": 8080\n}\n```\n\n**步骤3**:用您的实际密钥替换占位符\n\n| 占位符 | 替换为 | 哪里获取 |\n|-------|--------|---------|\n| `YOUR_BINANCE_API_KEY` | 您的币安API密钥 | 币安 → 账户 → API管理 |\n| `YOUR_BINANCE_SECRET_KEY` | 您的币安Secret密钥 | 同上 |\n| `sk-xxxxxxxxxxxxx` | 您的DeepSeek API密钥 | [platform.deepseek.com](https://platform.deepseek.com) |\n\n**步骤4**:调整初始余额(可选)\n\n- `initial_balance`:设置为您实际的币安合约账户余额\n- 用于计算盈亏百分比\n- 例如:如果您有500 USDT,设置`\"initial_balance\": 500.0`\n\n**✅ 配置检查清单:**\n\n- [ ] 币安API密钥已填写(无引号问题)\n- [ ] 币安Secret密钥已填写(无引号问题)\n- [ ] DeepSeek API密钥已填写(以`sk-`开头)\n- [ ] `use_default_coins`设为`true`(新手)\n- [ ] `initial_balance`与您的账户余额匹配\n- [ ] 文件保存为`config.json`(不是`.example`)\n\n---\n\n#### 🔷 备选:使用Hyperliquid交易所\n\n**NOFX也支持Hyperliquid** - 去中心化永续期货交易所。使用Hyperliquid而非Binance:\n\n**步骤1**:获取以太坊私钥(用于Hyperliquid身份验证)\n\n1. 打开**MetaMask**(或任何以太坊钱包)\n2. 导出你的私钥\n3. **去掉`0x`前缀**\n4. 在[Hyperliquid](https://hyperliquid.xyz)上为钱包充值\n\n~~**步骤2**:为Hyperliquid配置`config.json`~~ *通过Web界面配置*\n\n```json\n{\n \"traders\": [\n {\n \"id\": \"hyperliquid_trader\",\n \"name\": \"My Hyperliquid Trader\",\n \"enabled\": true,\n \"ai_model\": \"deepseek\",\n \"exchange\": \"hyperliquid\",\n \"hyperliquid_private_key\": \"your_private_key_without_0x\",\n \"hyperliquid_wallet_addr\": \"your_ethereum_address\",\n \"hyperliquid_testnet\": false,\n \"deepseek_key\": \"sk-xxxxxxxxxxxxx\",\n \"initial_balance\": 1000.0,\n \"scan_interval_minutes\": 3\n }\n ],\n \"use_default_coins\": true,\n \"api_server_port\": 8080\n}\n```\n\n**与Binance配置的关键区别:**\n- 用`hyperliquid_private_key`替换`binance_api_key` + `binance_secret_key`\n- 添加`\"exchange\": \"hyperliquid\"`字段\n- 设置`hyperliquid_testnet: false`用于主网(或`true`用于测试网)\n\n**⚠️ 安全警告**:切勿分享你的私钥!使用专门的钱包进行交易,而非主钱包。\n\n---\n\n#### 🔶 备选:使用Aster DEX交易所\n\n**NOFX也支持Aster DEX** - 兼容Binance的去中心化永续期货交易所!\n\n**为什么选择Aster?**\n- 🎯 兼容Binance API(轻松迁移)\n- 🔐 API钱包安全系统\n- 💰 更低的交易手续费\n- 🌐 多链支持(ETH、BSC、Polygon)\n- 🌍 无需KYC\n\n**步骤1**:注册并创建Aster API钱包\n\n1. 通过[推荐链接注册Aster](https://www.asterdex.com/en/referral/fdfc0e)(享手续费优惠)\n2. 访问[Aster API钱包](https://www.asterdex.com/en/api-wallet)\n3. 连接你的主钱包(MetaMask、WalletConnect等)\n4. 点击\"创建API钱包\"\n5. **立即保存这3项:**\n - 主钱包地址(User)\n - API钱包地址(Signer)\n - API钱包私钥(⚠️ 仅显示一次!)\n\n~~**步骤2**:为Aster配置`config.json`~~ *通过Web界面配置*\n\n```json\n{\n \"traders\": [\n {\n \"id\": \"aster_deepseek\",\n \"name\": \"Aster DeepSeek Trader\",\n \"enabled\": true,\n \"ai_model\": \"deepseek\",\n \"exchange\": \"aster\",\n\n \"aster_user\": \"0xYOUR_MAIN_WALLET_ADDRESS_HERE\",\n \"aster_signer\": \"0xYOUR_API_WALLET_SIGNER_ADDRESS_HERE\",\n \"aster_private_key\": \"your_api_wallet_private_key_without_0x_prefix\",\n\n \"deepseek_key\": \"sk-xxxxxxxxxxxxx\",\n \"initial_balance\": 1000.0,\n \"scan_interval_minutes\": 3\n }\n ],\n \"use_default_coins\": true,\n \"api_server_port\": 8080,\n \"leverage\": {\n \"btc_eth_leverage\": 5,\n \"altcoin_leverage\": 5\n }\n}\n```\n\n**关键配置字段:**\n- `\"exchange\": \"aster\"` - 设置交易所为Aster\n- `aster_user` - 你的主钱包地址\n- `aster_signer` - API钱包地址(来自步骤1)\n- `aster_private_key` - API钱包私钥(去掉`0x`前缀)\n\n**⚠️ 安全提示**:\n- API钱包与主钱包分离(额外的安全层)\n- 切勿分享API私钥\n- 你可以随时在[asterdex.com](https://www.asterdex.com/en/api-wallet)撤销API钱包访问\n\n---\n\n#### ⚔️ 专家模式:多Trader竞赛\n\n用于运行多个AI trader相互竞争:\n\n```json\n{\n \"traders\": [\n {\n \"id\": \"qwen_trader\",\n \"name\": \"Qwen AI Trader\",\n \"ai_model\": \"qwen\",\n \"binance_api_key\": \"YOUR_BINANCE_API_KEY_1\",\n \"binance_secret_key\": \"YOUR_BINANCE_SECRET_KEY_1\",\n \"use_qwen\": true,\n \"qwen_key\": \"sk-xxxxx\",\n \"deepseek_key\": \"\",\n \"initial_balance\": 1000.0,\n \"scan_interval_minutes\": 3\n },\n {\n \"id\": \"deepseek_trader\",\n \"name\": \"DeepSeek AI Trader\",\n \"ai_model\": \"deepseek\",\n \"binance_api_key\": \"YOUR_BINANCE_API_KEY_2\",\n \"binance_secret_key\": \"YOUR_BINANCE_SECRET_KEY_2\",\n \"use_qwen\": false,\n \"qwen_key\": \"\",\n \"deepseek_key\": \"sk-xxxxx\",\n \"initial_balance\": 1000.0,\n \"scan_interval_minutes\": 3\n }\n ],\n \"use_default_coins\": true,\n \"coin_pool_api_url\": \"\",\n \"oi_top_api_url\": \"\",\n \"api_server_port\": 8080\n}\n```\n\n**竞赛模式要求:**\n- 2个独立的币安合约账户(不同的API密钥)\n- 两种AI API密钥(Qwen + DeepSeek)\n- 更多测试资金(推荐:每个账户500+ USDT)\n\n---\n\n#### 📚 配置字段详解\n\n| 字段 | 说明 | 示例值 | 是否必填? |\n|-----|------|--------|-----------|\n| `id` | 此trader的唯一标识符 | `\"my_trader\"` | ✅ 是 |\n| `name` | 显示名称 | `\"我的AI交易员\"` | ✅ 是 |\n| `enabled` | 是否启用此trader<br>设为`false`可跳过启动 | `true` 或 `false` | ✅ 是 |\n| `ai_model` | 使用的AI提供商 | `\"deepseek\"` 或 `\"qwen\"` 或 `\"custom\"` | ✅ 是 |\n| `exchange` | 使用的交易所 | `\"binance\"` 或 `\"hyperliquid\"` 或 `\"aster\"` | ✅ 是 |\n| `binance_api_key` | 币安API密钥 | `\"abc123...\"` | 使用Binance时必填 |\n| `binance_secret_key` | 币安Secret密钥 | `\"xyz789...\"` | 使用Binance时必填 |\n| `hyperliquid_private_key` | Hyperliquid私钥<br>⚠️ 去掉`0x`前缀 | `\"your_key...\"` | 使用Hyperliquid时必填 |\n| `hyperliquid_wallet_addr` | Hyperliquid钱包地址 | `\"0xabc...\"` | 使用Hyperliquid时必填 |\n| `hyperliquid_testnet` | 是否使用测试网 | `true` 或 `false` | ❌ 否(默认false) |\n| `use_qwen` | 是否使用Qwen | `true` 或 `false` | ✅ 是 |\n| `deepseek_key` | DeepSeek API密钥 | `\"sk-xxx\"` | 使用DeepSeek时必填 |\n| `qwen_key` | Qwen API密钥 | `\"sk-xxx\"` | 使用Qwen时必填 |\n| `initial_balance` | 用于P/L计算的起始余额 | `1000.0` | ✅ 是 |\n| `scan_interval_minutes` | 决策频率(分钟) | `3`(建议3-5) | ✅ 是 |\n| **`leverage`** | **杠杆配置 (v2.0.3+)** | 见下文 | ✅ 是 |\n| `btc_eth_leverage` | BTC/ETH最大杠杆<br>⚠️ 子账户:≤5倍 | `5`(默认,安全)<br>`50`(主账户最大) | ✅ 是 |\n| `altcoin_leverage` | 山寨币最大杠杆<br>⚠️ 子账户:≤5倍 | `5`(默认,安全)<br>`20`(主账户最大) | ✅ 是 |\n| `use_default_coins` | 使用内置币种列表<br>**✨ 智能默认:`true`** (v2.0.2+)<br>未提供API时自动启用 | `true` 或省略 | ❌ 否<br>(可选,自动默认) |\n| `coin_pool_api_url` | 自定义币种池API<br>*仅当`use_default_coins: false`时需要* | `\"\"`(空) | ❌ 否 |\n| `oi_top_api_url` | 持仓量API<br>*可选补充数据* | `\"\"`(空) | ❌ 否 |\n| `api_server_port` | Web仪表板端口 | `8080` | ✅ 是 |\n\n**默认交易币种**(当 `use_default_coins: true` 时):\n- BTC、ETH、SOL、BNB、XRP、DOGE、ADA、HYPE\n\n---\n\n#### ⚙️ 杠杆配置 (v2.0.3+)\n\n**什么是杠杆配置?**\n\n杠杆设置控制AI每次交易可以使用的最大杠杆。这对于风险管理至关重要,特别是对于有杠杆限制的币安子账户。\n\n**配置格式:**\n\n```json\n\"leverage\": {\n \"btc_eth_leverage\": 5, // BTC和ETH的最大杠杆\n \"altcoin_leverage\": 5 // 所有其他币种的最大杠杆\n}\n```\n\n**⚠️ 重要:币安子账户限制**\n\n- **子账户**:币安限制为**≤5倍杠杆**\n- **主账户**:可使用最高20倍(山寨币)或50倍(BTC/ETH)\n- 如果您使用子账户并设置杠杆>5倍,交易将**失败**,错误信息:`Subaccounts are restricted from using leverage greater than 5x`\n\n**推荐设置:**\n\n| 账户类型 | BTC/ETH杠杆 | 山寨币杠杆 | 风险级别 |\n|---------|------------|-----------|---------|\n| **子账户** | `5` | `5` | ✅ 安全(默认) |\n| **主账户(保守)** | `10` | `10` | 🟡 中等 |\n| **主账户(激进)** | `20` | `15` | 🔴 高 |\n| **主账户(最大)** | `50` | `20` | 🔴🔴 非常高 |\n\n**示例:**\n\n**安全配置(子账户或保守):**\n```json\n\"leverage\": {\n \"btc_eth_leverage\": 5,\n \"altcoin_leverage\": 5\n}\n```\n\n**激进配置(仅主账户):**\n```json\n\"leverage\": {\n \"btc_eth_leverage\": 20,\n \"altcoin_leverage\": 15\n}\n```\n\n**AI如何使用杠杆:**\n\n- AI可以选择**从1倍到您配置的最大值之间的任何杠杆**\n- 例如,当`altcoin_leverage: 20`时,AI可能根据市场情况决定使用5倍、10倍或20倍\n- 配置设置的是**上限**,而不是固定值\n- AI在选择杠杆时会考虑波动性、风险回报比和账户余额\n\n---\n\n#### ⚠️ 重要:`use_default_coins` 字段\n\n**智能默认行为(v2.0.2+):**\n\n系统现在会自动默认为`use_default_coins: true`,如果:\n- 您在config.json中未包含此字段,或\n- 您将其设为`false`但未提供`coin_pool_api_url`\n\n这让新手更友好!您甚至可以完全省略此字段。\n\n**配置示例:**\n\n✅ **选项1:显式设置(推荐以保持清晰)**\n```json\n\"use_default_coins\": true,\n\"coin_pool_api_url\": \"\",\n\"oi_top_api_url\": \"\"\n```\n\n✅ **选项2:省略字段(自动使用默认币种)**\n```json\n// 完全不包含\"use_default_coins\"\n\"coin_pool_api_url\": \"\",\n\"oi_top_api_url\": \"\"\n```\n\n⚙️ **高级:使用外部API**\n```json\n\"use_default_coins\": false,\n\"coin_pool_api_url\": \"http://your-api.com/coins\",\n\"oi_top_api_url\": \"http://your-api.com/oi\"\n```\n\n---\n\n### 6. 运行系统\n\n#### 🚀 启动系统(2个步骤)\n\n系统有**2个部分**需要分别运行:\n1. **后端**(AI交易大脑 + API)\n2. **前端**(Web监控仪表板)\n\n---\n\n#### **步骤1:启动后端**\n\n打开终端并运行:\n\n```bash\n# 构建程序(首次运行或代码更改后)\ngo build -o nofx\n\n# 启动后端\n./nofx\n```\n\n**您应该看到:**\n\n```\n🚀 启动自动交易系统...\n✓ Trader [my_trader] 已初始化\n✓ API服务器启动在端口 8080\n📊 开始交易监控...\n```\n\n**⚠️ 如果看到错误:**\n\n| 错误信息 | 解决方案 |\n|---------|---------|\n| `invalid API key` | ~~检查config.json中的币安API密钥~~ *检查Web界面中的API密钥* |\n| `TA-Lib not found` | 运行`brew install ta-lib`(macOS) |\n| `port 8080 already in use` | ~~修改config.json中的`api_server_port`~~ *修改.env文件中的`API_PORT`* |\n| `DeepSeek API error` | 验证DeepSeek API密钥和余额 |\n\n**✅ 后端运行正常的标志:**\n- 无错误信息\n- 出现\"开始交易监控...\"\n- 系统显示账户余额\n- 保持此终端窗口打开!\n\n---\n\n#### **步骤2:启动前端**\n\n打开**新的终端窗口**(保持第一个运行!),然后:\n\n```bash\ncd web\nnpm run dev\n```\n\n**您应该看到:**\n\n```\nVITE v5.x.x ready in xxx ms\n\n➜ Local: http://localhost:3000/\n➜ Network: use --host to expose\n```\n\n**✅ 前端运行正常的标志:**\n- \"Local: http://localhost:3000/\"消息\n- 无错误信息\n- 也保持此终端窗口打开!\n\n---\n\n#### **步骤3:访问仪表板**\n\n在Web浏览器中访问:\n\n**🌐 http://localhost:3000**\n\n**您将看到:**\n- 📊 实时账户余额\n- 📈 持仓(如果有)\n- 🤖 AI决策日志\n- 📉 净值曲线图\n\n**首次使用提示:**\n- 首次AI决策可能需要3-5分钟\n- 初始决策可能显示\"观望\"- 这是正常的\n- AI需要先分析市场状况\n\n---\n\n### 7. 监控系统\n\n**需要关注的内容:**\n\n✅ **健康系统标志:**\n- 后端终端每3-5分钟显示决策周期\n- 无持续错误信息\n- 账户余额更新\n- Web仪表板自动刷新\n\n⚠️ **警告标志:**\n- 重复的API错误\n- 10分钟以上无决策\n- 余额快速下降\n\n**检查系统状态:**\n\n```bash\n# 在新终端窗口中\ncurl http://localhost:8080/api/health\n```\n\n应返回:`{\"status\":\"ok\"}`\n\n---\n\n### 8. 停止系统\n\n**优雅关闭(推荐):**\n\n1. 转到**后端终端**(第一个)\n2. 按`Ctrl+C`\n3. 等待\"系统已停止\"消息\n4. 转到**前端终端**(第二个)\n5. 按`Ctrl+C`\n\n**⚠️ 重要:**\n- 始终先停止后端\n- 关闭终端前等待确认\n- 不要强制退出(不要直接关闭终端)\n\n---\n\n## 📖 AI决策流程\n\n每个决策周期(默认3分钟),系统按以下流程运行:\n\n### 步骤1: 📊 分析历史表现(最近20个周期)\n- ✓ 计算整体胜率、平均盈利、盈亏比\n- ✓ 统计各币种表现(胜率、平均USDT盈亏)\n- ✓ 识别最佳/最差币种\n- ✓ 列出最近5笔交易详情(含准确盈亏金额)\n- ✓ 计算夏普比率衡量风险调整后收益\n- 📌 **新增 (v2.0.2)**: 考虑杠杆的准确USDT盈亏计算\n\n**↓**\n\n### 步骤2: 💰 获取账户状态\n- 账户净值、可用余额、未实现盈亏\n- 持仓数量、总盈亏(已实现+未实现)\n- 保证金使用率(current/maximum)\n- 风险评估指标\n\n**↓**\n\n### 步骤3: 🔍 分析现有持仓(如果有)\n- 获取每个持仓的市场数据(3分钟+4小时K线)\n- 计算技术指标(RSI、MACD、EMA)\n- 显示持仓时长(例如\"持仓时长2小时15分钟\")\n- AI判断是否需要平仓(止盈、止损或调整)\n- 📌 **新增 (v2.0.2)**: 追踪持仓时长帮助AI决策\n\n**↓**\n\n### 步骤4: 🎯 评估新机会(候选币种池)\n- 获取币种池(2种模式):\n - 🌟 **默认模式**: BTC、ETH、SOL、BNB、XRP等\n - ⚙️ **高级模式**: AI500(前20) + OI Top(前20)\n- 合并去重,过滤低流动性币种(持仓量<15M USD)\n- 批量获取市场数据和技术指标\n- 为每个候选币种准备完整的原始数据序列\n\n**↓**\n\n### 步骤5: 🧠 AI综合决策\n- 查看历史反馈(胜率、盈亏比、最佳/最差币种)\n- 接收所有原始序列数据(K线、指标、持仓量)\n- Chain of Thought 思维链分析\n- 输出决策:平仓/开仓/持有/观望\n- 包含杠杆、仓位、止损、止盈参数\n- 📌 **新增 (v2.0.2)**: AI可自由分析原始序列,不受预定义指标限制\n\n**↓**\n\n### 步骤6: ⚡ 执行交易\n- 优先级排序:先平仓,再开仓\n- 精度自动适配(LOT_SIZE规则)\n- 防止仓位叠加(同币种同方向拒绝开仓)\n- 平仓后自动取消所有挂单\n- 记录开仓时间用于持仓时长追踪\n- 📌 追踪持仓开仓时间\n\n**↓**\n\n### 步骤7: 📝 记录日志\n- 保存完整决策记录到 `decision_logs/`\n- 包含思维链、决策JSON、账户快照、执行结果\n- 存储完整持仓数据(数量、杠杆、开/平仓时间)\n- 使用 `symbol_side` 键值防止多空冲突\n- 📌 **新增 (v2.0.2)**: 防止多空持仓冲突,考虑数量+杠杆\n\n**↓**\n\n**🔄 (每3-5分钟重复一次)**\n\n### v2.0.2的核心改进\n\n**📌 持仓时长追踪:**\n- 系统现在追踪每个持仓已持有多长时间\n- 在用户提示中显示:\"持仓时长2小时15分钟\"\n- 帮助AI更好地判断何时退出仓位\n\n**📌 准确的盈亏计算:**\n- 之前:只显示百分比(100U@5% = 1000U@5% = 都显示\"5.0\")\n- 现在:真实USDT盈亏 = 仓位价值 × 价格变化% × 杠杆倍数\n- 示例:1000 USDT × 5% × 20倍 = 1000 USDT实际盈利\n\n**📌 增强的AI自由度:**\n- AI可以自由分析所有原始序列数据\n- 不再局限于预定义的指标组合\n- 可以执行自己的趋势分析、支撑位/阻力位计算\n\n**📌 改进的持仓追踪:**\n- 使用`symbol_side`键值(例如\"BTCUSDT_long\")\n- 防止同时持有多空仓时的冲突\n- 存储完整数据:数量、杠杆、开/平仓时间\n\n---\n\n## 🧠 AI自我学习示例\n\n### 历史反馈(Prompt中自动添加)\n\n```markdown\n## 📊 历史表现反馈\n\n### 整体表现\n- **总交易数**: 15 笔 (盈利: 8 | 亏损: 7)\n- **胜率**: 53.3%\n- **平均盈利**: +3.2% | 平均亏损: -2.1%\n- **盈亏比**: 1.52:1\n\n### 最近交易\n1. BTCUSDT LONG: 95000.0000 → 97500.0000 = +2.63% ✓\n2. ETHUSDT SHORT: 3500.0000 → 3450.0000 = +1.43% ✓\n3. SOLUSDT LONG: 185.0000 → 180.0000 = -2.70% ✗\n4. BNBUSDT LONG: 610.0000 → 625.0000 = +2.46% ✓\n5. ADAUSDT LONG: 0.8500 → 0.8300 = -2.35% ✗\n\n### 币种表现\n- **最佳**: BTCUSDT (胜率75%, 平均+2.5%)\n- **最差**: SOLUSDT (胜率25%, 平均-1.8%)\n```\n\n### AI如何使用反馈\n\n1. **避免连续亏损币种**: 看到SOLUSDT连续3次止损,AI会避开或更谨慎\n2. **强化成功策略**: BTC突破做多胜率75%,AI会继续这个模式\n3. **动态调整风格**: 胜率<40%时变保守,盈亏比>2时保持激进\n4. **识别市场环境**: 连续亏损可能说明市场震荡,减少交易频率\n\n---\n\n## 📊 Web界面功能\n\n### 1. 竞赛页面(Competition)\n\n- **🏆 排行榜**: 实时收益率排名,金色边框突出显示领先者\n- **📈 性能对比图**: 双AI收益率曲线对比(紫色vs蓝色)\n- **⚔️ Head-to-Head**: 直接对比,显示领先差距\n- **实时数据**: 总净值、盈亏%、持仓数、保证金使用率\n\n### 2. 详情页面(Details)\n\n- **账户净值曲线**: 历史走势图(美元/百分比切换)\n- **统计信息**: 总周期、成功/失败、开仓/平仓统计\n- **持仓表格**: 所有持仓详情(入场价、当前价、盈亏%、强平价)\n- **AI决策日志**: 最近决策记录(可展开思维链)\n\n### 3. 实时更新\n\n- 系统状态、账户信息、持仓列表:**每5秒刷新**\n- 决策日志、统计信息:**每10秒刷新**\n- 收益率图表:**每10秒刷新**\n\n---\n\n## 🎛️ API接口\n\n### 竞赛相关\n\n```bash\nGET /api/competition # 竞赛排行榜(所有trader)\nGET /api/traders # Trader列表\n```\n\n### 单Trader相关\n\n```bash\nGET /api/status?trader_id=xxx # 系统状态\nGET /api/account?trader_id=xxx # 账户信息\nGET /api/positions?trader_id=xxx # 持仓列表\nGET /api/equity-history?trader_id=xxx # 净值历史(图表数据)\nGET /api/decisions/latest?trader_id=xxx # 最新5条决策\nGET /api/statistics?trader_id=xxx # 统计信息\n```\n\n### 系统接口\n\n```bash\nGET /api/health # 健康检查\nGET /api/config # 系统配置\n```\n\n---\n\n## 📝 决策日志格式\n\n每次AI决策都会生成详细的JSON日志:\n\n### 日志文件路径\n```\ndecision_logs/\n├── qwen_trader/\n│ └── decision_20251028_153042_cycle15.json\n└── deepseek_trader/\n └── decision_20251028_153045_cycle15.json\n```\n\n### 日志内容示例\n\n```json\n{\n \"timestamp\": \"2025-10-28T15:30:42+08:00\",\n \"cycle_number\": 15,\n \"cot_trace\": \"当前持仓:ETHUSDT多头盈利+2.3%,趋势良好继续持有...\",\n \"decision_json\": \"[{\\\"symbol\\\":\\\"BTCUSDT\\\",\\\"action\\\":\\\"open_long\\\"...}]\",\n \"account_state\": {\n \"total_balance\": 1045.80,\n \"available_balance\": 823.40,\n \"position_count\": 3,\n \"margin_used_pct\": 21.3\n },\n \"positions\": [...],\n \"candidate_coins\": [\"BTCUSDT\", \"ETHUSDT\", ...],\n \"decisions\": [\n {\n \"action\": \"open_long\",\n \"symbol\": \"BTCUSDT\",\n \"quantity\": 0.015,\n \"leverage\": 50,\n \"price\": 95800.0,\n \"order_id\": 123456789,\n \"success\": true\n }\n ],\n \"execution_log\": [\"✓ BTCUSDT open_long 成功\"],\n \"success\": true\n}\n```\n\n---\n\n## 🔧 风险控制详解\n\n### 单币种仓位限制\n\n| 币种类型 | 仓位价值上限 | 杠杆 | 保证金占用 | 示例(1000U账户) |\n|---------|-------------|------|-----------|------------------|\n| 山寨币 | 1.5倍净值 | 20x | 7.5% | 最多开1500U仓位 = 75U保证金 |\n| BTC/ETH | 10倍净值 | 50x | 20% | 最多开10000U仓位 = 200U保证金 |\n\n### 为什么这样设计?\n\n1. **高杠杆 + 小仓位 = 分散风险**\n - 20倍杠杆,1500U仓位,只需75U保证金\n - 可以同时开10+个小仓位,分散单币种风险\n\n2. **单币种风险可控**\n - 山寨币仓位≤1.5倍净值,5%反向波动 = 7.5%损失\n - BTC仓位≤10倍净值,2%反向波动 = 20%损失\n\n3. **不限制总保证金使用率**\n - AI根据市场机会自主决策保证金使用率\n - 上限90%,但不强制满仓\n - 有好机会就开仓,没机会就观望\n\n### 防止过度交易\n\n- **同币种同方向不允许重复开仓**: 防止AI连续开同一个仓位导致超限\n- **先平仓后开仓**: 换仓时确保先释放保证金\n- **止损止盈强制检查**: 风险回报比≥1:2\n\n---\n\n## ⚠️ 重要风险提示\n\n### 交易风险\n\n1. **加密货币市场波动极大**,AI决策不保证盈利\n2. **合约交易使用杠杆**,亏损可能超过本金\n3. **市场极端行情**下可能出现爆仓风险\n4. **资金费率**可能影响持仓成本\n5. **流动性风险**:某些币种可能出现滑点\n\n### 技术风险\n\n1. **网络延迟**可能导致价格滑点\n2. **API限流**可能影响交易执行\n3. **AI API超时**可能导致决策失败\n4. **系统Bug**可能引发意外行为\n\n### 使用建议\n\n✅ **建议做法**\n- 仅使用可承受损失的资金测试\n- 从小额资金开始(建议100-500 USDT)\n- 定期检查系统运行状态\n- 监控账户余额变化\n- 分析AI决策日志,理解策略\n\n❌ **不建议做法**\n- 投入全部资金或借贷资金\n- 长时间无人监控运行\n- 盲目信任AI决策\n- 在不理解系统的情况下使用\n- 在市场极端波动时运行\n\n---\n\n## 🛠️ 常见问题\n\n### 1. 编译错误:TA-Lib not found\n\n**解决**: 安装TA-Lib库\n```bash\n# macOS\nbrew install ta-lib\n\n# Ubuntu\nsudo apt-get install libta-lib0-dev\n```\n\n### 2. 精度错误:Precision is over the maximum\n\n**解决**: 系统已自动处理精度,从Binance获取LOT_SIZE。如仍报错,检查网络连接。\n\n### 3. AI API超时\n\n**解决**:\n- 检查API密钥是否正确\n- 检查网络连接(可能需要代理)\n- 系统超时时间已设置为120秒\n\n### 4. 前端无法连接后端\n\n**解决**:\n- 确保后端正在运行(http://localhost:8080)\n- 检查端口8080是否被占用\n- 查看浏览器控制台错误信息\n\n### 5. 币种池API失败\n\n**解决**:\n- 币种池API是可选的\n- 如果API失败,系统会使用默认主流币种(BTC、ETH等)\n- ~~检查config.json中的API URL和auth参数~~ *检查Web界面中的配置*\n\n---\n\n## 📈 性能优化建议\n\n1. **合理设置决策周期**: 建议3-5分钟,避免过度交易\n2. **控制候选币种数量**: 系统默认分析AI500前20 + OI Top前20\n3. **定期清理日志**: 避免占用过多磁盘空间\n4. **监控API调用次数**: 避免触发Binance限流(权重限制)\n5. **小额资金测试**: 先用100-500 USDT测试策略有效性\n\n---\n\n## 🔄 更新日志\n\n📖 **详细的版本历史和更新,请查看:**\n\n- **中文版:** [CHANGELOG.zh-CN.md](../../../CHANGELOG.zh-CN.md)\n- **English:** [CHANGELOG.md](../../../CHANGELOG.md)\n\n**最新版本:** v3.0.0 (2025-10-30) - 重大架构变革\n\n**近期亮点:**\n- 🚀 完整系统重新设计,基于Web的配置平台\n- 🗄️ 数据库驱动架构(SQLite)\n- 🎨 无需编辑JSON - 全部通过Web界面配置\n- 🔧 AI模型与交易所任意组合\n- 📊 增强的API层,提供全面的端点\n\n---\n\n## 📄 开源协议\n\n本项目采用 **GNU Affero 通用公共许可证 v3.0 (AGPL-3.0)** - 详见 [LICENSE](LICENSE) 文件\n\n**这意味着什么:**\n- ✅ 你可以使用、修改和分发此软件\n- ✅ 你必须公开你修改版本的源代码\n- ✅ 如果你在服务器上运行修改版本,必须向用户提供源代码\n- ✅ 所有衍生作品也必须使用 AGPL-3.0 许可证\n\n如需商业许可或有疑问,请联系维护者。\n\n---\n\n## 🤝 贡献\n\n欢迎提交Issue和Pull Request!\n\n### 开发指南\n\n1. Fork项目\n2. 创建功能分支 (`git checkout -b feature/AmazingFeature`)\n3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)\n4. 推送到分支 (`git push origin feature/AmazingFeature`)\n5. 开启Pull Request\n\n---\n\n## 📬 联系方式\n\n### 🐛 技术支持\n- **GitHub Issues**: [提交Issue](https://github.com/tinkle-community/nofx/issues)\n- **开发者社区**: [Telegram群组](https://t.me/nofx_dev_community)\n\n---\n\n## 🙏 致谢\n\n- [Binance API](https://binance-docs.github.io/apidocs/futures/cn/) - 币安合约API\n- [DeepSeek](https://platform.deepseek.com/) - DeepSeek AI API\n- [Qwen](https://dashscope.console.aliyun.com/) - 阿里云通义千问\n- [TA-Lib](https://ta-lib.org/) - 技术指标库\n- [Recharts](https://recharts.org/) - React图表库\n\n---\n\n**最后更新**: 2025-10-29 (v2.0.2)\n\n**⚡ 用AI的力量,探索量化交易的可能性!**\n\n---\n\n## ⭐ Star History\n\n[](https://star-history.com/#tinkle-community/nofx&Date)\n"}}, "docs/architecture/README.md": {"d30b26b6f49d40172b35f66511f488accffa16d1": {"t": 1785747252.6881154, "n": 14364, "h": "58d70f8ec30eae86", "c": "# 🏗️ NOFX Architecture Documentation\n\n**Language:** [English](README.md) | [中文](README.zh-CN.md)\n\nTechnical documentation for developers who want to understand NOFX internals.\n\n---\n\n## 📋 Overview\n\nNOFX is a full-stack AI trading platform with:\n- **Backend:** Go (Gin framework, SQLite)\n- **Frontend:** React/TypeScript (Vite, TailwindCSS)\n- **Architecture:** Microservice-inspired modular design\n\n---\n\n## 📁 Project Structure\n\n```\nnofx/\n├── main.go # Program entry (multi-trader manager)\n├── config.json # ~~Multi-trader config~~ (Now via web interface)\n├── trading.db # SQLite database (traders, models, exchanges)\n│\n├── api/ # HTTP API service\n│ └── server.go # Gin framework, RESTful API\n│\n├── trader/ # Trading core\n│ ├── auto_trader.go # Auto trading main controller\n│ ├── interface.go # Unified trader interface\n│ ├── binance_futures.go # Binance API wrapper\n│ ├── hyperliquid_trader.go # Hyperliquid DEX wrapper\n│ └── aster_trader.go # Aster DEX wrapper\n│\n├── manager/ # Multi-trader management\n│ └── trader_manager.go # Manages multiple trader instances\n│\n├── config/ # Configuration & database\n│ └── database.go # SQLite operations and schema\n│\n├── auth/ # Authentication\n│ └── jwt.go # JWT token management & 2FA\n│\n├── mcp/ # Model Context Protocol - AI communication\n│ └── client.go # AI API client (DeepSeek/Qwen/Custom)\n│\n├── decision/ # AI decision engine\n│ ├── engine.go # Decision logic with historical feedback\n│ └── prompt_manager.go # Prompt template system\n│\n├── market/ # Market data fetching\n│ └── data.go # Market data & technical indicators (TA-Lib)\n│ └── api_client.go # Market data acquisition API\n│ └── websocket_client.go # Market data acquisition WebSocket interface\n│ └── combined_streams.go # Market data acquisition: Combined streaming (single link to subscribe to multiple cryptocurrencies)\n│ └── monitor.go # Market data cache\n│ └── types.go # market structure\n\n├── pool/ # Coin pool management\n│ └── coin_pool.go # AI500 + OI Top merged pool\n│\n├── logger/ # Logging system\n│ └── decision_logger.go # Decision recording + performance analysis\n│\n├── decision_logs/ # Decision log storage (JSON files)\n│ ├── {trader_id}/ # Per-trader logs\n│ └── {timestamp}.json # Individual decisions\n│\n└── web/ # React frontend\n ├── src/\n │ ├── components/ # React components\n │ │ ├── EquityChart.tsx # Equity curve chart\n │ │ ├── ComparisonChart.tsx # Multi-AI comparison chart\n │ │ └── CompetitionPage.tsx # Competition leaderboard\n │ ├── lib/api.ts # API call wrapper\n │ ├── types/index.ts # TypeScript types\n │ ├── stores/ # Zustand state management\n │ ├── index.css # Binance-style CSS\n │ └── App.tsx # Main app\n ├── package.json # Frontend dependencies\n └── vite.config.ts # Vite configuration\n```\n\n---\n\n## 🔧 Core Dependencies\n\n### Backend (Go)\n\n| Package | Purpose | Version |\n|---------|---------|---------|\n| `github.com/gin-gonic/gin` | HTTP API framework | v1.9+ |\n| `github.com/adshao/go-binance/v2` | Binance API client | v2.4+ |\n| `github.com/markcheno/go-talib` | Technical indicators (TA-Lib) | Latest |\n| `github.com/mattn/go-sqlite3` | SQLite database driver | v1.14+ |\n| `github.com/golang-jwt/jwt/v5` | JWT authentication | v5.0+ |\n| `github.com/pquerna/otp` | 2FA/TOTP support | v1.4+ |\n| `golang.org/x/crypto` | Password hashing (bcrypt) | Latest |\n\n### Frontend (React + TypeScript)\n\n| Package | Purpose | Version |\n|---------|---------|---------|\n| `react` + `react-dom` | UI framework | 18.3+ |\n| `typescript` | Type safety | 5.8+ |\n| `vite` | Build tool | 6.0+ |\n| `recharts` | Charts (equity, comparison) | 2.15+ |\n| `swr` | Data fetching & caching | 2.2+ |\n| `zustand` | State management | 5.0+ |\n| `tailwindcss` | CSS framework | 3.4+ |\n| `lucide-react` | Icon library | Latest |\n\n---\n\n## 🗂️ System Architecture\n\n### High-Level Overview\n\n```\n┌──────────────────────────────────────────────────────────────────┐\n│ PRESENTATION LAYER │\n│ React SPA (Vite + TypeScript + TailwindCSS) │\n│ - Competition dashboard, trader management UI │\n│ - Real-time charts (Recharts), authentication pages │\n└──────────────────────────────────────────────────────────────────┘\n ↓ HTTP/JSON API\n┌──────────────────────────────────────────────────────────────────┐\n│ API LAYER (Gin Router) │\n│ /api/traders, /api/status, /api/positions, /api/decisions │\n│ Authentication middleware (JWT), CORS handling │\n└──────────────────────────────────────────────────────────────────┘\n ↓\n┌──────────────────────────────────────────────────────────────────┐\n│ BUSINESS LOGIC LAYER │\n│ ┌──────────────────┐ ┌──────────────────┐ ┌────────────────┐ │\n│ │ TraderManager │ │ DecisionEngine │ │ MarketData │ │\n│ │ - Multi-trader │ │ - AI reasoning │ │ - K-lines │ │\n│ │ orchestration │ │ - Risk control │ │ - Indicators │ │\n│ └──────────────────┘ └──────────────────┘ └────────────────┘ │\n└──────────────────────────────────────────────────────────────────┘\n ↓\n┌──────────────────────────────────────────────────────────────────┐\n│ DATA ACCESS LAYER │\n│ ┌──────────────┐ ┌──────────────┐ ┌────────────────────┐ │\n│ │ SQLite DB │ │ File Logger │ │ External APIs │ │\n│ │ - Traders │ │ - Decisions │ │ - Binance │ │\n│ │ - Models │ │ - Performance│ │ - Hyperliquid │ │\n│ │ - Exchanges │ │ analysis │ │ - Aster │ │\n│ └──────────────┘ └──────────────┘ └────────────────────┘ │\n└──────────────────────────────────────────────────────────────────┘\n```\n\n### Component Diagram\n\n*(Coming soon: detailed component interaction diagram)*\n\n---\n\n## 📚 Core Modules\n\n### 1. Trader System (`trader/`)\n\n**Purpose:** Trading execution layer with multi-exchange support\n\n**Key Files:**\n- `auto_trader.go` - Main trading orchestrator (100+ lines)\n- `interface.go` - Unified trader interface\n- `binance_futures.go` - Binance API wrapper\n- `hyperliquid_trader.go` - Hyperliquid DEX wrapper\n- `aster_trader.go` - Aster DEX wrapper\n\n**Design Pattern:** Strategy pattern with interface-based abstraction\n\n**Example:**\n```go\ntype ExchangeClient interface {\n GetAccount() (*AccountInfo, error)\n GetPositions() ([]*Position, error)\n CreateOrder(*OrderParams) (*Order, error)\n // ... more methods\n}\n```\n\n---\n\n### 2. Decision Engine (`decision/`)\n\n**Purpose:** AI-powered trading decision making\n\n**Key Files:**\n- `engine.go` - Decision logic with historical feedback\n- `prompt_manager.go` - Template system for AI prompts\n\n**Features:**\n- Chain-of-Thought reasoning\n- Historical performance analysis\n- Risk-aware decision making\n- Multi-model support (DeepSeek, Qwen, custom)\n\n**Flow:**\n```\nHistorical Data → Prompt Generation → AI API Call →\nDecision Parsing → Risk Validation → Execution\n```\n\n---\n\n### 3. Market Data System (`market/`)\n\n**Purpose:** Fetch and analyze market data\n\n**Key Files:**\n- `data.go` - Market data fetching and technical indicators\n\n**Features:**\n- Multi-timeframe K-line data (3min, 4hour)\n- Technical indicators via TA-Lib:\n - EMA (20, 50)\n - MACD\n - RSI (7, 14)\n - ATR (volatility)\n- Open Interest tracking\n\n---\n\n### 4. Manager (`manager/`)\n\n**Purpose:** Multi-trader orchestration\n\n**Key Files:**\n- `trader_manager.go` - Manages multiple trader instances\n\n**Responsibilities:**\n- Trader lifecycle (start, stop, restart)\n- Resource allocation\n- Concurrent execution coordination\n\n---\n\n### 5. API Server (`api/`)\n\n**Purpose:** HTTP API for frontend communication\n\n**Key Files:**\n- `server.go` - Gin framework RESTful API\n\n**Endpoints:**\n```\nGET /api/traders # List all traders\nPOST /api/traders # Create trader\nPOST /api/traders/:id/start # Start trader\nGET /api/status # System status\nGET /api/positions # Current positions\nGET /api/decisions/latest # Recent decisions\n```\n\n---\n\n### 6. Database Layer (`config/`)\n\n**Purpose:** SQLite data persistence\n\n**Key Files:**\n- `database.go` - Database operations and schema\n\n**Tables:**\n- `users` - User accounts (with 2FA support)\n- `ai_models` - AI model configurations\n- `exchanges` - Exchange credentials\n- `traders` - Trader instances\n- `equity_history` - Performance tracking\n- `system_config` - Application settings\n\n---\n\n### 7. Authentication (`auth/`)\n\n**Purpose:** User authentication and authorization\n\n**Features:**\n- JWT token-based auth\n- 2FA with TOTP (Google Authenticator)\n- Bcrypt password hashing\n- Admin mode (simplified single-user)\n\n---\n\n## 🔄 Request Flow Examples\n\n### Example 1: Create New Trader\n\n```\nUser Action (Frontend)\n ↓\nPOST /api/traders\n ↓\nAPI Server (auth middleware)\n ↓\nDatabase.CreateTrader()\n ↓\nTraderManager.StartTrader()\n ↓\nAutoTrader.Run() → goroutine\n ↓\nResponse: {trader_id, status}\n```\n\n### Example 2: Trading Decision Cycle\n\n```\nAutoTrader (every 3-5 min)\n ↓\n1. FetchAccountStatus()\n ↓\n2. GetOpenPositions()\n ↓\n3. FetchMarketData() → TA-Lib indicators\n ↓\n4. AnalyzeHistory() → last 20 trades\n ↓\n5. GeneratePrompt() → full context\n ↓\n6. CallAI() → DeepSeek/Qwen\n ↓\n7. ParseDecision() → structured output\n ↓\n8. ValidateRisk() → position limits, margin\n ↓\n9. ExecuteOrders() → exchange API\n ↓\n10. LogDecision() → JSON file + database\n```\n\n---\n\n## 📊 Data Flow\n\n### Market Data Flow\n\n```\nExchange API\n ↓\nmarket.FetchKlines()\n ↓\nTA-Lib.Calculate(EMA, MACD, RSI)\n ↓\nDecisionEngine (as context)\n ↓\nAI Model (reasoning)\n```\n\n### Decision Logging Flow\n\n```\nAI Response\n ↓\ndecision_logger.go\n ↓\nJSON file: decision_logs/{trader_id}/{timestamp}.json\n ↓\nDatabase: performance tracking\n ↓\nFrontend: /api/decisions/latest\n```\n\n---\n\n## 🗄️ Database Schema\n\n### Core Tables\n\n**users**\n```sql\n- id (INTEGER PRIMARY KEY)\n- username (TEXT UNIQUE)\n- password_hash (TEXT)\n- totp_secret (TEXT)\n- is_admin (BOOLEAN)\n- created_at (DATETIME)\n```\n\n**ai_models**\n```sql\n- id (INTEGER PRIMARY KEY)\n- name (TEXT)\n- model_type (TEXT) -- deepseek, qwen, custom\n- api_key (TEXT)\n- api_url (TEXT)\n- enabled (BOOLEAN)\n```\n\n**traders**\n```sql\n- id (TEXT PRIMARY KEY)\n- name (TEXT)\n- ai_model_id (INTEGER FK)\n- exchange_id (INTEGER FK)\n- initial_balance (REAL)\n- current_equity (REAL)\n- status (TEXT) -- running, stopped\n- created_at (DATETIME)\n```\n\n*(More details: database-schema.md - coming soon)*\n\n---\n\n## 🔌 API Reference\n\n### Authentication\n\n**POST /api/auth/login**\n```json\nRequest: {\n \"username\": \"string\",\n \"password\": \"string\",\n \"totp_code\": \"string\" // optional\n}\n\nResponse: {\n \"token\": \"jwt_token\",\n \"user\": {...}\n}\n```\n\n### Trader Management\n\n**GET /api/traders**\n```json\nResponse: {\n \"traders\": [\n {\n \"id\": \"string\",\n \"name\": \"string\",\n \"status\": \"running|stopped\",\n \"balance\": 1000.0,\n \"roi\": 5.2\n }\n ]\n}\n```\n\n*(Full API reference: api-reference.md - coming soon)*\n\n---\n\n## 🧪 Testing Architecture\n\n### Current State\n- ⚠️ No unit tests yet\n- ⚠️ Manual testing only\n- ⚠️ Testnet verification\n\n### Planned Testing Strategy\n\n**Unit Tests (Priority 1)**\n```\ntrader/binance_futures_test.go\n- Mock API responses\n- Test precision handling\n- Validate order construction\n```\n\n**Integration Tests (Priority 2)**\n```\n- End-to-end trading flow (testnet)\n- Multi-trader scenarios\n- Database operations\n```\n\n**Frontend Tests (Priority 3)**\n```\n- Component tests (Vitest + React Testing Library)\n- API integration tests\n- E2E tests (Playwright)\n```\n\n*(Testing guide: testing-guide.md - coming soon)*\n\n---\n\n## 🔧 Development Tools\n\n### Build & Run\n\n```bash\n# Backend\ngo build -o nofx\n./nofx\n\n# Frontend\ncd web\nnpm run dev\n\n# Docker\ndocker compose up --build\n```\n\n### Code Quality\n\n```bash\n# Format Go code\ngo fmt ./...\n\n# Lint (if configured)\ngolangci-lint run\n\n# Type check TypeScript\ncd web && npm run build\n```\n\n---\n\n## 📈 Performance Considerations\n\n### Backend\n- **Concurrency:** Each trader runs in separate goroutine\n- **Database:** SQLite (good for <100 traders)\n- **API Rate Limits:** Handled per exchange\n- **Memory:** ~50-100MB per trader\n\n### Frontend\n- **Data Fetching:** SWR with 5-10s polling\n- **State:** Zustand (lightweight)\n- **Bundle Size:** ~500KB (gzipped)\n\n---\n\n## 🔮 Future Architecture Plans\n\n### Planned Improvements\n\n1. **Microservices Split** (if scaling needed)\n - Separate decision engine service\n - Market data service\n - Execution service\n\n2. **Database Migration**\n - Mysql for production (>100 traders)\n - Redis for caching\n\n3. **Event-Driven Architecture**\n - WebSocket for real-time updates\n - Message queue (RabbitMQ/NATS)\n\n4. **Kubernetes Deployment**\n - Helm charts\n - Auto-scaling\n - High availability\n\n---\n\n## 🆘 For Developers\n\n**Want to contribute?**\n- Read [Contributing Guide](../../CONTRIBUTING.md)\n- Check [Open Issues](https://github.com/tinkle-community/nofx/issues)\n- Join [Telegram Community](https://t.me/nofx_dev_community)\n\n**Need clarification?**\n- Open a [GitHub Discussion](https://github.com/tinkle-community/nofx/discussions)\n- Ask in Telegram\n\n---\n\n## 📚 Related Documentation\n\n- [Getting Started](../getting-started/README.md) - Setup and deployment\n- [Contributing](../../CONTRIBUTING.md) - How to contribute\n- [Community](../community/README.md) - Bounties and recognition\n\n---\n\n[← Back to Documentation Home](../README.md)\n"}, "103c47826174658716d027f65a0bf165b93f4805": {"t": 1785758354.6035528, "n": 14364, "h": "58d70f8ec30eae86", "c": "# 🏗️ NOFX Architecture Documentation\n\n**Language:** [English](README.md) | [中文](README.zh-CN.md)\n\nTechnical documentation for developers who want to understand NOFX internals.\n\n---\n\n## 📋 Overview\n\nNOFX is a full-stack AI trading platform with:\n- **Backend:** Go (Gin framework, SQLite)\n- **Frontend:** React/TypeScript (Vite, TailwindCSS)\n- **Architecture:** Microservice-inspired modular design\n\n---\n\n## 📁 Project Structure\n\n```\nnofx/\n├── main.go # Program entry (multi-trader manager)\n├── config.json # ~~Multi-trader config~~ (Now via web interface)\n├── trading.db # SQLite database (traders, models, exchanges)\n│\n├── api/ # HTTP API service\n│ └── server.go # Gin framework, RESTful API\n│\n├── trader/ # Trading core\n│ ├── auto_trader.go # Auto trading main controller\n│ ├── interface.go # Unified trader interface\n│ ├── binance_futures.go # Binance API wrapper\n│ ├── hyperliquid_trader.go # Hyperliquid DEX wrapper\n│ └── aster_trader.go # Aster DEX wrapper\n│\n├── manager/ # Multi-trader management\n│ └── trader_manager.go # Manages multiple trader instances\n│\n├── config/ # Configuration & database\n│ └── database.go # SQLite operations and schema\n│\n├── auth/ # Authentication\n│ └── jwt.go # JWT token management & 2FA\n│\n├── mcp/ # Model Context Protocol - AI communication\n│ └── client.go # AI API client (DeepSeek/Qwen/Custom)\n│\n├── decision/ # AI decision engine\n│ ├── engine.go # Decision logic with historical feedback\n│ └── prompt_manager.go # Prompt template system\n│\n├── market/ # Market data fetching\n│ └── data.go # Market data & technical indicators (TA-Lib)\n│ └── api_client.go # Market data acquisition API\n│ └── websocket_client.go # Market data acquisition WebSocket interface\n│ └── combined_streams.go # Market data acquisition: Combined streaming (single link to subscribe to multiple cryptocurrencies)\n│ └── monitor.go # Market data cache\n│ └── types.go # market structure\n\n├── pool/ # Coin pool management\n│ └── coin_pool.go # AI500 + OI Top merged pool\n│\n├── logger/ # Logging system\n│ └── decision_logger.go # Decision recording + performance analysis\n│\n├── decision_logs/ # Decision log storage (JSON files)\n│ ├── {trader_id}/ # Per-trader logs\n│ └── {timestamp}.json # Individual decisions\n│\n└── web/ # React frontend\n ├── src/\n │ ├── components/ # React components\n │ │ ├── EquityChart.tsx # Equity curve chart\n │ │ ├── ComparisonChart.tsx # Multi-AI comparison chart\n │ │ └── CompetitionPage.tsx # Competition leaderboard\n │ ├── lib/api.ts # API call wrapper\n │ ├── types/index.ts # TypeScript types\n │ ├── stores/ # Zustand state management\n │ ├── index.css # Binance-style CSS\n │ └── App.tsx # Main app\n ├── package.json # Frontend dependencies\n └── vite.config.ts # Vite configuration\n```\n\n---\n\n## 🔧 Core Dependencies\n\n### Backend (Go)\n\n| Package | Purpose | Version |\n|---------|---------|---------|\n| `github.com/gin-gonic/gin` | HTTP API framework | v1.9+ |\n| `github.com/adshao/go-binance/v2` | Binance API client | v2.4+ |\n| `github.com/markcheno/go-talib` | Technical indicators (TA-Lib) | Latest |\n| `github.com/mattn/go-sqlite3` | SQLite database driver | v1.14+ |\n| `github.com/golang-jwt/jwt/v5` | JWT authentication | v5.0+ |\n| `github.com/pquerna/otp` | 2FA/TOTP support | v1.4+ |\n| `golang.org/x/crypto` | Password hashing (bcrypt) | Latest |\n\n### Frontend (React + TypeScript)\n\n| Package | Purpose | Version |\n|---------|---------|---------|\n| `react` + `react-dom` | UI framework | 18.3+ |\n| `typescript` | Type safety | 5.8+ |\n| `vite` | Build tool | 6.0+ |\n| `recharts` | Charts (equity, comparison) | 2.15+ |\n| `swr` | Data fetching & caching | 2.2+ |\n| `zustand` | State management | 5.0+ |\n| `tailwindcss` | CSS framework | 3.4+ |\n| `lucide-react` | Icon library | Latest |\n\n---\n\n## 🗂️ System Architecture\n\n### High-Level Overview\n\n```\n┌──────────────────────────────────────────────────────────────────┐\n│ PRESENTATION LAYER │\n│ React SPA (Vite + TypeScript + TailwindCSS) │\n│ - Competition dashboard, trader management UI │\n│ - Real-time charts (Recharts), authentication pages │\n└──────────────────────────────────────────────────────────────────┘\n ↓ HTTP/JSON API\n┌──────────────────────────────────────────────────────────────────┐\n│ API LAYER (Gin Router) │\n│ /api/traders, /api/status, /api/positions, /api/decisions │\n│ Authentication middleware (JWT), CORS handling │\n└──────────────────────────────────────────────────────────────────┘\n ↓\n┌──────────────────────────────────────────────────────────────────┐\n│ BUSINESS LOGIC LAYER │\n│ ┌──────────────────┐ ┌──────────────────┐ ┌────────────────┐ │\n│ │ TraderManager │ │ DecisionEngine │ │ MarketData │ │\n│ │ - Multi-trader │ │ - AI reasoning │ │ - K-lines │ │\n│ │ orchestration │ │ - Risk control │ │ - Indicators │ │\n│ └──────────────────┘ └──────────────────┘ └────────────────┘ │\n└──────────────────────────────────────────────────────────────────┘\n ↓\n┌──────────────────────────────────────────────────────────────────┐\n│ DATA ACCESS LAYER │\n│ ┌──────────────┐ ┌──────────────┐ ┌────────────────────┐ │\n│ │ SQLite DB │ │ File Logger │ │ External APIs │ │\n│ │ - Traders │ │ - Decisions │ │ - Binance │ │\n│ │ - Models │ │ - Performance│ │ - Hyperliquid │ │\n│ │ - Exchanges │ │ analysis │ │ - Aster │ │\n│ └──────────────┘ └──────────────┘ └────────────────────┘ │\n└──────────────────────────────────────────────────────────────────┘\n```\n\n### Component Diagram\n\n*(Coming soon: detailed component interaction diagram)*\n\n---\n\n## 📚 Core Modules\n\n### 1. Trader System (`trader/`)\n\n**Purpose:** Trading execution layer with multi-exchange support\n\n**Key Files:**\n- `auto_trader.go` - Main trading orchestrator (100+ lines)\n- `interface.go` - Unified trader interface\n- `binance_futures.go` - Binance API wrapper\n- `hyperliquid_trader.go` - Hyperliquid DEX wrapper\n- `aster_trader.go` - Aster DEX wrapper\n\n**Design Pattern:** Strategy pattern with interface-based abstraction\n\n**Example:**\n```go\ntype ExchangeClient interface {\n GetAccount() (*AccountInfo, error)\n GetPositions() ([]*Position, error)\n CreateOrder(*OrderParams) (*Order, error)\n // ... more methods\n}\n```\n\n---\n\n### 2. Decision Engine (`decision/`)\n\n**Purpose:** AI-powered trading decision making\n\n**Key Files:**\n- `engine.go` - Decision logic with historical feedback\n- `prompt_manager.go` - Template system for AI prompts\n\n**Features:**\n- Chain-of-Thought reasoning\n- Historical performance analysis\n- Risk-aware decision making\n- Multi-model support (DeepSeek, Qwen, custom)\n\n**Flow:**\n```\nHistorical Data → Prompt Generation → AI API Call →\nDecision Parsing → Risk Validation → Execution\n```\n\n---\n\n### 3. Market Data System (`market/`)\n\n**Purpose:** Fetch and analyze market data\n\n**Key Files:**\n- `data.go` - Market data fetching and technical indicators\n\n**Features:**\n- Multi-timeframe K-line data (3min, 4hour)\n- Technical indicators via TA-Lib:\n - EMA (20, 50)\n - MACD\n - RSI (7, 14)\n - ATR (volatility)\n- Open Interest tracking\n\n---\n\n### 4. Manager (`manager/`)\n\n**Purpose:** Multi-trader orchestration\n\n**Key Files:**\n- `trader_manager.go` - Manages multiple trader instances\n\n**Responsibilities:**\n- Trader lifecycle (start, stop, restart)\n- Resource allocation\n- Concurrent execution coordination\n\n---\n\n### 5. API Server (`api/`)\n\n**Purpose:** HTTP API for frontend communication\n\n**Key Files:**\n- `server.go` - Gin framework RESTful API\n\n**Endpoints:**\n```\nGET /api/traders # List all traders\nPOST /api/traders # Create trader\nPOST /api/traders/:id/start # Start trader\nGET /api/status # System status\nGET /api/positions # Current positions\nGET /api/decisions/latest # Recent decisions\n```\n\n---\n\n### 6. Database Layer (`config/`)\n\n**Purpose:** SQLite data persistence\n\n**Key Files:**\n- `database.go` - Database operations and schema\n\n**Tables:**\n- `users` - User accounts (with 2FA support)\n- `ai_models` - AI model configurations\n- `exchanges` - Exchange credentials\n- `traders` - Trader instances\n- `equity_history` - Performance tracking\n- `system_config` - Application settings\n\n---\n\n### 7. Authentication (`auth/`)\n\n**Purpose:** User authentication and authorization\n\n**Features:**\n- JWT token-based auth\n- 2FA with TOTP (Google Authenticator)\n- Bcrypt password hashing\n- Admin mode (simplified single-user)\n\n---\n\n## 🔄 Request Flow Examples\n\n### Example 1: Create New Trader\n\n```\nUser Action (Frontend)\n ↓\nPOST /api/traders\n ↓\nAPI Server (auth middleware)\n ↓\nDatabase.CreateTrader()\n ↓\nTraderManager.StartTrader()\n ↓\nAutoTrader.Run() → goroutine\n ↓\nResponse: {trader_id, status}\n```\n\n### Example 2: Trading Decision Cycle\n\n```\nAutoTrader (every 3-5 min)\n ↓\n1. FetchAccountStatus()\n ↓\n2. GetOpenPositions()\n ↓\n3. FetchMarketData() → TA-Lib indicators\n ↓\n4. AnalyzeHistory() → last 20 trades\n ↓\n5. GeneratePrompt() → full context\n ↓\n6. CallAI() → DeepSeek/Qwen\n ↓\n7. ParseDecision() → structured output\n ↓\n8. ValidateRisk() → position limits, margin\n ↓\n9. ExecuteOrders() → exchange API\n ↓\n10. LogDecision() → JSON file + database\n```\n\n---\n\n## 📊 Data Flow\n\n### Market Data Flow\n\n```\nExchange API\n ↓\nmarket.FetchKlines()\n ↓\nTA-Lib.Calculate(EMA, MACD, RSI)\n ↓\nDecisionEngine (as context)\n ↓\nAI Model (reasoning)\n```\n\n### Decision Logging Flow\n\n```\nAI Response\n ↓\ndecision_logger.go\n ↓\nJSON file: decision_logs/{trader_id}/{timestamp}.json\n ↓\nDatabase: performance tracking\n ↓\nFrontend: /api/decisions/latest\n```\n\n---\n\n## 🗄️ Database Schema\n\n### Core Tables\n\n**users**\n```sql\n- id (INTEGER PRIMARY KEY)\n- username (TEXT UNIQUE)\n- password_hash (TEXT)\n- totp_secret (TEXT)\n- is_admin (BOOLEAN)\n- created_at (DATETIME)\n```\n\n**ai_models**\n```sql\n- id (INTEGER PRIMARY KEY)\n- name (TEXT)\n- model_type (TEXT) -- deepseek, qwen, custom\n- api_key (TEXT)\n- api_url (TEXT)\n- enabled (BOOLEAN)\n```\n\n**traders**\n```sql\n- id (TEXT PRIMARY KEY)\n- name (TEXT)\n- ai_model_id (INTEGER FK)\n- exchange_id (INTEGER FK)\n- initial_balance (REAL)\n- current_equity (REAL)\n- status (TEXT) -- running, stopped\n- created_at (DATETIME)\n```\n\n*(More details: database-schema.md - coming soon)*\n\n---\n\n## 🔌 API Reference\n\n### Authentication\n\n**POST /api/auth/login**\n```json\nRequest: {\n \"username\": \"string\",\n \"password\": \"string\",\n \"totp_code\": \"string\" // optional\n}\n\nResponse: {\n \"token\": \"jwt_token\",\n \"user\": {...}\n}\n```\n\n### Trader Management\n\n**GET /api/traders**\n```json\nResponse: {\n \"traders\": [\n {\n \"id\": \"string\",\n \"name\": \"string\",\n \"status\": \"running|stopped\",\n \"balance\": 1000.0,\n \"roi\": 5.2\n }\n ]\n}\n```\n\n*(Full API reference: api-reference.md - coming soon)*\n\n---\n\n## 🧪 Testing Architecture\n\n### Current State\n- ⚠️ No unit tests yet\n- ⚠️ Manual testing only\n- ⚠️ Testnet verification\n\n### Planned Testing Strategy\n\n**Unit Tests (Priority 1)**\n```\ntrader/binance_futures_test.go\n- Mock API responses\n- Test precision handling\n- Validate order construction\n```\n\n**Integration Tests (Priority 2)**\n```\n- End-to-end trading flow (testnet)\n- Multi-trader scenarios\n- Database operations\n```\n\n**Frontend Tests (Priority 3)**\n```\n- Component tests (Vitest + React Testing Library)\n- API integration tests\n- E2E tests (Playwright)\n```\n\n*(Testing guide: testing-guide.md - coming soon)*\n\n---\n\n## 🔧 Development Tools\n\n### Build & Run\n\n```bash\n# Backend\ngo build -o nofx\n./nofx\n\n# Frontend\ncd web\nnpm run dev\n\n# Docker\ndocker compose up --build\n```\n\n### Code Quality\n\n```bash\n# Format Go code\ngo fmt ./...\n\n# Lint (if configured)\ngolangci-lint run\n\n# Type check TypeScript\ncd web && npm run build\n```\n\n---\n\n## 📈 Performance Considerations\n\n### Backend\n- **Concurrency:** Each trader runs in separate goroutine\n- **Database:** SQLite (good for <100 traders)\n- **API Rate Limits:** Handled per exchange\n- **Memory:** ~50-100MB per trader\n\n### Frontend\n- **Data Fetching:** SWR with 5-10s polling\n- **State:** Zustand (lightweight)\n- **Bundle Size:** ~500KB (gzipped)\n\n---\n\n## 🔮 Future Architecture Plans\n\n### Planned Improvements\n\n1. **Microservices Split** (if scaling needed)\n - Separate decision engine service\n - Market data service\n - Execution service\n\n2. **Database Migration**\n - Mysql for production (>100 traders)\n - Redis for caching\n\n3. **Event-Driven Architecture**\n - WebSocket for real-time updates\n - Message queue (RabbitMQ/NATS)\n\n4. **Kubernetes Deployment**\n - Helm charts\n - Auto-scaling\n - High availability\n\n---\n\n## 🆘 For Developers\n\n**Want to contribute?**\n- Read [Contributing Guide](../../CONTRIBUTING.md)\n- Check [Open Issues](https://github.com/tinkle-community/nofx/issues)\n- Join [Telegram Community](https://t.me/nofx_dev_community)\n\n**Need clarification?**\n- Open a [GitHub Discussion](https://github.com/tinkle-community/nofx/discussions)\n- Ask in Telegram\n\n---\n\n## 📚 Related Documentation\n\n- [Getting Started](../getting-started/README.md) - Setup and deployment\n- [Contributing](../../CONTRIBUTING.md) - How to contribute\n- [Community](../community/README.md) - Bounties and recognition\n\n---\n\n[← Back to Documentation Home](../README.md)\n"}}}} |