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

 
非常好谢谢!
 

我下载了文件并调试了代码,结果显示了这样的警告,谁能帮我解决这个问题?


应检查"OrderSend"的返回值


 

你好,我是新手,也在测试机器人。

试试这个:

//OrderSend(mrequest,mresult);

bool res=OrderSend(mrequest,mresult);

// 获取结果代码

if(res && (mresult.retcode==10009 || mresult.retcode==10008)) //请求已完成或已下订单

{

Alert("A Buy order has been successfully placed with Ticket#:",mresult.order,"!");

}

否则

{

Alert("The Buy order request could not be completed -error:",GetLastError());

ResetLastError();

返回;

}

如果我说错了,请指正!

研究来源:https://www.mql5.com/en/forum/23663

return value of 'OrderSend' should be checked
return value of 'OrderSend' should be checked
  • 2014.05.03
  • www.mql5.com
Hi ! I'm wondering how to do that ...:/ the warning appeared @ the last update...
 

我在调试时,总是在发送订单时出错。我以为是我的代码出了问题,但即使在测试下载 mql5 文件时也会出错。



 
northedan:

我在调试时,总是在发送订单时出错。我以为是我的代码出了问题,但即使在测试下载 mql5 文件时也会出错。



我认为示例中使用的是货币,因此 0.1 的手数变量不适合您的测试,请尝试这样更改(更改 mrequest.volume 变量):


double minSymbolLot = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);

mrequest.action = TRADE_ACTION_DEAL; // 立即执行订单

mrequest.price = NormalizeDouble(latest_price.ask,_Digits); // 最新卖出价

mrequest.sl = NormaliseDouble(latest_price.ask - STP*_Point,_Digits); // 止损点

mrequest.tp = NormaliseDouble(latest_price.ask + TKP*_Point,_Digits); // 止盈

mrequest.symbol = _Symbol; // 货币对

mrequest.volume = minSymbolLot; // 交易手数

mrequest.magic = EA_Magic; // 订单魔法编号

mrequest.type = ORDER_TYPE_BUY; // 买入订单

mrequest.type_filling =ORDER_FILLING_FOK; // 订单执行类型

mrequest.deviation=100;

 
有谁知道我是否可以将此 EA 用于迷你指数 或迷你美元?
 
Sella170:
有谁知道我是否可以将此 EA 用于迷你指数或迷你美元?

您了解该策略吗?你了解风险吗?你分析过 SL 和 TP 水平吗?你知道所使用的技术指标吗?知道如何设置参数吗?您知道如何为每种资产(WIN 和 WDO)定制变量吗?

代码本身是为任何资产开发的,您可以通过"_Symbol "和任何图表时间"_Period "来识别。

现在,重要的是您要知道运行 EA 时要做什么。如果您选择这样做,我建议您只在模拟账户上操作,直到您掌握了该工具并对股市有了更好的了解。

[ ]'s

 

各位、

如果同时打开多个订单时出现错误,这是一个简单快速的修改代码。

将以下代码替换为:第 167 - 177 行

   if(PositionSelect(_Symbol)==true) // 我们打开了一个仓位
     {
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         Buy_opened=true;  //买入
        }
      else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
        {
         Sell_opened=true; // 卖出
        }
     }

替换为以下代码:

   int total= PositionsTotal();
   for(int i=0;i<total;i++)
     {
      if(PositionGetSymbol(i)==_Symbol);
        {
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
            Buy_opened=true;  //买入
           }
         else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
           {
            Sell_opened=true; // 卖出
           }
        }
      }

感谢@Samuel Olowoyo

 
Korobejnik:

建议如何解决问题。Expert Advisor 会连续打开多个仓位进行买入,卖出也是如此。

尽管在代码中进行了检查,但 Expert Advisor 没有看到已经打开的买入和卖出仓位,而是打开了新的仓位

对已经打开的仓位进行检查。由于某些原因,该检查不起作用。

由于这里的巨魔版主没有提供帮助,我将复制英文论坛上的答案:

伙计们,这是一个简单快速的可修改代码,如果您在同时打开多个订单时出现错误。替换以下代码: 从第 167 - 177 行

   if(PositionSelect(_Symbol)==true) // 我们有一个空缺职位
     {
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         Buy_opened=true;  //买入
        }
      else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
        {
         Sell_opened=true; // 卖出
        }
     }

替换为

   int total= PositionsTotal();
   for(int i=0;i<total;i++)
     {
      if(PositionGetSymbol(i)==_Symbol);
        {
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
            Buy_opened=true;  //买入
           }
         else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
           {
            Sell_opened=true; // 卖出
           }
        }
      }
 
Locus_Neminis:

既然这里的巨魔版主帮不了我,那我就复制英文论坛上的答案吧:

伙计们,如果同时打开多个订单时出现错误,这是一个简单快速的可修改代码。替换以下代码: 从第 167 - 177 行

替换为

这没用。我的个人资料中有一个关于此问题的主题。那里有问题 的原因和解决方案。
我不明白巨魔的意思。