文章 "针对初学者以 MQL5 编写“EA 交易”的分步指南" - 页 6

 

下午好!

我目前正在学习如何以这篇文章为例编写智能交易系统(Expert Advisors),我遇到了以下问题--在尝试发送交易请求时,我收到了错误 10014 - 交易量错误。我检查了交易的最大允许交易量SYMBOL_VOLUME_MAX- 结果是 0。但同时手动交易却正常打开。

您能告诉我我哪里做错了吗?我使用的是文章所附的智能交易系统代码。

谢谢。

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
感谢您的文章。
 

您好、

代码看起来很棒,但当我尝试时,却出现了这样的错误

2011.11.13 23:39:58 2011.11.01 14:20:00 警报:卖出订单 请求无法完成 -error:4756
2011.11.13 23:39:58 2011.11.01 14:20:00 即时卖出 1.00 欧元兑美元失败,价格为 1.36833 sl: 1.37133 tp: 1.35833 [无效请求] 2011.11.13 23:39:58 2011.11.01 14:20:00 Alert: the Sell order request could not complete -error:4756

没有执行交易。

有人能帮助修复吗?

谢谢

F

[删除]  
Financialabs:

你好、

代码看起来很棒,但当我尝试时,却出现了这样的错误

2011.11.13 23:39:58 2011.11.01 14:20:00 警报:卖出订单 请求无法完成 -error:4756
2011.11.13 23:39:58 2011.11.01 14:20:00 即时卖出失败 1.00 EURUSD at 1.36833 sl: 1.37133 tp: 1.35833 [无效请求]

未执行任何交易。

有人能帮助修复吗?

谢谢

F

我也问过同样的问题,但没人回答。

我找到了。

这是一个错误。你必须添加一行代码

ZeroMemory(mrequest);

该行应在 mrequest.action=... mrequest.price=... 等行之前。

 

您好。

非常感谢你提供的详细而清晰的指南。

我遇到了一个问题。程序已编译,但在第一次尝试创建请求时出现了以下错误:"设置卖出订单的请求失败 -错误代码:4756"。

我在文档中找不到任何相关信息。您能告诉我该怎么做,或者在哪里可以找到相关信息吗?

Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений - Документация по MQL5
 
Alfff:

我遇到了一个问题。程序已编译,但在第一次尝试创建请求时出现了以下错误:"设置卖出订单的请求失败 -错误代码:4756"。

我在文档中找不到任何相关信息。您能告诉我如何解决这个问题,或者在哪里可以找到相关信息吗?

已修复,请下载更新版的智能交易系统。

问题出在 mrequest 结构中,应事先使用ZeroMemory 函数将其清零。在 "mrequest.action=TRADE_ACTION_DEAL;"(第 199 页和第 245 页)行之前应添加 "ZeroMemory(mrequest);"。

 
senerzen:

我也问过同样的问题,但没人回答。

我找到了。

这是一个错误。您必须添加一行代码

ZeroMemory(mrequest);

该行应放在 mrequest.action=... mrequest.price=... 等行之前。

谢谢,错误 已修复。
Get in touch with developers using Service Desk!
  • www.mql5.com
We therefore attach great importance to all user reports about issues in our programs and try to answer each one of them.
 
papaklass:
是否总是有必要这样做,即在请求之前将请求结构归零?
在发送请求之前,必须对结构体的所有字段进行初始化(在这种情况下,可以使用ZeroMemory 函数逐个元素进行初始化),初始化必须在声明结构体之后进行。
 
Automated-Trading:
在发送请求之前,必须对结构体的所有字段进行初始化(在本例中使用ZeroMemory 函数完成,当然也可以逐个元素进行初始化),初始化必须在声明结构体之后进行。

参考手册》中是这么说的吗?(我现在没机会查看)。

事实证明,在程序的全局层声明一次结构类型变量,初始化一次就够了,就不用再回到 使用ZeroMemory 函数的问题上来了?

 
Yedelkin:

手册》中有这方面的规定吗?(我现在没机会查)。

任何变量在声明时都不会被强制清零。程序员需要在使用所有变量之前对其进行清理/赋值。

使用未初始化(或未完全初始化)的变量(尤其是结构变量)是编程中一个非常常见的错误。

事实证明,只要在程序的全局层声明一次结构类型的变量,并对其进行一次初始化,就不会再出现使用ZeroMemory 函数的问题了。

与其在全局级别进行初始化(无用且更危险),不如正确初始化变量。

我们很容易问自己这样一个问题:"为什么我认为有人会为我初始化变量,尤其是复杂结构?

在声明结构时,将其清零非常方便,无需不便的ZeroMemory

   MqlTick my={0};