OrderModify 错误 1
Error 1 in OrderModify
我正在尝试修改订单,但我总是得到 Error #1
。
根据我的研究,我发现错误 1 表示我以错误的方式输入了参数。如何修复我的 OrderModify()
函数?
stoploss = NormalizeDouble(Ask - Point * TrailingStop,Digits);
int ticket;
takeprofit = NormalizeDouble(Ask + Point * TrailingStopTP,Digits);
double minstoplevel = MarketInfo( Symbol(), MODE_STOPLEVEL );
if(stoploss > NormalizeDouble(Ask - Point*minstoplevel,Digits)) {
stoploss = NormalizeDouble(Ask - Point*minstoplevel,Digits);
}
if(takeprofit < NormalizeDouble( Ask + Point*minstoplevel2, Digits )) {
takeprofit = NormalizeDouble( Ask + Point*minstoplevel2, Digits );
}
if(AccountFreeMarginCheck(Symbol(),OP_SELL,lotsize)>0) {
ticket=OrderSend(Symbol(),OP_BUY,lotsize,Ask, 0, 0.0, 0.0, "comment", MagicNumber, 0, Lime);
if(ticket<0) {
Print("Order send failed with error #",GetLastError());
} else {
Print("Order send sucesso!! Ticket#", ticket);
res=OrderModify(ticket,OrderOpenPrice(),stoploss,takeprofit,0,Blue);
if(res==false) {
Print("Error modifying order!, error#",GetLastError());
} else {
Print("Order modified successfully, res#", res);
}
}
} else {
Print("Sem dinheiro na conta D=");
}
}
不完全是“错误”,OrderModify()
合法设置_LastError == 1
可能有点意外,但是OrderModify()
有义务发信号_LastError == 1
以防万一,该调用在句法和语义上都是正确的,但是,为修改提供的值实际上是完全相同的,因为已识别的 ticket#
已经存在于数据库中。
这意味着,没有什么可以修改的,因为所有的属性都已经有了“准new”目标值(s ).
可以预先检查所有字段的潜在身份,这可能允许我们的代码在这种情况下跳过 OrderModify()
调用。目标 } 值。
ERR_NO_RESULT == 1 // No error returned, but the result is unknown
GetLastError()
- returns 最后生成的错误代码。通过名为 _LastError
的系统变量可以获得相同的值。通过调用 ResetLastError()
.
,可以在关键 activity 之前将其值重置为零
错误代码定义在stderror.mqh
.
要打印错误描述,您可以使用 ErrorDescription()
函数,定义在 stdlib.mqh
文件中
#include <stderror.mqh>
#include <stdlib.mqh>
问题在于,即使 OrderModify()
调用的入场价、止损和获利参数看起来相同,但它们可能相差一个单位的分数(小于 "Digits" )。
要解决此问题,
只需规范化参数以确保它们最多 Digits
个小数位。
double entryPrice = NormalizeDouble( entryPrice, Digits );
double stoploss = NormalizeDouble( stoploss, Digits );
double target = NormalizeDouble( target, Digits );
然后将它们传递到 OrderModify()
调用中。
我正在尝试修改订单,但我总是得到 Error #1
。
根据我的研究,我发现错误 1 表示我以错误的方式输入了参数。如何修复我的 OrderModify()
函数?
stoploss = NormalizeDouble(Ask - Point * TrailingStop,Digits);
int ticket;
takeprofit = NormalizeDouble(Ask + Point * TrailingStopTP,Digits);
double minstoplevel = MarketInfo( Symbol(), MODE_STOPLEVEL );
if(stoploss > NormalizeDouble(Ask - Point*minstoplevel,Digits)) {
stoploss = NormalizeDouble(Ask - Point*minstoplevel,Digits);
}
if(takeprofit < NormalizeDouble( Ask + Point*minstoplevel2, Digits )) {
takeprofit = NormalizeDouble( Ask + Point*minstoplevel2, Digits );
}
if(AccountFreeMarginCheck(Symbol(),OP_SELL,lotsize)>0) {
ticket=OrderSend(Symbol(),OP_BUY,lotsize,Ask, 0, 0.0, 0.0, "comment", MagicNumber, 0, Lime);
if(ticket<0) {
Print("Order send failed with error #",GetLastError());
} else {
Print("Order send sucesso!! Ticket#", ticket);
res=OrderModify(ticket,OrderOpenPrice(),stoploss,takeprofit,0,Blue);
if(res==false) {
Print("Error modifying order!, error#",GetLastError());
} else {
Print("Order modified successfully, res#", res);
}
}
} else {
Print("Sem dinheiro na conta D=");
}
}
不完全是“错误”,OrderModify()
合法设置_LastError == 1
可能有点意外,但是OrderModify()
有义务发信号_LastError == 1
以防万一,该调用在句法和语义上都是正确的,但是,为修改提供的值实际上是完全相同的,因为已识别的 ticket#
已经存在于数据库中。
这意味着,没有什么可以修改的,因为所有的属性都已经有了“准new”目标值(s ).
可以预先检查所有字段的潜在身份,这可能允许我们的代码在这种情况下跳过 OrderModify()
调用。目标 } 值。
ERR_NO_RESULT == 1 // No error returned, but the result is unknown
GetLastError()
- returns 最后生成的错误代码。通过名为 _LastError
的系统变量可以获得相同的值。通过调用 ResetLastError()
.
错误代码定义在stderror.mqh
.
要打印错误描述,您可以使用 ErrorDescription()
函数,定义在 stdlib.mqh
文件中
#include <stderror.mqh>
#include <stdlib.mqh>
问题在于,即使 OrderModify()
调用的入场价、止损和获利参数看起来相同,但它们可能相差一个单位的分数(小于 "Digits" )。
要解决此问题,
只需规范化参数以确保它们最多 Digits
个小数位。
double entryPrice = NormalizeDouble( entryPrice, Digits );
double stoploss = NormalizeDouble( stoploss, Digits );
double target = NormalizeDouble( target, Digits );
然后将它们传递到 OrderModify()
调用中。