程序库: MT4Orders - 页 34 1...272829303132333435363738394041...95 新评论 Vladislav Andruschenko 2019.03.11 20:00 #331 我注意到一个有趣的现象 我有一个用于 mt4 的统计指标(免费)。 我决定为 mt5 也做一个。 这个库来得正是时候!(我懒得自己写这样一个库)。 在此之前,我有一个 MT5 版本,但它在工作中也有自己的问题。 我删除了所有 MQL5 代码 - 连接了 MT4Orders 库 - 启动时显示出错误。 与此同时,历史记录一切正常: 订单打印(OrderPrint)显示一切正常(与历史记录一样)。 我通过票据编号选择交易(系统复杂且令人困惑,我自己总是搞不清楚,过一段时间就忘了它是如何工作的 :-))) 这里有一段代码: if(SearchNextTicket(firsttimeticket,ticketREPORT,i,HistoryarrayNumber)==2) { firsttimeticket=MT45_OrderCloseTime(); } ticketREPORT=MT45_OrderTicket(); 问题是,下一个票据(用于统计)是按收盘时间排序选择的,如果时间相同,则按票据编号选择。 因此,在这种情况下显示的是无意义的结果。 但如果我添加一个无害的打印字符串: Print("1=== i="+i+" firsttimeticket="+firsttimeticket+" ticketREPORT="+ticketREPORT+" HistoryarrayNumber="+HistoryarrayNumber); if(SearchNextTicket(firsttimeticket,ticketREPORT,i,HistoryarrayNumber)==2) { firsttimeticket=MT45_OrderCloseTime(); } ticketREPORT=MT45_OrderTicket(); 则一切正常。 打印有什么魔力? 这种打印效果很好: Print("1=== i="+i); 这样的打印就不能正常工作了。 Print("1=== i="); Vladislav Andruschenko 2019.03.11 21:37 #332 想出来了 int i; // 不工作 int i=0; // 一切正常 fxsaber 2019.03.11 21:40 #333 Vladislav Andruschenko:我注意到一件有趣的事写一个简短的源代码来重现这一功能。这样就可以不用猜测就能行动了。 通过票据进行选择 #include <MT4Orders.mqh> void OnStart() { TICKET_TYPE Tickets[]; const int Size = ArrayResize(Tickets, OrdersHistoryTotal()); for (int i = 0; i < Size; i++) if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) Tickets[i] = OrderTicket(); // 机票记忆 for (int i = 0; i < Size; i++) if (OrderSelect(Tickets[i], SELECT_BY_TICKET)) // 凭票取票 OrderPrint(); } Vladislav Andruschenko 2019.03.11 21:43 #334 fxsaber:写出玩这个功能的简短来源。这样就可以不用猜测,直接行动了。选票工作 可能是变量初始化的 问题(对我来说)。 进一步解析。 fxsaber 2019.03.12 23:13 #335 Andrey Khatimlianskii:在我们的通信中挖出来的:在这项任务中。 挂单任务示例:设置订单的价格水平是根据历史价格计算的,但会根据刻度线移动的性质进行调整。在订单触发和交易关闭后,EA 不应再根据相同的价格水平下单(但可在此时调整不同的值)。我将这些信息(订单涉及的价位)存储在绑定到票据的主变量中。当然,您也可以将其写入注释中,但这并不总是方便和可靠的。与 OrderTicketOpen 绑定是合理的。然后,我们需要为TicketOpen-transaction创建SELECT_BY_TICKET,现在还没有。好吧,再为TicketOpen订单添加SELECT_BY_TICKET。 很明显,TicketOpen 的两个变体可以有多个 ENTRY_OUT-deals,但只能选择一个。不过,对于此类会计任务来说,这种模糊性并不妨碍工作。 说得好,谢谢。我没想到会有这样的安排。 Vladislav Andruschenko 2019.03.13 08:16 #336 有趣的是,在 mt5 报告中,所有内容的计算方式都与 mt4 报告不同。 在 mt4 中,按收盘时间排序,如果交易的收盘时间相同,则按票计算。 所以在 mt5 中就不同了,在 mt5 中,报告的排序是按开仓时间 进行的。 不方便。 @fxsaber 您是如何实现排序的?在 mt4 中是按收盘时间排序? fxsaber 2019.03.13 08:27 #337 Vladislav Andruschenko:有趣的是,在 mt5 报告中,所有内容的计算方式都与 mt4 报告不同。在 mt4 中,按成交时间排序,如果成交时间相同,则按票计算。 开仓时间 进行的。 不方便。而事实并非如此。 @fxsaber 您是如何实现排序的?在 MT4 中是按收盘时间排序还是按票据编号(开盘时间)排序?在 MT5 中,按收盘时间排序 - MT5 本身就是这样将记录放入历史记录的。 Vladislav Andruschenko 2019.03.13 08:36 #338 fxsaber:不是 这样的。也不是。MT5 按收盘时间排序 - MT5 本身就是这样将记录放入历史记录的。 我使用的是从 MT4 下载的报告。 当我制作统计指标时,我的数据与 mt4 的报告不符。 我根据经验发现,要使所有数据一致,所有头寸都应按收盘时间排序(如果时间相同,则按交易排序)。 根据这一原则,我的报告和 mt4 报告中的所有统计数字都是相同的。 如果是 mt5,我在计算中没有做任何改动,只是应用了您的库。在上传报告时,我发现 mt5 的排序方式是按开盘时间排序。 SELECT_BY_TICKET 由于某些原因无法正常工作。 Vladislav Andruschenko 2019.03.13 08:46 #339 Vladislav Andruschenko:我是根据从 mt4 下载的报告进行操作的。当我制作统计指标时,我的数据与 mt4 的报告不符。我根据经验发现,要使所有数据一致,必须按收盘时间对所有仓位进行排序(如果时间相同,则按交易对这些仓位进行排序)。根据这一原则,我的报告和 mt4 报告中的所有统计数字都是一致的。在 mt5 的情况下,我没有改变我的计算,只是应用了您的库。SELECT_BY_TICKET由于某些原因不能正常工作。在 mt4 中完美运行的功能在 mt5 中却无法完美运行。 fxsaber 2019.03.13 08:49 #340 Vladislav Andruschenko:我是根据从 mt4 下载的报告进行操作的。当我制作统计指标时,我的数据与 mt4 的报告不符。我根据经验发现,要使所有数据一致,必须按收盘时间对所有仓位进行排序(如果时间相同,则按交易对这些仓位进行排序)。根据这一原则,我的报告和 mt4 报告中的所有统计数字都是一致的。如果是 mt5,我在计算中没有做任何改动,只是应用了您的库,并在上传报告时发现 mt5 的排序方式是按开盘时间排序。 执行 关于交易、自动交易系统和测试交易策略的论坛。 库:报告 fxsaber, 2018.12.11 12:28 pm.要立即了解报告的外观,只需在您的账户上运行此脚本即可 #define REPORT_BROWSER // 在浏览器启动时创建报告 - 需要 DLL 许可。 #include <Report.mqh> //https://www.mql5.com/zh/code/18801 void OnStart() { REPORT::ToFile(); // 在浏览器中创建并打开报告。 } SELECT_BY_TICKET由于某些原因无法正常工作 关于交易、自动交易系统和测试交易策略的论坛。 库:MT4Orders fxsaber, 2019.03.11 21:40 票据选择正常 #include <MT4Orders.mqh> void OnStart() { TICKET_TYPE Tickets[]; const int Size = ArrayResize(Tickets, OrdersHistoryTotal()); for (int i = 0; i < Size; i++) if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) Tickets[i] = OrderTicket(); // 机票记忆 for (int i = 0; i < Size; i++) if (OrderSelect(Tickets[i], SELECT_BY_TICKET)) // 凭票取票 OrderPrint(); } 1...272829303132333435363738394041...95 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我注意到一个有趣的现象
我有一个用于 mt4 的统计指标(免费)。
我决定为 mt5 也做一个。
这个库来得正是时候!(我懒得自己写这样一个库)。
在此之前,我有一个 MT5 版本,但它在工作中也有自己的问题。
我删除了所有 MQL5 代码 - 连接了 MT4Orders 库 - 启动时显示出错误。
与此同时,历史记录一切正常:
订单打印(OrderPrint)显示一切正常(与历史记录一样)。
我通过票据编号选择交易(系统复杂且令人困惑,我自己总是搞不清楚,过一段时间就忘了它是如何工作的 :-)))
这里有一段代码:
问题是,下一个票据(用于统计)是按收盘时间排序选择的,如果时间相同,则按票据编号选择。
因此,在这种情况下显示的是无意义的结果。
但如果我添加一个无害的打印字符串:
则一切正常。
打印有什么魔力?
这种打印效果很好:
这样的打印就不能正常工作了。
想出来了
int i; // 不工作
int i=0; // 一切正常
我注意到一件有趣的事
写一个简短的源代码来重现这一功能。这样就可以不用猜测就能行动了。
通过票据进行选择
写出玩这个功能的简短来源。这样就可以不用猜测,直接行动了。
选票工作
可能是变量初始化的 问题(对我来说)。
进一步解析。
在我们的通信中挖出来的:
在这项任务中。
挂单任务示例:设置订单的价格水平是根据历史价格计算的,但会根据刻度线移动的性质进行调整。在订单触发和交易关闭后,EA 不应再根据相同的价格水平下单(但可在此时调整不同的值)。我将这些信息(订单涉及的价位)存储在绑定到票据的主变量中。当然,您也可以将其写入注释中,但这并不总是方便和可靠的。
与 OrderTicketOpen 绑定是合理的。然后,我们需要为TicketOpen-transaction创建SELECT_BY_TICKET,现在还没有。好吧,再为TicketOpen订单添加SELECT_BY_TICKET。
很明显,TicketOpen 的两个变体可以有多个 ENTRY_OUT-deals,但只能选择一个。不过,对于此类会计任务来说,这种模糊性并不妨碍工作。
说得好,谢谢。我没想到会有这样的安排。
有趣的是,在 mt5 报告中,所有内容的计算方式都与 mt4 报告不同。
在 mt4 中,按收盘时间排序,如果交易的收盘时间相同,则按票计算。
所以在 mt5 中就不同了,在 mt5 中,报告的排序是按开仓时间 进行的。
不方便。
@fxsaber 您是如何实现排序的?在 mt4 中是按收盘时间排序?
有趣的是,在 mt5 报告中,所有内容的计算方式都与 mt4 报告不同。
在 mt4 中,按成交时间排序,如果成交时间相同,则按票计算。
开仓时间 进行的。
不方便。
而事实并非如此。
@fxsaber 您是如何实现排序的?在 MT4 中是按收盘时间排序还是按票据编号(开盘时间)排序?
在 MT5 中,按收盘时间排序 - MT5 本身就是这样将记录放入历史记录的。
不是 这样的。
也不是。
MT5 按收盘时间排序 - MT5 本身就是这样将记录放入历史记录的。
我使用的是从 MT4 下载的报告。
当我制作统计指标时,我的数据与 mt4 的报告不符。
我根据经验发现,要使所有数据一致,所有头寸都应按收盘时间排序(如果时间相同,则按交易排序)。
根据这一原则,我的报告和 mt4 报告中的所有统计数字都是相同的。
如果是 mt5,我在计算中没有做任何改动,只是应用了您的库。在上传报告时,我发现 mt5 的排序方式是按开盘时间排序。
SELECT_BY_TICKET 由于某些原因无法正常工作。
我是根据从 mt4 下载的报告进行操作的。
当我制作统计指标时,我的数据与 mt4 的报告不符。
我根据经验发现,要使所有数据一致,必须按收盘时间对所有仓位进行排序(如果时间相同,则按交易对这些仓位进行排序)。
根据这一原则,我的报告和 mt4 报告中的所有统计数字都是一致的。
在 mt5 的情况下,我没有改变我的计算,只是应用了您的库。
SELECT_BY_TICKET由于某些原因不能正常工作。
在 mt4 中完美运行的功能在 mt5 中却无法完美运行。
我是根据从 mt4 下载的报告进行操作的。
当我制作统计指标时,我的数据与 mt4 的报告不符。
我根据经验发现,要使所有数据一致,必须按收盘时间对所有仓位进行排序(如果时间相同,则按交易对这些仓位进行排序)。
根据这一原则,我的报告和 mt4 报告中的所有统计数字都是一致的。
如果是 mt5,我在计算中没有做任何改动,只是应用了您的库,并在上传报告时发现 mt5 的排序方式是按开盘时间排序。
执行
关于交易、自动交易系统和测试交易策略的论坛。
库:报告
fxsaber, 2018.12.11 12:28 pm.
要立即了解报告的外观,只需在您的账户上运行此脚本即可
SELECT_BY_TICKET由于某些原因无法正常工作
关于交易、自动交易系统和测试交易策略的论坛。
库:MT4Orders
fxsaber, 2019.03.11 21:40
票据选择正常