感谢您提供这篇有趣的文章。但遗憾的是,对OrderCheck() 函数的关注很少。
我希望能有一篇单独的文章专门讨论这个有用的函数...
我只是在写一些 "扩展帮助"--很多背景信息。但关于 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 | 市场已关闭。 |
也许开发人员最终会注意到这个问题...
至少很少有人仔细阅读 MqlTradeCheckResult 的结构
而最常见的情况是,他们说这个函数是专用的,因为文档中写道
但值得注意的是结构中的"......后余额 "和"......后净值 "字段。我说的根本不是 "保证金要求"。这些参数非常有用。例如,如果做完一笔交易后,账户上还有 "40 戈比 "的净值......即使有足够的资金,订单的其他参数也符合要求,是否还有必要做这样一笔交易?当然也可以通过其他方法得到这个值,但在我看来,通过一个函数得到几个有用的参数要好得多。
根据我的使用经验,在检查成功的情况下,响应代码会修复不正确的 SL 和/或 TP 价格。而不仅仅是它们。这也是我想写一篇文章的原因。关于其他代码的工作原理...
不幸的是,OrderCheck() 不会报错
10018 | 交易撤销代码_市场关闭 | 市场关闭 |
所以,也许开发人员最终会注意这个问题....
我不明白您在说什么 SL 和 TP?它们不在结构的领域内...
至于股权,交易后的余额...嗯......,你知道,我想说的是,知道这些是很有用的,在向服务器发送订单之前,应该对这些数据进行分析。但我没这么说吗?或者说,我是不是应该说清楚,如果你以后没有足够的钱买包子,就不应该开仓)......。但是,你看,我想了想,我觉得已经很清楚了。这就是为什么我刚才写道,您可以分析 该结构中已填充的字段。至于没有返回 "市场关闭 "这一事实,我没有写(尽管我想写,只是因为我忘记了)。我认为这些是交易服务器的返回代码。它们适用于生活中的所有情况。很明显,这个代码不是针对这种情况的。它在 OrderSend 中正常返回。虽然是的,要检查市场是否关闭,您需要发送一个订单--这是一个很弱的解决方案。但有什么呢?
我说的是代码
10014 | 无效交易量代码 | 请求中的交易量不正确 |
10015 | 交易代码无效价格 | 请求中的价格不正确 |
10016 | 无效止损点 | 请求中的止损不正确 |
这些代码会返回到 MqlTradeCheckResult 结构中,并得到完美分析。
换句话说,如果你不想写,或者拉希德不欢迎,我也不坚持。
那么,除了 "您可以分析响应代码",您还能在这里写什么呢?好吧,一个人收到了这样的代码--很明显,停止是错误的。因此,必须对其进行程序化处理,以避免出现错误的止损。分析响应代码也是一种分析。以及结构字段。也就是说,一切都已经说过了--分析并得出结论。您是否认为需要描述每个服务器响应以及在这种情况下应采取哪些措施?我还没写完的程序库中已经实现了这一点,但交易在那里已经进行了很长时间。进行全面分析和调整。为什么要重复呢?
那么,除了 "您可以分析响应代码 "之外,您还能在这里写什么呢?....一个人收到这样的代码--很明显,止损是不正确的。因此,必须对其进行程序处理,以避免出现不正确的止损。对响应代码的分析也是一种分析。以及结构字段。也就是说,一切都已经说过了--分析并得出结论。您是否认为需要描述每个服务器响应以及在这种情况下应采取哪些措施?我还没写完的程序库中已经实现了这一点,但交易在那里已经进行了很长时间。进行全面分析和调整。为什么要重复呢?
为了获取和分析返回代码,你至少应该了解这个函数是什么,了解它的用处。这正是我要说的。本文将对该函数进行深入理解,而不仅仅是文档中的描述。
讨论文章 "交易。请求和响应的结构、描述和日志输出 "一文的讨论。
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() 函数检查所需交易操作的资金是否充足。
新文章 交易事务. 请求和响应结构、描述和记录已发布:
本文探讨了处理交易请求结构,即创建请求、将其发送到服务器之前的初步验证、服务器对交易请求的响应以及交易交易的结构。我们将创建简单方便的函数,将交易订单发送到服务器,并根据所讨论的内容,创建EA来通知交易事务。
MQL5具有OrderSend()函数,用于设置挂单、打开仓位以及修改订单和仓位。该函数的第一个输入参数是MqlTradeRequest交易请求的结构。结构的“action”字段指示要执行的操作类型,其余字段将根据“action”域中所选的操作进行填充。因此,我们通过将交易请求所需的参数传递给函数来向服务器发送各种请求。
作者:Artyom Trishkin