# Polymarket BTC Up/Down Trading Bot 这是一个自动化交易机器人,用于在 Polymarket 上交易比特币涨跌预测市场。机器人会根据当前时间自动计算正确的市场 slug,支持同时下单 UP 和 DOWN 的限价单,也支持指定方向单独下单。 ## 功能特性 - 🕐 **自动时间计算**:根据当前 UTC 时间自动计算下一个 15 分钟间隔的市场 slug - 📊 **双向下单**:`index.mjs` 可同时下单 UP 和 DOWN 的限价单 - 🎯 **单向下单**:`bid.mjs` 支持根据参数指定下单方向(UP 或 DOWN) - 🔐 **环境变量支持**:通过 `.env.local` 文件安全地管理私钥和配置 - ⚡ **实时交易**:使用 Polymarket CLOB API 进行实时交易 - 🛡️ **错误处理**:完善的错误处理和日志记录 ## 安装依赖 ```bash npm install ``` ## 环境配置 1. 复制环境变量示例文件: ```bash cp env.example .env.local ``` 2. 编辑 `.env.local` 文件,填入你的配置: ```env PRIVATE_KEY=你的私钥 FUNDER_ADDRESS=你的Polymarket地址 ``` ## 使用方法 ### index.mjs - 同时下单 UP 和 DOWN 同时下单 UP 和 DOWN 的限价单(价格和数量从环境变量读取): ```bash node index.mjs ``` ### bid.mjs - 指定方向下单 根据传入参数指定下单方向,支持命令行参数覆盖价格和数量: #### 基本用法 ```bash # 下单 UP(使用环境变量中的默认价格和数量) node bid.mjs up # 下单 DOWN(使用环境变量中的默认价格和数量) node bid.mjs down ``` #### 指定价格和数量 ```bash # 下单 UP,价格为 0.49,数量为 5 node bid.mjs up 0.49 5 # 下单 DOWN,价格为 0.48,数量为 10 node bid.mjs down 0.48 10 ``` #### 参数说明 - **第一个参数(必填)**:下单方向 - `up` - 下单 UP - `down` - 下单 DOWN - **第二个参数(可选)**:订单价格 - 如果不提供,使用环境变量 `ORDER_PRICE` 或默认值 0.49 - **第三个参数(可选)**:订单数量 - 如果不提供,使用环境变量 `ORDER_SIZE` 或默认值 5 ## 套利原理 ### 核心策略:双向下单套利 `index.mjs` 实现的是一个基于价格差的套利策略: #### 基本原理 1. **同时下单 UP 和 DOWN** - 在同一个市场同时买入 UP 和 DOWN 两个方向的份额 - 例如:以价格 0.49 各买入 1 个份额 2. **总成本计算** - 总成本 = 下单价格 × 2 - 示例:0.49 × 2 = 0.98 3. **市场结算规则** - Polymarket 的预测市场:结果必然是 UP 或 DOWN 之一 - 猜对的方向获得 **1**,猜错的方向获得 **0** 4. **利润计算** - 无论结果如何,总会有一个方向猜对 - 收益 = 1(猜对方向的支付) - 成本 = 下单价格 × 2 - **利润 = 1 - (下单价格 × 2)** #### 示例计算 假设当前市场价格: - UP 价格:0.49 - DOWN 价格:0.49(或略高/略低) **执行套利:** - 买入 UP:0.49 × 5 = 2.45 - 买入 DOWN:0.49 × 5 = 2.45 - **总成本:** 2.45 + 2.45 = **4.90** **结算后:** - 假设 UP 猜对,获得:1 × 5 = **5.00** - DOWN 猜错,获得:0 × 5 = **0** - **总收益:** 5.00 **净利润:** - 利润 = 5.00 - 4.90 = **0.10** - 利润率 = 0.10 / 4.90 = **2.04%** #### 关键要点 ✅ **优势:** - 风险较低:无论市场走向如何,总能保证一个方向猜对 - 利润确定:只要总成本 < 1,就有利润空间 - 策略简单:不需要预测市场方向 ⚠️ **注意事项:** - 只有当 **UP 价格 + DOWN 价格 < 1** 时才有利可图 - 需要考虑市场流动性,确保两个方向的订单都能成交 - 利润空间取决于价格差,通常利润率为 1-3% #### 风险提示 虽然这个策略看起来风险较低,但仍需要注意: 1. **订单执行风险**:限价单可能无法完全成交 2. **价格波动**:下单时和执行时价格可能发生变化 3. **市场流动性**:流动性不足可能导致部分订单无法成交 4. **成本控制**:频繁交易需要考虑手续费和 Gas 费用 ## 配置说明 ### 环境变量 | 变量名 | 描述 | 示例 | |--------|------|------| | `PRIVATE_KEY` | 你的以太坊私钥 | `0x1234...` | | `FUNDER_ADDRESS` | 你的 Polymarket 地址 | `0xabcd...` | ### 交易参数 **index.mjs** 和 **bid.mjs** 都使用相同的环境变量配置: - **价格**:环境变量 `ORDER_PRICE`(默认 0.49) - **数量**:环境变量 `ORDER_SIZE`(默认 5) - **订单类型**:GTC (Good Till Cancelled) - **市场间隔**:15 分钟 **bid.mjs** 额外支持通过命令行参数覆盖价格和数量: - 命令行参数优先级高于环境变量 - 示例:`node bid.mjs up 0.49 5` 会使用命令行指定的 0.49 和 5,而不是环境变量中的值 ## 市场信息 机器人会自动获取以下信息: - 市场 ID 和问题描述 - UP/DOWN token ID - 当前价格和流动性 - 最小订单大小和价格精度 ## 安全注意事项 ⚠️ **重要**: - 永远不要将 `.env.local` 文件提交到版本控制系统 - 确保私钥安全,不要分享给他人 - 建议使用专门的交易账户,不要使用主钱包 - 在正式交易前,先在测试环境验证 ## 项目结构 ``` poly/ ├── index.mjs # 同时下单 UP 和 DOWN 的主程序 ├── bid.mjs # 指定方向下单的程序(支持命令行参数) ├── package.json # 项目配置和依赖 ├── .env.example # 环境变量示例文件 ├── .env.local # 环境变量文件(需要创建) └── README.md # 项目说明文档 ``` ## 依赖包 - `@polymarket/clob-client`: Polymarket CLOB API 客户端 - `@ethersproject/wallet`: 以太坊钱包管理 - `dotenv`: 环境变量管理 ## 故障排除 ### 常见问题 1. **API Key 创建失败** - 检查私钥是否正确 - 确认网络连接正常 - 验证 Polymarket 账户状态 2. **市场未找到** - 检查时间计算是否正确 - 确认市场是否已激活 - 验证 slug 格式 3. **订单创建失败** - 检查账户余额 - 确认订单参数是否有效 - 查看市场状态 ### 日志说明 程序会输出详细的日志信息: - 时间戳计算过程 - API 调用状态 - 订单创建结果 - 错误信息(如有) ## 许可证 本项目仅供学习和研究使用。使用本软件进行实际交易的风险由用户自行承担。 ## 贡献 欢迎提交 Issue 和 Pull Request 来改进这个项目。 ## 联系方式 如有问题,请通过 GitHub Issues 联系。