MT4多开 - MT4副图窗口高度调好重启失效模板保存一招搞定_编写DLL文件并配置导入环境

理解MT4模板保存的核心机制
要解决副图窗口高度保存不下来的问题,首先得明白MT4里“模板”这个概念到底是怎么回事。模板本质上是一个配置文件,它记录了当前图表的全部外观设置,包括技术指标的种类、参数、颜色、线型,以及最关键的主图和副图窗口的相对比例。当你把调整好的布局保存为模板后,MT4就会把这个高度比例信息写进一个.tpl文件里。下次打开任何图表,只要应用这个模板,所有窗口的高度就会严格按照你保存时的状态还原,不会再乱跳。
我最初犯的错误是,以为只要调整好窗口高度,MT4就会自动记住。但实际上,MT4的默认设置只会在关闭软件时保存一些基础选项,比如是否显示网格、K线颜色等,而副图窗口的高度这种细节,它压根儿就不管。这就好比你调整了电脑桌面的图标排列,但系统没给你自动保存一样。所以,手动保存模板就成了唯一可靠的途径。
而且,模板保存的不仅仅是高度,还包括你加载的所有指标及其参数,这在多周期多品种分析时特别有用。
另一个常见的误解是,很多人觉得保存了“默认模板”就能一劳永逸。但MT4的默认模板只是新建图表时的一个初始模板,如果你修改了当前图表的布局,必须明确执行“保存模板”操作,覆盖或者新建一个模板文件。否则,即便你重启前看着正常,下次打开时,MT4还是会调用那个未经修改的默认模板,导致高度恢复原样。所以,关键一步在于主动保存,而不是指望软件自动记录。
编写DLL文件并配置导入环境
接下来就是动手环节。首先你要用C++或C#创建一个DLL工程。假设我们用Visual Studio写一个简单的函数,功能是计算两个数字的平方和并返回结果。在C++里,代码大概是这样:extern "C" __declspec(dllexport) double SquareSum(double a, double b) { return (a*a + b*b); }。这里extern "C"是为了防止函数名被编译器修改,__declspec(dllexport)则是告诉编译器这个函数要暴露出去。编译后你会得到一个.dll文件,比如就叫“MyLib.dll”。记得选择Release模式编译,Debug模式生成的DLL在MT4里可能无法正常加载。
把生成的DLL文件复制到MT4安装目录下的“MQL4\Libraries”文件夹里。这个路径很关键,因为MT4默认只从这个文件夹和系统目录加载DLL。如果你放错地方,EA运行时会提示“cannot load DLL”。我习惯把DLL和EA脚本放在一起管理,所以会单独建个子文件夹,但官方推荐还是直接放Libraries下。另外,如果你用了其他依赖库,比如C++运行时库,得确保那些文件也在系统里,否则DLL加载会失败。说实话,这个问题最容易忽略,很多人以为DLL是孤立的,其实它可能还要依赖其他组件。
设置MT4的安全策略。打开MT4,点击“工具”->“选项”->“EA交易”,勾选“允许DLL导入”。如果你只想让特定EA调用DLL,还可以勾选“允许导入外部DLL”,并在“确认”里添加信任列表。不过对于测试阶段,直接全部允许更方便。注意,每次修改设置后要重启MT4才能生效,不然EA会持续报错。我在实盘账户上一般会谨慎点,只给经过验证的EA开放DLL权限,毕竟安全第一。
交易时间与合约到期信息
除了交易参数,品种规格里还包含了非常重要的交易时间信息。在窗口的底部,你会看到“交易时间”一栏,里面详细列出了该品种在MT4服务器时间下的开市和休市时间。比如外汇市场是24小时交易的,但每周五收盘后和周一开盘前会有短暂的休市期,这些具体时间点都能在这里找到。
对于期货和指数类品种,交易时间会更加复杂。有些品种会在中间有午休时间,比如某些亚洲指数期货会在中午12点到下午1点之间休市一小时。另外还要注意夏令时和冬令时的切换,因为MT4服务器时间通常是固定的,但市场交易时间会随季节调整。品种规格里的时间信息会同步更新,所以你无需自己手动计算时差。
如果你交易的是期货合约,那么品种规格里还会显示“到期日”这一项。期货合约都有到期交割的日期,到期后合约会停止交易,所有未平仓的头寸会被强制平仓或移仓。这个日期非常重要,建议提前一到两周关注,避免在临近到期时出现流动性不足或者点差扩大的情况。
另外还有一个“交割日”参数,它表示现货品种的实际交割日期。比如外汇现货交易通常是T+2交割,但有些货币对比如USDCAD是T+1,这些细节都会在品种规格里明确标注。MT4下载了解这些信息对于持仓过夜的投资者来说特别重要,因为它直接关系到隔夜利息的计算基础。
借助自定义指标实现周期信息显示
对于喜欢折腾代码的交易者来说,MQL4语言提供了更强大的解决方案。你可以编写一个简单的自定义指标,专门用来在图表上显示周期信息。这个指标可以读取当前图表的周期参数,然后按照你想要的格式在图表上绘制文字。比如,你可以让指标显示“当前周期:5分钟”、“当前周期:1小时”这样的中文描述,甚至还可以加上一些额外的信息,比如该周期的历史波动率或者平均波幅。我见过有人写了一个指标,直接在图表左上角显示一个动态的周期标签,内容完全由用户自定义,效果比原生的固定标签还要好。
编写这样的指标其实难度并不高,核心代码也就几十行。你只需要用iChartPeriod函数获取当前图表的周期值,然后用ObjectCreate和ObjectSetText函数在图表上创建和更新文字对象。关键是要让指标每来一个新K线时自动刷新文字内容,这样才能保证显示与当前周期同步。我自己的指标还加了一个小功能,就是允许用户在输入参数里设置文字的颜色、大小和位置,这样每个人都能按自己的喜好调整。如果你不会写MQL4代码,也可以去网上找现成的周期显示指标,很多论坛和社区都有免费分享的版本。
使用自定义指标还有一个额外的好处,就是它可以和其他技术指标配合使用。比如你可以让周期文字显示在均线窗口或者RSI窗口里,让整个图表的信息布局更紧凑。不过要注意,自定义指标毕竟不是平台原生功能,运行时会占用一定的系统资源。如果你的电脑配置比较低,或者同时开了很多图表,可能会感觉到一点卡顿。所以建议只在你真正需要的图表上加载这个指标,不要贪多。说实话,这种方法虽然需要一点技术门槛,但一旦设置好,用起来真的非常顺手,尤其适合那些对图表信息有高度定制需求的交易者。