Skip to content

WrbMax/copy-trading-platform-copy

Repository files navigation

数字货币全自动跟单系统 (Copy Trading Platform)

数字货币全自动跟单系统是一个面向加密货币衍生品交易的高性能自动化跟单平台。其核心价值在于将专业交易员(信号源)的交易策略实时、精准地复制到普通用户的独立交易所账户中,同时通过多级分销和自动化利润分成机制,实现平台、交易员、推广者和用户的多方共赢。

系统支持跨交易所跟单,信号源在 OKX 交易,用户可在 Binance、OKX、Bybit、Bitget、Gate.io 等主流交易所自动执行对应比例的订单。


1. 核心业务流程

1.1 账户与分销体系

本系统采用强绑定的邀请机制,所有新用户注册必须填写邀请码。这构成了平台的分销和利润分成基础。

  • 注册与绑定: 用户通过邮箱注册,必须输入上级的邀请码。系统自动生成该用户的专属邀请码,并建立 referrerId 推荐关系树。
  • 层级关系: 用户的层级关系决定了后续盈利订单的利润分成流向,支持多级差额分成计算。
  • 交易所 API 绑定: 用户在个人中心绑定自己真实交易所的 API Key 和 Secret(部分交易所需要 Passphrase)。系统对这些凭证进行强加密存储(AES-256-GCM),并在绑定时进行连通性测试。

1.2 信号源与策略管理

信号源是交易信号的发出者,由管理员在后台配置和管理。

  • 信号源接入: 管理员配置信号源的名称、交易对(如 ETH-USDT-SWAP)、参考仓位、预期月化收益等。
  • 信号获取方式: 核心引擎通过 OKX 的私有 WebSocket 频道,实时监听信号源账户的仓位变化(开仓、平仓、加仓、减仓)。
  • 用户订阅: 用户在前端"策略中心"浏览可用的信号源,选择绑定好的交易所 API,设置跟单倍数(Multiplier),并开启策略。开启策略前,系统会校验用户平台余额是否充足。

1.3 核心跟单执行引擎 (Copy Engine)

跟单引擎是系统的心脏,负责毫秒级的信号处理和订单分发。

  • 信号解析: 当监听到信号源仓位变化时,引擎计算出变化方向(做多/做空)和变化数量(合约张数)。
  • 统一单位换算: 由于不同交易所的合约规格不同(OKX 按张数、Binance/Bybit 按基础币数量、Bitget/Gate 按张数),引擎统一将信号换算为基础资产数量(ETH),再转换为各交易所对应的下单单位。所有订单记录中的数量字段均以 ETH 为单位统一存储,确保跨交易所数据可比。
  • 并发下单: 引擎查出所有订阅了该信号且状态正常的用户,根据各自选择的交易所和计算出的最终数量,并发调用对应交易所的 API 执行下单操作。
  • 容错与超时: 引擎设有信号时效性校验(30 秒内有效),过期信号将被丢弃以防止极端行情下的滑点风险。
  • 余额保护: 当用户平台余额不足以支付潜在的分成或手续费时,引擎会自动停止该用户的所有策略。

1.4 订单状态与盈亏结算

系统详细记录每一笔跟单操作的生命周期。

  • 开仓单: 引擎成功开仓后,生成状态为 open(持仓中)的订单记录。
  • 平仓单与盈亏计算: 收到平仓信号后,引擎执行平仓。平仓成功后,系统通过交易所 API 查询实际成交均价、手续费和已实现盈亏 (Realized PnL),确保与交易所官方数据完全一致。
  • 利润分成触发: 若平仓订单产生净利润(盈亏 - 手续费 > 0),系统将自动触发多级收益分成计算,实时结算并更新各级推荐人的余额。

2. 技术架构与选型

系统采用现代化的全栈 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 证书自动续期

3. 多交易所仓位计算规则

信号源为 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 为单位存储,确保不同交易所用户的数据在管理后台可直接对比。


4. 多级收益分成逻辑

系统采用差额多级分成模型,确保每一级推荐人只赚取差额部分,总分成不超过交易者被扣除的比例。

分成触发条件:

  • 只有产生净利润(已实现盈亏 - 手续费 > 0)的平仓订单才会触发分成。
  • 亏损订单不扣除分成。

分成规则更新(v1.7): 总扣取比例为 40%。其中 20% 按照原有多级差额逻辑分配给上级(包括分享奖、身份奖、平级奖),剩余的 20% 自动流入平台的流动性池(管理员可在后台查看和调整)。

计算示例: 假设 C 的一笔平仓单产生 100 USDT 净利润。

  1. C 被扣除: 100 × 40% = 40 USDT。
  2. 流动性池: 100 × 20% = 20 USDT(固定流入平台流动性池)。
  3. 上级分配池: 100 × 20% = 20 USDT(用于分配给 A 和 B)。
  4. B 获得分享奖/身份奖: 根据 B 的有效分享人数和 P 身份,从 20 USDT 的分配池中按比例提取。
  5. A 获得身份奖差额: 根据 A 的 P 身份,赚取与 B 之间的级差收益。

分享奖规则(直接上级获得):

根据直接上级(B)的有效分享人数(余额 ≥ 100 USDT 的直接邀请人数量),从分配池中按以下比例提取分享奖:

有效分享人数 分享奖比例
3–5 人 8%
6–8 人 10%
9+ 人 15%

P 身份体系(身份奖):

P 身份由用户系统内所有成员的累计分润池总额(即 umbrellaPerformance,按分配池 20% 计算)自动决定,无需手动申请,也可由管理员手动设置:

