文章 "交易事务. 请求和响应结构、描述和记录"

 

新文章 交易事务. 请求和响应结构、描述和记录已发布:

本文探讨了处理交易请求结构,即创建请求、将其发送到服务器之前的初步验证、服务器对交易请求的响应以及交易交易的结构。我们将创建简单方便的函数,将交易订单发送到服务器,并根据所讨论的内容,创建EA来通知交易事务。

MQL5具有OrderSend()函数,用于设置挂单、打开仓位以及修改订单和仓位。该函数的第一个输入参数是MqlTradeRequest交易请求的结构。结构的“action”字段指示要执行的操作类型,其余字段将根据“action”域中所选的操作进行填充。因此,我们通过将交易请求所需的参数传递给函数来向服务器发送各种请求。

作者:Artyom Trishkin

 

感谢 Artyom 将所有必要信息集中在一篇文章中!我已将其加入收藏夹。

弗拉基米尔

 

感谢您提供这篇有趣的文章。但遗憾的是,对OrderCheck() 函数的关注很少。

我希望能有一篇单独的文章专门讨论这个有用的函数...

 
Alexey Viktorov #:

感谢您提供这篇有趣的文章。但遗憾的是,对OrderCheck() 函数的关注很少

我希望能有一篇单独的文章专门讨论这个有用的函数...

在 MT5 的一些旧版本中,我发现OrderCheck() 有时会拒绝实际上已成功执行的请求。我放弃了它,不想在战斗机器人中再次测试这些错误,尽管它们可能已被修复。

 
Alexey Viktorov #:

感谢您提供这篇有趣的文章。但遗憾的是,对OrderCheck() 函数的关注很少

我希望能有一篇单独的文章专门介绍这个有用的函数...

我正在写一些 "扩展帮助"--大量的参考信息。关于 OrderCheck 的所有内容都简洁明了。它本身也没有多余的内容。我已经描述了哪些字段、哪些字段以及如何填写。并非在所有情况下都会填写。带有代码的函数响应几乎总是 "OK",因为我习惯于正确填写交易请求。如果出现 "几乎 "的情况,那就是故意输入错误数据来检查工作。也就是说,我不知道该怎么描述,甚至不知道该写一篇文章。

 
Artyom Trishkin #:

我只是在写一些 "扩展帮助"--很多背景信息。但关于 OrderCheck 的一切似乎都很简洁明了。它本身也没有多余的内容。我已经描述了哪些字段、哪些字段以及如何填写。并非在所有情况下都会填写。带有代码的函数响应几乎总是 "OK",因为我习惯于正确填写交易请求。如果出现 "几乎 "的情况,那就是故意输入错误数据来检查工作。也就是说,我不知道该怎么描述,甚至不知道该写一篇文章。

至少很少有人仔细阅读过 MqlTradeCheckResult 的结构。

struct MqlTradeCheckResult
  {
   uint         retcode;             // 响应代码
   double       balance;             // 交易后的余额
   double       equity;              // 交易后的权益
   double       profit;              // 浮动利润
   double       margin;              // 保证金要求
   double       margin_free;         // 自由保证金
   double       margin_level;        // 保证金水平
   string       comment;             // 响应代码的注释(错误描述)
  };

而他们最常说的是,这个函数是专用的,就像文档中写的那样

OrderCheck() 函数检查所需 交易 操作的资金是否充足

但值得注意的是"......后余额 "和"......后净值 "结构的字段。我说的根本不是 "保证金要求"。这些参数非常有用。例如,如果做完一笔交易后,账户上还有 "40 戈比 "的净值......即使有足够的资金,订单的其他参数也符合要求,还有必要做这样一笔交易吗?当然,也可以通过其他方法得到这个值,但在我看来,通过一个函数得到几个有用的参数要有利得多。

根据我的使用经验,在检查成功的情况下,响应代码会修复不正确的 SL 和/或 TP 价格。而不仅仅是它们。这也是我想写一篇文章的原因。关于其他代码的作用...

不幸的是,OrderCheck() 不会报错。

10018

trade_retcode_market_closed

市场已关闭。


也许开发人员最终会注意到这个问题...

 
Alexey Viktorov #:

至少很少有人仔细阅读 MqlTradeCheckResult 的结构

而最常见的情况是,他们说这个函数是专用的,因为文档中写道

但值得注意的是结构中的"......后余额 "和"......后净值 "字段。我说的根本不是 "保证金要求"。这些参数非常有用。例如,如果做完一笔交易后,账户上还有 "40 戈比 "的净值......即使有足够的资金,订单的其他参数也符合要求,是否还有必要做这样一笔交易?当然也可以通过其他方法得到这个值,但在我看来,通过一个函数得到几个有用的参数要好得多。

