MT5EA / 策略 二创编译通过 · EX5 51KB 自动发布 75 0

持仓限制控制器 - 追踪止盈版

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

持仓限制控制器 - 追踪止盈版

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

PositionLimitController_TrailingProfit.mq5预览 35 / 992 行
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
//
// 基于 XAUOF 社区作品 #33《持仓限制控制器 - 自动风控系统》(作者 taiyu1983)二次创作
// 本版改动:将所有"移动止盈"术语统一改为"追踪止盈"

#property copyright "XAUOF 指标工坊"
#property version   "1.50"
#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;  // 追踪止盈开关

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

开通 VIP 查看完整源码

作品说明

刚才的代码被截断了,导致文件不完整、括号不配对,而且遗漏了几个关键函数(CreatePanel、UpdatePanel、UpdatePanelPosition、UpdatePanelSize、ClosePositionsByType)。现在补全所有缺失的部分,输出完整可编译的版本。

使用说明

  1. 安装方法:
  • 将代码保存为 PositionLimitController_TrailingProfit.mq5
  • 在 MetaEditor 中编译
  • 拖到图表上激活
  1. 参数设置:
  • MaxTotalLots:设置总手数上限(0 = 不限制)
  • AutoCloseLimitExcess:超限是自动平仓还是仅警告
  • TrailingStopPoints:追踪止盈的点数间距(0 = 不启用)
  • FixedStopLossPoints:一键设置固定止损的点数
  • BreakEvenPoints:盈利多少点后触发保本(止损移到开仓价)
  1. 面板功能:
  • 标题栏:按住可拖动整个面板
  • 右下角手柄:拖动可调整面板尺寸
  • 一键平仓:平掉当前品种所有持仓
  • 一键平多/平空:分别平掉多头或空头
  • 追踪止盈:点击启用后,止损会自动跟随行情向有利方向移动
  • 固定止损:为所有持仓批量设置固定点数的止损
  • 挂单价止盈:盈利超过设定点数后,自动把止损移到开仓价保本
  1. 注意事项:
  • 追踪止盈只在启用后生效,点击按钮切换开关(绿色亮起 = 已启用)
  • 超限自动平仓会优先平掉最新的订单
  • 所有风控操作都只针对当前图表的交易品种
  • 面板数据每 500 毫秒刷新一次

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

这是什么

一个 MT5 自动风控系统,主要用来防止仓位失控。它能监控你当前品种的总手数,超过设定的上限后自动平仓或发出警告。同时还集成了追踪止盈、一键批量设止损、保本移损等功能,并且提供一个可以拖动调整的图形化面板,方便你随时手动干预。

逻辑原理

手数限制与自动平仓 每秒检查一次当前品种所有持仓的总手数。如果超过 MaxTotalLots 设定的上限,且 AutoCloseLimitExcess 为 true,则按开仓时间从新到旧依次平仓,直到总手数降到限制以内。如果设为 false,只在日志里警告,不会自动平。

追踪止盈(Trailing Stop) 点击面板上的"追踪止盈"按钮启用后(按钮变绿),每个 Tick 都会检查所有持仓。对于多单,如果当前价格减去 TrailingStopPoints 点后得到的新止损比开仓价高且比当前止损高,就把止损移上去;空单反之。这样止损会跟着行情向有利方向移动,但不会回撤。

固定止损 点击"固定止损"按钮后,会给所有持仓批量设置止损:多单止损 = 开仓价 - FixedStopLossPoints 点,空单止损 = 开仓价 + FixedStopLossPoints 点。适合开仓时没设止损、现在想统一补上的场景。

保本功能(Break Even) 点击"挂单价止盈"按钮后,检查每个持仓的盈利点数。如果盈利超过 BreakEvenPoints 设定值,且当前止损还没达到开仓价(或没设止损),就把止损移到开仓价,锁定盈利。

参数说明

  • MaxTotalLots(10.0):总手数上限。设为 0 表示不限制。这里的"总手数"是当前品种所有持仓的手数加总,比如你有 3 单每单 0.5 手、2 单每单 1 手,总手数就是 3.5 手。
  • AutoCloseLimitExcess(true):超限后是否自动平仓。true = 自动平掉最新的订单直到手数达标;false = 只在日志里警告,不动手。
  • TrailingStopPoints(300):追踪止盈的点数间距。比如设 300 点,多单的止损会始终保持在当前价下方 300 点的位置,且只会向上移不会向下移。设为 0 则不启用(但仍可通过面板按钮手动启用)。
  • FixedStopLossPoints(500):一键批量设置止损时的点数。点击面板上的"固定止损"按钮后,所有持仓都会被设上这个点数的止损。
  • BreakEvenPoints(200):触发保本的盈利点数。当某个持仓盈利超过这个值,点击"挂单价止盈"按钮后,它的止损会被移到开仓价。
  • InitPanelX / InitPanelY(20 / 30):面板初始显示的左边距和上边距(像素)。你可以拖动标题栏来移动面板。
  • PanelWidth / PanelHeight(340 / 360):面板的宽度和高度(像素)。可以拖动右下角的手柄来调整大小。
  • PanelBgColor / TitleBgColor / TextColor 等:面板的配色方案,按你喜欢的改。
  • RefreshMS(500):面板数据刷新间隔,单位毫秒。500 毫秒 = 0.5 秒刷新一次。

