ZeroMQ连接器仍成功发送数据,但未能从MT4服务器获得响应

2024-09-30 16:39:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在关注7个关于如何将python与MetaTrader Terminal 4接口的视频教程,并且按照本video中的说明在iPython内核上运行它们没有问题

毫无问题,我的意思是交易被轻松地发送到服务器,客户端(我的笔记本电脑)在每个操作执行后都收到了正确的响应。当我调用zmq._get_response_()时,我可以访问服务器响应

当我想在程序中编译DWX_ZeroMQ_Connector类时,问题就开始出现了。所以我从一个简单的程序开始,就像这样:

def main():  
    zmq = DWX_ZeroMQ_Connector()
    my_trade = { '_action':       'OPEN',
                 '_type':         0,
                 '_symbol':       'USOIL',
                 '_price':        0.0,
                 '_SL':           0,
                 '_TP':           0,
                 '_comment':      'dwx-zeromq',
                 '_lots':         0.01,
                 '_magic':   123456,
                 '_ticket':       0
                 }
    #
    zmq._DWX_MTX_NEW_TRADE_(_order=my_trade)
    #
    reply     = zmq._get_response_()  
    all_trade = zmq._DWX_MTX_GET_ALL_OPEN_TRADES_()
    #
    print( "reply" + str( reply ) )
    print( "----------------------" )
    print( "alltrade" + str( all_trade ) )

main()

奇怪的是,这个脚本仍然成功地发送了订单,但没有提示任何回复,因为回复结果为空。我为此挣扎了一周

一些补充资料:

  • 我发现只有在使用时才收到响应的问题 Anaconda提示执行编译后的文件,但我收到了正确的 iPython内核上的响应,所以我认为它不可能是我的 依赖关系。两者都在本地主机上运行

  • 我克隆的github页面是最新的v2.0.1 RC8version

  • 这是zmq._get_response_()的印刷版 enter image description here

  • 以下是我的MQL4代码参数 enter image description here

  • 下面是MT4积极推动报价的图片enter image description here

  • 下面是我在DWX_ZeroMQ_Connector对象的初始化过程中试图设置_monitor = True时控制台的一张图片。现在它甚至无法将交易发送到MetaTrader终端4(终端端DWX代码服务服务器),当然仍然无法获得任何回复。 enter image description here

  • 这是当我试图从MT4终端(服务器)获取响应时,终端日志和专家日志的副本。由于是周末,我不得不尝试比特币交易


终端日志

0   16:33:17.600    MetaTrader build 1260 started (Exness Ltd.)
0   16:33:17.600    Windows 10 Pro x64, IE 11, UAC, 4 x Intel Core i7-5500U  @ 2.40GHz, Memory: 4899 / 8103 Mb, Disk: 73 / 99 Gb, GMT+7
0   16:33:17.600    Data Folder: C:\Users\Admin\AppData\Roaming\MetaQuotes\Terminal\F5C18A2156882613427FB4ACF0892997
2   16:33:20.664    Expert DWX_ZeroMQ_Server_v2.0.1_RC8 USOIL,H1: loaded successfully
2   16:33:20.767    Expert DWX_ZeroMQ_Server_v2.0.1_RC8 GBPJPY,H1: loaded successfully
0   16:33:22.258    '36006969': login on Exness-Trial4 through DC00 (ping: 235.09 ms)
0   16:33:24.299    '36006969': login datacenter on Exness-Trial4 through DC00 (ping: 235.09 ms)
0   16:33:24.933    '36006969': previous successful authorization performed from 171.255.70.226
2   16:33:31.235    Expert DWX_ZeroMQ_Server_v2.0.1_RC8 GBPJPY,H1: removed
2   16:33:31.247    Expert DWX_ZeroMQ_Server_v2.0.1_RC8 GBPJPY,H1: loaded successfully
0   16:33:42.019    '36006969': order buy market 0.01 BTCUSD sl: 0.00 tp: 0.00
0   16:33:42.514    Trades: use hosting service to speed up the execution - 0.33 ms via 'MQL5 Amsterdam 01 (MQL5.community)' instead of 235.09 ms
0   16:33:42.514    '36006969': order was opened : #2991084 buy 0.01 BTCUSD at 7110.21 sl: 0.00 tp: 0.00
2   16:35:11.850    Expert DWX_ZeroMQ_Server_v2.0.1_RC8 USOIL,H1: removed
2   16:35:11.866    Expert DWX_ZeroMQ_Server_v2.0.1_RC8 GBPJPY,H1: removed
0   16:35:12.081    MetaTrader build 1260 stopped

专家日志:

