MT5EA / 策略编译通过 · EX5 52KB 自动发布 101 5

持仓限制控制器 - 自动风控系统

taiyu1983·1 个月前发布

实时显示持仓统计,自动监控总手数,达到限制后禁止新开仓并自动平掉超限订单,提供一键平仓、移动止盈、固定止损、挂单价止盈功能

持仓限制控制器 - 自动风控系统

效果示意图 · AI 根据源码绘制,仅示意画了哪些元素,细节以实际运行为准

PositionLimitController.mq5预览 35 / 1068 行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#property copyright "XAUOF 指标工坊"
#property version   "1.40"
#property strict

#include <Trade\Trade.mqh>

//--- 可调参数
input double   MaxTotalLots = 10.0;        // 最大总手数限制(0=不限制)
input bool     AutoCloseLimitExcess = true; // 超限自动平仓(true=自动平,false=仅警告)
input int      TrailingStopPoints = 300;   // 移动止盈点数(0=不启用)
input int      FixedStopLossPoints = 500;  // 固定止损点数(用于一键设置)
input int      BreakEvenPoints = 200;      // 挂单价止盈点数(盈利超过此值移动到开仓价)
input int      InitPanelX = 20;            // 面板初始左边距(像素)
input int      InitPanelY = 30;            // 面板初始上边距(像素)
input int      PanelWidth = 340;           // 面板宽度(像素)
input int      PanelHeight = 360;          // 面板高度(像素)
input color    PanelBgColor = clrDarkSlateGray; // 面板背景色
input color    TitleBgColor = clrNavy;     // 标题栏背景色
input color    TextColor = clrWhite;       // 文字颜色
input color    BuyColor = clrLime;         // 多头数据颜色
input color    SellColor = clrRed;         // 空头数据颜色
input color    ProfitColor = clrGold;      // 盈亏数据颜色
input int      FontSize = 10;              // 字体大小
input int      RefreshMS = 500;            // 刷新间隔(毫秒)

//--- 全局变量
CTrade trade;
uint lastRefreshTime = 0;
datetime lastCheckTime = 0;
bool trailingStopEnabled = false;  // 移动止盈开关

// 面板位置和大小
int panelX, panelY;
int panelW, panelH;

已显示前 35 行,共 1068 行。完整源码仅对 xauusd.team VIP 开放查看与复制。

开通 VIP 查看完整源码

作品说明


使用说明

1. 安装方法

  • 将代码保存为 PositionLimitController.mq5,放入 MQL5/Experts 文件夹
  • 在 MetaEditor 中编译(F7)
  • 在 MT5 图表上拖入该 EA,勾选"允许自动交易"

2. 持仓统计显示(每项单独一行)

面板显示以下信息:

  • 多头手数:所有多头持仓的总手数(绿色)
  • 多头订单:多头订单数量(绿色)
  • 空头手数:所有空头持仓的总手数(红色)
  • 空头订单:空头订单数量(红色)
  • 总手数:多空合计的总手数(白色)
  • 总盈亏:所有持仓的盈亏总和,含隔夜利息(盈利绿色,亏损红色)
  • 手数限制警告:实时显示手数限制状态

3. 总手数限制功能

  • MaxTotalLots:设置最大总手数(例如 10.0 手)
  • AutoCloseLimitExcess:超限是否自动平仓
  • true:自动平掉最新的订单直到符合限制
  • false:仅警告提示
  • 三种状态显示:
  • 灰色:正常状态
  • 黄色:已使用 80% 以上手数
  • 红色:已达到或超过限制

4. 平仓按钮(第一行)

  • 一键平仓:关闭当前品种所有持仓(多空都平)
  • 一键平多:只关闭所有多头持仓
  • 一键平空:只关闭所有空头持仓

所有平仓操作都需要二次确认,防止误操作。

5. 止盈止损按钮(第二行)

  • 移动止盈:
  • 点击启用/停用移动止盈功能
  • 启用后按钮变亮绿色并显示 ●
  • 自动追踪价格,持续将止损向有利方向移动
  • 移动距离由 TrailingStopPoints 参数控制(默认 300 点)
  • 只会向保护浮盈的方向移动,不会放宽止损
  • 固定止损:
  • 一键为所有持仓设置固定止损
  • 距离开仓价 FixedStopLossPoints 点(默认 500 点)
  • 多单:开仓价 - 500 点
  • 空单:开仓价 + 500 点
  • 挂单价止盈:
  • 将盈利订单的止损移至开仓价(保本)
  • 只处理盈利超过 BreakEvenPoints 点的订单(默认 200 点)
  • 锁定利润,避免盈利回吐为亏损

