Files

1 line
136 KiB
JSON
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"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[![Go Version](https://img.shields.io/badge/Go-1.21+-00ADD8?style=flat&logo=go)](https://golang.org/)\n[![React](https://img.shields.io/badge/React-18+-61DAFB?style=flat&logo=react)](https://reactjs.org/)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-3178C6?style=flat&logo=typescript)](https://www.typescriptlang.org/)\n[![License](https://img.shields.io/badge/License-AGPL--3.0-blue.svg)](LICENSE)\n[![Backed by Amber.ac](https://img.shields.io/badge/Backed%20by-Amber.ac-orange.svg)](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![竞赛页面](../../../screenshots/competition-page.png)\n*多AI排行榜和实时性能对比图表,展示Qwen vs DeepSeek实时交易对战*\n\n### 📊 交易详情 - 完整交易仪表盘\n![详情页面](../../../screenshots/details-page.png)\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[![Star History Chart](https://api.star-history.com/svg?repos=tinkle-community/nofx&type=Date)](https://star-history.com/#tinkle-community/nofx&Date)\n"}, "103c47826174658716d027f65a0bf165b93f4805": {"t": 1785758355.614718, "n": 25448, "h": "d703a079ac4cede6", "c": "# 🤖 NOFX - AI交易操作系统\n\n[![Go Version](https://img.shields.io/badge/Go-1.21+-00ADD8?style=flat&logo=go)](https://golang.org/)\n[![React](https://img.shields.io/badge/React-18+-61DAFB?style=flat&logo=react)](https://reactjs.org/)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-3178C6?style=flat&logo=typescript)](https://www.typescriptlang.org/)\n[![License](https://img.shields.io/badge/License-AGPL--3.0-blue.svg)](LICENSE)\n[![Backed by Amber.ac](https://img.shields.io/badge/Backed%20by-Amber.ac-orange.svg)](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![竞赛页面](../../../screenshots/competition-page.png)\n*多AI排行榜和实时性能对比图表,展示Qwen vs DeepSeek实时交易对战*\n\n### 📊 交易详情 - 完整交易仪表盘\n![详情页面](../../../screenshots/details-page.png)\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[![Star History Chart](https://api.star-history.com/svg?repos=tinkle-community/nofx&type=Date)](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"}}}}