数字货币全自动跟单系统是一个面向加密货币衍生品交易的高性能自动化跟单平台。其核心价值在于将专业交易员(信号源)的交易策略实时、精准地复制到普通用户的独立交易所账户中,同时通过多级分销和自动化利润分成机制,实现平台、交易员、推广者和用户的多方共赢。
系统支持跨交易所跟单,信号源在 OKX 交易,用户可在 Binance、OKX、Bybit、Bitget、Gate.io 等主流交易所自动执行对应比例的订单。
本系统采用强绑定的邀请机制,所有新用户注册必须填写邀请码。这构成了平台的分销和利润分成基础。
- 注册与绑定: 用户通过邮箱注册,必须输入上级的邀请码。系统自动生成该用户的专属邀请码,并建立
referrerId推荐关系树。 - 层级关系: 用户的层级关系决定了后续盈利订单的利润分成流向,支持多级差额分成计算。
- 交易所 API 绑定: 用户在个人中心绑定自己真实交易所的 API Key 和 Secret(部分交易所需要 Passphrase)。系统对这些凭证进行强加密存储(AES-256-GCM),并在绑定时进行连通性测试。
信号源是交易信号的发出者,由管理员在后台配置和管理。
- 信号源接入: 管理员配置信号源的名称、交易对(如 ETH-USDT-SWAP)、参考仓位、预期月化收益等。
- 信号获取方式: 核心引擎通过 OKX 的私有 WebSocket 频道,实时监听信号源账户的仓位变化(开仓、平仓、加仓、减仓)。
- 用户订阅: 用户在前端"策略中心"浏览可用的信号源,选择绑定好的交易所 API,设置跟单倍数(Multiplier),并开启策略。开启策略前,系统会校验用户平台余额是否充足。
跟单引擎是系统的心脏,负责毫秒级的信号处理和订单分发。
- 信号解析: 当监听到信号源仓位变化时,引擎计算出变化方向(做多/做空)和变化数量(合约张数)。
- 统一单位换算: 由于不同交易所的合约规格不同(OKX 按张数、Binance/Bybit 按基础币数量、Bitget/Gate 按张数),引擎统一将信号换算为基础资产数量(ETH),再转换为各交易所对应的下单单位。所有订单记录中的数量字段均以 ETH 为单位统一存储,确保跨交易所数据可比。
- 并发下单: 引擎查出所有订阅了该信号且状态正常的用户,根据各自选择的交易所和计算出的最终数量,并发调用对应交易所的 API 执行下单操作。
- 容错与超时: 引擎设有信号时效性校验(30 秒内有效),过期信号将被丢弃以防止极端行情下的滑点风险。
系统详细记录每一笔跟单操作的生命周期。
- 开仓单: 引擎成功开仓后,生成状态为
open(持仓中)的订单记录。 - 平仓单与盈亏计算: 收到平仓信号后,引擎执行平仓。平仓成功后,系统通过交易所 API 查询实际成交均价、手续费和已实现盈亏 (Realized PnL),确保与交易所官方数据完全一致。
- 利润分成触发: 若平仓订单产生净利润(盈亏 - 手续费 > 0),系统将自动触发多级收益分成计算,实时结算并更新各级推荐人的余额。
系统采用现代化的全栈 TypeScript 架构,前后端分离,保证了开发效率和运行性能。
| 模块 | 技术选型 | 说明 |
|---|---|---|
| 前端框架 | React 18 + Vite | SPA 单页应用,提供流畅的用户体验 |
| UI 组件库 | shadcn/ui + Tailwind CSS | 现代化组件库,支持暗色主题和响应式设计 |
| 后端框架 | Node.js + Express + tRPC | 端到端类型安全的 API 调用 |
| 数据库 | MySQL / MariaDB + Drizzle ORM | 关系型数据库存储核心业务数据 |
| 进程管理 | PM2 | 保证 Node.js 进程高可用和崩溃自动重启 |
| Web 服务器 | Nginx | 反向代理、HTTPS 证书自动续期 |
信号源为 OKX,各交易所的合约规格不同,引擎统一以 ETH 数量为中间单位进行换算:
| 交易所 | 合约规格 | 下单单位 | 换算方式 |
|---|---|---|---|
| OKX | 1张 = 0.1 ETH | 张数 | 张数 × 0.1 = ETH |
| Binance | 直接按 ETH 数量 | ETH | 直接使用 |
| Bybit | 直接按 ETH 数量 | ETH | 直接使用 |
| Bitget | 1张 = 0.01 ETH | 张数 | 张数 × 0.01 = ETH |
| Gate.io | 动态(从合约信息获取) | 张数 | 张数 × quanto_multiplier = ETH |
计算公式: 实际ETH数量 = 信号张数 × OKX合约面值(0.1) × 用户倍数
所有订单记录中的 signalQuantity(信号数量)和 actualQuantity(实际数量)均以 ETH 为单位存储,确保不同交易所用户的数据在管理后台可直接对比。
系统采用差额多级分成模型,确保每一级推荐人只赚取差额部分,总分成不超过交易者被扣除的比例。
分成触发条件:
- 只有产生净利润(已实现盈亏 - 手续费 > 0)的平仓订单才会触发分成。
- 亏损订单不扣除分成。
计算示例: 假设推荐链为:A(管理员,分成比例 10%)→ B(推荐人,分成比例 10%)→ C(交易者,分成比例 30%)。 C 的一笔平仓单产生 100 USDT 净利润。
- C 被扣除: 100 × 30% = 30 USDT。
- B 获得分成: 100 × (30% - 10%) = 20 USDT(C 的比例减去 B 自己的比例)。
- A 获得分成: 100 × (10% - 0%) = 10 USDT(B 的比例减去 A 自己的比例)。
规则约束:
- 给下级设置的比例不能低于自己的比例,且最高不超过 70%。
- 如果交易者没有推荐人,或差额计算后仍有剩余,剩余分成归平台(管理员账户)所有。
充值流程:
- 用户在"充值提现"页面获取专属 BSC 地址(首次使用时从 HD 钱包派生)。
- 用户向该地址转入 USDT(BEP-20)。
- 系统通过 BSCScan API 和 RPC 节点双重机制自动扫描,检测到转账后自动入账,或由用户手动提交交易哈希经管理员审核入账。
归集流程:
- 管理员在后台点击"归集资金",系统自动将各子地址的 USDT 转回主钱包。
- 归集前需确保主钱包有足够 BNB 支付 Gas 费(建议保持 0.05 BNB 以上)。
提现流程:
- 用户填写提现地址和金额。
- 系统扣除余额并创建提现申请。
- 管理员在后台审核,批准后手动打款并填写交易哈希。
系统部署于 AWS Lightsail 新加坡节点,采用 Node.js + PM2 + Nginx 架构。
- Node.js v20+
- PM2
- MariaDB / MySQL 8.0+
- Nginx
DATABASE_URL="mysql://copytrader:password@localhost:3306/copy_trading"
JWT_SECRET="your-secure-jwt-secret"
ENCRYPTION_KEY="your-aes-256-encryption-key"
BSC_MASTER_MNEMONIC="your-hd-wallet-mnemonic"
BSC_MAIN_WALLET="your-main-wallet-address"
BSCSCAN_API_KEY="your-bscscan-api-key"# 1. 安装依赖
npm install --legacy-peer-deps
# 2. 前端构建(生成 dist/public)
npm run build
# 3. 启动服务 (PM2)
pm2 start ecosystem.config.cjs
# 4. 查看运行状态
pm2 status
pm2 logs copy-tradingcd /www/wwwroot/copy-trading
# 拉取最新代码(如已配置 git)
# git pull origin main
# 重新构建
npm run build
# 重启服务
pm2 restart copy-tradingserver {
listen 80;
server_name winningwin.pro www.winningwin.pro;
location / {
proxy_pass http://127.0.0.1:3001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}- API 白名单:OKX 信号源的 API Key 必须将服务器的 IPv4 和 IPv6 地址均加入白名单,否则 WebSocket 将报
4001 Login failed错误。 - Bybit 持仓模式:用户的 Bybit 账户必须开启双向持仓(对冲)模式,否则下单时会报
10001 position idx not match错误。 - HTTPS 证书:系统已配置 Let's Encrypt 证书自动续期(cron 定时任务)。
- 多实例运行:PM2 应配置为
fork模式(instances: 1),避免多进程导致 WebSocket 重复连接和订单重复执行。 - BNB Gas 费:主钱包需保持足够 BNB(建议 0.05 BNB 以上)用于 USDT 归集时支付 Gas。
| 日期 | 版本 | 变更内容 |
|---|---|---|
| 2026-04-11 | v1.4 | 统一所有交易所订单数量单位为 ETH,修复跨交易所数量显示不一致问题 |
| 2026-04-11 | v1.3 | 修复 Bybit 签名算法错误(签名字符串应使用 apiKey 而非 secretKey) |
| 2026-04-10 | v1.2 | 修复币安 PnL 计算,改为直接使用交易所 API 返回的 realizedPnl |
| 2026-03-27 | v1.1 | 完善多交易所支持(Bybit、Bitget、Gate.io),优化仓位计算逻辑 |
| 2026-03-23 | v1.0 | 初始版本发布,支持 OKX 信号源 + Binance/OKX 跟单 |