文章 "轻松快捷开发 MetaTrader 程序的函数库(第 二十七部分):操控交易请求 - 下挂单"

 

新文章 轻松快捷开发 MetaTrader 程序的函数库(第 二十七部分):操控交易请求 - 下挂单已发布:

在本文中,我们将继续开发交易请求,实现下挂单,并剔除检测到的交易类操作缺陷。

上一篇文章中,我们起手实现延后交易请求,并创建了第一个开仓延后请求,应对交易类向服务器发送请求后收到错误。 在本文中,我们将继续开发延后请求,并针对设置挂单时发生错误的情况实现创建延后请求。

在测试交易类时,我检测到一些缺陷。 特别是,在类构造函数中初始化品种的交易对象时,会为其硬性设置默认值。 并非所有这些数值在品种规格中都加以支持。 这就会导致尝试下挂单时,服务器端出错 — 服务器激活“不支持的订单到期类型“错误。 该错误在任何地方都无法得到纠正,最终导致无法下挂单。 当发送包含默认值的交易请求时,一些不支持的数据也被发送到交易请求。 为了解决这个问题,我必须直接在交易请求中指定与相应品种规格对应的正确数据。

这需要了解品种规格,并直接在程序代码中手动输入准确数值,取代由函数库本身对参数值进行自动校正。 为简化起见,我们将对交易类的处理逻辑略微进行一些修改。 在 EA 的 OnInit() 处理程序中自动选择正确的参数值来初始化所有品种的交易对象。 默认情况下,将数值 -1 传递给交易类的交易方法填充订单,且到期类型表明其时间采用预设的正确默认值。 如果从程序里传递了另一个参数值,则会用它来替代默认值。 如果该值被证实无效,则当交易类进行错误处理时会加以纠正。

作者:Artyom Trishkin

 

将近 4 兆字节的代码,而且不提供库模式和自定义方法...你是在为自己写作吗?

从用户的角度看问题。在没有参考点的情况下,他们是如何理解这一切的。

 
另一个问题:在网络中断后设置挂单,而不重新询问用户,有多 "合理"?如果用户花了一个小时才恢复上网,而情况又发生了巨大变化,值得自动设置订单吗?留下一条信息,说明由于没有网络而没有设置订单,由用户决定是否应该再次设置订单,不是更好吗?
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 
Реter Konow:
另一个问题:网络中断后,在不重新询问用户的情况下设置挂单有 多 "合理"?如果用户花了一个小时才恢复上网,而情况又发生了巨大变化,值得自动设置订单吗?留下一条信息,说明由于网络连接不上而没有设置订单,由用户决定是否再次设置订单,不是更好吗?
难道这篇文章没有说明其中的原理和原因吗?
 
Artyom Trishkin:
难道这篇文章没有说明其原理以及具体原因吗?

这篇文章没有具体说明为什么决定在连接互联网后立即发送挂单,而不重复轮询用户。

文章还警告说,文章中介绍的挂单请求不能用于实际交易。也就是说,这只是概念测试,仅此而已。

文章没有解释如何在重新连接互联网后设置订单,而无需轮询用户。

你真的需要几篇文章来测试挂单交易请求的简单机制吗?此外,再次轮询用户更简单、更正确,仅此而已。

 
Реter Konow:

特别是在这篇文章中,没有说明为什么决定在连接互联网后立即发送挂单,而不重新询问用户。

文章还警告说,文章中介绍的挂单请求不能用于实际交易。也就是说,这只是概念测试,仅此而已。

没有解释如何在重新连接互联网后设置订单,而无需询问用户。

你真的需要几篇文章来测试挂单交易请求的简单机制吗?此外,再次轮询用户更简单、更正确,仅此而已。

不要忘了,这只是一篇写给那些想了解一些东西的人看的文章。它只是一小段编程课程,而不是一个现成的智能交易系统。文章通过代码描述和展示了如何以及如何做才能达到预期效果。如果您需要在 Expert Advisor 中进行用户投票,没有人禁止您这样做。

 
Реter Konow:

特别是在这篇文章中,没有说明为什么决定在连接互联网后立即发送挂单,而不重新询问用户。

文章还警告说,文章中介绍的挂单请求不能用于实际交易。也就是说,这只是概念测试,仅此而已。

没有解释如何在重新连接互联网后设置订单,而无需询问用户。

你真的需要几篇文章来测试挂单交易请求的简单机制吗?此外,再次轮询用户更简单、更正确,仅此而已。

请阅读前一篇文章--其中解释了为什么必须这样做。提示
1. Sleep() 函数会停止执行智能交易系统。完全停止。
2.多货币智能交易系统。
您不太理解这一概念。因此提出了此类问题。
对于用户调查来说,一切都将是通过图书馆。但不是内部交易方法 - 他们不应该也不会这样做。
 
Alexey Viktorov:

不要忘了,这篇文章只是写给那些想了解一些东西的人。它只是一小段编程课程,而不是一个现成的智能交易系统。文章用代码描述并展示了如何做才能达到预期效果。如果您需要在 Expert Advisor 中进行用户投票,没有人禁止您这样做。

1.为了照顾那些想要了解的人,最好制定一个库计划,以便于对材料进行定位。

2.2. 作者对交易功能 的每一次修改都不能成为在每篇文章中刊载的理由。材料臃肿。同样的交易功能在不同的文章中互换,但改动不大。现在会有待处理请求的代码吗?这不仅没有说明问题,反而让读者感到困惑。

3.很快就会有 30 篇文章,作者警告不要使用该库。那它是用来做什么的?教大家如何编写一个不受欢迎的库吗?

 
Реter Konow:

1.为了照顾那些想了解的人,最好能制作一个图书馆图,方便他们浏览资料。

2.2. 作者对交易功能 的每一次修改都不能成为在每篇文章中刊载的理由。材料臃肿。同样的交易功能在不同的文章中互换,但改动不大。现在会有待处理请求的代码吗?这不仅没有说明问题,反而让读者感到困惑。

3.很快就会有 30 篇文章,作者警告不要使用图书馆。那它的目的是什么?教人如何编写一个不受欢迎的库吗?

你会生吃肉馅吗?在这里,为了不让你吃到它,作者提出了警告--在这篇文章和最后一篇文章中,有材料的准备和概念的调试。
是的,如果有必要,我们会改变方法,并对改变做出解释。
我不支持在问题中耍花招--我喜欢实质性的对话。
 
Artyom Trishkin:
你会生吃肉馅吗?在这里,为了避免您吃到它,我们会提出警告--在这篇文章和最后一篇文章中,我们将准备材料并调试概念。
是的,如果有必要,将对方法进行修改,并对修改内容进行说明。
我不支持在问题中扯皮--我喜欢实质性的对话。

我以为文章应该有完整的解决方案。那有什么可调试的呢?

如果与服务器的通信中断,记录订单数据,设置重新检查与服务器通信的标志。我们会循环重新检查,直到建立连接。通信恢复后,我们会询问用户是否要设置失败的订单。如果是,则发送回订单,删除标记,并从失败订单列表中删除订单数据。总的来说,整个概念就是这样。

 
似乎很有实质性。