6. 参数设置

  • MaxTotalLots:最大总手数限制(0 = 不限制)
  • AutoCloseLimitExcess:超限是否自动平仓
  • TrailingStopPoints:移动止盈点数(0 = 不启用)
  • FixedStopLossPoints:固定止损点数
  • BreakEvenPoints:挂单价止盈触发点数
  • InitPanelX/Y:面板初始位置
  • PanelWidth/Height:面板初始大小
  • RefreshMS:刷新间隔(毫秒)

7. 操作提示

  • 面板可拖动标题栏移动位置
  • 右下角可拖动调整大小
  • 所有操作都有日志记录在 MT5 的"专家"选项卡
  • 移动止盈启用时会在每个 Tick 自动执行
  • 固定止损和挂单价止盈需手动点击执行

8. 注意事项

  • 只统计和操作当前图表品种的持仓
  • 手数限制功能在 OnTrade() 事件中监控,新订单触发时立即检查
  • 移动止盈只会向有利方向移动止损,不会放宽
  • 挂单价止盈只处理达到盈利阈值且未设置保本的订单
  • 所有修改操作都有二次确认对话框,防止误操作

AI 解读根据源码逐行分析写成,供参考,以实际运行为准

这是什么

这是一个为 MT5 设计的持仓管理和风控工具,以面板形式显示当前品种的多空持仓统计(手数、订单数、总盈亏),并能设定总手数上限。当持仓手数超过限制时,EA 自动按开仓时间从新到旧平掉超限订单,防止过度持仓。同时提供一键平仓、移动止盈、固定止损、挂单价止盈等快捷操作,适合需要严格控制风险敞口或同时运行多个策略的交易者。

逻辑原理

持仓统计:每隔 500 毫秒(可调)扫描一次当前品种的所有持仓,分别统计多头手数、空头手数、订单数量和总盈亏(含隔夜利息),在面板上实时显示。

手数限制监控:在每次交易事件(OnTrade)和每秒 Tick 检查时,计算当前总手数。若超过 MaxTotalLots 设定值,根据 AutoCloseLimitExcess 参数决定是仅警告还是自动平仓。自动平仓时,EA 按开仓时间从新到旧排序所有订单,逐个平仓直到手数回到限制以下。

移动止盈:点击按钮启用后,每个 Tick 检查所有持仓,对多单将止损向上移至「当前买价 - TrailingStopPoints 点」,对空单向下移至「当前卖价 + TrailingStopPoints 点」。新止损必须比当前止损更有利且高于(多单)或低于(空单)开仓价,确保只锁定浮盈。

固定止损:点击后一次性为所有持仓设置距离开仓价 FixedStopLossPoints 点的止损(多单在下方,空单在上方)。

挂单价止盈(保本):扫描所有持仓,对盈利超过 BreakEvenPoints 点的订单,将止损移至开仓价,锁定保本。

参数说明

  • MaxTotalLots(默认 10.0):允许的最大总手数。设为 0 表示不限制。
  • AutoCloseLimitExcess(默认 true):超限时是否自动平仓。false 时只在日志中警告。
  • TrailingStopPoints(默认 300):移动止盈的跟踪点数。设为 0 则该功能不可用。
  • FixedStopLossPoints(默认 500):一键固定止损距离开仓价的点数。
  • BreakEvenPoints(默认 200):触发挂单价止盈的最小盈利点数。
  • InitPanelX / InitPanelY(默认 20 / 30):面板初始位置的左上角坐标(像素)。
  • PanelWidth / PanelHeight(默认 340 / 360):面板初始宽度和高度(像素),运行时可拖动右下角调整。
  • PanelBgColor / TitleBgColor / TextColor / BuyColor / SellColor / ProfitColor:面板和文字的颜色设置。
  • FontSize(默认 10):面板文字大小。
  • RefreshMS(默认 500):面板刷新间隔,单位毫秒。

怎么用

将代码保存为 .mq5 文件,放入 MT5 的 MQL5/Experts 文件夹,用 MetaEditor 编译后拖到任意图表上(只操作拖入图表对应的品种),勾选"允许自动交易"。面板会显示在图表左上角,拖动标题栏可移动,拖动右下角手柄可调整大小。

  • 查看统计:面板实时显示当前品种的多空手数、订单数、总盈亏和手数限制状态(灰色正常,黄色接近限制,红色超限)。
  • 一键平仓:点击「一键平仓」「一键平多」「一键平空」按钮,弹窗二次确认后执行。
  • 移动止盈:点击「移动止盈」按钮启用(按钮变亮绿色并显示 ●),EA 自动追踪价格调整止损;再次点击停用。
  • 固定止损:点击后弹窗确认,为所有持仓设置固定点数止损。
  • 挂单价止盈:点击后弹窗确认,对盈利订单将止损移至开仓价。

