[СЕРВИСДЕСК] Проведение асинхронных операции при помощи стандартной библиотеки.

 

Решил реализовать отправку асинхронных операций при помощи trade.mqh стандартной библиотеки. В ней за это действие отвечает флаг m_async_mode. С удивлением обнаружил, что он влияет далеко не на все методы. Т.е. даже если этот флаг установлен, OrderSendAsync() выполняться не будет (хотя, по логике, должна).

Список всех торговых операций - те из них, что используют OrderSendAsync()

//--- methods for working with positions

PositionOpen() - НЕТ

PositionModify() - НЕТ

PositionModify() - НЕТ

PositionClose() - Флаг используется, но не совсем понятно зачем (соображения безопасности?)

PositionClose() - НЕТ

PositionCloseBy() - НЕТ

PositionClosePartial() - НЕТ

PositionClosePartial() - НЕТ

//--- methods for working with pending orders

OrderOpen() - НЕТ

OrderModify() - НЕТ

OrderDelete() - НЕТ

   //--- additions methods

Buy() - НЕТ

Sell() - НЕТ

BuyLimit() - НЕТ

BuyStop() - НЕТ

SellLimit() - НЕТ

SellStop() - НЕТ

Складывается впечатление, что разработчики в этом случае класс явно не дописали. Или я не прав?

 
Alexey Kozitsyn:

Складывается впечатление, что разработчики в этом случае класс явно не дописали. Или я не прав?

Не правы.

//+------------------------------------------------------------------+
//| Send order                                                       |
//+------------------------------------------------------------------+
bool CTrade::OrderSend(const MqlTradeRequest &request,MqlTradeResult &result)
  {
   bool res;
   string action="";
   string fmt   ="";
//--- action
   if(m_async_mode)
      res=::OrderSendAsync(request,result);
   else
      res=::OrderSend(request,result);
//--- check
   if(res)
     {
      if(m_log_level>LOG_LEVEL_ERRORS)
         PrintFormat(__FUNCTION__+": %s [%s]",FormatRequest(action,request),FormatRequestResult(fmt,request,result));
     }
   else
     {
      if(m_log_level>LOG_LEVEL_NO)
         PrintFormat(__FUNCTION__+": %s [%s]",FormatRequest(action,request),FormatRequestResult(fmt,request,result));
     }
//--- return the result
   return(res);
  }

Просто вместо того, чтобы писать this.OrderSend, они пишут просто OrderSend, что вносит путаницу. Во многом по этой причине некоторые принципиально пишут this.

Как видите, только в этой функции идет вызов ::OrderSend - штатной функции.

 
fxsaber:

Не правы.


Просто вместо того, чтобы писать this.OrderSend, они пишут просто OrderSend, что вносит путаницу. Во многом по этой причине некоторые принципиально пишут this.

Как видите, только в этой функции идет вызов ::OrderSend - штатной функции.

А... понял. Да уж... не могли придумать псевдоним, не дублирующий имя из глобальной области видимости.

Спасибо, вопрос снят.