Appearance
风险监控
一、EA 功能与风控背景
我们今天讲解一个特殊的 EA,其核心逻辑是“抛硬币式交易”(随机开多/空),旨在通过简单场景介绍账户风险监控体系。这类风控手段常用于:
- 比赛规则限制:如账户总回撤 ≤10%、单日回撤 ≤5%等。
- 风险资金平台:平台通过苛刻规则控制资金风险(如单日亏损笔数限制),筛选合格操盘手。
二、核心风控规则
总账户回撤控制
- 设定允许的最大回撤比例(如 40%),当账户利润回撤超过该比例时,暂停交易。
每日回撤控制
- 每日凌晨记录账户初始余额,以该余额为基准计算当日最大允许亏损(如 5%)。
- 示例:1 月 24 日凌晨余额 100,000 美元,当日最大允许亏损为 5,000 美元(100,000×5%)。
每日交易笔数控制
- 限制单日最大交易笔数(如 10 笔),超过则禁止开仓。
- 课后作业:将“每日交易笔数”改为“每日亏损笔数”控制(如允许单日最多 14 笔亏损,第 15 笔时停止交易)。
三、实现细节
1. 外部参数与全局变量
参数:
account_max_dd
:总账户最大回撤比例(如 40%)。day_max_dd
:单日最大回撤比例(如 5%)。day_max_positions_total
:单日最大交易笔数(如 10 笔)。hide_chart
:隐藏图表无关信息(便于监控)。
全局变量方法:
get_account_balance()
:获取账户余额。get_account_equity()
:获取账户净值。get_account_currency()
:获取账户货币单位。
2. 图表对象与信息展示
- 通过
ObjectCreate
创建图表文本对象,显示风控状态(如总回撤、单日回撤、交易笔数)。 - 颜色标识:绿色(正常)、红色(亏损/超限)、白色(持平)。
- 隐藏图表技巧:在 MT5 测试环境中,通过手动设置网格线、蜡烛线颜色为黑色,实现图表简化。
3. 核心逻辑:on_tick
与风控检查
交易逻辑:随机开多/空,固定 10 点止盈止损,使用账户 1%资金计算手数。
每日回撤重置:
- 每日凌晨记录当日初始余额(
day_balance
),作为当日回撤计算基准。 - 遍历历史订单,计算当日已结算利润(含手续费、隔夜费)和交易笔数。
- 每日凌晨记录当日初始余额(
风控判断:
- 总账户回撤:若账户净值 < 初始加载时的余额 ×(1-
account_max_dd
),禁止交易。 - 单日回撤:若当前余额 <
day_balance
×(1-day_max_dd
),禁止交易。 - 交易笔数:若当日交易笔数 ≥
day_max_positions_total
,禁止交易。
- 总账户回撤:若账户净值 < 初始加载时的余额 ×(1-
4. 多 EA 共享风控状态:全局变量
- 问题:单 EA 的局部变量无法被其他 EA 获取,需通过全局变量同步状态。
- MQL5 实现:
GlobalVariableSet("global_is_trade_allowed", 1)
:设置允许交易(1 为允许,-1 为禁止)。GlobalVariableGet("global_is_trade_allowed")
:其他 EA 读取状态,统一控制交易。
- 特性:全局变量值存储在硬盘,MT5 重启后不丢失。
5. 定时器优化:on_timer
- 痛点:
on_tick
高频触发风控计算,占用资源。 - 优化:通过
on_timer
定时执行(如每隔 60 秒),减少计算频率。cpp// 在on_init中启动定时器(单位:秒) SetTimer(60); // 每分钟执行一次on_timer
- 注意:需在
on_deinit
中清除定时器,避免资源泄漏。
四、盘面演示与效果
- 参数设置:总回撤 20%,单日回撤 5%,单日最大交易笔数 10 笔。
- 演示场景:
- 初始资金 10,000 美元,单日允许亏损 500 美元。
- 交易笔数超限或回撤超标时,图表显示红色警告并禁止交易。
- 次日凌晨重置当日初始余额,恢复风控计算。
五、总结与扩展
- 核心价值:通过简单 EA 理解账户级风控(总回撤、单日回撤、交易笔数)。
- 扩展方向:添加单日最大盈利、仓位限制等规则,使用全局变量实现多 EA 协同风控。
- 课后任务:修改每日亏损笔数控制逻辑,完善风控体系。