# BTC-AiTrade **Repository Path**: hon-csl/btc-ai-trade ## Basic Information - **Project Name**: BTC-AiTrade - **Description**: 学习项目,仅做个人学习使用,使用该项目所有后果自负 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-24 - **Last Updated**: 2025-11-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🤖 OKX 自动交易机器人 基于 DeepSeek AI + 技术指标分析的加密货币自动交易系统 **⚠️ 风险提示:个人喜欢玩黑箱文化,你们不一样,别上头。加密货币交易有风险,投资需谨慎!** ## 📋 功能特点 - ✅ **多账户支持** - 同时运行模拟盘和实盘账户 - ✅ **OKX 交易所** - 支持模拟盘和实盘交易 - ✅ **DeepSeek AI** - 智能决策和信号生成 - ✅ **技术指标分析** - SMA、EMA、MACD、RSI、布林带等 - ✅ **多交易对** - BTC、ETH、SOL、DOGE 等 - ✅ **智能风控** - 自动止损止盈和资金管理 - ✅ **杠杆交易** - 支持 10x 杠杆 - ✅ **实时监控** - 15 分钟自动执行 - ✅ **Telegram 通知** - 实时推送交易信息 - ✅ **Docker 部署** - 容器化部署支持 - ✅ **日志系统** - 完整的日志记录和监控 ## 🔧 配置说明 ### 1. 创建 `.env` 配置文件(在项目根目录) ```bash # 交易模式配置(Docker 部署时使用) # demo=模拟盘, live=实盘 TRADE_MODE=demo # 风险档位 (conservative / balanced / aggressive) TRADE_RISK_PROFILE=aggressive # 下单安全边际 (可选,默认 0.985) TRADE_LIMIT_SAFETY=0.995 # DeepSeek AI API 配置 DEEPSEEK_API_KEY=your_deepseek_api_key_here # OKX 实盘 API 配置 OKX_API_KEY=your_okx_api_key OKX_SECRET=your_okx_secret OKX_PASSWORD=your_okx_password # OKX 模拟盘 API 配置(推荐先用模拟盘测试) # 注意:OKX 模拟盘和实盘使用不同的 API Key # 模拟盘 API Key 需要在 OKX 网站的"模拟交易"页面单独创建 OKX_DEMO_API_KEY=your_okx_demo_api_key OKX_DEMO_SECRET=your_okx_demo_secret OKX_DEMO_PASSWORD=your_okx_demo_password # Telegram 机器人配置(可选,用于接收交易通知) TELEGRAM_BOT_TOKEN=your_telegram_bot_token TELEGRAM_CHAT_ID=your_telegram_chat_id ``` ### 2. 如何获取 OKX 模拟盘 API 1. 登录 OKX 官网 2. 进入"模拟交易"页面 3. 点击"API 管理" 4. 创建新的模拟盘 API Key 5. 设置权限:交易权限(Trade) 6. 保存 API Key、Secret 和 Passphrase ### 3. 如何获取 DeepSeek API Key 访问 https://platform.deepseek.com/ 注册并获取 API Key ### 4. 如何设置 Telegram 机器人通知(可选) Telegram 通知功能可以让你实时接收交易信号、订单执行、持仓更新等信息。 **步骤 1: 创建 Telegram 机器人** 1. 在 Telegram 中搜索 `@BotFather` 2. 发送 `/newbot` 命令 3. 按提示设置机器人名称和用户名 4. 复制获得的 `Bot Token`(格式:`123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11`) 5. 将 Token 填入 `.env` 文件的 `TELEGRAM_BOT_TOKEN` **步骤 2: 获取 Chat ID** 1. 在 Telegram 中搜索你刚创建的机器人 2. 点击 `Start` 或发送任意消息 3. 在浏览器访问:`https://api.telegram.org/bot<你的BOT_TOKEN>/getUpdates` 4. 在返回的 JSON 中找到 `"chat":{"id":123456789}` 5. 复制这个 `id` 数字,填入 `.env` 文件的 `TELEGRAM_CHAT_ID` **步骤 3: 测试通知(可选)** 在 `.env` 文件中配置好后,程序启动时会自动发送一条测试消息。 **通知内容包括:** - 🤖 机器人启动通知 - 📈 交易信号和执行详情 - 💰 账户余额和资金使用情况 - 📊 持仓更新和盈亏状态 - ⚠️ 错误和异常通知 **如果不想使用 Telegram 通知:** 在 `deepseek.py` 中设置: ```python 'telegram_enabled': False, # 禁用 Telegram 通知 ``` ## 🚀 快速开始 ### 1. 安装依赖 ```bash pip install -r requirements.txt ``` ### 2. 选择运行模式 - **本地多账户**(推荐) ```bash # 启动脚本会检查依赖与环境变量 ./start_multi_account.sh # 或直接运行核心管理器 python multi_account_manager.py ``` - **本地测试** ```bash python test_multi_account.py ``` - **Docker 多账户** ```bash ./start_multi_account.sh # 选择 Docker 选项 # 或手动 docker compose up -d multi-account-bot ``` ### 3. 多账户配置 #### 配置文件说明 多账户模式使用 `accounts_config.json` 配置文件: ```json { "accounts": { "demo": { "name": "模拟盘账户", "enabled": true, "sandbox": true, "config": { "risk_profile": "aggressive", "symbols": [...], "leverage": 10, "max_position_ratio": 0.6 } }, "live": { "name": "实盘账户", "enabled": false, "sandbox": false, "config": {...} } } } ``` > `risk_profile` 支持 `conservative / balanced / aggressive`。不同档位会自动调整下单数量、持仓限制、保留余额以及 OKX 安全边际,使账户可以更偏激进或更保守。 #### 环境变量配置 在 `.env` 文件中配置多账户 API: ```bash # OKX 模拟盘 API OKX_DEMO_API_KEY=your_demo_api_key OKX_DEMO_SECRET_KEY=your_demo_secret OKX_DEMO_PASSPHRASE=your_demo_passphrase # OKX 实盘 API OKX_LIVE_API_KEY=your_live_api_key OKX_LIVE_SECRET_KEY=your_live_secret OKX_LIVE_PASSPHRASE=your_live_passphrase # Telegram 通知(可为不同账户设置不同聊天ID) TELEGRAM_DEMO_CHAT_ID=your_demo_chat_id TELEGRAM_LIVE_CHAT_ID=your_live_chat_id ``` #### Docker 多账户部署 1. 准备 `.env`(可参考 `env_example.txt`)以及 `accounts_config.json`(每个账户独立 API、risk_profile)。 2. 运行脚本菜单中的 `4) Docker 多账户模式`,或手动执行: ```bash docker compose up -d multi-account-bot ``` 3. 查看日志: ```bash docker compose logs -f multi-account-bot ``` 4. 可选:启用日志面板 `log-monitor`(包含在同一 compose 文件中)。 #### 自动收益报告 - 每次成交会写入 `logs/trade_history.jsonl`,日志包含账户、方向、数量、预估手续费等。 - 系统会在日切、周切、月切时自动汇总收益、胜率、交易次数、手续费及 ROI,并推送到各账户的 Telegram 通知。 - 报告基于已平仓的实时数据,若需要长期留档,可定期备份 `logs/` 目录。 ### 4. 模拟盘模式说明 **推荐先使用模拟盘模式进行测试!** 模拟盘模式特点: - ✅ 连接 OKX 官方模拟交易环境 - ✅ 可以真实下单和查看持仓 - ✅ 使用虚拟资金,不影响真实账户 - ✅ 完全模拟真实交易流程 - ✅ 可用于策略测试和学习 ### 5. 实盘模式注意事项 ⚠️ **使用实盘模式前请务必:** 1. 充分测试模拟盘模式 2. 了解交易风险 3. 设置合理的交易数量 4. 准备好风险承受能力 5. 谨慎操作,避免大额资金 ## 📊 交易配置 编辑 `deepseek.py` 中的 `TRADE_CONFIG` 来调整参数: ```python TRADE_CONFIG = { 'symbols': [ {'symbol': 'BTC/USDT:USDT', 'amount': 0.01}, # 交易数量 {'symbol': 'ETH/USDT:USDT', 'amount': 0.1}, {'symbol': 'DOGE/USDT:USDT', 'amount': 1000} ], 'leverage': 10, # 杠杆倍数 'timeframe': '15m', # K线周期(15m=15分钟) 'use_demo_api': True, # 默认使用模拟盘 # 🎯 资金管理参数(重要!) 'max_position_ratio': 0.3, # 单个交易对最大持仓比例(30%) 'total_position_ratio': 0.8, # 总持仓比例上限(80%) 'min_balance_reserve': 100, # 最小保留余额(USDT) } ``` ### 资金管理说明 **1. max_position_ratio(单个交易对持仓比例)** - 默认 0.3(30%)表示单个交易对最多使用账户可用资金的 30% - 例如:可用余额 1000 USDT,则单个交易对最多使用 300 USDT 建仓保证金 - 防止单一交易对风险过大 **2. total_position_ratio(总持仓比例上限)** - 默认 0.8(80%)表示所有交易对加起来最多使用账户总资金的 80% - 例如:总余额 1000 USDT,则所有持仓保证金总和不超过 800 USDT - 保证账户始终有充足的储备资金 **3. min_balance_reserve(最小保留余额)** - 默认 100 USDT 表示账户必须保留至少 100 USDT 不用于交易 - 用于支付手续费、防止爆仓等 - 建议根据账户大小调整(小账户可设置更小值) ### 资金管理示例 假设账户情况: - 总余额:1000 USDT - 可用余额:1000 USDT - BTC 价格:90000 USDT - 杠杆:10x **计算过程:** 1. 单个交易对可用资金:1000 × 30% = 300 USDT 2. BTC 配置数量:0.01 BTC 3. 需要保证金:90000 × 0.01 ÷ 10 = 90 USDT ✅(未超过 300 USDT) 4. 检查保留金:1000 - 90 = 910 USDT ✅(超过 100 USDT) 5. 检查总持仓:90 USDT < 800 USDT ✅(未超过 80%) **结果:** 可以建仓 0.01 BTC 如果配置数量过大,程序会自动按比例缩减到允许范围内。 ## 📝 日志系统 程序使用专业的日志系统,所有输出都会自动记录到文件中,方便线上部署和问题排查。 ### 日志文件说明 | 日志文件 | 用途 | 大小限制 | 保留数量 | |---------|------|---------|---------| | `logs/trade_bot.log` | 主日志(所有信息) | 10MB | 5个 | | `logs/error.log` | 错误日志(仅错误) | 5MB | 3个 | | `logs/trade.log` | 交易日志(仅交易信号) | 10MB | 10个 | ### 日志级别 - **DEBUG**: 调试信息(仅写入文件,不显示在控制台) - **INFO**: 普通信息、交易信号、账户状态 - **WARNING**: 警告信息、余额不足提示 - **ERROR**: 错误信息、订单失败、异常情况 ### 查看日志 ```bash # 查看主日志 cat logs/trade_bot.log # 实时监控日志(适合服务器部署) tail -f logs/trade_bot.log # 查看错误日志 cat logs/error.log # 查看交易日志 cat logs/trade.log # 查看最近 100 行 tail -n 100 logs/trade_bot.log # 搜索特定交易对 grep "BTC/USDT" logs/trade.log ``` ### 日志特性 ✅ **自动轮转**: 日志文件达到大小限制后自动创建新文件 ✅ **智能分类**: 自动根据内容分类到不同日志文件 ✅ **双重输出**: 同时输出到控制台和文件 ✅ **UTF-8 编码**: 完美支持中文和 Emoji ✅ **时间戳**: 精确到秒的时间记录 ## 🔒 单向持仓模式 本程序使用单向持仓模式,不支持同时做多和做空。 ## 🐳 Docker 部署(推荐) ### 方式一:使用 Docker Compose(推荐) 1. **确保已安装 Docker 和 Docker Compose** ```bash # 检查 Docker docker --version docker-compose --version ``` 2. **配置环境变量** 编辑 `.env` 文件,设置所有必要的配置: ```bash TRADE_MODE=demo # demo=模拟盘, live=实盘 DEEPSEEK_API_KEY=your_key OKX_DEMO_API_KEY=your_demo_key # ... 其他配置 ``` 3. **构建并启动容器** ```bash # 构建镜像并启动(后台运行) docker-compose up -d --build # 查看运行状态 docker-compose ps # 查看实时日志 docker-compose logs -f # 查看日志文件 tail -f logs/trade_bot.log ``` 4. **常用命令** ```bash # 停止容器 docker-compose stop # 启动容器 docker-compose start # 重启容器 docker-compose restart # 停止并删除容器 docker-compose down # 查看容器日志(最近100行) docker-compose logs --tail=100 # 进入容器内部(调试用) docker-compose exec okx-trade-bot bash ``` ### 方式二:直接使用 Docker ```bash # 构建镜像 docker build -t okx-trade-bot . # 运行容器(模拟盘模式) docker run -d \ --name okx-trade-bot \ --restart unless-stopped \ -e TRADE_MODE=demo \ -e DEEPSEEK_API_KEY=your_key \ -e OKX_DEMO_API_KEY=your_demo_key \ -e OKX_DEMO_SECRET=your_demo_secret \ -e OKX_DEMO_PASSWORD=your_demo_password \ -v $(pwd)/logs:/app/logs \ -v $(pwd)/.env:/app/.env:ro \ okx-trade-bot # 查看日志 docker logs -f okx-trade-bot # 停止容器 docker stop okx-trade-bot # 删除容器 docker rm okx-trade-bot ``` ### Docker 部署优势 ✅ **环境隔离**:不影响服务器其他服务 ✅ **快速部署**:一键启动,无需配置环境 ✅ **自动重启**:程序异常退出自动重启 ✅ **资源限制**:可限制 CPU 和内存使用 ✅ **易于迁移**:可快速迁移到其他服务器 ✅ **日志持久化**:日志保存在宿主机 ### Docker 环境变量说明 | 变量名 | 说明 | 必填 | 示例值 | |--------|------|------|--------| | `TRADE_MODE` | 交易模式 | 是 | `demo` 或 `live` | | `DEEPSEEK_API_KEY` | DeepSeek API Key | 是 | `sk-xxx` | | `OKX_DEMO_API_KEY` | OKX 模拟盘 Key | 模拟盘必填 | `xxx` | | `OKX_API_KEY` | OKX 实盘 Key | 实盘必填 | `xxx` | | `TELEGRAM_BOT_TOKEN` | Telegram Bot | 否 | `123:xxx` | ### 切换模拟盘/实盘 **切换到实盘模式:** 1. 编辑 `.env` 文件: ```bash TRADE_MODE=live ``` 2. 重启容器: ```bash docker-compose restart ``` **切换到模拟盘模式:** ```bash # 修改 .env TRADE_MODE=demo # 重启 docker-compose restart ``` ## 🖥️ 传统服务器部署(可选) ### 准备服务器 推荐:阿里云香港或新加坡轻量服务器(Ubuntu 系统) ### 安装步骤 1. **安装 Anaconda** ```bash wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh bash Anaconda3-2024.10-1-Linux-x86_64.sh source /root/anaconda3/etc/profile.d/conda.sh echo ". /root/anaconda3/etc/profile.d/conda.sh" >> ~/.bashrc ``` 2. **创建 Python 环境** ```bash conda create -n ds python=3.10 conda activate ds ``` 3. **上传代码并安装依赖** ```bash pip install -r requirements.txt ``` 4. **更新系统** ```bash apt-get update apt-get upgrade ``` 5. **安装 PM2(后台运行)** ```bash apt install npm npm install pm2 -g ``` 6. **使用 PM2 运行程序** ```bash # 启动程序(自动后台运行) pm2 start deepseek.py --name okx-bot --interpreter python # 查看程序状态 pm2 status # 查看实时日志(控制台输出) pm2 logs okx-bot # 查看详细日志文件 tail -f logs/trade_bot.log # 重启程序 pm2 restart okx-bot # 停止程序 pm2 stop okx-bot # 删除程序 pm2 delete okx-bot # 设置开机自启 pm2 startup pm2 save ``` 7. **日志管理** ```bash # 实时监控所有日志 tail -f logs/*.log # 查看错误 cat logs/error.log # 按日期搜索 grep "2025-10-24" logs/trade_bot.log # 查看最近的交易信号 tail -n 50 logs/trade.log ``` ## 📝 注意事项 1. **模拟盘 API 密钥必须在 OKX 模拟交易环境中创建** 2. **模拟盘和实盘的 API Key 不能混用** 3. **首次使用建议从模拟盘开始,测试 1-2 周后再考虑实盘** 4. **定期检查持仓和资金情况** 5. **设置合理的交易数量,避免过度杠杆** ## 🆘 常见问题 ### Q: 模拟盘 API 连接失败? A: 检查是否在 OKX 模拟交易页面创建了 API Key,而不是实盘 API。 ### Q: 如何知道现在是模拟盘还是实盘? A: 程序启动时会明确显示"📍 使用 OKX 模拟盘 API"或"📍 使用 OKX 实盘 API"。 ### Q: 模拟盘账户如何充值? A: 登录 OKX 模拟交易页面,系统会自动提供虚拟资金。 ### Q: 可以同时运行模拟盘和实盘吗? A: 不建议。建议先完整测试模拟盘,确认策略有效后再转实盘。 ### Q: Telegram 通知收不到消息? A: 检查以下几点: 1. 确认 `.env` 中的 `TELEGRAM_BOT_TOKEN` 和 `TELEGRAM_CHAT_ID` 配置正确 2. 确认已在 Telegram 中向机器人发送过至少一条消息(点击 Start) 3. 检查 `telegram_enabled` 是否设置为 `True` 4. 查看程序输出是否有 "Telegram 消息已发送" 或错误提示 ### Q: 不想使用 Telegram 通知怎么办? A: 在 `deepseek.py` 中将 `telegram_enabled` 设置为 `False`,或者不配置 `TELEGRAM_BOT_TOKEN` 即可。 ### Q: Telegram 通知消息格式可以自定义吗? A: 可以。编辑 `deepseek.py` 中的 `format_trade_message` 等函数来自定义消息格式。 ## 🔄 更新日志 ### v2.2 - 专业日志系统 **新增功能:** 1. ✅ 企业级日志系统 - 自动日志文件轮转(防止文件过大) - 分类日志:主日志、错误日志、交易日志 - 智能日志级别:DEBUG、INFO、WARNING、ERROR - 双重输出:文件 + 控制台 - UTF-8 编码支持中文和 Emoji 2. ✅ 日志管理功能 - 自动创建 logs 目录 - 日志文件自动备份 - 支持实时监控 (tail -f) - 方便服务器部署和问题排查 ### v2.1 - Telegram 通知功能 **新增功能:** 1. ✅ Telegram 实时通知 - 机器人启动通知 - 交易信号推送(含详细分析) - 订单执行结果通知 - 持仓更新和盈亏提醒 - 错误和异常警告 - 支持 HTML 格式美化消息 2. ✅ 通知内容优化 - 清晰区分模拟盘/实盘 - Emoji 图标增强可读性 - 完整的账户状态展示 - 实时资金使用率监控 ### v2.0 - 资金管理增强版 **新增功能:** 1. ✅ 智能资金管理系统 - 单个交易对持仓比例控制 - 总持仓比例上限控制 - 最小保留余额保护 - 自动计算建仓数量 2. ✅ OKX 模拟盘支持 - 支持 OKX 官方 Sandbox API - 模拟盘和实盘独立配置 - 完整的模拟交易流程 3. ✅ 增强的资金显示 - 实时显示账户余额 - 显示当前持仓保证金 - 显示资金使用率 - 详细的交易前资金检查 **风险控制改进:** - 不会一次性使用全部资金建仓 - 多个交易对分散风险 - 始终保留储备资金 - 防止因资金不足导致爆仓 ## 📜 License 本项目仅供学习和研究使用。使用本程序交易产生的任何盈亏,均由使用者自行承担。 docker-compose build --no-cache multi-account-bot docker-compose up -d multi-account-bot docker-compose logs -f multi-account-bot