文章 "轻松快捷开发 MetaTrader 程序的函数库(第 三十部分):延后交易请求 - 管理请求对象"

 

新文章 轻松快捷开发 MetaTrader 程序的函数库(第 三十部分):延后交易请求 - 管理请求对象已发布:

在上一篇文章中,我们遵照函数库对象的一般概念创建了相对应的延后请求对象类。 本次,我们将着手允许管理延后请求对象的类。

最初,我打算创建一个独立的、拥有所有必要方法的类来管理延后请求。 但是事实证明,函数库的主要 CTrading 类与将要创建的管理延后请求的新类是如此紧密相关,以至于令管理延后请求对象的新类成为主要交易类的后代会容易得多。

延后请求对象的完整管理在类计时器中执行,故此我们将基准交易类计时器定为虚拟,这意味着延后请求管理类的计时器也将是虚拟的。 然后,与基准交易类计时器相关的所有内容都在类计时器中设定,而该类中用于管理延后请求对象的所有内容都应在类的计时器中设定。

除了管理延后请求对象的类之外,我们还将创建一个小型类来分配暂停,从而避免使用 Sleep() 函数,该函数会在延迟时间内停止程序执行。 借助暂停对象,我们将不再依赖即时报价,这意味着我们在周末也能够测试需要等待的代码。 暂停控制将在计时器中执行。

作者:Artyom Trishkin

 

下午好、

感谢您所做的工作

一个小小的请求:老实说,我仔细阅读了这些文章(主要是为了增长知识),但由于文章周期较长,而且需要处理其他项目,我不得不回头重温过去的文章,以了解其中的变化。这个项目已经发展壮大,因此,如果可能的话,请在今后的文章中回过头来说明现在的库结构。

谨致谢意

 
Олег Миронов:

下午好、

感谢您所做的工作

一个小小的请求:老实说,我仔细阅读了这些文章(主要是为了增长知识),但由于文章周期较长,而且需要处理其他项目,我不得不回头重温过去的文章,以了解其中的变化。这个项目已经发展壮大,因此--如果可能的话,请在今后的文章中回过头来说明现在的图书馆结构。

谨致谢意

我会想办法说明一个相当简单的结构。这个结构非常简单,但同时库中不同类之间又有很多联系。

创建的所有内容都积累在 CEngine 中,目前可以通过该对象访问库中的所有类(还将有另一个访问点--通过用户函数类,但尚未完成)。但目前只能访问所有已创建类的方法,这些方法是当前所必需的。
这些类本身相互使用指针,以便在另一个类中使用一个类的数据。如果开始显示所有这些关系,就会更加混乱。而且,如果显示所有基础对象(它们被许多类和类中的列表继承),并显示它们在定时器中的运行位置,就会一团糟。
因此,简单地展示一个类的结构会容易得多,所有其他类都与这个结构相同。这非常简单,但绝对不足以显示整个程序库的结构及其相互关系。
还有一点--程序库在逐渐扩大,但同样是在一开始提出的构建 程序库对象 的概念框架内。因此,只需了解一次它的结构,就会非常简单。
当然,我会考虑(我已经在考虑)如何以更简单、更易懂的方式展示一切。

 

Artem,下午好。您的工作非常宝贵!感谢您提供的开发机会和花费的时间,让像我这样的人可以从质量上保存它。

我有个建议:我们是否应该在 github 上发布一个包含您的库的资源库?这样做有什么好处?

  1. 当然是一个版本控制系统。
  2. 让每个人都有机会参与 DoEasy 库的开发。
  3. 可以快速搜索代码,随时访问最新版本。

例如,在研究程序库时,我发现并修复了几个错误,并优化了部分代码。在这种情况下,我现在可以在版本控制系统的框架内向您发送一个特别请求,由您决定是否将我的改进纳入当前版本的程序库。

您正在做一项伟大的工作,我们(有许多像我这样的人)可以为了共同的利益投入自己的时间,以改进 DoEasy。我愿意为实现建议提供帮助。

 
Сергей Романов:

