MT5和速度在行动 - 页 60 1...535455565758596061626364656667...94 新评论 fxsaber 2020.10.26 14:18 #591 Anton:测试代码。 这段代码表明,作者并不了解这个问题。 证明一下吧。 // Классический SYMBOL_BID vs Альтернативный SYMBOL_BID. // Запускать только на демо-счетах. #include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006 #define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK) bool GetPosition( const int Type = OP_BUY ) { bool Res = false; for (int i = PositionsTotal() - 1; (i >= 0) && !Res; i--) Res = PositionGetTicket(i) && (PositionGetInteger(POSITION_TYPE) == Type) && (PositionGetString(POSITION_SYMBOL) == _Symbol); return(Res); } // Альтернативный способ получения Bid-цены текущего символа. // Запускать только на демо-счетах. double GetBid() { static const TICKET_TYPE Ticket = GetPosition() ? PositionGetInteger(POSITION_TICKET) : OrderSend(_Symbol, OP_BUY, 0.1, Ask, 0, 0, 0); return(PositionSelectByTicket(Ticket) ? PositionGetDouble(POSITION_PRICE_CURRENT) : 0); } #define TOSTRING(A) ", "#A + " = " + (string)(A) #define MACROS(A, B) \ const ulong StartTime##A = GetMicrosecondCount(); \ const double A = B; \ const ulong Interval##A = GetMicrosecondCount() - StartTime##A; \ \ if (Interval##A > 100) \ Time##A += (long)Interval##A; long TimeBid1 = 0; // Суммарное время на длительный SYMBOL_BID long TimeBid2 = 0; // Суммарное время на длительный GetBid() const bool Init = EventSetTimer(10) && GetBid(); // Будем выводить статистику каждый 10 секунд. void OnTimer() { // На сколько отстает один вариант от другого по времени выполнения. Alert(TOSTRING(TimeBid1 - TimeBid2) + " mcs." + TOSTRING(TimeBid1) + TOSTRING(TimeBid2)); } void OnTick() { const uint StartTime = GetTickCount(); // return; while (!IsStopped() && (GetTickCount() - StartTime < 10000)) { MACROS(Bid1, SymbolInfoDouble(_Symbol, SYMBOL_BID)) MACROS(Bid2, GetBid()) // if (Bid1 != Bid2) // Alert("Error!" + TOSTRING(Bid1) + TOSTRING(Bid2)); // Sleep(0); // Специально убрал. } } 该EA通过两种方式获得当前符号的买入价。对于每一种情况,它都会总结出长执行情况的执行时间。然后显示了两者之间的区别。 装载了6/8个代理。并在RannForex-Server 演示的六个图表(不同的符号)上运行该EA。结果。 2020.10.26 16:10:40.596 Test9 (EURNZD,H1) Alert: , TimeBid1-TimeBid2 = 236507295 mcs., TimeBid1 = 246491044, TimeBid2 = 9983749 2020.10.26 16:10:42.596 Test9 (CAC40,H1) Alert: , TimeBid1-TimeBid2 = 235249710 mcs., TimeBid1 = 241768964, TimeBid2 = 6519254 2020.10.26 16:10:44.267 Test9 (DAX30,H1) Alert: , TimeBid1-TimeBid2 = 243552816 mcs., TimeBid1 = 253424672, TimeBid2 = 9871856 2020.10.26 16:10:44.382 Test9 (DJI30,H1) Alert: , TimeBid1-TimeBid2 = 265778370 mcs., TimeBid1 = 272279313, TimeBid2 = 6500943 2020.10.26 16:10:44.623 Test9 (ASX200,H1) Alert: , TimeBid1-TimeBid2 = 210921561 mcs., TimeBid1 = 219901110, TimeBid2 = 8979549 2020.10.26 16:10:44.732 Test9 (FTSE100,H1) Alert: , TimeBid1-TimeBid2 = 226824499 mcs., TimeBid1 = 235809635, TimeBid2 = 8985136 我们有一个完整的证明,SYMBOL_BID的总执行时间(TimeBid1)灾难性地输给了(TimeBid2)替代的得到Bid价格。 这种获取当前价格的拐杖式解决方案胜过了MQL5主要功能本身的性能。你同意这个证明吗? 我希望我以前能想到这个雄辩的拐杖。 ZZZY 专家顾问需要让algo交易发挥作用。因此,只在模拟账户上运行。 Andrey Khatimlianskii 2020.10.26 14:45 #592 fxsaber:该EA通过两种方式获得当前符号的买入价。 POSITION_PRICE_CURRENT 被抢走? 那么我们与什么相比较呢?获取最后存储的(何时?)价格与获取终端已知的最后价格? 嗯,而且8个核心中大约有6个直接说了出来。为什么要进行这样的 测试? Anton 2020.10.26 15:10 #593 fxsaber:这段代码表明,作者并不了解这个问题。 你的说法证明你不想看到明显的事实。 这段代码显示,没有 "SymbolInfoTick制动 "的情况。 在或多或少的现代硬件上,SymbolInfoTick的运行时间小于1 MICROS秒。 该专家顾问通过两种方式获得当前符号的买入价。对于每一种情况,它都会总结出长执行情况的执行时间。然后它显示了它们之间的差异。 装载了6/8个代理。并在RannForex-Server 演示的六个图表(不同的符号)上运行该EA。结果。 我们有充分的证据表明,SYMBOL_BID的总执行时间(TimeBid1)灾难性地输给了(TimeBid2)替代得到的Bid价格。 这种获取当前价格的拐杖式解决方案胜过了MQL5主要功能本身的性能。你同意这个证明吗? 我希望我以前能想到这个雄辩的拐杖。 ZZZY 专家顾问需要让algo交易发挥作用。因此,只在模拟账户上运行它可能是有用的。 不,这不是证据。这是一个绝对肮脏的测试,不能认真对待。 我甚至懒得去讨论细节,事实上,你又是用GetMicrosecondCount()来为单个调用计时,又是在后台4个内核的CPU上 "加载了6/8个代理"。 我在上面已经清楚地表明,在 "x++"执行中也可以通过这种方式找到假想的刹车。 你关于 "SymbolInfoTick brakes "的说法被我的代码基本检查和反驳,非常简单和明显。 SymbolInfoTick的原始实现虽然相当快,但在紧张的多线程负载下,确实允许单个线程出现零星的执行时间 高峰。 在最新的构建中,它也没有这个缺点。 你一直在和一个完全知道自己在说什么的人争论,也就是说,看到了实现,并能在不同的模式下对它们进行剖析,这实在令人惊讶。 "让我们和那些吃过牡蛎和椰子的人争论一下它们的味道"。 fxsaber 2020.10.26 16:46 #594 Andrey Khatimlianskii:POSITION_PRICE_CURRENT 被抢走? 不,MT4Orders只用于建仓。 那么我们与什么相比较呢?获得最后保存的价格(何时? 与获得终端已知的最后价格? 我们比较了从市场观察得到的价格的持续时间和位置。价格当然是一致的。 而8个核心中大约有6个直接说。为什么要进行这样的 测试? 只有让盲人也看到有问题。这是无稽之谈,当Bid-price没有通过位置放缓,而SymbolInfoTick滞后得很厉害。 我觉得如果没有论坛用户的支持,这堵MQ墙是不可能被打破的。代码很短,专业人士应该能够迅速掌握。这里面没有任何缺陷。这清楚地表明,通过头寸获得的价格比从市场观察获得的价格要快得多。我不明白为什么MQ们看不到这些明显的事实。 fxsaber 2020.10.26 16:53 #595 Anton:你的说法证明你不想看到明显的事实。 这段代码显示,没有 "SymbolInfoTick制动 "的情况。在或多或少的现代硬件上,SymbolInfoTick的运行时间不超过1 MICROsecond。 不,这不是一个证明。一个绝对混乱的测试,不能认真对待。我甚至懒得讨论细节,你再次通过GetMicrosecondCount()测量单次调用的时间,而且是在4核CPU上 "加载了6/8个代理 "的背景下,就足够了。我在上面已经清楚地表明,在 "x++"执行中也可以通过这种方式找到假想的刹车。你关于 "SymbolInfoTick brakes "的说法被我的代码基本检查和反驳,非常简单和明显。 SymbolInfoTick的原始实现虽然相当快,但在紧张的多线程负载下,确实允许单个线程出现零星的执行时间 高峰。最新的构建版本也没有这个缺点。你一直在和一个完全知道自己在说什么的人争论,也就是说,看到了实现,并能在不同的模式下对它们进行剖析,这实在令人惊讶。"让我们和那些吃过牡蛎和椰子的人争论一下它们的味道"。 你还没有看过代码。我不相信无能。 if (Interval##A > 100) \ Time##A += (long)Interval##A; 这是一个条件,只有执行时间超过100µs才算数。如果你认为这是个小数值,那就把它变成一个数量级的长度。其效果是一样的。 被比较的两个功能都处于绝对平等的条件下。一个是在最后刹车,另一个是没有。再仔细看一下代码的衡量标准。 目前,用建议的拐杖取代战斗中的SymbolInfoTick,几乎消除了与获得当前价格有关的所有滞后。这是痴心妄想,但不幸的是,它确实如此。 HI 注意OnTick中的while。它是特意用来捕捉OnTick被接受后的虱子的。这段代码并不是突然写出来的。这不是一个完全人为的for-cycle,测量理想条件下的医院平均温度。 Maxim Dmitrievsky 2020.10.26 17:01 #596 fxsaber:我觉得如果没有论坛成员的支持,这堵MQ墙将无法通过。代码很短,专业人员应该能很快搞清楚。那里没有任何缺陷。这清楚地表明,通过头寸获得的价格比从市场观察获得的价格要快得多。MQ怎么会看不到这些明显的东西--我不明白。代码中没有错误,所以SymbolInfoTick比获取未平仓 合约的价格要慢一些 从位置上获取价格的黑客技术不错,没有猜到或意识到会有这样的区别。 Igor Makanu 2020.10.26 17:13 #597 fxsaber:只是为了让盲人也能看到有问题。好吧,当Bid价格通过位置不慢时,这是无稽之谈,但SymbolInfoTick以一种可怕的方式滞后。 试着测试SymbolInfoTick,当市场概览中只有一个符号时,以及有几十个符号时,但要求有一个符号--就像你的例子中那样 很有可能是服务器压缩了流量,SymbolInfoTick在解压数据时有这种间歇性的滞后。 也就是说,当有很多角色的时候,测试时间会有更频繁或更深的下降。 因此,如果这被证明是真的,那么重做整个架构....。疑惑的快乐 fxsaber 2020.10.26 18:13 #598 Igor Makanu:尝试测试SymbolInfoTick,当市场概览中只有一个符号时,以及有几十个符号时,但要求使用一个工具--就像你的例子中那样很有可能服务器正在发送压缩的流量,并且SymbolInfoTick在解压数据时遇到了这种间歇性的速度下降。也就是说,当有很多符号时,测试时间会有更频繁或更深的下降。 这个假设指的是当市场观察中的价格落后于tumblr价格(反之亦然)的这种情况。但到目前为止,我们只讨论了终端内部SymbolInfoTick本身的制动问题,没有触及价格相关性的问题。 Andrey Khatimlianskii 2020.10.26 18:26 #599 fxsaber:被比较的两个函数处于完全相同的条件下。 至少GetBid是在SymbolInfoDouble之后调用的。如果我们把它们对调,结果会一样吗? 有些东西告诉我,POSITION_PRICE_CURRENT 取的是存储的价格,而不是新的价格。 话说回来,我不认为在一个80%负载的CPU上进行测试有什么意义。我们正在测试CPU性能和资源分配的胜博发,而不是我们需要的功能。 fxsaber 2020.10.26 20:32 #600 Andrey Khatimlianskii:至少GetBid是在SymbolInfoDouble之后调用的。如果你把它换掉,结果会一样吗? 我是在出版前进行实验的。不,它没有。 有些东西告诉我,POSITION_PRICE_CURRENT 取的是存储的价格,而不是新的价格。 这就是问题的关键,MQL-程序需要的是来到终端的最后价格,而不是其他东西。当蜱虫进入终端时,它会自动更新所有的仓位/订单表。 好吧,再说一遍,我不认为在一个80%负载的CPU上进行测试有什么意义。我们正在测试CPU性能和资源分配的赢利,而不是我们需要的功能。 主要条件是两个功能的环境是相同的。CPU负载是差异可见性的更突出的因素。 20个并行的EA有时可以同时进行SymbolInfoTick的调用,那么就会出现一毫秒的爆发性负载和滞后。我只是建议明确地这样做,以便立即注意到问题。 同样,两个功能的测试条件是相同的。事实。 关于交易、自动交易系统和策略测试的论坛 MT5和速度在行动 fxsaber, 2020.10.26 17:53 目前,用建议的拐杖 取代战斗中的SymbolInfoTick,几乎消除了与获得当前价格有关的所有制动。这是痴心妄想,但不幸的是,它确实如此。 1...535455565758596061626364656667...94 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
测试代码。
这段代码表明,作者并不了解这个问题。
该EA通过两种方式获得当前符号的买入价。对于每一种情况,它都会总结出长执行情况的执行时间。然后显示了两者之间的区别。
装载了6/8个代理。并在RannForex-Server 演示的六个图表(不同的符号)上运行该EA。结果。
我们有一个完整的证明,SYMBOL_BID的总执行时间(TimeBid1)灾难性地输给了(TimeBid2)替代的得到Bid价格。
这种获取当前价格的拐杖式解决方案胜过了MQL5主要功能本身的性能。你同意这个证明吗?
我希望我以前能想到这个雄辩的拐杖。
ZZZY 专家顾问需要让algo交易发挥作用。因此,只在模拟账户上运行。
该EA通过两种方式获得当前符号的买入价。
POSITION_PRICE_CURRENT 被抢走?
那么我们与什么相比较呢?获取最后存储的(何时?)价格与获取终端已知的最后价格?
嗯,而且8个核心中大约有6个直接说了出来。为什么要进行这样的 测试?
这段代码表明,作者并不了解这个问题。
你的说法证明你不想看到明显的事实。
这段代码显示,没有 "SymbolInfoTick制动 "的情况。
在或多或少的现代硬件上,SymbolInfoTick的运行时间小于1 MICROS秒。
该专家顾问通过两种方式获得当前符号的买入价。对于每一种情况,它都会总结出长执行情况的执行时间。然后它显示了它们之间的差异。
装载了6/8个代理。并在RannForex-Server 演示的六个图表(不同的符号)上运行该EA。结果。
我们有充分的证据表明,SYMBOL_BID的总执行时间(TimeBid1)灾难性地输给了(TimeBid2)替代得到的Bid价格。
这种获取当前价格的拐杖式解决方案胜过了MQL5主要功能本身的性能。你同意这个证明吗?
我希望我以前能想到这个雄辩的拐杖。
ZZZY 专家顾问需要让algo交易发挥作用。因此,只在模拟账户上运行它可能是有用的。
不,这不是证据。这是一个绝对肮脏的测试,不能认真对待。
我甚至懒得去讨论细节,事实上,你又是用GetMicrosecondCount()来为单个调用计时,又是在后台4个内核的CPU上 "加载了6/8个代理"。
我在上面已经清楚地表明,在 "x++"执行中也可以通过这种方式找到假想的刹车。
你关于 "SymbolInfoTick brakes "的说法被我的代码基本检查和反驳,非常简单和明显。
SymbolInfoTick的原始实现虽然相当快,但在紧张的多线程负载下,确实允许单个线程出现零星的执行时间 高峰。
在最新的构建中,它也没有这个缺点。
你一直在和一个完全知道自己在说什么的人争论,也就是说,看到了实现,并能在不同的模式下对它们进行剖析,这实在令人惊讶。
"让我们和那些吃过牡蛎和椰子的人争论一下它们的味道"。
POSITION_PRICE_CURRENT 被抢走?
不,MT4Orders只用于建仓。
那么我们与什么相比较呢?获得最后保存的价格(何时? 与获得终端已知的最后价格?
我们比较了从市场观察得到的价格的持续时间和位置。价格当然是一致的。
而8个核心中大约有6个直接说。为什么要进行这样的 测试?
只有让盲人也看到有问题。这是无稽之谈,当Bid-price没有通过位置放缓,而SymbolInfoTick滞后得很厉害。
我觉得如果没有论坛用户的支持,这堵MQ墙是不可能被打破的。代码很短,专业人士应该能够迅速掌握。这里面没有任何缺陷。这清楚地表明,通过头寸获得的价格比从市场观察获得的价格要快得多。我不明白为什么MQ们看不到这些明显的事实。
你的说法证明你不想看到明显的事实。
这段代码显示,没有 "SymbolInfoTick制动 "的情况。
在或多或少的现代硬件上,SymbolInfoTick的运行时间不超过1 MICROsecond。
不,这不是一个证明。一个绝对混乱的测试,不能认真对待。
我甚至懒得讨论细节,你再次通过GetMicrosecondCount()测量单次调用的时间,而且是在4核CPU上 "加载了6/8个代理 "的背景下,就足够了。
我在上面已经清楚地表明,在 "x++"执行中也可以通过这种方式找到假想的刹车。
你关于 "SymbolInfoTick brakes "的说法被我的代码基本检查和反驳,非常简单和明显。
SymbolInfoTick的原始实现虽然相当快,但在紧张的多线程负载下,确实允许单个线程出现零星的执行时间 高峰。
最新的构建版本也没有这个缺点。
你一直在和一个完全知道自己在说什么的人争论,也就是说,看到了实现,并能在不同的模式下对它们进行剖析,这实在令人惊讶。
"让我们和那些吃过牡蛎和椰子的人争论一下它们的味道"。
你还没有看过代码。我不相信无能。
这是一个条件,只有执行时间超过100µs才算数。如果你认为这是个小数值,那就把它变成一个数量级的长度。其效果是一样的。
被比较的两个功能都处于绝对平等的条件下。一个是在最后刹车,另一个是没有。再仔细看一下代码的衡量标准。
目前,用建议的拐杖取代战斗中的SymbolInfoTick,几乎消除了与获得当前价格有关的所有滞后。这是痴心妄想,但不幸的是,它确实如此。
HI 注意OnTick中的while。它是特意用来捕捉OnTick被接受后的虱子的。这段代码并不是突然写出来的。这不是一个完全人为的for-cycle,测量理想条件下的医院平均温度。
我觉得如果没有论坛成员的支持,这堵MQ墙将无法通过。代码很短,专业人员应该能很快搞清楚。那里没有任何缺陷。这清楚地表明,通过头寸获得的价格比从市场观察获得的价格要快得多。MQ怎么会看不到这些明显的东西--我不明白。
代码中没有错误,所以SymbolInfoTick比获取未平仓 合约的价格要慢一些
从位置上获取价格的黑客技术不错,没有猜到或意识到会有这样的区别。只是为了让盲人也能看到有问题。好吧,当Bid价格通过位置不慢时,这是无稽之谈,但SymbolInfoTick以一种可怕的方式滞后。
试着测试SymbolInfoTick,当市场概览中只有一个符号时,以及有几十个符号时,但要求有一个符号--就像你的例子中那样
很有可能是服务器压缩了流量,SymbolInfoTick在解压数据时有这种间歇性的滞后。
也就是说,当有很多角色的时候,测试时间会有更频繁或更深的下降。
因此,如果这被证明是真的,那么重做整个架构....。疑惑的快乐
尝试测试SymbolInfoTick,当市场概览中只有一个符号时,以及有几十个符号时,但要求使用一个工具--就像你的例子中那样
很有可能服务器正在发送压缩的流量,并且SymbolInfoTick在解压数据时遇到了这种间歇性的速度下降。
也就是说,当有很多符号时,测试时间会有更频繁或更深的下降。
这个假设指的是当市场观察中的价格落后于tumblr价格(反之亦然)的这种情况。但到目前为止,我们只讨论了终端内部SymbolInfoTick本身的制动问题,没有触及价格相关性的问题。
被比较的两个函数处于完全相同的条件下。
至少GetBid是在SymbolInfoDouble之后调用的。如果我们把它们对调,结果会一样吗?
有些东西告诉我,POSITION_PRICE_CURRENT 取的是存储的价格,而不是新的价格。
话说回来,我不认为在一个80%负载的CPU上进行测试有什么意义。我们正在测试CPU性能和资源分配的胜博发,而不是我们需要的功能。
至少GetBid是在SymbolInfoDouble之后调用的。如果你把它换掉,结果会一样吗?
我是在出版前进行实验的。不,它没有。
有些东西告诉我,POSITION_PRICE_CURRENT 取的是存储的价格,而不是新的价格。
这就是问题的关键,MQL-程序需要的是来到终端的最后价格,而不是其他东西。当蜱虫进入终端时,它会自动更新所有的仓位/订单表。
好吧,再说一遍,我不认为在一个80%负载的CPU上进行测试有什么意义。我们正在测试CPU性能和资源分配的赢利,而不是我们需要的功能。
主要条件是两个功能的环境是相同的。CPU负载是差异可见性的更突出的因素。
20个并行的EA有时可以同时进行SymbolInfoTick的调用,那么就会出现一毫秒的爆发性负载和滞后。我只是建议明确地这样做,以便立即注意到问题。
同样,两个功能的测试条件是相同的。事实。
关于交易、自动交易系统和策略测试的论坛
MT5和速度在行动
fxsaber, 2020.10.26 17:53
目前,用建议的拐杖 取代战斗中的SymbolInfoTick,几乎消除了与获得当前价格有关的所有制动。这是痴心妄想,但不幸的是,它确实如此。