MT4多开 - MT4绘图对象保存机制图表独立与全局存储详解

MT4绘图对象的存储逻辑初探
要弄清楚绘图对象是独立保存还是全局保存,首先得明白MT4对绘图对象的定义方式。在MT4的体系里,每一个图表窗口都被赋予了一个唯一的编号,这个编号叫做图表ID,而所有的绘图对象都是依附于特定的图表ID存在的。也就是说,你在EURUSD的M15图表上画的那条趋势线,本质上是被记录在EURUSD M15这个特定图表窗口的配置文件里的,它不会自动跑到EURUSD的H1图表上,更不会出现在GBPUSD的图表中。
我做过一个简单的实验,在EURUSD的M15图表上画了三条水平线,然后切换到同一个品种的M30图表,结果那些线果然不见了。再切回M15,它们又完好无损地显示出来。这就说明MT4的绘图对象并不是全局共享的,而是按照图表周期和品种组合来各自独立保存的。每个图表窗口都有一份属于自己的对象列表,这份列表记录了这个窗口里所有绘图对象的坐标、样式、颜色等属性。
这种设计逻辑其实挺符合交易者的实际需求,因为不同周期的分析视角本来就不一样,M15上的短线支撑线和H4上的长期趋势通道混在一起反而会干扰判断。MT4把绘图对象按图表独立保存,等于给了每个周期一套干净的分析画布,互不干扰。但这也带来一个问题,如果你在多个图表上都要画同样的线,那就得重复操作,没法一次性搞定。
模板功能对绘图对象保存的影响
说到图表独立保存,就不得不提模板这个功能,因为模板是MT4里唯一能跨图表传递绘图对象的正规途径。模板文件是以.tpl为后缀的文件,存放在MT4安装目录的Profiles文件夹下,它记录的内容包括了当前图表的所有设置,其中就包含了绘图对象。你可以把一个图表上的所有画线保存成模板,然后在另一个图表上加载这个模板,那些线就会原封不动地出现在新图表上。
这里有个细节值得注意,模板保存的绘图对象是带坐标信息的,但坐标是相对于原始图表的。如果你把M15的模板加载到H1图表上,那些线的价格坐标会保留,但时间坐标可能会错位,因为不同周期的时间轴密度不一样。比如你在M15上画了一条从周一早上8点开始到周二下午3点结束的线段,加载到H1上时,起点和终点的时间点还在,但显示效果会有所差异,因为H1每根K线覆盖的时间范围更宽。
我自己的使用经验是,模板适合保存那些比较通用的分析框架,比如固定的斐波那契回撤位或者长期趋势线,这些不受周期变化影响太大的对象。但对于短线交易中那些需要精确对齐K线位置的画线,最好还是每个图表单独画,免得加载模板后出现位置偏差,反而误导判断。模板功能虽然能实现一定程度的跨图表复制,但它的本质依然是让每个图表各自拥有一份独立的对象副本。
全局变量与绘图对象的本质区别
有些朋友会把绘图对象和全局变量混淆,觉得两者都是MT4里跨图表存在的东西,其实它们是完全不同的概念。全局变量是存储在MT4客户端内存和硬盘里的数据值,它们不依附于任何图表,任何EA或者脚本在任何图表上都可以读写这些变量。
而绘图对象是依附于特定图表窗口的图形元素,它们的存在范围仅限于创建它们的那个图表。
这种区别在实际操作中很容易观察到。你可以在一个图表上运行一个EA,让它设置一个全局变量,然后在另一个图表上运行另一个EA,读取这个全局变量,完全没问题。但如果你在一个图表上画了一条线,想在另一个图表上引用或者修改它,那就做不到了,除非通过模板或者编程方式手动复制对象数据。说白了,全局变量是MT4的"共享内存",而绘图对象是每个图表自己的"私有财产"。
不过编程上有个变通办法,就是通过ObjectCreate和ObjectSet等函数以编程方式在指定图表上创建对象,或者用ObjectGet读取对象属性后,在另一个图表上用ObjectCreate重新创建一模一样的对象。这个办法本质上还是每个图表独立保存,只是用了代码手段把对象数据从一个图表"搬运"到另一个图表。
MT4没有提供任何直接跨图表共享对象引用的机制,这一点从它的API设计上就能看出来。
实际使用中如何管理多图表绘图对象
既然搞清楚了MT4的绘图对象是按图表独立保存的,那在实际交易中该怎么管理这些对象呢。我个人的做法是,先确定自己常用的几个图表组合,比如EURUSD的M15和H1,GBPUSD的M15和H1,然后在每个图表上分别画好需要的线。如果需要统一的长期趋势线,我会创建一个专门的模板,把那些跨周期的关键位保存进去,然后在每个图表上加载,再微调位置。
另外要提醒的是,MT4的配置文件里保存对象数量是有限制的,默认情况下每个图表最多可以保存几百个绘图对象,超过这个数量后,最旧的对象会被自动清理掉。这个限制在设置里可以调整,但调太高可能会影响图表加载速度。所以平时画线不要贪多,把真正有用的关键位画出来就够了,那些临时参考用的线用完了就删掉,保持图表干净也有利于交易决策。
还有一点很多人容易忽略,就是MT4的绘图对象保存是实时的,你画完线之后,数据会立即写入到图表对应的配置文件里。所以即使MT4意外崩溃或者断电重启,你已经画好的线也不会丢失。但如果你在画线过程中修改了对象属性,比如拖动位置或者改变颜色,在退出MT4之前一定要确保这些修改被正确保存。通常MT4在正常退出时会自动保存所有图表的状态,但如果遇到强制关闭进程的情况,最后那几秒的修改可能会丢失。