批量多窗口开启算法交易,批量一键开始 / 停止算法交易

| 发表于 前天 19:23 | 显示全部楼层 |复制链接
一键开始 / 停止算法交易  使用说明
作者:铁水  
==================================================

一、能做什么
--------------------------------------------------
同时开了很多个 MT5 交易窗口时,双击一下就能把所有窗口的
「算法交易」按钮一起打开或关闭,不用一个个去点;
也可以一键平掉所有账号的持仓、删掉挂单,并关闭算法交易。
窗口最小化也能操作,不会抢鼠标和焦点。


二、文件说明
--------------------------------------------------
开始算法交易.bat       所有窗口打开算法交易(已经开着的不动)
停止算法交易.bat       所有窗口关闭算法交易(已经关着的不动)
切换算法交易.bat       每个窗口都按一下(相当于各按一次 Ctrl+E)
停止并清仓.bat         所有账号全部平仓、删除挂单,再关闭算法交易
查看算法交易状态.bat   只看每个窗口当前是开还是关,不做改动
安装服务.bat           把状态服务自动复制到本机所有 MT5 终端
algo_switch.ps1        开始/停止/清仓等 bat 调用的主脚本,不要改名、不要删
install_service.ps1    安装服务.bat 调用的脚本,不要改名、不要删
算法交易状态.ex5       MT5 服务(已编译好),告诉脚本每个终端的开关状态、
                       持仓数,并负责执行清仓
使用说明.txt           本文件

注意:bat 和 algo_switch.ps1 必须放在同一个文件夹里。


三、第一次使用:每个 MT5 终端装一次状态服务
--------------------------------------------------
1. 双击「安装服务.bat」,它会把 算法交易状态.ex5 自动复制到本机
   所有 MT5 终端的 MQL5\Services 文件夹,并列出每个终端的结果。
   (也可以手动复制:MT5 菜单「文件」→「打开数据文件夹」,
   进入 MQL5\Services\,把 算法交易状态.ex5 放进去。)
2. 打开每个 MT5,在导航器的「服务」上右键 →「刷新」,
   就能看到「算法交易状态」。
3. 右键「算法交易状态」→「添加服务」,在弹出的窗口点「确定」
   (窗口里如果有「允许算法交易」,要勾上,否则不能清仓)。
   添加后服务名前面的图标变成运行状态即可。
4. 每个要控制的终端都做一遍第 2、3 步。
   复制可以一键完成,但「添加服务」MT5 只能手动点,每个终端点一次,
   以后终端重启会自动运行。

装好以后终端重启会自动启动这个服务,不用再管。
这个服务不用 DLL、不占图表,不影响图表上跑的任何 EA。


四、日常使用
--------------------------------------------------
双击对应的 bat,窗口里会列出每个账号的结果,例如:

    账号      原状态  现状态  持仓挂单  结果
    11020489  关      开      4 / 0     成功
    11020490  开      开      2 / 0     不用动
    11020491  未知    未知    -         跳过:没装状态服务

    共 3 个窗口:开 2,关 0,未知 1

各列含义:
  原状态   操作前的开关状态
  现状态   操作完成后再读一次的状态
  持仓挂单 当前账号的持仓单数 / 挂单数(整个账号,不分品种和 EA)
  结果     成功 / 不用动 / 跳过 / 失败

想放在桌面上点:右键 bat →「发送到」→「桌面快捷方式」。


五、停止并清仓
--------------------------------------------------
双击「停止并清仓.bat」,确认提示里输入 Y 回车。
对每个窗口依次做:
  1. 服务平掉该账号的全部持仓、删除全部挂单;
  2. 空仓后立刻关闭算法交易,EA 不会再开新单;
  3. 再核对一次,如果关闭前 EA 趁机又开了单,就重来,最多 3 次。
成功显示「已清仓并关闭」,持仓挂单显示 0 / 0。

注意:
- 平的是整个账号的所有单:所有品种、所有 EA、包括手动下的单。
- 服务只有在算法交易开着时才能下单平仓,所以原来关着算法交易的
  窗口会被临时打开几秒,平完再关上。这几秒里图表上的 EA 也会运行。
- 休市、品种不可交易、网络断开时会平不掉,结果显示「失败」或
  「超时」和剩余单数、错误原因,需要开市后再点一次或手动处理。
- 最多等 60 秒;超时的窗口也会尽量把算法交易关掉。


六、常见问题
--------------------------------------------------
1. 显示「跳过:没装状态服务」
   这个终端没装或没启动「算法交易状态」服务(导航器→服务里
   看一下它是否在运行,没运行就右键→「启动」),脚本不知道它当前
   是开还是关,为了不按反,「开始」「停止」会跳过它。
   按第三步装好服务即可;临时可以用「切换算法交易.bat」。

2. 显示「未知」
   - 服务没装,或者服务被停止了;
   - 终端没登录账号(窗口标题开头没有账号号码);
   - 刚启动终端,服务还没写入状态,等几秒再试。

3. 显示「失败,请手动检查」
   按了但状态没变。到那个窗口看一下算法交易按钮,
   如果终端卡住或弹着对话框,处理完再点一次。

4. 显示「没找到打开的 MT5 窗口」
   没有运行中的 MT5(terminal64.exe),或者窗口被隐藏到了托盘。

5. 显示「跳过:状态服务要更新到 1.1」
   清仓需要 1.1 版的服务。把新的 算法交易状态.ex5 放进本文件夹,
   双击「安装服务.bat」覆盖旧文件(显示「已更新」),然后在导航器→服务里右键「算法交易状态」→「停止」,再「启动」。

6. 双击 bat 闪一下就没了 / 提示不能运行脚本
   确认 algo_switch.ps1 和 bat 在同一个文件夹;
   文件夹路径太特殊时,可以把整个文件夹放到 D:\ 下面再试。


七、原理简述
--------------------------------------------------
- 按按钮:脚本找到所有 terminal64.exe 的主窗口,用 Windows 的
  PostMessage 发送 WM_COMMAND 32851,效果等于点一下工具栏上
  的「算法交易」按钮(也就是 Ctrl+E)。
- 读状态:MT5 不让外部程序直接读按钮状态,所以由终端里的
  「算法交易状态」服务每秒把状态写到共用文件夹:
    %APPDATA%\MetaQuotes\Terminal\Common\Files\AlgoState\<账号>.txt
  脚本按窗口标题里的账号号码去读对应的文件。
  文件超过 10 秒没更新,就当作服务没在跑,状态视为未知。
- 「开始」「停止」只按状态不对的窗口,按完等 2.5 秒再读一次核对结果。
- 清仓:脚本在共用文件夹写一个命令文件 AlgoState\command.txt,
  各终端的服务读到新命令(60 秒内有效,服务启动前的旧命令不执行)
  就开始平仓,脚本看到某个账号空仓后马上关掉它的算法交易。


ScreenShot_2026-11-05_192020_055@2x.png
ScreenShot_2026-11-05_192227_856@2x.png
举报

评论 使用道具

精彩评论1

1520997065
D
 楼主 | 发表于 前天 19:36 | 显示全部楼层
来看看吧
举报

点赞 评论 使用道具

发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册