程序库: Expert - 页 7 12345678910111213 新评论 fxsaber 2019.09.12 06:17 #61 与 MT4 不同,MT5 在启动或更改智能交易系统时不会记录其输入参数。因此,无法从日志中确定在终端中启动了什么。 类似功能可以纠正这种情况。 #include <fxsaber\Expert.mqh> //https://www.mql5.com/zh/code/19003 // 输出运行中的 EA 数据 string EAToString( const long Chart_ID = 0 ) { string Names[]; MqlParam Params[]; const int Flag = EXPERT::Parameters(Chart_ID, Params, Names); const int Size = ArraySize(Names); string Str = "Expert " + Params[0].string_value + ", expertmode = " + (string)Flag; for (int i = 0; i < Size; i++) Str += "\n" + Names[i] + " = " + Params[i + 1].string_value; return(Str); } 应用程序 input int inInput1 = 1; input int inInput2 = 2; int OnInit() { Print(EAToString()); return(INIT_FAILED); } 结果 Test8 (EURUSD,M1) Expert Experts\Test8.ex5, expertmode = 4 Test8 (EURUSD,M1) inInput1 = 1 Test8 (EURUSD,M1) inInput2 = 2 遗憾的是,该功能对脚本不起作用。MT4 可自行输出脚本的输入参数,而 MT5 则不行。 pivomoe 2019.09.27 04:04 #62 我无法运行使用该库的动态链接库的 EA。在日志中,不允许加载 DLL。有什么办法可以解决这个问题吗? fxsaber 2019.09.27 04:08 #63 pivomoe: 我无法运行使用该库的动态链接库的 EA。在日志中,不允许加载 DLL。有什么办法可以解决这个问题吗? Params[0].string_value += "\nexpertmode=5"; // 使用 DLL 的权限 pivomoe 2019.09.27 05:01 #64 fxsaber: 很有效。 fxsaber 2019.10.31 08:31 #65 我检查了输入组库 的工作情况。一切正常,我不需要修改代码。 Stanislav Korotky 2020.01.17 19:35 #66 我对在字符串中使用常量作为临时模板名称的原则有疑虑:#define FILENAME (__FILE__ + ".tpl")其中包含一个与多线程相关的潜在错误。如果在不同图表上运行的同一个程序尝试使用该库,可能会与模板文件发生碰撞--要么出现访问错误,要么会悄无声息地启动两个完全相同的模板副本,尽管使用的是不同的模板。您应该生成一个临时名称,最好是 MQL-program-name + timestamp + random(MQL-程序名 + 时间戳 + 随机)的形式(以前是__FILE__ ,"strike "在 html 中不起作用)。最好还能在下一次调用时自动超时删除以前的文件,例如在 1 天内(通过分析时间戳的一部分),这样就不会在文件夹中乱放了。 PS.情况更糟,因为 __FILE__ 是一个源文件,在所有使用它的程序中都等于 Expert.mqh!按名称更正了句子。 fxsaber 2020.01.17 20:29 #67 Stanislav Korotky: 这样做是经过深思熟虑的,权衡了所有利弊。 创建模板后立即删除是合理的,而不是每天删除一次。不过,始终保留上次保存的模板也很方便,可以更好地分析正在发生的事情。 Stanislav Korotky 2020.01.17 21:03 #68 fxsaber:这是经过深思熟虑、权衡利弊后做出的决定。创建模板后立即删除是合理的,而不是每天删除一次。不过,始终保留上次保存的模板也很方便,可以更好地分析正在发生的事情。 我无法举出当前方法的任何优点。在我看来,我提出了一个更正确的方法。 如果同步 = true(默认值),立即删除是有道理的,但现在并没有这样做 - 文件仍然存在。 fxsaber 2020.01.17 21:30 #69 Stanislav Korotky:我想不出目前的方法有什么 "优点"。我认为,建议采用更正确的方法。 优点在于实际应用。我在启动终端 时使用了之前启动的智能交易系统,这些系统一开始就立即进入了它们的模板。它们运行完美。我相信理论上的碰撞是可以重现的。但在我看来,这与实践相去甚远。如果你决定创建一个通用的解决方案,请在这里分享。我会更新 "圣经 "的。我自己还没准备好。 如果同步 = true(默认值),一次性删除是有道理的,但现在并不是这样实现的--文件仍然存在。 是的,我不是故意删除的。 Stanislav Korotky 2020.01.18 22:20 #70 fxsaber:对于 - 这是一个实际应用。我用之前推出的智能交易系统启动了终端,这些系统一开始就立即进入了它们的模板。它们运行完美。我相信理论上的碰撞是可以重现的。但在我看来,这与实践相去甚远。如果你决定创建一个通用的解决方案,请在这里分享。我会更新 "圣经 "的。我自己还没准备好。是的,我不是故意删除的。 我还是不明白,为什么 Expert.mqh.tpl 这个常量名称比以生成程序命名的模板更 "实用"(实用?假设有一个使用 bibla 的程序 A.mq5 和 B.mq5。如果它们生成的模板都用自己的名字命名,那就更实用了:首先,每个程序都有自己最后的 "动作指纹",而不是一个程序覆盖另一个程序的 "动作指纹"。其次,你可以通过名称立即看出生成者是谁(如果是外国程序,尤其有用)。现在,在进入 Expert.mqh.tpl 文件之前,您无法从文件中看出这一点。我给出的通用解决方案是使用 MQL-programme 的名称+时间戳+随机。我认为没有必要将文件保留为 sync=true。我认为一切都早已经过测试和调试。如果出现错误或需要调试,可以选择 sync=false。这样就可以保留文件。我认为一切都合乎逻辑。编辑也很简单。 我同意在实践中可能很少发生碰撞,除非有人在多个程序中并行使用该手册。我没有这本书,但我刚才快速查看了一下代码,我的目光被文件文件夹中的 Expert.mqh.tpl 吸引住了。一切纯属个人意见。 12345678910111213 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
与 MT4 不同,MT5 在启动或更改智能交易系统时不会记录其输入参数。因此,无法从日志中确定在终端中启动了什么。
类似功能可以纠正这种情况。
应用程序
结果
遗憾的是,该功能对脚本不起作用。MT4 可自行输出脚本的输入参数,而 MT5 则不行。
我无法运行使用该库的动态链接库的 EA。在日志中,不允许加载 DLL。有什么办法可以解决这个问题吗?
很有效。
我对在字符串中使用常量作为临时模板名称的原则有疑虑:
其中包含一个与多线程相关的潜在错误。如果在不同图表上运行的同一个程序尝试使用该库,可能会与模板文件发生碰撞--要么出现访问错误,要么会悄无声息地启动两个完全相同的模板副本,尽管使用的是不同的模板。
您应该生成一个临时名称,最好是 MQL-program-name + timestamp + random(MQL-程序名 + 时间戳 + 随机)的形式(以前是__FILE__ ,"strike "在 html 中不起作用)。
最好还能在下一次调用时自动超时删除以前的文件,例如在 1 天内(通过分析时间戳的一部分),这样就不会在文件夹中乱放了。
PS.情况更糟,因为 __FILE__ 是一个源文件,在所有使用它的程序中都等于 Expert.mqh!按名称更正了句子。这样做是经过深思熟虑的,权衡了所有利弊。
创建模板后立即删除是合理的,而不是每天删除一次。不过,始终保留上次保存的模板也很方便,可以更好地分析正在发生的事情。
这是经过深思熟虑、权衡利弊后做出的决定。
创建模板后立即删除是合理的,而不是每天删除一次。不过,始终保留上次保存的模板也很方便,可以更好地分析正在发生的事情。
我无法举出当前方法的任何优点。在我看来,我提出了一个更正确的方法。
如果同步 = true(默认值),立即删除是有道理的,但现在并没有这样做 - 文件仍然存在。
我想不出目前的方法有什么 "优点"。我认为,建议采用更正确的方法。
优点在于实际应用。我在启动终端 时使用了之前启动的智能交易系统,这些系统一开始就立即进入了它们的模板。它们运行完美。我相信理论上的碰撞是可以重现的。但在我看来,这与实践相去甚远。如果你决定创建一个通用的解决方案,请在这里分享。我会更新 "圣经 "的。我自己还没准备好。
如果同步 = true(默认值),一次性删除是有道理的,但现在并不是这样实现的--文件仍然存在。
是的,我不是故意删除的。
对于 - 这是一个实际应用。我用之前推出的智能交易系统启动了终端,这些系统一开始就立即进入了它们的模板。它们运行完美。我相信理论上的碰撞是可以重现的。但在我看来,这与实践相去甚远。如果你决定创建一个通用的解决方案,请在这里分享。我会更新 "圣经 "的。我自己还没准备好。
是的,我不是故意删除的。
我还是不明白,为什么 Expert.mqh.tpl 这个常量名称比以生成程序命名的模板更 "实用"(实用?假设有一个使用 bibla 的程序 A.mq5 和 B.mq5。如果它们生成的模板都用自己的名字命名,那就更实用了:首先,每个程序都有自己最后的 "动作指纹",而不是一个程序覆盖另一个程序的 "动作指纹"。其次,你可以通过名称立即看出生成者是谁(如果是外国程序,尤其有用)。现在,在进入 Expert.mqh.tpl 文件之前,您无法从文件中看出这一点。我给出的通用解决方案是使用 MQL-programme 的名称+时间戳+随机。我认为没有必要将文件保留为 sync=true。我认为一切都早已经过测试和调试。如果出现错误或需要调试,可以选择 sync=false。这样就可以保留文件。我认为一切都合乎逻辑。编辑也很简单。
我同意在实践中可能很少发生碰撞,除非有人在多个程序中并行使用该手册。我没有这本书,但我刚才快速查看了一下代码,我的目光被文件文件夹中的 Expert.mqh.tpl 吸引住了。一切纯属个人意见。