P 身份 升级所需伞下分润池累计 身份奖比例
P1 ≥ 3,000 USDT 10%
P2 ≥ 9,000 USDT 20%
P3 ≥ 30,000 USDT 30%
P4 ≥ 100,000 USDT 35%
P5 ≥ 300,000 USDT 40%
P6 ≥ 1,000,000 USDT 45%
P7 ≥ 3,000,000 USDT 55%

身份奖采用差额制:若 B 为 P2(20%),A 为 P3(30%),则 A 从分配池中额外获得 30% - 20% = 10% 的差额奖励。

平级奖: 若链上存在与自己 P 身份相同的上级,该上级可获得与自己相同比例的平级奖(same_rank 类型),防止平级压制。

规则约束:

  • 给下级设置的比例不能低于自己的比例,且最高不超过 70%。
  • 如果交易者没有推荐人,或差额计算后仍有剩余,剩余分成归平台(管理员账户)所有。

5. Route 积分系统

系统内置了 Route 积分奖励机制(原积分系统),用于补偿用户的交易亏损:

  • 发放条件: 仅当用户的跟单订单通过 API 信号 触发平仓,且产生净亏损时,才会自动发放。
  • 发放比例: 净亏损 1 USDT = 1 Route 积分。
  • 发放时机: 订单平仓时实时计算并自动到账,用户可在"Route 中心"查看实时流水记录。
  • 注意: 手动平仓、爆仓清算等非 API 信号触发的亏损,不计入 Route 积分奖励。

6. 充值与资金流转

系统内置了完整的 Web3 钱包体系,实现自动化的资金管理。

充值流程(双重检测机制):

  1. 用户在"充值提现"页面获取专属 BSC 地址(首次使用时从 HD 钱包派生)。
  2. 用户向该地址转入 USDT(BEP-20)。
  3. 系统每 3 分钟自动扫描,采用 BSCScan API + RPC 余额快照 双重检测机制。检测到转账后自动入账,防止漏单或重复到账。

归集流程:

  • 管理员在后台点击"归集资金",系统自动将各子地址的 USDT 转回主钱包。
  • 归集前需确保主钱包有足够 BNB 支付 Gas 费(建议保持 0.05 BNB 以上)。

HD 钱包管理:

  • 管理员可在后台"钱包设置"中导入自己的 12/24 位助记词。
  • 系统提供重置并导入新钱包功能,可一键清除旧子地址并重新派生新地址体系。

提现流程:

  1. 用户填写提现地址和金额。
  2. 系统扣除余额并创建提现申请。
  3. 管理员在后台审核,批准后手动打款并填写交易哈希。

7. 安全机制

系统在设计时充分考虑了金融级应用的安全要求:

  1. API Key 强加密: 用户和平台的交易所 API Key、Secret、Passphrase 等敏感信息,均采用 AES-256-GCM 算法加密存储于数据库中,密钥由环境变量 ENCRYPTION_KEY 独立管理。
  2. 防 SQL 注入: 所有数据库操作均通过 Drizzle ORM 构建,针对复杂的 IN 查询或数组拼接,严格执行类型安全过滤(如强制转换为 Number)。
  3. 并发安全: 收益分成、充值到账等核心资金操作均在数据库事务(Transaction)中执行,防止并发导致的资金数据不一致。
  4. 权限控制: 严格的路由级别中间件拦截,普通用户无法越权访问 /admin 管理后台及接口。

8. 生产环境部署指南

系统部署于 AWS Lightsail 或阿里云等云服务器,采用 Node.js + PM2 + Nginx 架构。

8.1 环境要求

  • Node.js v20+
  • PM2
  • MariaDB / MySQL 8.0+
  • Nginx

8.2 环境变量配置 (ecosystem.config.cjs)

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"

8.3 构建与启动

# 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-trading

8.4 更新部署(服务器上执行)

cd /www/wwwroot/copy-trading
# 拉取最新代码
git pull origin main
# 重新构建
npm run build
# 重启服务
pm2 restart copy-trading

8.5 注意事项

  • API 白名单:OKX 信号源的 API Key 必须将服务器的 IPv4 和 IPv6 地址均加入白名单,否则 WebSocket 将报 4001 Login failed 错误。
  • Bybit 持仓模式:用户的 Bybit 账户必须开启双向持仓(对冲)模式,否则下单时会报 10001 position idx not match 错误。
  • 多实例运行:PM2 应配置为 fork 模式(instances: 1),避免多进程导致 WebSocket 重复连接和订单重复执行。
  • BNB Gas 费:主钱包需保持足够 BNB(建议 0.05 BNB 以上)用于 USDT 归集时支付 Gas。

9. 变更记录

日期 版本 变更内容
2026-04-20 v1.8 深度逻辑安全修复:引入 adjustBalance/adjustPoints 原子操作彻底解决资金和验证码并发竞态漏洞;增加 BSC 提现地址强校验;修复拒绝提现退款事务顺序;策略开启强制风险确认;核心页面全面接入国际化 (i18n) 双语支持;清理大量冗余代码。
2026-04-19 v1.7 全面重构收益分成与积分系统:收益扣取提至40%(新增20%入流动性池);积分更名为Route,按API平仓净亏损1:1实时发放;全站词汇规范化(团队→系统,直推→分享,伞下→系统,级别→身份);系统页面新增分享奖与身份奖实时流水展示;新增暗黑科技风对外宣传落地页。
2026-04-17 v1.6 深度代码审查与优化:修复全量查询性能瓶颈、防 SQL 注入;新增 HD 钱包重置与导入功能;修复前端多处 UI 状态与金额显示问题。
2026-04-15 v1.5 修复后台充值统计数据不准确问题;统一全站金额显示精度;优化自动充值双重检测逻辑。
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 跟单。

About

Copy of copy-trading-platform

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages