程序库: MT4Orders - 页 27

 

你好!:)

正在尝试使用您的库。MT5 模式 Hedge build 1959,测试模式。

OrderSelect(... , SELECT_BY_TICKET) 调用历史记录中的订单返回 false,尽管该订单在测试人员日志中明确存在。您能解释一下这是怎么回事吗?


 
Ilya Malev:

你好!:)

正在尝试使用您的库。MT5 模式 Hedge build 1959,测试模式。

OrderSelect(... , SELECT_BY_TICKET) 调用历史记录中的订单返回 false,尽管该订单在测试人员日志中明确存在。您能猜到这是怎么回事吗?

您应该阅读本主题,以免我再次重复。

简而言之,MT4 平仓单等于 MT5 平仓单。这有很多完全合理的理由。特别是,请阅读库标题中的相关内容。当然,最好还是阅读有关此主题的主题。


为了更好地理解,请在 MT5 中手动进行各种复杂的交易,然后运行以下脚本

交易、自动交易系统和交易策略测试论坛

库:报告

fxsaber, 2018.12.11 12:28 pm.

厌倦了MT5报告的单次通过。因此,将这三行添加到任何 MT5 顾问的末尾
#define  REPORT_TESTER       // 测试仪将自动记录报告
#define  REPORT_BROWSER      // 在浏览器启动时创建报告 - 需要 DLL 许可。
#include <Report.mqh>  //https://www.mql5.com/zh/code/18801

将在单程结束时打开正常的 Hedge-Tester 报告,该报告将以正常形式显示仓位甚至滑点。

试着这样做,例如,Experts/Examples/Moving Average/Moving Average.mq5


要立即了解报告的外观,只需在您的账户上运行以下脚本

#define  REPORT_BROWSER      // 在浏览器启动时创建报告 - 需要 DLL 许可。
#include <Report.mqh> //https://www.mql5.com/zh/code/18801

void OnStart()
{
  REPORT::ToFile(); // 在浏览器中创建并打开报告。
}


所有内容也适用于 MT4。

或者,如上文所述,在任何 MT5 Expert Advisor 中添加相应的行,看看 MT4Orders 在历史记录方面是怎么做的。
 
fxsaber:

你应该读读这个主题,这样我就不用再重复一次了。

简而言之,MT4 平仓单等于 MT5 平仓单。这有很多完全合理的理由。特别是,请阅读库标题中的相关内容。当然,最好还是阅读有关此主题的主题。


为了更好地理解,请在 MT5 中手动进行各种复杂的交易操作,然后运行以下脚本

或者,如上文所述,在任何 MT5 Expert Advisor 中添加相应的行,看看 MT4Orders 在历史记录方面的表现。

这么说来,要实现 MT4 -> MT5 的完全兼容还是不可能的?好的,谢谢您的建议,我会研究一下的。

 
Ilya Malev:

原来 MT4 -> MT5 仍然无法实现完全兼容?好的,谢谢您的建议,我会研究一下的。

是的,错误的 MT4 代码不一定能在 MT5 中使用。

 
fxsaber:

是的,错误的 MT4 代码在 MT5 中并不总是有效。

曲线是一种计算方法,即发送挂单的OrderSend 结果 在变成市价订单后将保持在相同的数字之下,我的理解对吗?)

在不修改原始代码逻辑的情况下,有什么最简单的方法可以解决这个问题?如果我自己不能更快地想到的话 )

一般来说,这种行为不能称为 MT4 订单系统。因为在 MT4 系统中激活订单时保存订单是其基本功能之一。

 
Ilya Malev:

这条曲线是计算发送挂单的 OrderSend 结果在成为适销订单后将保持相同数字的曲线,我的理解对吗?)

订单执行后,MT5 中的仓单将保持不变。但平仓时不会。

曲线就是使用 SELECT_BY_TICKET。尤其是在以这种方式跟踪 "我的仓位是否已平仓 "事件时。

一般来说,这种行为不能再称为 MT4 订单系统。因为在 MT4 系统中激活订单时保存订单是其基本原理之一

一切都会被保存。您只需尝试一下。

 
fxsaber:

执行订单时,头寸单在 MT5 中保持不变。但在平仓时则不会。

