使用图表可视化交易(第一部分):选择分析时段(基础篇)
◍ 选对分析时段才有参考价值
在 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 调好颜色线型后,右键「模板—保存模板」,把名字写进输入变量,脚本加载时自动套用。外汇和贵金属波动剧烈,历史截图只是复盘参考,实盘仍属高风险。
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,改一个数就能让布局变样。
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?
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 模板目录里有对应文件,否则图表风格会回退默认。外汇与贵金属波动剧烈,这类历史回放只用于验证形态,不预示后续走向。
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"