OnXXX( параметры )
{
запомнить параметры (поместить в очередь)
OnMain();
}
On2XX( параметры )
{
/*вычисления*/
поменять приоритет обработки событий (если нужно)
/*вычисления*/
промежуточный return (если нужно)
/*вычисления*/
}
void OnMain()
{
прочитать приоритет обработки событий
для каждой группы событий
извлечь параметры из очереди
OnTradeXXX( параметры )
удалить событие из очереди
}
请为这个想法提供一个初步的图表代码。乍听起来,这完全是一种误解。
在执行OnMain函数的过程中,没有办法知道 当前真实队列的状态。要做到这一点,唯一的变通办法是使用间谍软件,如链接中给出的。
在其最简单的形式中。
你只需要改变计算本身的方法(按任务要求的频率做中间返回)。但如果这很难,请考虑在第1步中,OnMain对你来说并不存在(你不是在OnMain中移动主代码,而是在On2XX中),分别在OnMain中你不需要学习任何东西。
拐杖的制作方向是错误的。
留下OnXXX函数只复制队列中的事件(参数)并调用主OnMain函数。将他们所有的代码转移到重复的On2XX函数中。并从OnMain中按你需要的顺序调用这些重复的On2XX函数,依次将队列中的数据作为参数传递给它们。
然后运行测量并显示速度的提高,然后你可以建议用适当的功能来补充MQL。但是,如果你已经在这里和现在自己做了一切,为什么还要加呢?
这不是你要写的东西。
问题是,在 "OntaredeTransaction "函数的输入变量中填充字段的功能与帮助中的描述不一致,更糟糕的是:
,即许多字段在调用中甚至在TRADE_TRANSACTION_HISTORY_ADD的最终调用中没有被填充。
因此,所有的交易者都在这里苦苦思索,以某种方式在到达的那一刻确定这些缺失的参数。
这里有很多讨论,只要在论坛上搜索一下就可以了--糟糕的 "OntaredeTransaction "功能导致了额外的费用,包括时间和 "负载 "交易者在开发适当的工作代码上花费的额外时间(即巨大的时间损失和社区层面的巨大无效性)。
目前来自开发商的答复,如 "如果你有一个市场执行符号,它的价格值将是零;它应该是这样的"(链接)。(链接)--这是不正常的,再次--
,在最后一次函数调用中缺乏详尽的数值,导致大量的额外工作。
HistorySelect.
这是一个极其昂贵的功能。而且,不幸的是,现在无论多少缓存都无法使其速度变得可以接受。
例如,在战场上,用实际的数据工作是很重要的。特别是,如果可能的话,来自Market Watch和CopyTicks的ticks没有过期。
要做到这一点,没有很好的,但被迫的机制来检查当前价格数据的相关性。这个机制的一部分是检测一个符号的交易比最后一个tick晚的情况。这种情况并不罕见,因此了解当前的蜱虫是否仍然是最新的,这一点很重要。
为了进行这种检测,你需要能够访问最近交易的历史。它是通过使用HistorySelect以如下示意方式完成的。
不幸的是,这样调用HistorySelect需要5-30毫秒(我在Release-EX5中亲自测量过)。当专家顾问在OnTick中进行几次这样的更新时(应该在任何暂停之后进行,例如在每次OrderSend之后),那么一切都变得异常昂贵/漫长。HistorySelect可以在一次OnTick中集体吃掉几秒钟。
亲爱的开发商,为什么这么贵?通过适当的执行,该功能可以立即执行。
你有关于 "对HistorySelect 的这种调用 持续了5-30毫秒"的证据吗?
如果我对你的想法理解正确,那么测试代码应该是这样的。
这就是100000次查询的工作方式。
你有关于 "对HistorySelect 的这种调用 持续了5-30毫秒"的证据吗?
如果我对你的观点理解正确,那么测试代码应该是这样的。
这就是100,000次查询的工作方式。
你有关于 "对HistorySelect 的这种调用 持续了5-30毫秒"的证据吗?
如果我对你的观点理解正确,那么测试代码应该是这样的。
这就是100,000次查询的工作方式。
运行你的脚本。
启动另一个脚本。
正常的战斗次数。不是HFT。
顺便说一下,你的脚本显示,HistorySelect每次都会重新计算所有的东西。而输入参数没有变化,历史表没有更新,其他HistorySelect函数没有被调用。
运行你的脚本。
那么就需要细节。
我的测试是在并非最快的 "Intel Xeon E5-2630 v4 @ 2.20GHz "上运行的,后台有很多其他进程。
我的测试账户历史显示,自2009年以来,或多或少均匀地 有31315个订单,包括今天的8个订单。
也许,你有一些脚本或专家顾问在同时运行,导致终端数据库的急剧加载。在一个 "干净 "的终端上试试。
更多信息的测试。
三次运行。
那么就需要细节。
我的测试是在并非最快的 "Intel Xeon E5-2630 v4 @ 2.20GHz "上运行的,后台有很多其他进程。
测试账户自2009年以来,在其历史上或多或少均匀地有31315个订单,包括今天的8个订单。
也许,你有一些脚本或专家顾问在同时运行,导致终端数据库的急剧加载。在一个 "干净 "的终端上试试。
在同一账户和机器上的空终端。
在其他账户和终端机上也是这样的情况。配置。
我请读者给出他们对这个剧本的结果。
一个更有内容的测试。
三次首发。
空的终端2460。
ZS 在空账户上运行。
速度似乎受到交易数量 的强烈影响,而不是订单的影响。
在同一账户和机器上清空终端。
在其他账户和终端机上也是如此。配置。
我请读者引用他们对这个脚本的结果。
这并不能证明什么,但随着每一次新的运行(在不同的符号上),时间的增加--这一事实令人震惊......
需要在一个有长期交易历史的账户上运行。