Как определить последнюю цену закрытия ордера (MQL5)?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Boris Egorov
466
Boris Egorov  
Подскажите как определить последнюю цену закрытия ордера (MQL5)? В MQL4 было просто OrderClosePrice() ...
Vladimir Karputov
Модератор
182190
Vladimir Karputov  
gedd:
Подскажите как определить последнюю цену закрытия ордера (MQL5)? В MQL4 было просто OrderClosePrice() ...

Может всё-таки нужно узнать цену последней сделки? Если нужна последняя цена закрытия то один из вариантов: нужно ловить событие в OnTradeTransaction:

//+------------------------------------------------------------------+
//| 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;
      long     deal_type         =0;
      double   deal_profit       =0.0;
      double   deal_volume       =0.0;
      double   deal_price        =0.0;
      string   deal_symbol       ="";
      long     deal_magic        =0;
      if(HistoryDealSelect(trans.deal))
        {
         deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_profit=HistoryDealGetDouble(trans.deal,DEAL_PROFIT);
         deal_volume=HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
         deal_price=HistoryDealGetDouble(trans.deal,DEAL_PRICE);
         deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
        }
      else
         return;
      if(deal_symbol==Symbol() && deal_magic==m_magic)
        {
         if(deal_entry==DEAL_ENTRY_OUT) // deal entry "out"
           {
            if(deal_type==DEAL_TYPE_BUY) // there was a deal of "Buy" -> was close "Sell" positions  
              {
               //deal_price - цена закрытия      
              }
            if(deal_type==DEAL_TYPE_SELL) // there was a deal of "Sell" -> was close "Buy" positions
              {
               //deal_price  - цена закрытия           
              }
           }
        }
     }
  }
Boris Egorov
466
Boris Egorov  

Проблема в том, что мне надо знать последнюю цену последней сделки по уже закрытому ордеру ...

то есть по другому по какой последней цене закрылся ордер 

Dmitry Fedoseev
56782
Dmitry Fedoseev  
gedd:

Проблема в том, что мне надо знать последнюю цену последней сделки по уже закрытому ордеру ...

то есть по другому по какой последней цене закрылся ордер 

А что, может быть еще и не последняя цена у последней сделки? И что, ордер еще закрывается по какой-то не последней цене? 
Vladimir Karputov
Модератор
182190
Vladimir Karputov  
gedd:

Проблема в том, что мне надо знать последнюю цену последней сделки по уже закрытому ордеру ...

то есть по другому по какой последней цене закрылся ордер 

Посмотрите пример работы с историей ордеров: \MQL5\Scripts\Examples\OrderInfo\.

Останется гарантированно пройтись по истории ордеров и найти самое последнее время (в миллесекундах) - это и будет последний ордер в истории. 

Boris Egorov
466
Boris Egorov  
Dmitry Fedoseev:
А что, может быть еще и не последняя цена у последней сделки? И что, ордер еще закрывается по какой-то не последней цене? 

ордер может быть закрыт частично ... 

мне нужна цена при полном закрытии ордера 

fxsaber
16759
fxsaber  
#include <MT4Orders.mqh>

void OnStart()
{
  if (OrderSelect(OrdersHistoryTotal() - 1, SELECT_BY_POS, MODE_HISTORY))
    Alert(OrderClosePrice());
}
Boris Egorov
466
Boris Egorov  
Vladimir Karputov:

Посмотрите пример работы с историей ордеров: \MQL5\Scripts\Examples\OrderInfo\.

Останется гарантированно пройтись по истории ордеров и найти самое последнее время (в миллесекундах) - это и будет последний ордер в истории. 

 пример посмотрел, цены закрытия не увидел, ткните меня плиз носом

и давайте кодом 

//вычислим для всех ордеров в истории все доступные параметры     

for (int h=0; h<HistoryOrdersTotal(); h++)
     {

      if((ticket=HistoryDealGetTicket(h))>0)

        {
         profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);  //-  профит
        }

      //OrderSelect(ticket);    

      //OrderGetInteger(ORDER_TYPE)                     - тип ордера
      //OrderGetString(ORDER_SYMBOL)                    - валютная пара
      //OrderGetInteger(ORDER_TIME_SETUP)               - время открытия
      //OrderGetInteger(ORDER_TIME_DONE)                - время закрытия
      //OrderGetDouble(ORDER_PRICE_OPEN)                - цена открытия
      //OrderGetInteger(ORDER_MAGIC)                    - маг число  

   }  

 


Boris Egorov
466
Boris Egorov  
fxsaber:
#include <MT4Orders.mqh>

void OnStart()
{
  if (OrderSelect(OrdersHistoryTotal() - 1, SELECT_BY_POS, MODE_HISTORY))
    Alert(OrderClosePrice());
}
это МТ4, мне надо МТ5!!!
fxsaber
16759
fxsaber  
gedd:
это МТ4, мне надо МТ5!!!
Это MT5.
Boris Egorov
466
Boris Egorov  
Мой МТ5/MQL5 не знает функцию OrderClosePrice() :-)
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий