使用mql5帮助文件的举例代码进行平仓为何总是失败? 新评论 huixin 2018.09.07 10:15 完全按照帮助文件的举例代码执行平仓失败,报错:“OrderSend error 4756”;通过MqlTradeResult返回操作代码,10030(无效命令填满字节),实在是很无语,找不到哪里出了问题! 帮助文件的平仓代码如下: //-----------按市价平仓当前货币持仓单void CloseOrder(int magicnumber) {//--- 声明并初始化交易请求和交易请求结果 MqlTradeRequest request; MqlTradeResult result; int total=PositionsTotal(); // 持仓数 //--- 重做所有持仓 for(int i=total-1; i>=0; i--) { //--- 订单的参数 ulong position_ticket=PositionGetTicket(i); // 持仓价格 string position_symbol=PositionGetString(POSITION_SYMBOL); // 交易品种 int digits=(int)SymbolInfoInteger(position_symbol,SYMBOL_DIGITS); // 小数位数 ulong magic=PositionGetInteger(POSITION_MAGIC); // 持仓的幻数 double volume=PositionGetDouble(POSITION_VOLUME); // 持仓交易量 ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); // 持仓类型 //--- 如果幻数匹配 if(magic==magicnumber) { //--- 归零请求和结果值 ZeroMemory(request); ZeroMemory(result); //--- 设置操作参数 request.action =TRADE_ACTION_DEAL; // 交易操作类型 request.position =position_ticket; // 持仓价格 request.symbol =position_symbol; // 交易品种 request.volume =volume; // 持仓交易量 request.deviation=500; // 允许价格偏差 request.magic =magicnumber; // 持仓幻数 //--- 根据持仓类型设置价格和订单类型 if(type==POSITION_TYPE_BUY) { request.price=SymbolInfoDouble(position_symbol,SYMBOL_BID); request.type =ORDER_TYPE_SELL; } else { request.price=SymbolInfoDouble(position_symbol,SYMBOL_ASK); request.type =ORDER_TYPE_BUY; } //--- 输出关闭信息 PrintFormat("Close #%I64d %s %s",position_ticket,position_symbol,EnumToString(type)); //--- 发送请求 if(!OrderSend(request,result)) PrintFormat("OrderSend error %d",GetLastError()); // 如果不能发送请求,输出错误代码 //--- 操作信息 PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order); //--- } } } 哪位大神帮我看看我写的移动止损哪里错误了 怎么不管用 求教大神,移动止盈怎么写,请大神帮忙 请教高手看一下,为什么我这个EA不会开仓 Zheng Mao Nie 2019.03.14 23:08 #1 我也有这样的问题 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
完全按照帮助文件的举例代码执行平仓失败,报错:“OrderSend error 4756”;通过MqlTradeResult返回操作代码,10030(无效命令填满字节),实在是很无语,找不到哪里出了问题!
帮助文件的平仓代码如下:
//-----------按市价平仓当前货币持仓单
void CloseOrder(int magicnumber)
{
//--- 声明并初始化交易请求和交易请求结果
MqlTradeRequest request;
MqlTradeResult result;
int total=PositionsTotal(); // 持仓数
//--- 重做所有持仓
for(int i=total-1; i>=0; i--)
{
//--- 订单的参数
ulong position_ticket=PositionGetTicket(i); // 持仓价格
string position_symbol=PositionGetString(POSITION_SYMBOL); // 交易品种
int digits=(int)SymbolInfoInteger(position_symbol,SYMBOL_DIGITS); // 小数位数
ulong magic=PositionGetInteger(POSITION_MAGIC); // 持仓的幻数
double volume=PositionGetDouble(POSITION_VOLUME); // 持仓交易量
ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); // 持仓类型
//--- 如果幻数匹配
if(magic==magicnumber)
{
//--- 归零请求和结果值
ZeroMemory(request);
ZeroMemory(result);
//--- 设置操作参数
request.action =TRADE_ACTION_DEAL; // 交易操作类型
request.position =position_ticket; // 持仓价格
request.symbol =position_symbol; // 交易品种
request.volume =volume; // 持仓交易量
request.deviation=500; // 允许价格偏差
request.magic =magicnumber; // 持仓幻数
//--- 根据持仓类型设置价格和订单类型
if(type==POSITION_TYPE_BUY)
{
request.price=SymbolInfoDouble(position_symbol,SYMBOL_BID);
request.type =ORDER_TYPE_SELL;
}
else
{
request.price=SymbolInfoDouble(position_symbol,SYMBOL_ASK);
request.type =ORDER_TYPE_BUY;
}
//--- 输出关闭信息
PrintFormat("Close #%I64d %s %s",position_ticket,position_symbol,EnumToString(type));
//--- 发送请求
if(!OrderSend(request,result))
PrintFormat("OrderSend error %d",GetLastError()); // 如果不能发送请求,输出错误代码
//--- 操作信息
PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order);
//---
}
}
}