MQL4 - ОШИБКА 4111 при вызове метода OrderSend()

Я пытаюсь разместить ордер, но мой вызов метода 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" );
    }
} 

Вы знаете, что я делаю неправильно, пожалуйста?


person Community    schedule 31.07.2016    source источник


Ответы (1)


Давайте сначала разберем вызов 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-стороне (цены + значения лота (квантованные) - - поскольку это не непрерывные значения в домене R, а скорее квантово-ступенчатые:

цены: с степпингом 0.00001 или 0.0001 или 0.001 или 0.01 или 0.1 или 1.0 и т. д.,

объемы лотов: более ограничены специфическими для брокера настройками для каждого инструмента из трех ключевых значений, все допустимые размеры объемов должны соответствовать:
[aMinLOTs<=, +aMinLotSTEP, <=aMaxLOTs] + a нормализация правильных цифр
~ таким образом, 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 и на стороне брокера: ref.-> Справочник MQL4 / Программы MQL4 / Разрешение на торговлю

person user3666197    schedule 01.08.2016