Информация последней сделки из истории

 

Как извлечь подробную информацию последней сделки из вкладки Истории в окне Инструменты?

Пример как внизу на картинке:

История последней сделки

Для Alert или Print, или Comment использовать

 
Aslanbiy Botashev:

Как извлечь подробную информацию последней сделки из вкладки Истории в окне Инструменты?

Пример как внизу на картинке:

Для Alert или Print, или Comment использовать


Использовать OnTradeTRansaction - ловить транзакцию с типом TRADE_TRANSACTION_DEAL_ADD (добавление сделеки в историю), и далее ловить сделку с любым типом из

ENUM_DEAL_ENTRY

Идентификатор

Описание

DEAL_ENTRY_IN

Вход в рынок

DEAL_ENTRY_OUT

Выход из рынка

DEAL_ENTRY_INOUT

Разворот

DEAL_ENTRY_OUT_BY

Закрытие встречной позицией


вм

//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value 
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      long     deal_entry        =0;
      double   deal_profit       =0.0;
      double   deal_volume       =0.0;
      string   deal_symbol       ="";
      long     deal_magic        =0;
      long     deal_reason       =-1;
      if(HistoryDealSelect(trans.deal))
        {
         deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_profit=HistoryDealGetDouble(trans.deal,DEAL_PROFIT);
         deal_volume=HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
         deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_reason=HistoryDealGetInteger(trans.deal,DEAL_REASON);
        }
      else
         return;
      if(deal_symbol==Symbol() && deal_magic==m_magic)
         if(deal_entry==DEAL_ENTRY_IN || deal_entry==DEAL_ENTRY_OUT || deal_entry==DEAL_ENTRY_INOUT || deal_entry==DEAL_ENTRY_OUT_BY)
           {
... Здесь Ваш код
           }
     }
  }
 
Например, Aslanbiy Botashev:

Как извлечь подробную информацию последней сделки из вкладки Истории в окне Инструменты?

Пример как внизу на картинке:

Для Alert или Print, или Comment использовать

На рисунке сделки упорядочены по возрастанию момента открытия. Они могут быть упорядочены по любому (видимому ?) из столбцов вкладки История (не знаю, есть ли там и более сложное упорядочивание, по более чем одному столбцу). При выборе другого упорядочивающего столбца "последней" будет то одна, то другая, то третья сделка. Думаю, стоит конкретизировать, какую сделку считать последней. Например, последнюю из открытых. Или из закрытых.

Неужели Вам действительно нужно как на картинке, в соответствии с выбранным сейчас для упорядочивания столбцом? Это сложно. Даже только выяснить, какое упорядочивание сейчас назначено.

 
Vladimir:   Даже только выяснить, какое упорядочивание сейчас назначено.

Сделка, как понял, упорядочиваются только на экране. Для программы порядок сохраняется. Попробуйте написать простейший скрипт и проверить

 
LRA:

Сделка, как понял, упорядочиваются только на экране. Для программы порядок сохраняется. Попробуйте написать простейший скрипт и проверить

Так какая сделка должна быть последней? Последняя открытая или последняя закрытая?

В справке по MQL4 говорится, что никакое упорядочивание в списках ордеров не гарантируется. Значит, опираться на какую-либо "естественную" упорядоченность нельзя. Хотя нетрудно догадаться, что номер тикета выполняет функции первичного ключа и может идти не по порядку только в случае краха сервера. В справке по MQl5 упоминаний об упорядоченности я не нашел. Лет 5 назад проверял в обоих языках на десятках тысяч сделок, всегда упорядоченность была, по номеру тикета. Но разработчики не гарантируют. Из-за этого мне пришлось добавить свое упорядочивание, которое пока во всех случаях оказывалось лишь проверкой, переставлять ничего не пришлось ни разу за 5 лет.

Для программы на MQL5 часто нет не только порядка, но и самого списка, ничего не сохраняется: "Функция HistorySelect() создает в mql5-программе список ордеров и список сделок...То же самое относится к списку сделок, доступных mql5-программе – он сбрасывается функцией HistoryDealSelect() и заполняется заново в случае успешного получения сделки по номеру тикета".

Но... речь не о том, что имеется, а о том, что человеку нужно. Он пишет - требуется последняя сделка, как на картинке. И картинка точно описана: "из вкладки Истории в окне Инструменты". В этой вкладке еще возможно назначение не только порядка показа, но и охватываемого периода. Какая же сделка будет последней...

 

Привет, всем! Долго задержался с ответами в форуме, был на сеновале 1 месяц. Теперь вернемся  к вопросу. Вопрос понятен, конечно нужна информация последней закрытой (последнюю из закрытых) . В истории сразу видно закрытие с убытком в столбце "Прибыль".

Причина обращения: