MT5开单函数在 EA和脚本中有何不同?

 

在MT5中用程序开仓,MQL5帮助文件中有举例的开仓代码见下面,我不理解的是这段代码放在脚本中就正常开仓,而放在ea中就不开仓,EA日志会报错:4756(交易需要发送失败),求解,谢谢!!

 //--- 声明并初始化交易请求和交易请求结果

    MqlTradeRequest request={0};

    MqlTradeResult  result={0};

 //--- 请求的参数

    request.action   =TRADE_ACTION_DEAL;                     // 交易操作类型

    request.symbol   =Symbol();                              // 交易品种

    request.volume   =0.1;                                   // 0.1手交易量 

    request.type     =ORDER_TYPE_BUY;                        // 订单类型

    request.price    =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // 持仓价格

    request.deviation=5;                                     // 允许价格偏差

    request.magic    =EXPERT_MAGIC;                          // 订单幻数

 //--- 发送请求

    if(!OrderSend(request,result))

       PrintFormat("OrderSend error %d",GetLastError());     // 如果不能发送请求,输出错误代码

 //--- 操作信息

    PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);

 

4576 --交易发送需求失败,这个检查下交易环境,具体原因不清楚。

另外开仓没有那么简单,还有个ORDER_FILLING 需要与Symbol的FILLING匹配,不同的平台,不同的品种的ORDER_FILLING的问题,2018年之前是个大麻烦,目前官方的库文件已经处理好了这个问题。

但是你需要理解这个知识点。

建议参考代码库,看看别人EA怎么写的,但是去年开始代码库上传不再审核,导致有些人的水平不够,分享的代码质量很差。

建议参考这个俄罗斯人的代码,他的代码质量非常高。

https://www.mql5.com/en/code/23452

https://www.mql5.com/en/users/barabashkakvn

Bill Williams
Bill Williams
  • www.mql5.com
Idea by: more An Expert Advisor based on two indicators: iFractals (Fractals) and iAlligator (Alligator). Considered is the latest (the "youngest") fractal only. Moreover, considered is only the fractal that is completely above (the condition for the upper fractal) or below...