Skip to content

风险监控

一、EA 功能与风控背景

我们今天讲解一个特殊的 EA,其核心逻辑是“抛硬币式交易”(随机开多/空),旨在通过简单场景介绍账户风险监控体系。这类风控手段常用于:

  • 比赛规则限制:如账户总回撤 ≤10%、单日回撤 ≤5%等。
  • 风险资金平台:平台通过苛刻规则控制资金风险(如单日亏损笔数限制),筛选合格操盘手。

二、核心风控规则

  1. 总账户回撤控制

    • 设定允许的最大回撤比例(如 40%),当账户利润回撤超过该比例时,暂停交易。
  2. 每日回撤控制

    • 每日凌晨记录账户初始余额,以该余额为基准计算当日最大允许亏损(如 5%)。
    • 示例:1 月 24 日凌晨余额 100,000 美元,当日最大允许亏损为 5,000 美元(100,000×5%)。
  3. 每日交易笔数控制

    • 限制单日最大交易笔数(如 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. 总账户回撤:若账户净值 < 初始加载时的余额 ×(1-account_max_dd),禁止交易。
    2. 单日回撤:若当前余额 < day_balance×(1-day_max_dd),禁止交易。
    3. 交易笔数:若当日交易笔数 ≥ day_max_positions_total,禁止交易。

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 笔。
  • 演示场景
    1. 初始资金 10,000 美元,单日允许亏损 500 美元。
    2. 交易笔数超限或回撤超标时,图表显示红色警告并禁止交易。
    3. 次日凌晨重置当日初始余额,恢复风控计算。

五、总结与扩展

  • 核心价值:通过简单 EA 理解账户级风控(总回撤、单日回撤、交易笔数)。
  • 扩展方向:添加单日最大盈利、仓位限制等规则,使用全局变量实现多 EA 协同风控。
  • 课后任务:修改每日亏损笔数控制逻辑,完善风控体系。

Talk is cheap, show me the code!