根据我的使用经验,在检查成功的情况下,响应代码会修复不正确的 SL 和/或 TP 价格。而不仅仅是它们。这也是我想写一篇文章的原因。关于其他代码的工作原理...

不幸的是,OrderCheck() 不会报错

10018

交易撤销代码_市场关闭

市场关闭


所以,也许开发人员最终会注意这个问题....

我不明白您在说什么 SL 和 TP?它们不在结构的领域内...

至于股权,交易后的余额...嗯......,你知道,我想说的是,知道这些是很有用的,在向服务器发送订单之前,应该对这些数据进行分析。但我没这么说吗?或者说,我是不是应该说清楚,如果你以后没有足够的钱买包子,就不应该开仓)......。但是,你看,我想了想,我觉得已经很清楚了。这就是为什么我刚才写道,您可以分析 该结构中已填充的字段。至于没有返回 "市场关闭 "这一事实,我没有写(尽管我想写,只是因为我忘记了)。我认为这些是交易服务器的返回代码。它们适用于生活中的所有情况。很明显,这个代码不是针对这种情况的。它在 OrderSend 中正常返回。虽然是的,要检查市场是否关闭,您需要发送一个订单--这是一个很弱的解决方案。但有什么呢?

 
Artyom Trishkin #:

我不明白你在说什么 SL 和 TP?它们不在结构字段中...

我说的是代码

10014

无效交易量代码(trade_retcode_invalid_volume

查询中的交易量不正确

10015

交易代码无效价格

请求中的价格不正确

10016

交易代码无效止损点

请求中的止损点不正确


这些代码会返回到 MqlTradeCheckResult 结构中,并得到完美分析。

换句话说,如果您不想写,或者拉希德不欢迎,我也不坚持。

 
Alexey Viktorov #:

我说的是代码

10014

无效交易量代码

请求中的交易量不正确

10015

交易代码无效价格

请求中的价格不正确

10016

无效止损点

请求中的止损不正确


这些代码会返回到 MqlTradeCheckResult 结构中,并得到完美分析。

换句话说,如果你不想写,或者拉希德不欢迎,我也不坚持。

那么,除了 "您可以分析响应代码",您还能在这里写什么呢?好吧,一个人收到了这样的代码--很明显,停止是错误的。因此,必须对其进行程序化处理,以避免出现错误的止损。分析响应代码也是一种分析。以及结构字段。也就是说,一切都已经说过了--分析并得出结论。您是否认为需要描述每个服务器响应以及在这种情况下应采取哪些措施?我还没写完的程序库中已经实现了这一点,但交易在那里已经进行了很长时间。进行全面分析和调整。为什么要重复呢?

 
Artyom Trishkin #:

那么,除了 "您可以分析响应代码 "之外,您还能在这里写什么呢?....一个人收到这样的代码--很明显,止损是不正确的。因此,必须对其进行程序处理,以避免出现不正确的止损。对响应代码的分析也是一种分析。以及结构字段。也就是说,一切都已经说过了--分析并得出结论。您是否认为需要描述每个服务器响应以及在这种情况下应采取哪些措施?我还没写完的程序库中已经实现了这一点,但交易在那里已经进行了很长时间。进行全面分析和调整。为什么要重复呢?

为了获取和分析返回代码,你至少应该了解这个函数是什么,了解它的用处。这正是我要说的。本文将对该函数进行深入理解,而不仅仅是文档中的描述。

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

讨论文章 "交易。请求和响应的结构、描述和日志输出 "一文的讨论。

Alexey Viktorov, 2023.08.03 13:40

至少很少有人仔细阅读过 MqlTradeCheckResult 的结构。

struct MqlTradeCheckResult
  {
   uint         retcode;             // 响应代码
   double       balance;             // 交易后的余额
   double       equity;              // 交易后的权益
   double       profit;              // 浮动利润
   double       margin;              // 保证金要求
   double       margin_free;         // 自由保证金
   double       margin_level;        // 保证金水平
   string       comment;             // 响应代码的注释(错误描述)
  };

他们最常说的是,这个函数是专用的,就像文档里写的那样

OrderCheck() 函数检查所需交易操作的资金是否充足

那我就不写了。
 
Artyom Trishkin #:
是的,要查看市场是否关闭,您需要发送订单--这是一个很弱的解决方案。但事实如此。

对于 MQL5 编程语言的创造者来说,MarketClosed 功能不需要手鼓,这还是不可能完成的任务吗?

再见,弗拉基米尔。