程序库: Init_Sync - 页 2 12 新评论 Georgiy Merts 2017.04.18 08:15 #11 fxsaber:我没有找到一个危险的例子。在我的记忆中,这是唯一一个存在 #include 但用户不会在代码中调用其中任何内容的库。这个库中的主要内容是对标准函数的巧妙覆盖。它变成了隐式调用。我将从变更和代码支持的角度来告诉你其中的危险。所有这些隐式重载都很容易被遗忘,当平台发生变化或同步器损坏时,就很难再发现它们了。不过,我还是同意这种情况很牵强。总的来说,这个想法非常新颖、合理。事实上,只需连接库,无需任何调用,我们就能得到非常有用的结果。 Nikolai Semko 2017.04.18 08:15 #12 fxsaber: 顺便说一句,谢谢你的代码。我学到了很多有价值的东西,也有了一些有趣的想法。 fxsaber 2017.04.18 08:25 #13 测量延迟时间 static const ulong StartTime = GetMicrosecondCount(); // if (FirstRun && (!::GlobalVariableCheck(INIT_SYNC::InitSync.GlobalName))) if (FirstRun && (!INIT_SYNC::ResourceCheck(INIT_SYNC::InitSync.GlobalName))) { // FirstRun = (::GlobalVariableSet(INIT_SYNC::InitSync.GlobalName, 0) == 0); FirstRun = !INIT_SYNC::ResourceCreate(INIT_SYNC::InitSync.GlobalName); if (!FirstRun) { Print(GetMicrosecondCount() - StartTime);在切换 TF 时,延迟时间有时长达 300 毫秒。而且这不是在 "冷 "状态下。原来,即使是 "热 "终端有时也会变慢。也许,我应该把这个问题写给 SD 来解决。 Otto Pauser 2017.06.23 10:35 #14 遗憾的是,我无法理解这一点。在我的测试中,顺序没有被打乱。DeInit 和 Init 都按预期执行。其他任何情况都值得怀疑。所以我想知道这段代码示例应该做什么! Carl Schreiber 2017.06.23 13:27 #15 我怀疑有时会出现这种情况,但并不总是,也不一定。这可能是由于 "threadrace"(线程竞赛)的缘故,而且无法确定什么时候以什么顺序执行。我曾有过这样的想法(在 MT4 中,但在 MT5 中也应该可行) int lastPing = TerminalInfoInteger(TERMINAL_PING_LAST);中断与服务器的连接--不可能!由于 ping 测试是由终端在自己的线程中执行的,因此无法确定这条命令(即使它是 OnCalculate() 或 OnTick() 中的第一条命令)是否会正确显示计算不足。如果 ping 测试是在一毫秒前执行的,则会显示一切正常:(拉一下着陆电缆试试看...我的建议是,要么改变线程(可能很难),要么提供 EA 或指标的 最后 2、3 次 ping 测试(很容易),这样就能非常容易地识别中断:我们无意.... fxsaber 2017.06.23 22:41 #16 Otto Pauser:遗憾的是,我无法理解这一点。在我的测试中,顺序没有被打乱。DeInit 和 Init 都按预期执行。其他任何情况都值得怀疑。所以我想知道这个代码示例应该做什么!如果您启动该指标并更改其时间框架或符号, 您会看到日志中 "Init "和 "Deinit "字符串的顺序被打乱。 fxsaber 2017.11.06 09:29 #17 另一种 MT5 指标特异性的大杂烩。库源中有一个非常微妙的点 static string GetMyUniqueName( void ) { const int handle = GetMyHandle(); MqlParam Params[]; ENUM_INDICATOR Type; const int Total = ::IndicatorParameters(handle, Type, Params); ::IndicatorRelease(handle); uchar Bytes[]; for (int i = 1; i < Total; i++) { ::ArrayCopy(Bytes, _R(Params[i].double_value).Bytes, ::ArraySize(Bytes)); ::ArrayCopy(Bytes, _R(Params[i].integer_value).Bytes, ::ArraySize(Bytes)); ::ArrayCopy(Bytes, _R(Params[i].string_value).Bytes, ::ArraySize(Bytes)); } return("::" + (string)::ChartID() + (string)INIT_SYNC::crc64(Bytes) + ::MQLInfoString(MQL_PROGRAM_NAME)); }它是一行突出显示的内容,这是必须的,但其中的原因却很难用语言解释。 [删除] 2019.01.21 18:34 #18 你好@fxsaber,我在尝试使用您的库时出现了以下错误 如何解决? fxsaber 2019.01.21 20:17 #19 Paul Carissimo:你好@fxsaber,我在尝试使用您的程序库时出现了以下错误如何解决?请仔细阅读说明。 12 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我没有找到一个危险的例子。
在我的记忆中,这是唯一一个存在 #include 但用户不会在代码中调用其中任何内容的库。
这个库中的主要内容是对标准函数的巧妙覆盖。它变成了隐式调用。
我将从变更和代码支持的角度来告诉你其中的危险。所有这些隐式重载都很容易被遗忘,当平台发生变化或同步器损坏时,就很难再发现它们了。不过,我还是同意这种情况很牵强。总的来说,这个想法非常新颖、合理。事实上,只需连接库,无需任何调用,我们就能得到非常有用的结果。
顺便说一句,谢谢你的代码。我学到了很多有价值的东西,也有了一些有趣的想法。
在切换 TF 时,延迟时间有时长达 300 毫秒。而且这不是在 "冷 "状态下。原来,即使是 "热 "终端有时也会变慢。
也许,我应该把这个问题写给 SD 来解决。
遗憾的是,我无法理解这一点。在我的测试中,顺序没有被打乱。
DeInit 和 Init 都按预期执行。其他任何情况都值得怀疑。
所以我想知道这段代码示例应该做什么!
我怀疑有时会出现这种情况,但并不总是,也不一定。
这可能是由于 "threadrace"(线程竞赛)的缘故,而且无法确定什么时候以什么顺序执行。
我曾有过这样的想法(在 MT4 中,但在 MT5 中也应该可行)
中断与服务器的连接--不可能!
由于 ping 测试是由终端在自己的线程中执行的,因此无法确定这条命令(即使它是 OnCalculate() 或 OnTick() 中的第一条命令)是否会正确显示计算不足。
如果 ping 测试是在一毫秒前执行的,则会显示一切正常:(
拉一下着陆电缆试试看...
我的建议是,要么改变线程(可能很难),要么提供 EA 或指标的 最后 2、3 次 ping 测试(很容易),这样就能非常容易地识别中断:我们无意....
遗憾的是,我无法理解这一点。在我的测试中,顺序没有被打乱。
DeInit 和 Init 都按预期执行。其他任何情况都值得怀疑。
所以我想知道这个代码示例应该做什么!
另一种 MT5 指标特异性的大杂烩。
库源中有一个非常微妙的点
它是一行突出显示的内容,这是必须的,但其中的原因却很难用语言解释。
你好@fxsaber,我在尝试使用您的库时出现了以下错误
如何解决?
你好@fxsaber,我在尝试使用您的程序库时出现了以下错误
如何解决?
请仔细阅读说明。