Artem,下午好。您的工作非常宝贵!感谢您提供的发展机会,感谢您花费大量时间,让我这样的人能够高质量地保存您的作品。

我有个建议:我们是否应该在 github 上发布一个包含您的库的资源库?这样做有什么好处?

  1. 当然是一个版本控制系统。
  2. 每个人都有机会参与 DoEasy 库的开发。
  3. 能够快速搜索代码并随时访问最新版本。

例如,在研究程序库时,我发现并修复了一些错误,优化了一些代码。在这种情况下,我现在可以在版本控制系统的框架内向您发送一个特别请求,由您决定是否将我的改进纳入当前版本的程序库。

您正在做一项伟大的工作,我们(有许多像我这样的人)可以为了共同的利益投入自己的时间,以改进 DoEasy。我愿意为实现建议提供帮助。

您好。感谢您的反馈。

目前谈论和考虑版本库还为时过早--版本库正在积极开发中,在我创建和发布所有计划之前,我不想偏离计划。第三方用户对库的大量修正和修订只会分散作者的精力,使其无法按计划行事。

但最好还是直接在发现错误的文章讨论中报告发现的错误和消除错误的方法,这将有助于库的开发和消除发现的错误。

 

编译 TradingControl.mqh 文件时,出现两个错误:

'CTrading::OpenPosition<double,d...' - 无法访问私有成员函数 TradingControl.mqh 328 21
查看 'CTrading::OpenPosition<double,double>' 的声明 Trading.mqh 146 24 'CTrading::PlaceOrder<double,double...' - 无法访问私有成员函数 Trading.mqh 146 24 mqh 146 24
'CTrading::PlaceOrder<double,double...' - 无法访问私有成员函数 TradingControl。mqh 344 18
查看 'CTrading::PlaceOrder<double,double,double,double>' 的声明 Trading.mqh 156 26

这些方法位于 CTrading 类的私有部分。如果将它们移到该类的公共部分,错误就会消失。但在所附文件中(据我所知,这些文件正在运行),这些方法也在 CTrading 类的私有部分,而这两个错误是在编译 TradingControl.mqh 文件时出现的。

Artyom,那你是怎么做到的?要么是这里有错误,要么是我误解了什么。

附注:我下载了下一部分 - 31 的附件文件,这些方法也位于 CTrading 类的私有部分,编译时也出现了这两个错误。

 
MQL_User #:

编译 TradingControl.mqh 文件时出现两个错误:

'CTrading::OpenPosition<double,d...' - cannot access private member function TradingControl.mqh 328 21
see declaration of 'CTrading::OpenPosition<double,double>' Trading.mqh 146 24
'CTrading::PlaceOrder<double,double...' - 无法访问私有成员函数 TradingControl。mqh 344 18
查看 'CTrading::PlaceOrder<double,double,double,double>' 的声明 Trading.mqh 156 26

这些方法位于 CTrading 类的私有部分。如果将它们移到该类的公共部分,错误就会消失。但在所附文件中(据我所知,这些文件正在运行),这些方法也在 CTrading 类的私有部分,而这两个错误是在编译 TradingControl.mqh 文件时出现的。

Artem,那你是怎么做到的?要么是这里有错误,要么是我误解了什么。

附注:我下载了下一部分 - 31 的附件文件,这些方法也位于 CTrading 类的私有部分,编译时也出现了这两个错误。

最近一次更新后就出现了这种情况。请尝试将它们放在受保护部分,这样就无法从外部访问它们。公共方法太糟糕了

 
Artyom Trishkin #:

最近一次更新后就变成这样了。试着把它们放在受保护的区域,这样就无法从外部访问它们了。公开太糟糕了

好的,我会这么做的。

还有一个问题:在公共部分有 ClosePosition、PlaceBuyStop、PlaceBuyLimit 等方法。公共部分中的方法对它们来说不是很重要吗?

 
MQL_User #:

好吧,我会的。

还有一个问题:在公共部分有 ClosePosition、PlaceBuyStop、PlaceBuyLimit 等方法。这些方法放在公共部分不是很重要吗?

它们应该在那里 - 它们是处理订单和仓位的方法之一