自由职业 · TradersFlow (TRFC)
MT5 风控引擎
基于 MetaQuotes 原生 Manager API 的 C#/.NET 服务,以及在数秒内执行每个交易账户亏损规则的实时监控,服务于线上自营交易平台。
- 角色
- 全栈工程师,MT5 集成负责人
- 类型
- 为 TradersFlow (TRFC) 做的自由职业项目
- 时间
- 2025.11 至 2026.06
- 状态
- 已投产
平台原本通过 MetaTrader 5 的 HTTP Web API 读取交易数据,一次持仓查询可能需要好几秒;违规检查由后端定时任务执行,交易者可能在超限后仍继续交易数分钟。我用原生 Manager API 构建了 C#/.NET 7 服务,从其实时推送缓存中读取数据,并实现每隔几秒检查所有活跃账户亏损规则的监控器。在此之外,我还构建了后端客户端、健康监控、营销归因,以及运营团队每天使用的管理工具。
我做了什么
- 01用 C#/.NET 7 基于原生 Manager API 构建 MetaTrader 5 集成服务:账户、持仓、成交、订单与每日历史接口,批量读取和交易权限控制;通过 API Key 与 IP 白名单保护,以独立的模拟盘和实盘 Windows 服务运行。
- 02把持仓读取从耗时数秒的网络请求,改为读取 Manager API 的本地推送缓存。
- 03设计实时违规监控:每隔几秒,依据后端发布到 Redis 的规则快照,检查每个活跃账户的日亏损、最大亏损和即时账户规则,并通过幂等的后端回调判定违规账户失败。
- 04构建端到端营销归因:在官网和哈希路由的交易者 App 中采集首次触达的 UTM 与点击 ID,活动短链接,点击 → 注册 → 试用 → 购买的漏斗,以及同期群留存报表。
- 05用 React 19、TypeScript 与 React Query 重建管理后台:KYC 审核、带安全校验的 MT5 账户操作(手动通过/失败、冻结、一键平仓)、联盟报表和促销向导。
- 06新增登录 IP 与地理位置历史及重复 IP 风险标记,用于反欺诈审核;为 MT5 服务加入健康监控、告警邮件、崩溃通知和自动重连。
值得一讲的故事
最难的一次:高并发下,部分账户读到了别的账户的数据。我定位到 MT5 SDK 本身不是线程安全的,于是串行化所有 SDK 调用,对连接与关闭生命周期加锁,并加入登录号不一致保护。现在任何账户晋级前,其净值都必须在两个独立的 MT5 数据源上一致。
“幽灵违规”问题:权限位掩码被取反,导致已判定失败的账户仍能交易。我修正位运算并在服务器上验证,同时让失败流程在 MT5 拒绝修改时直接抛错,保证数据库与 MT5 不会悄悄不一致。
把失败判定统一到一个共享服务中,消除了隔夜利息重复计算以及无日限额的即时账户被误判失败的问题。
编写部署手册:先停止两个服务,在监控关闭的情况下用一个已知违规和一个正常账户验证,最后才开启监控。
数字
- 6 个月约 250 次提交
- 5 个代码仓库
- 约每 5 秒一次违规检查
- 晋级前比对 2 个净值来源
技术栈
- C#
- .NET 7
- ASP.NET Core
- MT5 Manager API
- Serilog
- Redis
- TypeScript
- AdonisJS 5
- MySQL
- React 19
- React Query
- Zustand
- Tailwind CSS
- Windows Server
- AWS