在MQL5中创建交易管理面板(第九部分):代码组织(5):分析面板(AnalyticsPanel)类·综合运用
📘

在MQL5中创建交易管理面板(第九部分):代码组织(5):分析面板(AnalyticsPanel)类·综合运用

第 3/3 篇

◍ 在MT5里挂一个可切换的分析面板

想在MT5图表上叠一个自定义分析面板,核心是先 new 一个面板对象,再在指定子窗口里给坐标建框。下面这段逻辑把面板放在图表子窗口、左上角偏移 (900,20),宽500高460,建不成就直接释放指针并返回,避免空对象后续报错。 面板建好之后用 Toggle() 控制显隐,再调 ChartRedraw() 强制重绘,界面才会立刻反应。事件分发交给面板的 OnEvent,Tick 驱动下每笔报价跑一次 UpdatePanel,数据才跟得上盘口。 外汇和贵金属波动快、点差跳变频繁,这种面板只做辅助观察,信号误触概率不低,实盘前务必在策略测试器用历史数据跑几遍确认资源不泄露。

MQL5 / C++
g_analyticsPanel = new CAnalyticsPanel();
class=class="str">"cmt">// Coordinates for Analytics panel(adjust as needed)
if(!g_analyticsPanel.CreatePanel(g_chart_id, "AnalyticsPanel", g_subwin, class="num">900, class="num">20, class="num">900+class="num">500, class="num">20+class="num">460))
{
   class="kw">delete g_analyticsPanel;
   g_analyticsPanel = NULL;
   Print("Failed to create Analytics Panel");
   class="kw">return;
}
}
g_analyticsPanel.Toggle();
ChartRedraw();
}
if(g_analyticsPanel != NULL && g_analyticsPanel.IsVisible())
   class="kw">return g_analyticsPanel.OnEvent(id, lparam, dparam, sparam);
class="type">void OnTick()
  {
   if(g_analyticsPanel != NULL)  
   {
     g_analyticsPanel.UpdatePanel();
   }
  }

面板实时刷新下的模拟成交观察

在 MT5 里把分析面板挂上图表后,最直观的反馈是数值随每次 tick 变动,这种刷新节奏和实盘肉眼盯单接近。我用综合策略跑了一笔单,但开始录屏时信号已经切到“无共识”,所以没留下完整信号过程。 面板对持仓数的统计是实打实跟着仓位走的:初始持 21 个头寸,每平掉一个,“持仓交易数”就减一,最终停在 18。这个计数不依赖手动输入,关仓即更新。 所有子面板都从主面板(首页面板)入口进,不用在导航里翻找。外汇与贵金属杠杆高、滑点跳空频繁,面板读数只反映当时市况,不构成方向判定。

「把这条线请下神坛」

模拟账户里那笔共振单,通道支撑和面板信号刚好叠在同一根 K 线上,九列指标同向才出的箭头。这种巧合可遇不可求,真拿到 live 账户里天天等,大概率等来的是磨损而不是礼物。 面板本身的价值不在「神准」,而在把账户浮盈、品种波动、多指标状态揉进同一块画布。缺了预警模块,人就得钉在屏幕前,这恰恰是零售外汇和贵金属交易最贵的隐性成本。 两个文件已经挂出:AnalyticsPanel.mqh 32.77 KB 管信号结构,New_Admin_Panel.mq5 19.61 KB 管整套界面调度。拷进 MT5 的 MQL5/Include 和 Experts 目录,编译完先开模拟盘跑两周,再谈改参数。

常见问题

用AnalyticsPanel类封装面板绘制与刷新逻辑,在主EA的OnChartEvent里根据按钮ID切换显示模式,编译后拖到图表即可。
在面板刷新函数里用历史K线和当前指标状态推算虚拟平仓盈亏,仅做屏幕输出不调用OrderSend,用于肉眼校验逻辑。
可以,小布盯盘的AIGC会持续比对面板输出与实时行情,发现刷新卡顿或信号背离直接推送提醒,你只看结论。
实时Tick刷新若未处理第0根K线未闭合状态,就会少算当前柱;在代码里显式取rates_total-1并判时间即可对齐。
它只是统计窗口内的拟合参考,遇跳空或流动性骤降会失效;外汇贵金属高风险,仅作概率倾向而非决策唯一依据。