我有一个简单的
test.py
脚本,我想从 MQL4 EA 运行它。
我该如何实现这个?
我尝试过使用
ShellExecute()
但这在我的情况下不起作用,因为我在 Linux 机器上运行 MetaTrader4 终端,因此无法调用基于 Windows 的 ShellExecute()
(即使使用 wine
)。
wine
-promise 来获得完整的 DLL 抽象如果配置正确,
wine
项目应该提供完整的DLL抽象,因此合法的ShellExecute()
应该提供一种启动葡萄酒封装的MetaTrader4终端的方法,从而启动此类预期进程。
考虑到此选项自 ZeroMQ v2.11 起就可行,Python 始终准备好与 MQL4 通信并按需启动/停止任何服务配置。这将是我的首选方式,因为工作流程并不孤立于“发射后不管”的导弹控制。
使用该架构多年用于 AI/ML 预测器预测引擎、远程键盘、异地集中式智能日志记录、流程健康/性能遥测服务集成(不仅使用 MQL4 代码执行单元)并保持满意的状态多年来选择这种先进的分布式架构方式。
Nota Bene: 值得注意的是,MQL4 Build 850 / 900 MetaTrader4 终端代码执行引擎修订版周围的某个地方已经为 DLL 包装器/原始 ZeroMQ v2.11 包装器造成了几十个严重问题,但有些问题适度的努力使 {MQL4|*}
发生了 New-
MQL4.56789
变化,不再是 string
(令人惊讶的是重新打扮过的
string
),但在大多数高性能处理中互动是紧凑的,因此不应出现令人心碎的情况。Python方面:
struct
MQL4 方面:
def main():
# setup ZeroMQ infrastructure and map all resources
import zmq
...
pass; mainloopSTAY = True
# mainloop(): -----------------------------
while mainloopSTAY:
try:
# ----------------------- event-handling:
pass;
except:
# ------------------------- EXC-handling: { continue }
pass;
finally:
# dismantle ZeroMQ infrastructure and release all resources
pass; print( "INF: main().finally: EXIT" )
# { break | if mainloopSTAY }
#----------------------------------------------
pass; print( "INF: main().pre-return SECTION" )
if __name__ == '__main__':
main() # EXECUTED only if this module-file was called to run from a command-line ( Ref. SECTION: import for def: )