曲线就是使用 SELECT_BY_TICKET。尤其是在以这种方式跟踪 "我的头寸是否已平仓 "事件时。

一切都会保存。您只需尝试一下。

我确实试过。当然,我说的是平仓后的票据编号。也就是说,整个订单编号是浮动的。我打开订单号 59(OrderSend 的结果),激活并关闭它,然后用您的 OrderPrint 从历史记录中打印数字,得到历史记录中从 1 到 13 的数字。 不幸的是,这不能称为 MT4 系统。MT4 文档中没有任何内容说明 SELECT_BY_TICKET 不能用于跟踪 "我的仓位是否已平仓 "事件,您已经发明了它。在 MT4 中,这是很正常的(虽然我不认为这不是最好的编程风格,但我们并不是为一个完美的世界编写库,或者说 =))。

此外,这与闭包检查无关,遗憾的是,闭包检查很容易解决。事实上,许多系统都会根据某些属性将订单分组,然后分析其结果以做出进一步决策。如果添加所有其他系统,这些系统只是通过 SELECT_BY_TICKET 来 "监控我的仓位是否已平仓",那么就会出现大量异常。
 
Ilya Malev:

我就是这么试的。当然,我说的是关闭后的票据编号。也就是说,订单的整个编号是浮动的。我打开订单号 59(OrderSend 的结果),激活并关闭它,然后用您的 OrderPrint 从历史记录中打印数字,得到历史记录中从 1 到 13 的数字。 不幸的是,这不能称为 MT4 系统。MT4 文档中没有任何内容说明 SELECT_BY_TICKET 不能用于跟踪 "我的头寸是否已平仓 "事件,您已经发明了它。在 MT4 中,这是很正常的(虽然我不认为这不是最好的编程风格,但我们不是在为一个完美的世界编写库,还是什么 =))。

懒得读线程是很常见的。

  • 要编写一个库,使平仓 时的票据与平仓时的票据相匹配,基本上是不可能的。这是 MT5 的架构限制。
  • 这是一个非常好的限制,因为它迫使人们停止编写错误的 MT4-advisors 的愚蠢做法。
有一个简单的规则。如果您在 MT4 智能交易系统中看到 SELECT_BY_TICKET,那么 95% 的代码都是错误的。任何形式的票据存储几乎都是错误的逻辑,经不起任何实战应用的考验。

 
fxsaber:

懒得看主题是很熟悉的。

  • 原则上,不可能编写一个库,使平仓 的票据与平仓时的票据一致。这是 MT5 的架构限制。
  • 这是一个非常好的限制,因为它迫使人们停止编写错误的 MT4-advisors 的愚蠢做法。
有一个简单的规则。如果您在 MT4 智能交易系统中看到 SELECT_BY_TICKET,那么 95% 的代码都是错误的。任何形式的票据存储几乎都是错误的逻辑,经不起任何实战应用的考验。

我都想明白了,还看什么?

想象一下,一个 EA 同时构建多个订单网格,每个网格都有自己的逻辑,取决于该系列中过去订单的结果。对您来说,将它们的订单存储在数组中比实现任何其他逻辑要容易得多。同时,这种逻辑经不起 "实战应用 "的唯一情况就是瞬间断电,而这恰恰是 Expert Advisor 应该将下一个交易操作的结果写入其数据文件的时刻。在 VPS(或 UPS)上进行交易时,这实际上是不可能的。

 
Ilya Malev:

为什么要看这个主题,我已经有点想明白了。

想象一下,一个 EA 同时建立多个订单网格,每个网格都有自己的逻辑,取决于该系列中过去订单的结果。对您来说,将它们的订单存储在数组中比实现任何其他逻辑要容易得多。同时,这种逻辑唯一经不起 "实战应用 "的情况是....。

经不起 "战斗应用 "的情况比比皆是。每个网格指令都会产生几十个仓位,而每个仓位通过相同的 TP 平仓,又会产生几十个平仓仓位

该库是为那些知道如何在 MT4 上编写实战型 EA 的人创建的,而不是演示玩具。战斗每次都要从头开始。

我没有任何论据,论坛上都有。你肯定会不同意我的观点。但这并不像歪歪扭扭的 MT4 顾问那么糟糕。


也许有人会介入这场对话,用链接或声音指出这个世界为何如此真实。