Скачать MetaTrader 5

Как проверять исполнение сделки при ответе PLACED? [Возващаемое значение Sell или Buy]

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Изучаешь MQL5? Начни с документации!
Mikhail Filimonov
5931
Mikhail Filimonov 2013.04.24 14:29 

Добрый день!

 Есть такой код на покупку - продажу фьючерса

 

CTrade                trade;

bool OpenClosePosition( double volume, const string aSymbol, const double aPrice, const bool buy_sell )
  {
    if ( buy_sell )
    {
//--- True Buy 
      if ( trade.Buy( volume, aSymbol, aPrice, 0, 0,  " Buy..." ) )
      {
        if ( trade.ResultRetcode() == TRADE_RETCODE_DONE )
        {
          ulong deal_ticket = trade.ResultDeal();
          
          if ( deal_ticket > 0 )
          {
            return( true );
          }
        }
      }   
    }
    else
    {
//--- False Sell
      if ( trade.Sell( volume, aSymbol, aPrice, 0, 0,  "Sell..." ) )
      {
       if ( trade.ResultRetcode() == TRADE_RETCODE_DONE )
        {
          ulong deal_ticket = trade.ResultDeal();
          
          if ( deal_ticket > 0 )
          {
            return( true );
          }
        }
      }    
    }

    return( false );
  }

Функция вызывается с такими параметрами:

OpenClosePosition( 1, _Symbol, curr_price, false);

curr_price - нормальная цена из стакана цен по инcтрументу.

 

Вопросы:

1. Почему trade.ResultRetcode() возвращает значение TRADE_RETCODE_PLACED ?

2. Почему trade.ResultDeal() = 0 ?

3. На реальном счёте позиция открывается, но функция bool OpenClosePosition( double volume, const string aSymbol, const double aPrice, const bool buy_sell )

всегда возвращает FALSE(понятно почему). Как же проверять исполнение сделки?  

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Виды заявок в стакане цен
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Виды заявок в стакане цен
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Виды заявок в стакане цен - Документация по MQL5
o_o
Модератор
23690
o_o 2013.04.24 14:45  
Mikalas:

1. Почему trade.ResultRetcode() возвращает значение TRADE_RETCODE_PLACED ?

а почему бы и нет? исполнение вероятно идет через шлюз на биржу, поэтому DONE никак не получите. всегда будет PLACED

2. Почему trade.ResultDeal() = 0 ?

все потому же, что PLACED, а не DONE. при PLACED вы получите только тикет ордера

3. Как же проверять исполнение сделки?  

зная тикет ордера - отслеживайте его отработку в OnTradeTransaction. и не делайте попыток отправки новых ордеров на данную позу, пока ордер не перейдет или в состояние REJECT или придут сделки.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий