使用图表可视化交易(第一部分):选择分析时段(基础篇)
📘

使用图表可视化交易(第一部分):选择分析时段(基础篇)

第 1/3 篇

◍ 选对分析时段才有参考价值

在 MT5 里做价格行为分析,第一件事不是画线,而是确认当前图表加载的是哪个时段(Period)。同一根裸 K,在 M1 上只是噪声,在 H4 上可能就是关键的反转结构,分析结论完全两样。 很多交易者把默认 M5 图表当成万能视窗,结果把日内杂波当成了趋势信号。MetaTrader 5 支持从 M1 到 MN 共 9 个内置周期,外加自定义周期,切换成本极低但认知成本极高。 实操上,建议先用 H1 或 H4 定方向,再切到 M15 找入场。外汇与贵金属杠杆高、波动剧烈,小周期假突破概率明显偏大,别拿 M1 的刺透形态去赌大仓位。 打开 MT5 底部时间表,右键任意周期选「打开新图表」,就能并排对照不同周期的结构差异,这一步花 10 秒,可能省掉后面几笔亏损。

「把复盘机械活交给脚本」

手动交易者做历史复盘时,大量时间耗在打开图表、翻终端找成交、手绘 SL/TP、统计佣金与隔夜利息这些重复动作上,真正用于判断入场逻辑的时间反而被压缩。 本文要写的这套 MT5 脚本,目标就是把上面这些机械步骤一次性自动化:运行后直接在图上标出历史单的止损止盈位,并汇总手续费与 swap 数据。 脚本分两部分开发,每部分都给完整源码;不想自己拼工程的,也可在 MQL5 市场找现成版本。外汇与贵金属杠杆高、滑点跳空频繁,自动化只省体力,不替你兜底决策风险。

亏损前置:为什么必须回头看自己的交易

做交易和开实体店本质都是冒风险换收益,但金融账户的脆弱度高出一个量级。实体厂子撑不住了,设备还能转产续命;交易账户一旦回撤失控,杠杆会把损失直接打到净值归零,没有缓冲带。 美国SEC在编号34-64874、文件S7-30-11的17年跟踪里给出过一个冷数字:约70%的零售客户每个季度都在亏,平均不到12个月就把投入全部赔光。外汇和贵金属自带高杠杆,这类统计对散户就是前置警告。 市场不是静态机器,它至少在横盘和趋势两种状态间切换。不少算法在震荡里吃肉、一走趋势就吐回去;趋势型策略反过来在横盘被磨到失效。等你发现回撤异常时,亏损往往已经盖过利润。 所以持续回溯自己的成交记录,判断策略是否还贴着当前市况,不是可选项。下文直接给一个MT5脚本,把常规分析流程压缩到一次运行出图,你马上能抄去跑。

◍ 脚本输入怎么摆才不碍事

想把历史交易截图批量导出,第一步不是在 OnStart 里写逻辑,而是先把输入参数层设计清楚。MT5 脚本的 input 全局变量直接决定用户在界面上看到什么、能不能少点错。 先给加载模式做个枚举,只放两个值:单选一笔交易、选时间段。这样 inp_method 一切换,后面该填 ticket 还是起止日期就自然分流。 用 group 关键字把参数分块,比如「Enter deal ticket or select the period」「For case 'Select_one_deal'」等,界面上参数不再挤成一团。变量名旁写普通用户能懂的注释,终端里显示的就是人话而不是 inp_d_ticket 这种缩写。 代码里默认值不是随便填的:inp_d_ticket 给 4339491,start_date 给 D'17.07.2023'、finish_date 给 D'19.07.2023',用户一打开就能看到格式样例,照抄就行。时间段跨度差异大,所以 main_graph 设 PERIOD_D1 时 bars_from_right_main 默认 15 根 K 线就够看后续走势;短周期你得自己把位移调高,否则截图右边空一大片。 时间框架给了四个入口:main_graph 加三个 addition_graph,覆盖日线定级别、H1 找入场的多图表习惯。用 PERIOD_CURRENT 表示「不用的辅助图」,很少有人用超过四图,真不够就多跑一次脚本。 图表样式别在 input 里堆几百行属性,直接读终端现成模板名更干净。F8 调好颜色线型后,右键「模板—保存模板」,把名字写进输入变量,脚本加载时自动套用。外汇和贵金属波动剧烈,历史截图只是复盘参考,实盘仍属高风险。

MQL5 / C++
enum input_method
  {
  Select_one_deal,
  Select_period
  };
class="kw">input group "Enter deal ticket or select the period"
class="kw">input input_method inp_method = Select_period;                                        class=class="str">"cmt">// One deal or period?
class="kw">input group "For case &class="macro">#x27;Select_one_deal&class="macro">#x27;: Enter ticket of deal"
class="kw">input class="type">long inp_d_ticket = class="num">4339491;                                                  class=class="str">"cmt">// Ticket(global id)
class="kw">input group "For case &class="macro">#x27;Select_period&class="macro">#x27;: Enter period for analys"
class="kw">input class="type">class="kw">datetime start_date = D&class="macro">#x27;class="num">17.07.class="num">2023&class="macro">#x27;;                                          class=class="str">"cmt">// Start date
class="kw">input class="type">class="kw">datetime finish_date = D&class="macro">#x27;class="num">19.07.class="num">2023&class="macro">#x27;;                                         class=class="str">"cmt">// Finish date
class="kw">input group "Enter time frames. &class="macro">#x27;current&class="macro">#x27; = don&class="macro">#x27;t use"
class="kw">input ENUM_TIMEFRAMES main_graph = PERIOD_D1;                                       class=class="str">"cmt">// Period of main chart
class="kw">input ENUM_TIMEFRAMES addition_graph = PERIOD_H1;                                   class=class="str">"cmt">// Period of addition chart
class="kw">input ENUM_TIMEFRAMES addition_graph_2 = PERIOD_CURRENT;                            class=class="str">"cmt">// Period of addition chart #class="num">2
class="kw">input ENUM_TIMEFRAMES addition_graph_3 = PERIOD_CURRENT;                            class=class="str">"cmt">// Period of addition chart #class="num">3
class="kw">input group "Navigate settings in bars."
class="kw">input class="type">int bars_from_right_main = class="num">15;                                                class=class="str">"cmt">// Shift from right on main chart

「多图布局与交易线配色的输入参数」

在 MT5 脚本里把主图与三个附图的偏移和模板拆成独立输入,能直接控制截图时每屏右移多少根 K 线。下面这段声明把附图右侧偏移统一设为 35 根,主图模板用 dailyHistorytemp、附图全用 hourHistoryTemp,改一个数就能让布局变样。

MQL5 / C++
class="kw">input class="type">int bars_from_right_add = class="num">35;                    class=class="str">"cmt">// Shift from right on addition chart
class="kw">input class="type">int bars_from_right_add_2 = class="num">35;                  class=class="str">"cmt">// Shift from right on addition chart #class="num">2
class="kw">input class="type">int bars_from_right_add_3 = class="num">35;                  class=class="str">"cmt">// Shift from right on addition chart #class="num">3
class="kw">input group "Properties of charts. Enter the class="kw">template name:"
class="kw">input class="type">class="kw">string main_template = "dailyHistorytemp";       class=class="str">"cmt">// Template name of main chart
class="kw">input class="type">class="kw">string addition_template = "hourHistoryTemp";    class=class="str">"cmt">// Template name of addition chart
class="kw">input class="type">class="kw">string addition_template_2 = "hourHistoryTemp";  class=class="str">"cmt">// Template name of addition chart #class="num">2
class="kw">input class="type">class="kw">string addition_template_3 = "hourHistoryTemp";  class=class="str">"cmt">// Template name of addition chart #class="num">3
class="kw">input group "Colors of deals line"
class="kw">input class="type">class="kw">color clr_price_open = clrWhiteSmoke;            class=class="str">"cmt">// Color of price open label
class="kw">input class="type">class="kw">color clr_price_close = clrWhiteSmoke;           class=class="str">"cmt">// Color of price close label
class="kw">input class="type">class="kw">color clr_stop = clrRed;                         class=class="str">"cmt">// Color of stop loss label
class="kw">input class="type">class="kw">color clr_take = clrLawnGreen;                   class=class="str">"cmt">// Color of take profit label
class="kw">input class="type">class="kw">color clr_main = clrWhiteSmoke;                  class=class="str">"cmt">// Color of deals trendline
class="macro">#class="kw">property copyright "Visit product page"
class="macro">#class="kw">property link      "[MQL5官方文档]
class="macro">#class="kw">property version   "class="num">1.00"
class="macro">#class="kw">property description "Make an automatic printscreen with a full description of all transactions for the period or
specify the ticket of the desired transaction."
class="macro">#class="kw">property script_show_inputs
enum input_method
  {
   Select_one_deal,
   Select_period
  };
class="kw">input group "Enter deal ticket or select the period"
class="kw">input input_method inp_method = Select_period;         class=class="str">"cmt">// One deal or period?
逐行看:前 3 行定义附图右移根数,默认都是 35,对应小周期附图留白;第 4 行起用 input group 把图表属性分组,main_template 和 addition_template 系列直接绑模板名,MT5 会按这个名字加载已保存的 tpl。 颜色块里 clr_stop 用 clrRed、clr_take 用 clrLawnGreen,止损标签和止盈标签一眼能分;clr_main 管成交趋势线,默认白烟色。最后 enum 加 inp_method 让你在「单笔成交」和「时间段」之间切,默认 Select_period 表示跑整段历史截图。 外汇和贵金属波动大、杠杆高,这类自动截图脚本只解决复盘呈现,不替你判断进出场。开 MT5 把这段塞进脚本头部,改 bars_from_right_add 到 50 试试,附图右侧空间会明显宽松。

MQL5 / C++
class="kw">input class="type">int bars_from_right_add = class="num">35;                    class=class="str">"cmt">// Shift from right on addition chart
class="kw">input class="type">int bars_from_right_add_2 = class="num">35;                  class=class="str">"cmt">// Shift from right on addition chart #class="num">2
class="kw">input class="type">int bars_from_right_add_3 = class="num">35;                  class=class="str">"cmt">// Shift from right on addition chart #class="num">3
class="kw">input group "Properties of charts. Enter the class="kw">template name:"
class="kw">input class="type">class="kw">string main_template = "dailyHistorytemp";       class=class="str">"cmt">// Template name of main chart
class="kw">input class="type">class="kw">string addition_template = "hourHistoryTemp";    class=class="str">"cmt">// Template name of addition chart
class="kw">input class="type">class="kw">string addition_template_2 = "hourHistoryTemp";  class=class="str">"cmt">// Template name of addition chart #class="num">2
class="kw">input class="type">class="kw">string addition_template_3 = "hourHistoryTemp";  class=class="str">"cmt">// Template name of addition chart #class="num">3
class="kw">input group "Colors of deals line"
class="kw">input class="type">class="kw">color clr_price_open = clrWhiteSmoke;            class=class="str">"cmt">// Color of price open label
class="kw">input class="type">class="kw">color clr_price_close = clrWhiteSmoke;           class=class="str">"cmt">// Color of price close label
class="kw">input class="type">class="kw">color clr_stop = clrRed;                         class=class="str">"cmt">// Color of stop loss label
class="kw">input class="type">class="kw">color clr_take = clrLawnGreen;                   class=class="str">"cmt">// Color of take profit label
class="kw">input class="type">class="kw">color clr_main = clrWhiteSmoke;                  class=class="str">"cmt">// Color of deals trendline
class="macro">#class="kw">property copyright "Visit product page"
class="macro">#class="kw">property link      "[MQL5官方文档]
class="macro">#class="kw">property version   "class="num">1.00"
class="macro">#class="kw">property description "Make an automatic printscreen with a full description of all transactions for the period or
specify the ticket of the desired transaction."
class="macro">#class="kw">property script_show_inputs
enum input_method
  {
   Select_one_deal,
   Select_period
  };
class="kw">input group "Enter deal ticket or select the period"
class="kw">input input_method inp_method = Select_period;         class=class="str">"cmt">// One deal or period?

把单笔成交与时段回放做成多周期对照

