Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1506

 
MrBrooklin #:

Александр, а то, что эти флаги инициализированы false на глобальном уровне, разве это в счёт не идёт?

С уважением, Владимир.

Один раз false. А потом они всегда true и на каждом тике будут удалять отложенные ордера и позиции.

 
Aleksandr Slavskii #:

Один раз false. А потом они всегда true и на каждом тике будут удалять отложенные ордера и позиции.

Ну, да, логично. Спасибо за разъяснение.

С уважением, Владимир.

 
При запуске советника в MT5 Strategy Tester я постоянно получаю ошибку "failed market sell 0.01 EURUSD [Unsupported filling mode]". Код результата (retcode) возвращается 10030.
Вот структура моего запроса. Пожалуйста, помогите.
   MqlTradeRequest request = {} ;
   MqlTradeResult  result = {} ;
   double bid = SymbolInfoDouble(Symbol(),SYMBOL_BID)
   request.action = TRADE_ACTION_DEAL ;
   request.magic = Magic ;
   request.symbol = Symbol() ;
   request.volume = 0.01 ;
   request.price = bid ;
   request.deviation = 5 ;
   request.sl = bid + 100 * _Points ;
   request.tp = bid - 200 * _Points ;
   request.type = ORDER_TYPE_SELL ;
   request.type_filling = SymbolInfoInteger(_Symbol,SYMBOL_FILLING_MODE);

   order_success = OrderSend(request, result) ;


 
Albert Mathenge #:
При запуске советника в MT5 Strategy Tester я постоянно получаю ошибку "failed market sell 0.01 EURUSD [Unsupported filling mode]". Код результата (retcode) возвращается 10030.
Вот структура моего запроса. Пожалуйста, помогите.

Попробуйте поменять строку

request.type_filling = SymbolInfoInteger(_Symbol,SYMBOL_FILLING_MODE);

на строку

request.type_filling = ORDER_FILLING_FOK;

И странно, что компилятор выдает только одну ошибку. Хотя, если _Points и order_success были проинициализированы на глобальном уровне, то тогда, пардон!

С уважением, Владимир.

 
MrBrooklin #:

Попробуйте изменить строку

на строку

И странно, что компилятор выдает только одну ошибку. Хотя, если _Points и order_success были инициализированы на глобальном уровне, то, пардон!

С уважением, Владимир.

Да, я просто заменил имена переменных для этого форума, чтобы вы не осуждали мои странные имена переменных. lol.
Спасибо за предложение, но у меня раньше было ORDER_FILLING_FOK и я получал ту же ошибку. Я прочитал, что не все символы поддерживают все режимы заполнения, поэтому я изменил его на тот, что указан в исходном сообщении, чтобы убедиться, что в запросе указаны только разрешенные режимы заполнения.
 
Albert Mathenge #:
Да, я просто заменил имена переменных для этого форума, чтобы вы не осуждали мои странные имена переменных. lol.
Спасибо за предложение, но у меня раньше было ORDER_FILLING_FOK и я получал ту же ошибку. Я прочитал, что не все символы поддерживают все режимы заполнения, поэтому я изменил его на тот, что указан в исходном сообщении, чтобы убедиться, что в запросе указаны только разрешенные режимы заполнения.

SymbolInfoInteger(_Symbol,SYMBOL_FILLING_MODE) возвращает все разрешённые режимы заполнения, а указать в запросе надо один конкретный из разрешённых.

 
Albert Mathenge #:
Да, я просто заменил имена переменных для этого форума, чтобы вы не осуждали мои странные имена переменных. lol.
Спасибо за предложение, но у меня раньше было ORDER_FILLING_FOK и я получал ту же ошибку. Я прочитал, что не все символы поддерживают все режимы заполнения, поэтому я изменил его на тот, что указан в исходном сообщении, чтобы убедиться, что в запросе указаны только разрешенные режимы заполнения.

Давно использую вот этот код. 

ENUM_ORDER_TYPE_FILLING GetFilling(const uint Type = ORDER_FILLING_RETURN)
  {
   const ENUM_SYMBOL_TRADE_EXECUTION ExeMode = (ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE);
   const int FillingMode = (int)::SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE);

   return((FillingMode == 0 || (Type >= ORDER_FILLING_RETURN) || ((FillingMode & (Type + 1)) != Type + 1)) ?
          (((ExeMode == SYMBOL_TRADE_EXECUTION_EXCHANGE) || (ExeMode == SYMBOL_TRADE_EXECUTION_INSTANT)) ?
           ORDER_FILLING_RETURN : ((FillingMode == SYMBOL_FILLING_IOC) ? ORDER_FILLING_IOC : ORDER_FILLING_FOK)) :
          (ENUM_ORDER_TYPE_FILLING)Type);
  }
 
JRandomTrader #:

SymbolInfoInteger(_Symbol,SYMBOL_FILLING_MODE) возвращает все допустимые режимы заполнения, но в запросе необходимо указать конкретный из допустимых.

Спасибо за это.
 
Aleksandr Slavskii #:

Я уже давно использую этот код.

Спасибо! Я попробую это и вернусь.
 
Aleksandr Slavskii #:

Я уже давно использую этот код.

Он работает! Спасибо, сэр!
Причина обращения: