持仓限制控制器 - 追踪止盈版
自动风控系统,支持手数限制、追踪止盈、固定止损、保本功能
相对上一版改了:移动止盈改成追踪止盈;刚才这份代码用 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 根据源码绘制,仅示意画了哪些元素,细节以实际运行为准
//
// 基于 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)。现在补全所有缺失的部分,输出完整可编译的版本。
使用说明
- 安装方法:
- 将代码保存为
PositionLimitController_TrailingProfit.mq5 - 在 MetaEditor 中编译
- 拖到图表上激活
- 参数设置:
- MaxTotalLots:设置总手数上限(0 = 不限制)
- AutoCloseLimitExcess:超限是自动平仓还是仅警告
- TrailingStopPoints:追踪止盈的点数间距(0 = 不启用)
- FixedStopLossPoints:一键设置固定止损的点数
- BreakEvenPoints:盈利多少点后触发保本(止损移到开仓价)
- 面板功能:
- 标题栏:按住可拖动整个面板
- 右下角手柄:拖动可调整面板尺寸
- 一键平仓:平掉当前品种所有持仓
- 一键平多/平空:分别平掉多头或空头
- 追踪止盈:点击启用后,止损会自动跟随行情向有利方向移动
- 固定止损:为所有持仓批量设置固定点数的止损
- 挂单价止盈:盈利超过设定点数后,自动把止损移到开仓价保本
- 注意事项:
- 追踪止盈只在启用后生效,点击按钮切换开关(绿色亮起 = 已启用)
- 超限自动平仓会优先平掉最新的订单
- 所有风控操作都只针对当前图表的交易品种
- 面板数据每 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 秒刷新一次。
怎么用
- 在 MetaEditor 里编译这个 .mq5 文件。
- 把 EA 拖到你要监控的品种图表上(比如 XAUUSD 或 EURUSD)。
- 在参数设置界面调整 MaxTotalLots、TrailingStopPoints 等参数,确认后点"确定"。
- 面板会显示在图表左上角,实时显示多空手数、总手数、浮动盈亏等信息。
- 点击面板按钮执行对应操作:
- 一键平仓:平掉当前品种所有持仓
- 一键平多 / 平空:只平多头或只平空头
- 追踪止盈:切换追踪止盈开关(绿色亮起 = 已启用)
- 固定止损:给所有持仓批量设置固定点数的止损
- 挂单价止盈:盈利达标的单子移止损到开仓价保本
- 可以拖动标题栏移动面板位置,拖动右下角手柄调整面板大小。
适用场景
适合
- 手动交易者想加一层自动风控,防止仓位过重导致爆仓。
- 跑多个 EA 或信号源时,需要统一控制总手数上限。
- 趋势行情里想用追踪止盈锁定利润,让盈利单跑得更远。
- 需要经常手动干预(一键平仓、调整止损)的交易风格。
- 日内交易,比如黄金、外汇主流货币对。
不太适合
- 长线持仓策略(追踪止盈的点数间距可能太小,容易被日常波动止损)。
- 高频剥头皮(每 500 毫秒刷新一次面板可能有延迟)。
- 需要跨品种汇总手数的场景(这个 EA 只监控当前图表的品种)。
风险提示
- 追踪止盈不是万能的:它只能在启用后生效,启用前已经开的单子不会自动追踪,需要手动点按钮。而且追踪止盈本质是移动止损,一旦行情回撤触发止损就会平仓,趋势没走完就可能被甩下车。
- 超限平仓按时间顺序:代码里写的是平掉最新的订单,如果你的最新单恰好是盈利的,它也会被平掉。没有按盈亏、按方向等更智能的平仓逻辑。
- 只管当前品种:如果你同时交易 XAUUSD 和 EURUSD,需要在两个图表上分别挂这个 EA,两边的手数限制是独立的。
- 网络延迟和滑点:自动平仓、修改止损都要向服务器发送请求,遇到行情剧烈波动或网络卡顿时可能成交价偏离预期。
- 保本功能是单向的:把止损移到开仓价后就锁定了,行情再回来也不会重新给你盈利空间,适合想"落袋为安"的场景,不适合想让单子继续浮动的策略。
- 参数需要测试: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.
评论
还没有人评论,来抢个沙发。