0   16:33:20.269    Expert DWX_ZeroMQ_Server_v2.0.1_RC8 EURUSDm,H1: loaded successfully
0   16:33:20.270    DWX_ZeroMQ_Server_v2.0.1_RC8 EURUSDm,H1 inputs: PROJECT_NAME=DWX_ZeroMQ_MT4_Server; ZEROMQ_PROTOCOL=tcp; HOSTNAME=*; PUSH_PORT=32768; PULL_PORT=32769; PUB_PORT=32770; MILLISECOND_TIMER=1; t0=--- Trading Parameters ---; MagicNumber=123456; MaximumOrders=1; MaximumLotSize=0.01; MaximumSlippage=3; DMA_MODE=true; t1=--- ZeroMQ Configuration ---; Publish_MarketData=false; 
0   16:33:20.664    Expert DWX_ZeroMQ_Server_v2.0.1_RC8 USOIL,H1: loaded successfully
0   16:33:20.664    DWX_ZeroMQ_Server_v2.0.1_RC8 USOIL,H1 inputs: PROJECT_NAME=DWX_ZeroMQ_MT4_Server; ZEROMQ_PROTOCOL=tcp; HOSTNAME=*; PUSH_PORT=32768; PULL_PORT=32769; PUB_PORT=32770; MILLISECOND_TIMER=1; t0=--- Trading Parameters ---; MagicNumber=123456; MaximumOrders=1; MaximumLotSize=0.01; MaximumSlippage=3; DMA_MODE=true; t1=--- ZeroMQ Configuration ---; Publish_MarketData=false; 
00  16:33:20.767    Expert DWX_ZeroMQ_Server_v2.0.1_RC8 GBPJPY,H1: loaded successfully
0   16:33:20.767    DWX_ZeroMQ_Server_v2.0.1_RC8 GBPJPY,H1 inputs: PROJECT_NAME=DWX_ZeroMQ_MT4_Server; ZEROMQ_PROTOCOL=tcp; HOSTNAME=*; PUSH_PORT=32768; PULL_PORT=32769; PUB_PORT=32770; MILLISECOND_TIMER=1; t0=--- Trading Parameters ---; MagicNumber=123456; MaximumOrders=1; MaximumLotSize=0.01; MaximumSlippage=3; DMA_MODE=true; t1=--- ZeroMQ Configuration ---; Publish_MarketData=true; 


Tags: 终端serverportzmqh1zeromqmt4metatrader
1条回答
网友
1楼 · 发布于 2024-09-30 16:39:57

按原样提供的DWX_ZeroMQ_Connector()源代码在自保护通信节点免受死锁方面存在一些ZeroMQ缺陷,并且缺少一些技巧来实现专业级的软件健壮性

然而,最严重的警告是显式语句Win10 only+遵守所有DLL依赖项+不要在iPython+中使用不要升级到v2.0.2,所以请遵循它,直到作者发布稳定而健壮的版本


( v2.0.2 is currently in beta-testing, please do not upgrade to v2.0.2 )
...
5 ) This project and all accompanying source code should be run standalone (i.g. via a Python or IPython console, or batch process).

6 ) Please DO NOT run this code in Jupyter or IPython Notebooks.

7 ) The project's dependencies require MS VC++ Libraries. Without these installed, you are likely to run into "Resource Timeout" errors. The DLLs in the dependency projects (mql-zmq, libzmq, libsodium) require that you have the latest Visual C++ runtime (2015) libraries already installed.

8 ) This project has not been tested on emulated environments (e.g. WINE, VMWare, etc).

9 ) This project is intended for use solely in Windows 10 environments, at the present time.

为了回答这个问题,还可以发布以下内容:

  • 从已启动的{}
  • MetaTrader终端日志的副本,其中从python节点连接到MetaTrader终端节点。
  • MetaTrader终端MQL4代码参数的副本:

enter image description here

  • MetaTrader终端有效工作证明的副本-接收交易请求并推送报价更新:

enter link description here


最好检查以上所有Darwinex发布的兼容性条件,并检查您是否符合这些规则


结语:“…未能从MT4获得响应…”,情况并非如此

问题(未接收MT4.PUSH-es)是由于不了解游戏规则造成的,工作解决方案所需的步骤隐藏在-3-不同的地方:

1)API发行商Darwinex可能已经在某个地方记录了这一点,但第一个问题是尝试使用同一个TCP端口三次,这没有其他机会,只能使任何晚些时候获取已获取资源的尝试(如v2.0.1中与ZeroMQ相关的代码)崩溃(正如我有机会回顾的那样)没有使用正确的自我保护设置,这些崩溃可能会阻止任何其他用例,因为冻结了Context()-实例,有些甚至可能持续到O/S重新启动

2)专家初始化在3个发布案例中的2个案例中被明确禁用,由尊敬的用户her/him/x/fluid/*-self通知MT4.{}-ed FxMarketEVENTs({}-(勾选)-数据)

3)如果您错误地期望v2.0.1-RC8代码可以执行某些操作,那么它在命令式代码设置中被显式设置为不执行(同样,API发行商,Darwinex,可能在某个地方记录了这一弱点,但如果经纪人可以在MetaQuotes的MT4服务器套件许可证条件和配置约束允许的范围内自由命名交易工具,那么如果您不调整代码以满足经纪人的实际要求,这就是您的首要问题。)由于所有这些不匹配的情况,第三次出现姓名和头条新闻)

having happened to see a case, when one day our Broker has suddenly changed all the names, and it was I tell you a Hell like experience to see, what the trading infrastructure had to go through ... - the headbanging is a mild and pleasant experience, compared to that ...

0   16:33:20.270           DWX_ZeroMQ_Server_v2.0.1_RC8 EURUSDm,H1 inputs: PROJECT_NAME       =      DWX_ZeroMQ_MT4_Server;
                                                                           ZEROMQ_PROTOCOL    =      tcp;
                                                                           HOSTNAME           =      *;
                                                                           PUSH_PORT          =  32768;
                                                                           PULL_PORT          =  32769;
                                                                           PUB_PORT           =  32770;
                                                                           MILLISECOND_TIMER  =      1;
                                                                           t0                 =       - Trading Parameters  -;
                                                                           MagicNumber        = 123456;
                                                                           MaximumOrders      =      1;
                                                                           MaximumLotSize     =      0.01;
                                                                           MaximumSlippage    =      3;
                                                                           DMA_MODE           =      true;
                                                                           t1                 =       - ZeroMQ Configuration  -;
                                                                           Publish_MarketData =      false;

相关问题 更多 >