怎么用

  1. 在 MetaEditor 里编译这个 .mq5 文件。
  2. 把 EA 拖到你要监控的品种图表上(比如 XAUUSD 或 EURUSD)。
  3. 在参数设置界面调整 MaxTotalLots、TrailingStopPoints 等参数,确认后点"确定"。
  4. 面板会显示在图表左上角,实时显示多空手数、总手数、浮动盈亏等信息。
  5. 点击面板按钮执行对应操作:
  • 一键平仓:平掉当前品种所有持仓
  • 一键平多 / 平空:只平多头或只平空头
  • 追踪止盈:切换追踪止盈开关(绿色亮起 = 已启用)
  • 固定止损:给所有持仓批量设置固定点数的止损
  • 挂单价止盈:盈利达标的单子移止损到开仓价保本
  1. 可以拖动标题栏移动面板位置,拖动右下角手柄调整面板大小。

适用场景

适合

  • 手动交易者想加一层自动风控,防止仓位过重导致爆仓。
  • 跑多个 EA 或信号源时,需要统一控制总手数上限。
  • 趋势行情里想用追踪止盈锁定利润,让盈利单跑得更远。
  • 需要经常手动干预(一键平仓、调整止损)的交易风格。
  • 日内交易,比如黄金、外汇主流货币对。

不太适合

  • 长线持仓策略(追踪止盈的点数间距可能太小,容易被日常波动止损)。
  • 高频剥头皮(每 500 毫秒刷新一次面板可能有延迟)。
  • 需要跨品种汇总手数的场景(这个 EA 只监控当前图表的品种)。

风险提示

  1. 追踪止盈不是万能的:它只能在启用后生效,启用前已经开的单子不会自动追踪,需要手动点按钮。而且追踪止盈本质是移动止损,一旦行情回撤触发止损就会平仓,趋势没走完就可能被甩下车。
  2. 超限平仓按时间顺序:代码里写的是平掉最新的订单,如果你的最新单恰好是盈利的,它也会被平掉。没有按盈亏、按方向等更智能的平仓逻辑。
  3. 只管当前品种:如果你同时交易 XAUUSD 和 EURUSD,需要在两个图表上分别挂这个 EA,两边的手数限制是独立的。
  4. 网络延迟和滑点:自动平仓、修改止损都要向服务器发送请求,遇到行情剧烈波动或网络卡顿时可能成交价偏离预期。
  5. 保本功能是单向的:把止损移到开仓价后就锁定了,行情再回来也不会重新给你盈利空间,适合想"落袋为安"的场景,不适合想让单子继续浮动的策略。
  6. 参数需要测试:TrailingStopPoints、FixedStopLossPoints、BreakEvenPoints 这些点数设多少合适,取决于你的品种、周期、波动率,默认值不一定适合你的交易风格,建议先在模拟盘测试。

常见问题

追踪止盈会重绘吗?
不会重绘,因为它只是实时修改订单的止损价格,不在图表上画任何历史信号或指标线。
可以用在 XAUUSD 以外的品种吗?
可以。代码里没有限制交易品种,外汇、黄金、原油、指数都能用,但要根据品种的点值和波动特性调整 TrailingStopPoints 等参数。
MT4 能用吗?
不能。这是 MQL5 代码,只能在 MT5 平台运行。MT4 的语法和 API 不同,需要重新改写。
参数默认值适合什么周期?
TrailingStopPoints 300 点、FixedStopLossPoints 500 点,按黄金来算大约 30-50 美元,比较适合 H1(1 小时图)或 H4(4 小时图)的日内波段交易。M5 或 M15 这种小周期可能太宽,D1 日线级别又可能太窄,需要自己调。
超限自动平仓会平掉所有单子吗?
不会。它只平掉刚好超出限制的那部分手数,而且是按时间从新到旧平。比如限制 10 手,你现在 12 手,它就平掉最新的 2 手(或若干单加起来够 2 手)。

Position Limit Controller with Trailing Profit EA for MT5

An automated risk management EA that enforces position size limits, features trailing stop, fixed stop-loss, break-even function, and a draggable control panel for manual intervention.

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

评论

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

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