mem_time = GetMicrosecondCount(); - для проверки времени задержки OnTradeTransaction
mem_start_time = TimeCurrent(); - для сужения рамок поиска в истории
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
看一下日志的时间。这一切都发生在一个毫秒中,而在它旁边(在同一个毫秒中)有一堆的安书。
你可以通过计数器来计算所有的事件,但即使在视觉上你也可以看到有更多的OnBooks。
你不是写了你使用异步订单吗?
我想知道,你用什么算法来控制交易的执行?
安德鲁,那里的数字是触发OnFunctions时的固定微秒数,然后从数组中把所有东西都打印出来。OnBooks的总数可能更多--我会计算,但不清楚为什么它们会在队列中跳到OnTicks之前,或者是什么。或者不是每个OnTick都对应着一个OnBook?
欢迎来到网络世界 ))))
最简单的做法是在管理员下运行Netstat - a -b。
你会看到端口和软件,我不想打扰,但我认为MT5服务器会异步传递带有不同信息的数据包,终端会将其放入需要的 "货架"。
SZZY: 关于Print(),如果你一次打印很多,就跳过打印,你知道吗?- 只要把你的信息写在文件里就可以了--这样你就能按顺序保存所有的信息,但在关闭文件之前不要忘记关闭文件。理论上说和Print()文件中的日志应该是完整的,但没有检查过,一般来说我不相信如果有大量的数据输出。在这里讨论https://www.mql5.com/ru/forum/329730 ,经常讨论 "缺失的印刷品"))- 搜索
安德鲁,当OnFunctions被触发时,这些数字是固定的微秒数,然后从数组中全部打印出来。也许总共有更多的OnBooks--我将计算它们,但不清楚为什么它们在队列中比OnTicks跳得早。或者不是每个OnTick都对应着一个OnBook?
明白了。
嗯,反正周围有很多OnBooks。对于这样的日志,很难得出任何结论。
我以为你写的是你在使用异步订单?
我想知道,你用什么算法来控制交易执行?
在OnTradeTransaction()+检查功能中,如果长时间没有服务器响应。
一般来说是靠魔术。
在设置EA时,我为每个符号保留65535个魔法符号。
而在发送订单时,我给它分配了一个独特的神奇数字,它不会以任何方式与其他符号相交。
这与其他文书没有任何重叠之处。
我是这样为一个符号设置初始魔法数字的
魔术 - ulong(8字节),例如:
GAZR-3.12
字节[7](高字节)为 "G"
字节[6]是 "A"
字节[5]为 "Z"。
字节[4]是 "R
字节[3]是 "3
字节[2]是 "12"
Byte[1]和Byte[0]是Magiks储备(65535)。
在发送订单时,我就是这样通过魔法的。
但这只适用于FORTS,因为符号名称是标准化的!
添加
如果订单被成功发送,那么
记忆中的时间
然后(如果在OnTradeTransaction中没有回应的话)
然后是FindOrderBuyMagic 函数本身
由以下人员添加
将EA标识符(0-255)添加到automagic的第1个字节的 "好主意"。
但我还不需要它,所以我还没有做 :)
在OnTradeTransaction()+检查功能中,如果长时间没有服务器响应。
谢谢你的提示。
1.经纪人的第二个及以后的终端是现收现付,我没有只交易股票(股票组合)的策略。
2.如果你要输出累积的GetMicrosecondCount(),那么
在OnDeinit()中不使用定时器,当EA退出时,一切都会打印出来。
请把经纪人的链接发给我,在LC中是可以的。
这是一个有趣的分支...:-)
欢迎来到网络世界 ))))
最简单的做法是在管理员下运行Netstat - a -b。
你会看到端口和软件,我不想打扰,但我认为MT5服务器会异步传递带有不同信息的数据包,终端会将其放入需要的 "货架"。
HH:你知道Print()和跳过打印的问题吗,如果你一次输出很多的话?- 只要把你的信息写在文件里就可以了--这样你就能按顺序保存所有的信息,但在关闭文件之前不要忘记关闭文件。理论上说和Print()文件中的日志应该是完整的,但没有检查过,一般来说我不相信如果有大量的数据输出。在这里讨论https://www.mql5.com/ru/forum/329730 ,经常讨论 "缺失的印刷品"))- 搜索
伊戈尔,那些没有打开过日志文件的人讨论过打印件丢失的问题,一百次了,里纳特-法特库林自己写道,日志文件中没有任何丢失。但你的帖子没有白发:)我在一个单独的文件中增加了输出,此外我还做了第二个文件,在那里我的输出方式有点不同(收集CArrayObj中的所有事件),以绕过我的设计中可能存在的错误,这两个数组的顺序,即我把两个数组中的所有东西放在CArrayObj中,然后按微秒排序,输出时标记什么事件Tick或Book。
是的,这与港口有什么关系,这与它有什么关系?我只是在测试EA的事件队列。如果有嘀嗒声,应该形成两个事件--OnTick,和相应的OnBook,OnBook总是放在队列中,如果队列中已经有OnTick,OnTick就会消失(如手册中),即。当一个接一个的OnTick没有OnTick的时候,只有当1.OnTicks "不排队 "2.OnBook有系统延迟 的时候,这是我想检查的,这可以解释之前同事们发现的几秒钟的滞后。总的来说,OnBooks在一天内是2倍以上,但为什么会滞后呢? 如果这种延迟是由于异步数据包和解析造成的,也许是,但到目前为止,我只检查它们到达专家顾问的事实。如何在测试时考虑到其余的细微差别,还没有考虑到这个问题。
这里是新的代码,打开后我将测试工作的正确性并运行一天。
s.w.原因也可能是:如果Tick以同样的价格通过,而不改变杯子--OnBook没有形成? 我不是股票交易的专家,谁能告诉我。我以为OnTick总是导致OnBook。
但我不知道负责人是否对他的问题的答案感到满意。
我已经收到了所有的答案,并得出了自己的结论。
我需要分析一段固定时间内的交易条数--交易的价格、实现的数量等。
而且我还需要在策略测试器中 模拟算法的运行。
OnTick事件完美地应对了这一点,真实交易的结果和测试器中建模的结果一致,只有一个小的误差,这让我很满意。
如果你需要更快的带材分析,你可以使用OnTimer。
而且,不一定每一个进入终端的tick都要放在OnBook中--这是市场订单执行的具体内容。
而进入终端的每一个tick不一定要进入OnBook--这是市场订单执行的具体内容。
相反,每个 进入OnTick处理程序的tick(事件)都必须与OnBook同步。
在OnTick处理程序中有三个事件,最佳买入价格的变化,最佳卖出价格的变化,以及交易(最后)。
如果在没有交易的情况下买入或卖出价格发生变化,这将是一个事件,OnTick将接收这些事件。
而OnBook也必须捕捉这些事件,但它自己的事件,它的处理程序,否则处理程序之间会出现买入和卖出价格的不匹配。
而如果OnTick收到最后一个事件,就意味着一个交易已经过去。
交易在OnTick中产生事件,因为在交易之后,价格或出价和要价的数量在市场上发生变化。
这是一个恶性循环。
在OnTick和OnBook中,有一个Best Bid和Best Ask事件。
这些事件在两个处理程序中应该始终是同步的。
而事件本身是最后的,它在交易后会在OnBook中产生一个事件。
因此,任何进入OnTick处理程序的事件必须同步反映在OnBook中。