MT5和速度在行动 - 页 23 1...161718192021222324252627282930...94 新评论 fxsaber 2020.09.01 22:32 #221 Renat Fatkhullin:如果有人不明白,是fxsaber库在别人的代码中应用时造成了制动。他没有明确指出这一点,而是开始玩起了关于平台刹车和滑倒自杀的例子。而当有机会找到真正的原因并使问题顺利解决时,他却没有把握住。 为了进行局部优化,它正在毒害主程序的历史缓存。 关于交易、自动交易系统和测试交易策略的论坛 MT5和速度在行动 fxsaber, 2020.09.02 00:02 有一个干净的MQL5代码,可以被很多人复制。按照时间顺序,先研究一下,而不是玩阴谋论,有人很需要你,以至于愿意把时间花在你身上,进行抹黑。 你的火鸡工作做得很好。这里没有专门讨论过任何图书馆,因为这不是建设性的。 重点是,如果有人冒险使用共享库,其中的from-input参数不一致,他们将得到刹车。文件中没有任何地方提到这一点。至少有关于它的东西是用钳子从你身上取出来的。而当它完成后,他们开始指责你作弊。 MQL的这个功能应该写在文档和功能分支中。在与创建日期相对应的构建中,运行该分支的干净MQL5脚本。显然,为了以防万一,盲目地进行了这么多的修复。 Renat Fatkhullin 2020.09.01 22:40 #222 fxsaber: 作为一个独立的人,你的工作做得很好。这里没有特别提到图书馆,因为这不是建设性的。 因为你已经尽力 不吹嘘你的 图书馆了。在这些图书馆的存在下。随着 "我的更快 "的不断反对。因此,你巧妙地掩盖了自我射击,伸出了 "看它有多慢"。 问题是,如果有人敢于使用from-input参数不一样的共享库,就会出现滞后现象。文件中没有任何地方提到这一点。至少关于这个话题的东西是用钳子从你身上提取的。而当它完成后,他们开始指责你作弊。 MQL的这个功能应该写在文档和功能分支中。在与创建日期相对应的构建中,运行该分支的干净MQL5脚本。显然,为了以防万一,盲目地进行了这么多的修复。 HistorySelect的文件 明确指出。 HistorySelect()函数在mql5程序中创建了一个订单列表和一个交易列表,以便通过适当的函数进一步引用列表中的元素。交易列表的大小可以通过HistoryDealsTotal() 函数获得,而历史上的订单列表的大小可以通过HistoryOrdersTotal() 函数获得。枚举订单列表中的元素最好使用HistoryOrderGetTicket() 函数,对于交易列表的元素,使用HistoryDealGetTicket() 函数是合适的。 在使用HistoryOrderSelect() 函数后,如果按票据搜索订单的工作 已经成功完成,那么mql5-program可用的历史订单列表将被重置并重新填入订单。这同样适用于交易列表,这对mql5-程序来说是可用的--它通过HistoryDealSelect() 函数被重置,如果通过票号成功获得交易,则重新填充。 当你在处理巨大的交易量时(你在历史上显示了数千和数万的交易是有原因的),需要原子/快照访问,你需要了解它们的成本。 特别是我已经在这个主题中非常详细地解释了这些缓存的技术细节。 你有没有尝试过将每个样本随机化,并尽可能地在缓存中下毒?为了你的立场,任何自我射击都是有必要的? fxsaber 2020.09.01 22:52 #223 Renat Fatkhullin:因为你做了一切 可以让你的 图书馆保持安静。这就是为什么你巧妙地通过标榜 "看它有多慢 "来掩盖自作自受的错误。 99%的bug都是通过这种方式发现的。首先,奇怪的行为是在大代码中发现的。然后本地化找到原因。我更担心的是刹车。 交易功能。问题几乎无处不在。 KD 0 16:00:33.382 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 34: HistoryOrderSelect(0)] = 25 ms. PE 0 16:00:44.913 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 17: CopyTicks(Symb,Ticks,COPY_TICKS_ALL,0,1)] = 24 ms. DP 0 16:00:44.888 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 22: HistorySelect(Tick.time,INT_MAX)] = 46 ms. FI 0 16:00:49.579 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 28: HistoryDealSelect(0)] = 22 ms. EE 0 16:01:03.287 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 33: HistoryOrderGetDouble(0,ORDER_PRICE_CURRENT)] = 1 ms. KE 0 16:01:07.013 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 50: OrderGetDouble(ORDER_PRICE_CURRENT)] = 1 ms. JM 0 16:01:12.189 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 44: TimeCurrent()] = 39 ms. MD 0 16:01:13.067 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 81: ResourceFree(NULL)] = 1 ms. RS 0 16:01:13.572 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 41: SymbolInfoDouble(Symb,SYMBOL_POINT)] = 7 ms. GL 0 16:01:27.816 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 79: GlobalVariableGet(NULL)] = 22 ms. PD 0 16:01:33.892 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 58: PositionGetInteger(POSITION_MAGIC)] = 1 ms. KP 0 16:01:39.864 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 67: OrderCheck(Request,CheckResult)] = 3 ms. ML 0 16:01:39.970 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 62: AccountInfoInteger(ACCOUNT_MARGIN_MODE)] = 1 ms. KM 0 16:01:41.045 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 55: PositionSelect(Symb)] = 2 ms. NS 0 16:01:46.832 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 78: GlobalVariableCheck(NULL)] = 1 ms. JP 0 16:01:49.211 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 75: SymbolName(0,true)] = 1 ms. EL 0 16:01:59.101 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 19: CopyTicksRange(Symb,Ticks,COPY_TICKS_ALL,Tick.time_msc)] = 32 ms. IM 0 16:02:07.462 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 70: AccountInfoInteger(ACCOUNT_TRADE_EXPERT)] = 7 ms. PJ 0 16:02:11.735 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 37: IsStopped()] = 4 ms. OG 0 16:03:08.178 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 32: HistoryOrderGetInteger(0,ORDER_MAGIC)] = 14 ms. JH 0 16:03:16.385 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 40: SymbolInfoDouble(Symb,SYMBOL_TRADE_TICK_VALUE)] = 5 ms. FM 0 16:03:16.601 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 59: PositionGetString(POSITION_SYMBOL)] = 1 ms. GH 0 16:03:21.841 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 72: TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)] = 1 ms. FJ 0 16:03:25.782 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 46: TimeTradeServer()] = 1 ms. EO 0 16:03:26.772 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 45: TimeLocal()] = 10 ms. HD 0 16:03:36.595 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 13: SymbolInfoTick(Symb,Tick)] = 13 ms. ... 这名男子决定提供帮助,并在他的机器上运行一个干净的MQL5代码。上面有一个小样本。阅读上面的函数名称。 HistorySelect文档 明确指出。 HistorySelect()函数在mql5程序中创建了一个订单列表和一个交易列表,以便通过相应的函数进一步引用列表中的项目。交易列表的大小可以通过HistoryDealsTotal() 函数获得,而历史上的订单列表的大小可以通过HistoryOrdersTotal() 函数获得。枚举订单列表中的元素最好使用HistoryOrderGetTicket() 函数,对于交易列表的元素,使用HistoryDealGetTicket() 函数是合适的。 在使用HistoryOrderSelect() 函数后,如果按票据搜索订单的工作 已经成功完成,那么mql5-program可用的历史订单列表将被重置并重新填入订单。这同样适用于交易列表,这对mql5-程序来说是可用的--它通过HistoryDealSelect() 函数被重置,如果通过票号成功获得交易,则重新填充。 我想知道是谁在这段文字的字里行间看到了什么?我个人认为(在这个分支之前),HistoryDealSelect和HistoryOrderSelect必须像这样写。 static bool HistorySelectOrder( const ulong Ticket ) { return((::HistoryOrderGetInteger(Ticket, ORDER_TICKET) == Ticket) || ::HistoryOrderSelect(Ticket)); } static bool HistorySelectDeal( const ulong &Ticket ) { return((::HistoryDealGetInteger(Ticket, DEAL_TICKET) == Ticket) || ::HistoryDealSelect(Ticket)); } 否则,你肯定会遇到滞后的问题。 当你处理巨大的卷,需要原子/快照访问时,你需要了解其成本。 更何况我已经在这个主题中非常详细地解释了这些缓存的技术细节。 我一直在这个主题中收集必要的信息。 fxsaber 2020.09.01 22:57 #224 Renat Fatkhullin:你有没有尝试过将每个样本随机化,并尽可能地在缓存中下毒?为了你的立场,任何自我射击都是有必要的? 你可以在这个主题中按时间顺序看到所有的东西。这个问题 最初是 在没有任何随机的情况下显示的。 这条线是一个很好的证明,说明你可以扭曲对手的话。所有的来源和它们的结果都保存在这里。 Aleksey Vyazmikin 2020.09.02 05:58 #225 为什么终端不能在再次请求完整的历史记录时增加缓存,检索并缓存所缺的范围?这似乎可以解决这个问题。毕竟,在请求酒吧/门票时,缺失的数据包会被返回,所以有一个机制可以解决这个问题。 Andrey Khatimlianskii 2020.09.02 06:29 #226 Aleksey Vyazmikin:为什么终端不能在再次请求完整的历史记录时增加缓存,检索并缓存所缺的范围? 这一点已经做到了。 但是如果在HistorySelect( 0,INT_MAX) 之间调用HistorySelect( other_time, ...),缓存将从 other_time开始重建,下一次HistorySelect( 0,...) 请求将导致新的缓存建立(将更慢)。 Aleksey Vyazmikin 2020.09.02 06:50 #227 Andrey Khatimlianskii:这一点已经做到了。但是如果在调用HistorySelect( 0,INT_MAX)之间,我们调用HistorySelect( other_time, ...),缓存将从 other_time开始重建,下一个HistorySelect( 0, ...) 请求将导致新的缓存建立(会比较慢)。 如果你已经做了,那就很好,那么唯一的问题是关于接收到的数据的工作的便利性,只要缓存建立起来。 我对交易操作理解得不是很深,但如果查询范围发生变化,那么就没有可能在不完全蛮干的情况下快速搜索历史内的数据了吗? Andrey Khatimlianskii 2020.09.02 09:24 #228 Aleksey Vyazmikin:我对交易没有那么深的研究,但是如果查询的范围改变了,那么就没有办法在没有全面枚举的情况下快速搜索故事中的数据了? 如果你不使用这些知识,那么这些知识的意义何在? 没有实际问题=没有问题。 HimOrik 2020.09.03 14:12 #229 Renat Fatkhullin:OrderExist和PositionExist是特殊的优化函数,可以避免愚蠢地在所有订单或头寸中循环,按符号、交易类型和medzhik搜索条目。其结果是一系列的门票。 使用这些功能的程序可能会节省很多钱。特别是在大量调用未结头寸和订单时,不断地、反复地进行超限循环。我们将在未来实施更有效的功能来获取大量的 贸易数据。该语言也将得到极大的加强和简化,具有更强大的功能。"OrderExist和PositionExist" - 在文档中没有找到,我在哪里可以读到它们? Artyom Trishkin 2020.09.03 15:58 #230 HimOrik: "OrderExist和PositionExist" - 在文档中没有找到,在哪里可以读到它们? 最有可能是在下一个发布版本之后(现在是测试版)。 1...161718192021222324252627282930...94 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
如果有人不明白,是fxsaber库在别人的代码中应用时造成了制动。
他没有明确指出这一点,而是开始玩起了关于平台刹车和滑倒自杀的例子。而当有机会找到真正的原因并使问题顺利解决时,他却没有把握住。
为了进行局部优化,它正在毒害主程序的历史缓存。关于交易、自动交易系统和测试交易策略的论坛
MT5和速度在行动
fxsaber, 2020.09.02 00:02
有一个干净的MQL5代码,可以被很多人复制。按照时间顺序,先研究一下,而不是玩阴谋论,有人很需要你,以至于愿意把时间花在你身上,进行抹黑。
你的火鸡工作做得很好。这里没有专门讨论过任何图书馆,因为这不是建设性的。
重点是,如果有人冒险使用共享库,其中的from-input参数不一致,他们将得到刹车。文件中没有任何地方提到这一点。至少有关于它的东西是用钳子从你身上取出来的。而当它完成后,他们开始指责你作弊。
MQL的这个功能应该写在文档和功能分支中。在与创建日期相对应的构建中,运行该分支的干净MQL5脚本。显然,为了以防万一,盲目地进行了这么多的修复。
作为一个独立的人,你的工作做得很好。这里没有特别提到图书馆,因为这不是建设性的。
因为你已经尽力 不吹嘘你的 图书馆了。在这些图书馆的存在下。随着 "我的更快 "的不断反对。因此,你巧妙地掩盖了自我射击,伸出了 "看它有多慢"。
问题是,如果有人敢于使用from-input参数不一样的共享库,就会出现滞后现象。文件中没有任何地方提到这一点。至少关于这个话题的东西是用钳子从你身上提取的。而当它完成后,他们开始指责你作弊。
MQL的这个功能应该写在文档和功能分支中。在与创建日期相对应的构建中,运行该分支的干净MQL5脚本。显然,为了以防万一,盲目地进行了这么多的修复。
HistorySelect的文件 明确指出。
当你在处理巨大的交易量时(你在历史上显示了数千和数万的交易是有原因的),需要原子/快照访问,你需要了解它们的成本。
特别是我已经在这个主题中非常详细地解释了这些缓存的技术细节。
你有没有尝试过将每个样本随机化,并尽可能地在缓存中下毒?为了你的立场,任何自我射击都是有必要的?
因为你做了一切 可以让你的 图书馆保持安静。这就是为什么你巧妙地通过标榜 "看它有多慢 "来掩盖自作自受的错误。
99%的bug都是通过这种方式发现的。首先,奇怪的行为是在大代码中发现的。然后本地化找到原因。我更担心的是刹车。
交易功能。问题几乎无处不在。
HistorySelect文档 明确指出。
我想知道是谁在这段文字的字里行间看到了什么?我个人认为(在这个分支之前),HistoryDealSelect和HistoryOrderSelect必须像这样写。
否则,你肯定会遇到滞后的问题。
当你处理巨大的卷,需要原子/快照访问时,你需要了解其成本。
更何况我已经在这个主题中非常详细地解释了这些缓存的技术细节。
我一直在这个主题中收集必要的信息。
你有没有尝试过将每个样本随机化,并尽可能地在缓存中下毒?为了你的立场,任何自我射击都是有必要的?
你可以在这个主题中按时间顺序看到所有的东西。这个问题 最初是 在没有任何随机的情况下显示的。
这条线是一个很好的证明,说明你可以扭曲对手的话。所有的来源和它们的结果都保存在这里。
为什么终端不能在再次请求完整的历史记录时增加缓存,检索并缓存所缺的范围?这似乎可以解决这个问题。毕竟,在请求酒吧/门票时,缺失的数据包会被返回,所以有一个机制可以解决这个问题。
为什么终端不能在再次请求完整的历史记录时增加缓存,检索并缓存所缺的范围?
这一点已经做到了。
但是如果在HistorySelect( 0,INT_MAX) 之间调用HistorySelect( other_time, ...),缓存将从 other_time开始重建,下一次HistorySelect( 0,...) 请求将导致新的缓存建立(将更慢)。
这一点已经做到了。
但是如果在调用HistorySelect( 0,INT_MAX)之间,我们调用HistorySelect( other_time, ...),缓存将从 other_time开始重建,下一个HistorySelect( 0, ...) 请求将导致新的缓存建立(会比较慢)。
如果你已经做了,那就很好,那么唯一的问题是关于接收到的数据的工作的便利性,只要缓存建立起来。
我对交易操作理解得不是很深,但如果查询范围发生变化,那么就没有可能在不完全蛮干的情况下快速搜索历史内的数据了吗?
我对交易没有那么深的研究,但是如果查询的范围改变了,那么就没有办法在没有全面枚举的情况下快速搜索故事中的数据了?
如果你不使用这些知识,那么这些知识的意义何在?
没有实际问题=没有问题。
OrderExist和PositionExist是特殊的优化函数,可以避免愚蠢地在所有订单或头寸中循环,按符号、交易类型和medzhik搜索条目。
其结果是一系列的门票。
使用这些功能的程序可能会节省很多钱。特别是在大量调用未结头寸和订单时,不断地、反复地进行超限循环。
我们将在未来实施更有效的功能来获取大量的 贸易数据。
该语言也将得到极大的加强和简化,具有更强大的功能。
"OrderExist和PositionExist" - 在文档中没有找到,在哪里可以读到它们?
最有可能是在下一个发布版本之后(现在是测试版)。