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

 
我需要帮助才能修复 Expert Advisors 中的一个错误,我想写入进入市场 和退出市场的 时间,以便能够更改设置、
附加的文件:
 
michael sedgley:
随着 MQL5 编程的所有更改,需要更新此步骤代码的版本,如果我复制此代码,它就不再能编译 - 是否有包含最新更改的版本 - 非常感谢。

你好,迈克尔、

感谢您的评论。我会考虑您的建议,如果需要对代码进行任何更新,我们会尽快提供。

 

为什么输出错误代码:10030?

附加的文件:
2.png  74 kb
 

帮助,这里有人吗?


为什么输出错误代码:10030?

 

首先感谢您的文章,它帮助我开始学习 mql5 编程。

我尝试了您的代码,但在 OnInit() 中有一段代码我不明白它的用途:

//--- 让我们处理价格为 5 位或 3 位数而不是 4 位数的货币对

STP = StopLoss;

TKP = TakeProfit;

if(_Digits==5 || _Digits==3)

{

STP = STP*10;

TKP = TKP*10;

}

这部分修改了止盈和止损点的值,导致输入值与实际使用值不同。

但是,如果我删除 if 中的两行,那么在向服务器发送订单时就会经常出现错误 10016(无效止损)。第一次尝试下单顺利,我收到的是 10009,但随后大多数时候我收到的都是 10016。我调试了 EA,所有止损和止盈似乎都没有问题,区别在于止损是高于或低于当前价格 30 或 300,止盈是高于或低于当前价格 100 或 1000。

我找不到为什么当 STP 和 TKP 没有乘以 10 时,服务器会给出错误 10016。

有谁能解释一下为什么会出现这个错误,或者当 _Digits 为 5 或 3 时乘以 10 的目的是什么?

谢谢您的帮助。

 
an you please guguqiaqia:

帮助,这里有人吗?


为什么输出错误代码:10030?

您好、

能告诉我们您是如何出错的吗?

 

eshelios.sr


首先感谢您的文章,它帮助我开始学习 mql5 编程。

我试过你的代码,但在 OnInit() 有一段代码我不明白它的用途:

//----让我们处理价格为 5 位或 3 位数而不是 4 位数的货币对

STP = StopLoss;

TKP = TakeProfit;

if(_Digits==5 || _Digits==3)

{

STP = STP*10;

TKP = TKP*10;

}

这部分修改了止盈和止损点的值,导致输入值与实际使用值不同。

但是,如果我删除 if 中的两行,那么在向服务器发送订单时就会经常出现错误 10016(无效止损)。第一次尝试下单顺利,我收到的是 10009,但随后大多数时候我收到的都是 10016。我调试了 EA,所有止损和止盈似乎都没有问题,区别在于止损是高于或低于当前价格 30 或 300,止盈是高于或低于当前价格 100 或 1000。

我找不到为什么当 STP 和 TKP 没有乘以 10 时,服务器会给出错误 10016。

有谁能解释一下为什么会出现这个错误,或者当 _Digits 为 5 或 3 时乘以 10 的目的是什么?

谢谢您的帮助。

您好、

首先,根据您的解释,当您删除这几行代码时,会出现错误,而当您没有将止损/止盈值乘以 10 时,会出现错误?我相信这已经说明了这几行代码非常重要。

回到这篇文章,它解释了如果你使用的是小数点后 5 位数(0.XXXXX)或小数点后 3 位数(0.XXX)的货币对图表,那么这几行代码就是必要的。

因此,在这里我们要确保我们的 EA 在所有经纪商中都能很好地运行。DigitsDigits()返回决定当前图表符号价格准确性的小数位数。对于 5 位数或 3 位数的价格图表,我们将止损和止盈都乘以 10

请看下面的示例:

5 小数位价格

5 - 小数位价格

3 - 小数位价格

3 - 小数位价格

希望这已经回答了您的问题。

 
Samuel Olowoyo:

您好、

能告诉我们您是如何出错的吗?

第一步:下载示例代码。

第 2 步:在 mql5 中编译。

第 3 步:在 mt5 中打开图表 eurusd 1m,然后点击 "自动交易"。

第 4 步:在代码第 223、224 等行设置中断符号...

第 5 步:在 MT5 中点击 "开始调试 "按钮,然后显示此错误。

 
 guguqiaqia:

步骤 1:下载示例代码。

步骤 2:在 mql5 中编译。

步骤 3:在 mt5 中打开图表 eurusd 1m,然后点击 "自动交易"。

第 4 步:在代码第 223、224 等行设置中断符号...

第 5 步:在 mt5 中单击 "开始调试 "按钮,然后显示此错误。

您好、

感谢您分享您的步骤。请允许我带您回到代码中、

if(mresult.retcode==10009 || mresult.retcode==10008) //Request is completed or order placed
{
   Alert("A Buy order has been successfully placed with Ticket#:",mresult.order,"!!");
}
else
{
   Alert("The Buy order request could not be completed -error:",GetLastError());    // line 223
   ResetLastError();                                                                // line 224
   return;

据我所知,代码做了它应该做的事情。您出错的原因是您试图下的订单不成功,而这正是第 223 行应该做的。请阅读https://www.mql5.com/zh/docs/constants/errorswarnings/enum_trade_return_codes,了解错误的含义。(实际上,10030 意味着无效订单填写类型)。

要了解订单填写类型 -ORDER_FILLING_FOK - 的含义,请阅读 。

mrequest.type_filling = ORDER_FILLING_FOK; // Order execution type  ( line 213 )

的含义,请阅读https://www.mql5.com/zh/docs/constants/tradingconstants/orderproperties#enum_order_type_filling

希望这能回答您的问题。

 

你好,塞缪尔、

我下载了代码,安装并运行后发现,它主要是在符合条件的每根蜡烛上打开买单卖单(我使用 H1 作为时间框架)。

我没有进行调试,发现代码的某些部分没有被触发。你们能用下载的代码正常运行 EA 吗?

附加的文件:
screen.jpg  417 kb