想锁定某笔具体成交做复盘,直接填全局 ticket 即可,示例里用的是 4339491,这属于 Select_one_deal 模式下的硬检索条件,MT5 终端里若没有这笔成交,脚本会空跑。 时段回放则走 Select_period,代码里写死 2023.07.17 到 2023.07.19 这三天窗口,主图 D1、副图 H1,剩下两个副图周期设为 PERIOD_CURRENT 表示不单独加载。这种搭配适合看日线定方向、小时线找入场扰动。 导航偏移参数值得手动调:主图从右数 15 根、副图 35 根,意味着图形自动向右留白,避免最新 K 线贴边。模板名 dailyHistorytemp 与 hourHistoryTemp 需你本地 MT5 模板目录里有对应文件,否则图表风格会回退默认。外汇与贵金属波动剧烈,这类历史回放只用于验证形态,不预示后续走向。

MQL5 / C++
class="kw">input group "For case &class="macro">#x27;Select_one_deal&class="macro">#x27;: Enter ticket of deal"
class="kw">input class="type">long inp_d_ticket = class="num">4339491;                                                                       class=class="str">"cmt">// Ticket(global id)
class="kw">input group "For case &class="macro">#x27;Select_period&class="macro">#x27;: Enter period for analys"
class="kw">input class="type">class="kw">datetime start_date = D&class="macro">#x27;class="num">17.07.class="num">2023&class="macro">#x27;;                                                                 class=class="str">"cmt">// Start date
class="kw">input class="type">class="kw">datetime finish_date = D&class="macro">#x27;class="num">19.07.class="num">2023&class="macro">#x27;;                                                                class=class="str">"cmt">// Finish date
class="kw">input group "Enter time frames. &class="macro">#x27;current&class="macro">#x27; = don&class="macro">#x27;t use"
class="kw">input ENUM_TIMEFRAMES main_graph = PERIOD_D1;                                                              class=class="str">"cmt">// Period of main chart
class="kw">input ENUM_TIMEFRAMES addition_graph = PERIOD_H1;                                                          class=class="str">"cmt">// Period of addition chart
class="kw">input ENUM_TIMEFRAMES addition_graph_2 = PERIOD_CURRENT;                                                   class=class="str">"cmt">// Period of addition chart #class="num">2
class="kw">input ENUM_TIMEFRAMES addition_graph_3 = PERIOD_CURRENT;                                                   class=class="str">"cmt">// Period of addition chart #class="num">3
class="kw">input group "Navigate settings in bars."
class="kw">input class="type">int bars_from_right_main = class="num">15;                                                                       class=class="str">"cmt">// Shift from right on main chart
class="kw">input class="type">int bars_from_right_add = class="num">35;                                                                        class=class="str">"cmt">// Shift from right on addition chart
class="kw">input class="type">int bars_from_right_add_2 = class="num">35;                                                                      class=class="str">"cmt">// Shift from right on addition chart #class="num">2
class="kw">input class="type">int bars_from_right_add_3 = class="num">35;                                                                      class=class="str">"cmt">// Shift from right on addition chart #class="num">3
class="kw">input group "Properties of charts. Enter the class="kw">template name:"
class="kw">input class="type">class="kw">string main_template = "dailyHistorytemp";                                                           class=class="str">"cmt">// Template name of main chart
class="kw">input class="type">class="kw">string addition_template = "hourHistoryTemp";                                                        class=class="str">"cmt">// Template name of addition chart
class="kw">input class="type">class="kw">string addition_template_2 = "hourHistoryTemp";                                                      class=class="str">"cmt">// Template name of addition chart #class="num">2
class="kw">input class="type">class="kw">string addition_template_3 = "hourHistoryTemp";                                                      class=class="str">"cmt">// Template name of addition chart #class="num">3
class="kw">input group "Colors of deals line"

常见问题

很可能。分析时段不对照自己的真实交易时间,看图只是看热闹;先把每笔单的进出场时段标出来,再选对应周期回看才有参考价值。
有。用脚本把成交记录和时段回放自动铺到多周期图上,机械活交给程序,你只管看形态和决策。
可以。小布能按你的成交记录自动生成多周期对照视图,并把单笔交易标进对应分析时段,省去手动摆放。
输入参数里把线宽调细、配色用低饱和色,并关掉非当前时段的重叠显示,图面就清爽不碍事。
建议先回头看。亏损前置复盘能暴露时段误判或仓位问题,空仓不看了反而容易重复同一种错。