看到不少朋友还在为EA掉线、滑点、凌晨断连的问题头疼,正好最近腾出时间把VPS重新整理了一遍,分享一下我的实操经验。这篇帖子的内容基于我过去一年踩过的坑,06月28日刚做了部分更新,主要是针对Windows Server 2022的优化细节。
先说VPS选型。别图便宜买那种共享CPU的低端VPS,EA在跑单的时候,如果VPS的CPU被邻居占满,你的订单延迟直接飙到几百毫秒。我目前用的是Hetzner的CX22(2核/4G内存),月付4欧左右,跑5个EA加一个MT4终端足够了。如果你只跑1-2个EA,Oracle Cloud的免费实例也能用,但要注意它家的ARM架构在MQL4上兼容性差点,MQL5没问题。选系统的时候,Windows Server 2022 Standard版是首选,2022的TCP/IP栈比2019优化了不少,实测丢包率降低了0.3%左右。
搭建步骤:
1. 装好系统后第一件事是关闭Windows更新。运行gpedit.msc,找到“计算机配置-管理模板-Windows组件-Windows更新”,启用“配置自动更新”并设为“已禁用”。EA跑着的时候突然重启更新,你会想砸键盘的。
2. 安装MT4/MT5。别直接从官网下载,用你经纪商提供的专用安装包,里面通常预配置了服务器地址。安装路径不要用默认的Program Files,我习惯放在D盘根目录,比如D:\MetaTrader 4,这样备份和迁移都方便。
3. 配置远程桌面。默认端口3389不安全,改掉。用注册表编辑器修改HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\PortNumber,设成五位数端口,比如12345。然后防火墙里开放这个端口,顺便把RDP连接数改成2以上,防止误操作被踢下线。
4. 内存优化。Windows Server的图形界面很吃资源,在“服务器管理器-添加角色和功能”里,把“桌面体验”功能去掉。然后打开msconfig,引导选项里把“超时”设成3秒,启动项里只留MT4和VPS监控软件。我习惯用Process Lasso限制MT4进程的CPU亲和性,只让它用核心0和1,避免核心切换导致的毫秒级延迟。
5. 网络优化。这是重点。打开注册表,修改以下键值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
- TcpAckFrequency:改成1,让每个数据包都立即确认,减少Nagle算法对交易延迟的影响。
- TcpNoDelay:改成1,禁用延迟ACK。
- DefaultTTL:改成64,减少数据包在网络中的跳动次数。
然后以管理员身份运行命令:netsh int tcp set global autotuninglevel=normal
这个设置让TCP窗口自动调整到最佳大小,对于高频交易特别重要。实测修改后ping值从平均18ms降到12ms左右。
6. 安全设置。装一个简单的防火墙,比如Windows自带的高级安全防火墙,只开放RDP端口和你的经纪商IP段。经纪商IP可以从MT4的日志里找到,格式一般是xxx.xxx.xxx.0/24。另外,把默认的Administrator账户改名,密码设成16位以上大小写数字组合,别偷懒。
7. 监控脚本。我写了一个简单的MQL4脚本,每隔15秒检查一次连接状态,如果掉线超过30秒就自动重连。核心代码是:
void OnTimer() {
if(!IsConnected()) {
Print("Connection lost. Attempting reconnect...");
Sleep(5000);
if(IsConnected()) {
Print("Reconnected successfully.");
return;
}
// 如果5秒后还没连上,重启终端
TerminalClose(0);
}
}
把这个脚本挂载到每个图表上,配合VPS的自动重启功能,基本能做到99.99%在线。
最后提一个冷门技巧:如果你的VPS在欧美地区,时区设成UTC+0,这样经纪商服务器时间和VPS系统时间完全同步,避免因为夏令时调整导致EA逻辑出错。
好了,就这些。细节上有什么疑问直接回帖,我尽量解答。另外,如果你的VPS配置和我一样,记得每周五收盘后手动清理一下日志文件,MT4的日志文件夹在D:\MetaTrader 4\logs,超过100MB的删掉,能释放不少磁盘I/O。
先说VPS选型。别图便宜买那种共享CPU的低端VPS,EA在跑单的时候,如果VPS的CPU被邻居占满,你的订单延迟直接飙到几百毫秒。我目前用的是Hetzner的CX22(2核/4G内存),月付4欧左右,跑5个EA加一个MT4终端足够了。如果你只跑1-2个EA,Oracle Cloud的免费实例也能用,但要注意它家的ARM架构在MQL4上兼容性差点,MQL5没问题。选系统的时候,Windows Server 2022 Standard版是首选,2022的TCP/IP栈比2019优化了不少,实测丢包率降低了0.3%左右。
搭建步骤:
1. 装好系统后第一件事是关闭Windows更新。运行gpedit.msc,找到“计算机配置-管理模板-Windows组件-Windows更新”,启用“配置自动更新”并设为“已禁用”。EA跑着的时候突然重启更新,你会想砸键盘的。
2. 安装MT4/MT5。别直接从官网下载,用你经纪商提供的专用安装包,里面通常预配置了服务器地址。安装路径不要用默认的Program Files,我习惯放在D盘根目录,比如D:\MetaTrader 4,这样备份和迁移都方便。
3. 配置远程桌面。默认端口3389不安全,改掉。用注册表编辑器修改HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\PortNumber,设成五位数端口,比如12345。然后防火墙里开放这个端口,顺便把RDP连接数改成2以上,防止误操作被踢下线。
4. 内存优化。Windows Server的图形界面很吃资源,在“服务器管理器-添加角色和功能”里,把“桌面体验”功能去掉。然后打开msconfig,引导选项里把“超时”设成3秒,启动项里只留MT4和VPS监控软件。我习惯用Process Lasso限制MT4进程的CPU亲和性,只让它用核心0和1,避免核心切换导致的毫秒级延迟。
5. 网络优化。这是重点。打开注册表,修改以下键值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
- TcpAckFrequency:改成1,让每个数据包都立即确认,减少Nagle算法对交易延迟的影响。
- TcpNoDelay:改成1,禁用延迟ACK。
- DefaultTTL:改成64,减少数据包在网络中的跳动次数。
然后以管理员身份运行命令:netsh int tcp set global autotuninglevel=normal
这个设置让TCP窗口自动调整到最佳大小,对于高频交易特别重要。实测修改后ping值从平均18ms降到12ms左右。
6. 安全设置。装一个简单的防火墙,比如Windows自带的高级安全防火墙,只开放RDP端口和你的经纪商IP段。经纪商IP可以从MT4的日志里找到,格式一般是xxx.xxx.xxx.0/24。另外,把默认的Administrator账户改名,密码设成16位以上大小写数字组合,别偷懒。
7. 监控脚本。我写了一个简单的MQL4脚本,每隔15秒检查一次连接状态,如果掉线超过30秒就自动重连。核心代码是:
void OnTimer() {
if(!IsConnected()) {
Print("Connection lost. Attempting reconnect...");
Sleep(5000);
if(IsConnected()) {
Print("Reconnected successfully.");
return;
}
// 如果5秒后还没连上,重启终端
TerminalClose(0);
}
}
把这个脚本挂载到每个图表上,配合VPS的自动重启功能,基本能做到99.99%在线。
最后提一个冷门技巧:如果你的VPS在欧美地区,时区设成UTC+0,这样经纪商服务器时间和VPS系统时间完全同步,避免因为夏令时调整导致EA逻辑出错。
好了,就这些。细节上有什么疑问直接回帖,我尽量解答。另外,如果你的VPS配置和我一样,记得每周五收盘后手动清理一下日志文件,MT4的日志文件夹在D:\MetaTrader 4\logs,超过100MB的删掉,能释放不少磁盘I/O。
专注交易策略编程实现,分享MQL开发技巧与代码优化方案