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; }
随着 MQL5 编程的所有更改,需要更新此步骤代码的版本,如果我复制此代码,它就不再能编译 - 是否有包含最新更改的版本 - 非常感谢。
你好,迈克尔、
感谢您的评论。我会考虑您的建议,如果需要对代码进行任何更新,我们会尽快提供。
为什么输出错误代码:10030?
帮助,这里有人吗?
为什么输出错误代码: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 的目的是什么?
谢谢您的帮助。
帮助,这里有人吗?
为什么输出错误代码: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 在所有经纪商中都能很好地运行。Digits 或 Digits()返回决定当前图表符号价格准确性的小数位数。对于 5 位数或 3 位数的价格图表,我们将止损和止盈都乘以 10 。
请看下面的示例:
5 - 小数位价格
3 - 小数位价格
希望这已经回答了您的问题。
您好、
能告诉我们您是如何出错的吗?
第一步:下载示例代码。
第 2 步:在 mql5 中编译。
第 3 步:在 mt5 中打开图表 eurusd 1m,然后点击 "自动交易"。
第 4 步:在代码第 223、224 等行设置中断符号...
第 5 步:在 MT5 中点击 "开始调试 "按钮,然后显示此错误。
步骤 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 吗?