EA 只统计和操作挂载图表的品种,其他品种不受影响。

适用场景

  • 多策略叠加交易:同时运行多个 EA 或手动加仓时,用总手数限制防止仓位失控。
  • 日内短线或剥头皮:快速开平仓时,用移动止盈和一键平仓提高操作效率。
  • 品种不限:适用于任何 MT5 交易品种,但点数参数需根据品种和周期调整(如外汇、黄金、指数的点值差异大)。
  • 周期不限:EA 不依赖 K 线数据,任意周期图表均可使用。

不适合无法容忍自动平仓的场景(如长线持仓、网格策略希望保留所有订单)。若需手动控制每笔平仓,将 AutoCloseLimitExcess 设为 false。

风险提示

  1. 自动平仓不可逆:启用 AutoCloseLimitExcess 后,超限订单会立即被平掉,无法恢复。建议初次使用时先在模拟盘测试限制值是否合理。
  2. 按时间平仓可能不是最优:代码按开仓时间从新到旧平仓,不考虑盈亏或品种。如果需要按盈亏或其他规则平仓,需修改 CloseExcessPositions 函数。
  3. 移动止盈可能过早平仓:TrailingStopPoints 设置过小会导致价格小幅回撤时触发止损,截断盈利。根据品种波动性和交易周期调整点数(波动大的品种如黄金可能需要更大的跟踪距离)。
  4. 点数参数需校准:外汇 5 位报价品种(如 EURUSD)的 1 点是 0.00001,4 位品种(如 USDJPY)是 0.01,黄金可能是 0.01 或 0.1。参数中的"点"是 MT5 的 Point 单位,不同品种含义不同,需根据实际报价调整数值。
  5. 滑点和延迟:一键平仓和自动超限平仓都使用市价单,在快速行情或流动性差的品种上可能产生滑点。
  6. 仅操作当前品种:EA 只统计和平仓挂载图表的品种,不管理账户内其他品种的持仓。如果需要全账户手数限制,需修改代码去掉品种过滤。
  7. 不保证订单一定能平:平仓操作可能因网络延迟、经纪商限制、流动性不足等原因失败,代码会在日志中记录失败订单但不会重试。

常见问题

这个 EA 会自动开仓吗
不会。它只负责监控和管理现有持仓,不会主动开新单。所有开仓由用户手动操作或其他 EA 执行。
手数限制功能会限制其他品种吗
不会。EA 只统计和限制挂载图表对应品种的持仓,账户中其他品种不受影响。如果需要限制全账户手数,需修改代码去掉 `POSITION_SYMBOL != _Symbol` 的过滤。
移动止盈会重绘或取消已设置的止损吗
移动止盈只会向保护浮盈的方向移动止损(多单向上,空单向下),不会放宽或取消止损。如果当前止损已经比新计算的更有利,EA 不会修改。
默认参数适合什么品种和周期
默认值(移动止盈 300 点、固定止损 500 点)以 5 位报价的外汇品种(如 EURUSD)为参考,大致对应 30 / 50 个基点。黄金等波动大的品种需要成倍增加点数,4 位报价品种需要除以 10。周期不限,但日内短线建议缩小点数,长线则放大。
超限自动平仓后能恢复订单吗
不能。平仓操作不可逆,被平掉的订单无法恢复。建议先在模拟账户测试 MaxTotalLots 和 AutoCloseLimitExcess 的组合,确认符合预期再用于实盘。

Position Limit Controller EA for MT5

An EA that displays real-time position statistics, monitors total lot size, automatically closes excess positions when limits are reached, and provides one-click close, trailing stop, fixed stop-loss, and break-even functions for MT5 multi-strategy risk management.

A short source preview is shown above for visitors; full source, copy and compiled EX5 files are available to VIP members.

基于本作的二次创作1

  • 持仓限制控制器 - 追踪止盈版二创MT5 · EA / 策略taiyu1983 · 1 个月前

    移动止盈改成追踪止盈;刚才这份代码用 MetaEditor 编译没通过,报了 8 个错误: 第 1 行第 1 列:unexpected end of program 出错的那行代码:// 第 863 行第 1 列:unbalanced parentheses 出错的那行代码:{ 第 142 行第 7 列:undeclared identifier 'UpdatePanel' 出错的那行代码:UpdatePanel(); 第 142 行第 19 列:')' - expression expected 出错的那行代码:UpdatePanel(); 第 521 行第 10 列:undeclared

评论

后可以留言,比如反馈用着怎么样、想加什么功能。

还没有人评论,来抢个沙发。