调用OrderSend()方法时MQL4 - ERROR 4111

时间:2016-07-31 22:57:04

标签: algorithmic-trading mql4 metatrader4 mql5

我正在尝试下订单,但我对OrderSend()方法https://docs.mql4.com/trading/ordersend
的调用失败了:

  

2016.08.01 00:51:09.710 2016.07.01 01:00 s EURUSD,M1: OrderSend error 4111

void OnTick() {
    if (  OrdersTotal() == 0 ){
          int   result =  OrderSend( NULL, OP_SELL, 0.01, Bid, 5, 0, Bid - 0.002, NULL, 0, 0, clrGreen );
          if (  result <  0 ) Print( "Order failed #", GetLastError() );
          else                Print( "Order success" );
    }
} 

你知道我做错了吗?

1 个答案:

答案 0 :(得分:2)

让我们先解开OrderSend()来电:

int result = OrderSend( NULL,             // string:      _Symbol,
                        OP_SELL,          // int:         OP_SELL,
                        0.01,             // double:      NormalizeLOTs( nLOTs ),
                        Bid,              // double:      NormalizeDouble( Bid, Digits ),
                        5,                // int:         slippagePOINTs,
                        0,                // double:      {       0 | NormalizeDouble( aSlPriceTARGET, Digits ) },
                        Bid-0.002,        // double:      {       0 | NormalizeDouble( aTpPriceTARGET, Digits ) },
                        NULL,             // string:      {    NULL | aBrokerUnguaranteedStringCOMMENT },
                        0,                // int:         {       0 | aMagicNUMBER },
                        0,                // datetime:    {       0 | aPendingOrderEXPIRATION },
                        clrGreen          // color:       { clrNONE | aMarkerCOLOR }
                        );

为了进一步让您高枕无忧, MQL4 (价格)应该始终规范所有价值观,并对其进行限制性处理 + lot(量化)值 - 因为这些值不是R域中的连续值,而是量子步长:

价格:拥有0.000010.00010.0010.010.11.0等踩踏,

批量:受每个工具的特定于经纪商的设置限制为三个关键值,所有允许的卷大小必须满足:[aMinLOTs<=, +aMinLotSTEP, <=aMaxLOTs] < strong> + 正确的数字规范化因此 double NormalizeLOTs( aProposedVOLUME ) {...} 是一个方便的工具,可以无缝地实现这个需要的两个部分。

Error 4111:

还有一些其他障碍阻止您的 MetaTrader Terminal 4 顺利运行您的代码:

  

<强> 4111
       的 ERR_SHORTS_NOT_ALLOWED
       的 Shorts are not allowed. Check the Expert Advisor properties

 if (  !TerminalInfoInteger( TERMINAL_TRADE_ALLOWED ) ) 
        Alert( "Check if automated trading is allowed in the terminal settings!" ); 
 else  if (  !MQLInfoInteger( MQL_TRADE_ALLOWED ) )
             Alert( "Automated trading is forbidden in the program settings for ",
                    __FILE__
                    );

指示用户修改 MetaTrader Terminal 4 设置,在 MT4 -> Tools -> Options -> ExpertAdvisor 标签和经纪人交易工具下进行修改条件,某些工具的缩减一般可能受到限制,或仅适用于某些账户类型。

 if (  !AccountInfoInteger( ACCOUNT_TRADE_EXPERT ) )
        Alert( "Automated trading is forbidden for the account",
                AccountInfoInteger( ACCOUNT_LOGIN ),
               " at the trade server side. Contact Broker's Customer Care Dept."
               );

有关详细信息,printScreens以及对 Terminal -side / Broker - 这两个障碍的一组的演示程序处理:ref .-&gt; MQL4参考/ MQL4程序/交易许可