0

在MT4中,存在一个阶段/状态:当我们从AccountA切换到AccountB时,当Connection建立并且MT4触发init()和start()时;但在“blinnnggg”(声音)之前,当所有历史/未完成交易从服务器加载时。

切换帐户>建立连接>触发 Init()/Start() 事件>开始下载未完成/历史交易>完成下载(发出“bliing”声音)。

我需要知道(在 MQL4 中)所有交易都已从 tradeServer 下载完成——要知道该账户确实是空的——vs- 仍在从 tradeServer 下载历史记录。

任何指针将不胜感激。我已经探索IsTradeAllowed() IsContextBusy()IsConnected(). 所有这些都处于“正常”状态,并且 init() 和 start() 事件都可以正常触发。但我无法确定历史/未完成交易列表是否已完成下载。

4

2 回答 2

1

更新:我最终实施的最终解决方法是使用OrdersHistoryTotal(). 显然,在下载订单历史记录期间,该数字将为零 (0)。它永远不会为零(由于初始存款)。因此,我最终将其用作“标志”。

于 2015-06-29T19:43:46.100 回答
0

观察

随着问题的发布,MT4-Terminal 似乎没有这样的“集成”方法。

IsTradeAllowed()反映账户的管理状态/对交易服务执行的访问权限{ IsTradeAllowed | !IsTradeAllowed }

IsConnected()反映了在尝试设置/维护本地主机 <-> 服务器之间的在线连接时使用的可见性/登录凭据/连接的技术状态{ IsConnected() | !IsConnected() }

init() {...}是一种一站式设置工具,即{ ExpertAdvisor | Script | TechnicalIndicator }在本地机器上启动 MT4 程序后/正在被调用。强烈建议该设施是非阻塞和不可重入的。从用户 account_A 到另一个用户 account_B 的更改通常是(通过 MT4 配置选项)停止执行先前加载的 MQL4 代码(无论是 EA/脚本/技术指标)的原因)

start() {...}是一种事件处理工具,无休止地等待下一次出现的外汇市场事件出现(由经纪商 MT4-Server 自动化向下传播),该事件通过已建立的连接向下发布到 MT4-终端进程,在 localhost 机器上运行。

解决方案

如所理解的,可以间接地检测和处理该问题。

虽然 MT4 平台似乎没有直接的方法来区分{ current | historical }交易列表的完整/不完整刷新,但让我提出一种间接检测的方法。

尝试启动“信号Ask”交易(挂单,在 PriceDOMAIN 中距离当前/ -levels几何很远的Bid位置)。

一旦该交易被端到端注册(服务器端确认),本地端将确认该交易的有效状态db.POOL

使这成为 localhost/MT4-Server 进程之间的请求/响应模式,因此 localhost int init(){...}/int start(){...}功能可以反映一个时刻,当双方在db.POOL

于 2015-04-11T17:00:57.003 回答