Можно ли узнать в истории уровни SL и TP

 

Добрый день,

столкнулся с такой проблемой, хочу узнать как выставлял и двигал уровни SL и TP.

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

Есть ли вообще такая инфа (по уровням SL и TP) в истории и как ее вытащить если есть? Заранее спасибо.

 
YuryK1980:

Добрый день,

столкнулся с такой проблемой, хочу узнать как выставлял и двигал уровни SL и TP.

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

Есть ли вообще такая инфа (по уровням SL и TP) в истории и как ее вытащить если есть? Заранее спасибо.

Какой рынок?

 
prostotrader:

Какой рынок?

FORTS ММВБ
 
YuryK1980:

Добрый день,

столкнулся с такой проблемой, хочу узнать как выставлял и двигал уровни SL и TP.

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

Есть ли вообще такая инфа (по уровням SL и TP) в истории и как ее вытащить если есть? Заранее спасибо.

Нет, только один уровень

 
prostotrader:

Нет, только один уровень

не понял, что значит только один уровень? может я вопрос задал не совсем корректно.

пример:

все действия вручную с компа. МТ5

1. открыл позицию по рынку -

2. выставил SL 

3. выставил TP 

4. передвинул SL

5. закрыл сделку.

Можно ли узнать уровни (цены) SL и ТП из п 2-4.

под узнать - я имею ввиду выборку с помощью HistorySelect() и дальнейший перебор ордеров

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
YuryK1980:

не понял, что значит только один уровень? может я вопрос задал не совсем корректно.

пример:

все действия вручную с компа. МТ5

1. открыл позицию по рынку -

2. выставил SL 

3. выставил TP 

4. передвинул SL

5. закрыл сделку.

Можно ли узнать уровни (цены) SL и ТП из п 2-4.

Я же пояснил. Нельзя посмотреть 2 уровня, только один

 
prostotrader:

Я же пояснил. Нельзя посмотреть 2 уровня, только один (в истории)

извините, но что-то у меня лыжи не едут. Что это за уровень? Можно на пальцах.Упрощаем пример до минимума

Купил за 100, установил СЛ - 90, закрыл сделку. Могу я через неделю средствами mql5 найти что был установлен СЛ = 90? Спасибо.

 
YuryK1980:

извините, но что-то у меня лыжи не едут. Что это за уровень? Можно на пальцах.Упрощаем пример до минимума

Купил за 100, установил СЛ - 90, закрыл сделку. Могу я через неделю средствами mql5 найти что был установлен СЛ = 90? Спасибо.

Вы же пишите, что передвинули SL

 
Ну это программа максимум. В принципе вопрос сводился к тому можно ли в принципе увидет уровни СЛ в истории, пока не понимаю в чем разница между установленным первый раз и передвинутым (в моем понимании один удалил, второй поставил), если инфа в истории сохраняется, то наверное должны быть все действия, если нет, то ничего и не будет. Просто в своийствах HistoryOrderGet... я ничего не нашел. Либо плохо искал, либо не там. Подскажите направление куда смотреть, может и вопрос сформулирую более внятно.
 
YuryK1980:
Ну это программа максимум. В принципе вопрос сводился к тому можно ли в принципе увидет уровни СЛ в истории, пока не понимаю в чем разница между установленным первый раз и передвинутым (в моем понимании один удалил, второй поставил), если инфа в истории сохраняется, то наверное должны быть все действия, если нет, то ничего и не будет. Просто в своийствах HistoryOrderGet... я ничего не нашел. Либо плохо искал, либо не там. Подскажите направление куда смотреть, может и вопрос сформулирую более внятно.

Я сейчас проверил в демо сервере.

Оказалось, что в истории вообще нельзя посмотреть SL.

Сделал следующее

открыл сделку, установил SL, передвинул SL, закрыл сделку.

Потом посмотрел в истоии SL = 0.0

//+------------------------------------------------------------------+
//|                                                      SL_test.mq5 |
//|                                      Copyright 2020 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020 prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.00"

#define ERR_ZERO_TICKET -1111

input ulong Ticket = 170219282;//Тикет ордера

enum ENUM_ORD_REAL_STATE
{
  ORDER_NOT_SPECIFIED         = 0, //Состояние ордера не определено
  ORDER_NONE_CANCELED         = 1, //Ордера нет, отменён пользователем
  ORDER_NONE_PARTIAL_CANCELED = 2, //Ордера нет, исполнился частично (не был залит вторым объёмом)
  ORDER_NONE_PARTIAL          = 3, //Ордера нет, исполнился частично
  ORDER_NONE_EXPIRED          = 4, //Ордера нет, удалён по сроку
  ORDER_NONE_FILLED           = 5, //Ордера нет, исполнился полностью
  ORDER_NONE_REJECTED         = 6, //Ордера нет, отклонён брокером(биржей)
  ORDER_BUSY                  = 7, //Ордер находится в переходном состоянии
  ORDER_EXIST                 = 8, //Ордер выставлен на биржу, возможны действия над ним
  ORDER_EXIST_PARTIAL         = 9  //Ордер выставлен на биржу, частично исполнился, возможны действия над ним
};
//---
enum ENUM_ORD_SELECT
{
  SELECT_ERROR = 0,
  SELECT_FALSE = 1,
  SELECT_TRUE  = 2,
  SELECT_BUSY  = 3
};
struct ORDER_DATA
{
  int                     error_code;
  ulong                   ticket;
  datetime                time_setup;
  ENUM_ORDER_TYPE         type;
  ENUM_ORDER_STATE        state;
  ENUM_ORD_REAL_STATE     real_state;
  datetime                expiration;
  datetime                time_done;
  long                    t_set_msc;
  long                    t_done_msc;
  ENUM_ORDER_TYPE_FILLING type_filling;
  ENUM_ORDER_TYPE_TIME    type_time;
  long                    magic;
  ENUM_ORDER_REASON       reason;
  long                    pos_id;
  long                    pos_by_id;
  double                  vol_init;
  double                  vol_cur;
  double                  price_open;
  double                  sl;
  double                  tp;
  double                  price_cur;
  double                  price_stlim;
  string                  symbol;
  string                  comment;
  string                  ext_id; 
 // ENUM_ORD_HYSTORY        is_hystory;       
};
//+------------------------------------------------------------------+
// Expert Order Real Select function                                 |
//+------------------------------------------------------------------+
ENUM_ORD_SELECT OrderRealSelect(const ulong ticket, ORDER_DATA &ord_data, const bool get_data)
{
  double init_vol = 0;
  double cur_vol = 0;
  ZeroMemory(ord_data);
  ord_data.real_state = ORDER_NOT_SPECIFIED;
  ord_data.error_code = ERR_SUCCESS;
  ResetLastError();
  //ord_data.is_hystory = HYST_NOT_SPECIFIED;
  if(ticket > 0)
  {
    if(HistoryOrderSelect(ticket) == true)
    {
      //ord_data.is_hystory = HYST_TRUE;
      if(get_data == true)
      {
//--- long      
        ord_data.ticket = ulong(HistoryOrderGetInteger(ticket, ORDER_TICKET));
        ord_data.time_setup = datetime(HistoryOrderGetInteger(ticket, ORDER_TIME_SETUP));
        ord_data.type = ENUM_ORDER_TYPE( HistoryOrderGetInteger(ticket, ORDER_TYPE));
        ord_data.state = ENUM_ORDER_STATE( HistoryOrderGetInteger(ticket, ORDER_STATE));
        ord_data.expiration = datetime(HistoryOrderGetInteger(ticket, ORDER_TIME_EXPIRATION));
        ord_data.time_done = datetime(HistoryOrderGetInteger(ticket, ORDER_TIME_DONE));
        ord_data.t_set_msc = datetime(HistoryOrderGetInteger(ticket, ORDER_TIME_SETUP_MSC));
        ord_data.t_done_msc = datetime(HistoryOrderGetInteger(ticket, ORDER_TIME_DONE_MSC));
        ord_data.type_filling = ENUM_ORDER_TYPE_FILLING(HistoryOrderGetInteger(ticket, ORDER_TYPE_FILLING));
        ord_data.type_time = ENUM_ORDER_TYPE_TIME(HistoryOrderGetInteger(ticket, ORDER_TYPE_TIME));
        ord_data.magic = HistoryOrderGetInteger(ticket, ORDER_MAGIC);
        ord_data.reason = ENUM_ORDER_REASON(HistoryOrderGetInteger(ticket, ORDER_REASON));
        ord_data.pos_id = HistoryOrderGetInteger(ticket, ORDER_POSITION_ID);
        ord_data.pos_by_id = HistoryOrderGetInteger(ticket, ORDER_POSITION_BY_ID);
//--- double        
        ord_data.vol_init = HistoryOrderGetDouble(ticket, ORDER_VOLUME_INITIAL);
        ord_data.vol_cur = HistoryOrderGetDouble(ticket, ORDER_VOLUME_CURRENT);
        ord_data.price_open = HistoryOrderGetDouble(ticket, ORDER_PRICE_OPEN);
        ord_data.sl = HistoryOrderGetDouble(ticket, ORDER_SL);
        ord_data.tp = HistoryOrderGetDouble(ticket, ORDER_TP);
        ord_data.price_cur = HistoryOrderGetDouble(ticket, ORDER_PRICE_CURRENT);
        ord_data.price_stlim = HistoryOrderGetDouble(ticket, ORDER_PRICE_STOPLIMIT);
//--- string        
        ord_data.symbol = HistoryOrderGetString(ticket, ORDER_SYMBOL);
        ord_data.comment = HistoryOrderGetString(ticket, ORDER_COMMENT);
        ord_data.ext_id = HistoryOrderGetString(ticket, ORDER_EXTERNAL_ID);
      }
      else
      {
        ord_data.state = ENUM_ORDER_STATE(HistoryOrderGetInteger(ticket, ORDER_STATE));
        cur_vol = HistoryOrderGetDouble(ticket, ORDER_VOLUME_CURRENT);
        init_vol = HistoryOrderGetDouble(ticket, ORDER_VOLUME_INITIAL);
      }   
//---
      switch(ord_data.state)
      { 
        case ORDER_STATE_CANCELED:
          if(get_data)
          {
            if(ord_data.vol_init == ord_data.vol_cur)
            {
              ord_data.real_state = ORDER_NONE_CANCELED;
            }
            else
            {
              ord_data.real_state = ORDER_NONE_PARTIAL_CANCELED;
            }
          }
          else
          {
            if(init_vol == cur_vol)
            {
              ord_data.real_state = ORDER_NONE_CANCELED;
            }
            else
            {
              ord_data.real_state = ORDER_NONE_PARTIAL_CANCELED;
            }
          }    
        break;
         
        case ORDER_STATE_PARTIAL:
          ord_data.real_state = ORDER_NONE_PARTIAL;
        break;
                                         
        case ORDER_STATE_EXPIRED:
          ord_data.real_state = ORDER_NONE_EXPIRED;
        break;
                                                                              
        case ORDER_STATE_FILLED:
          ord_data.real_state = ORDER_NONE_FILLED;
        break;
                                         
        case ORDER_STATE_REJECTED:
          ord_data.real_state = ORDER_NONE_REJECTED;
        break;  
      }
    }
    else
    if(OrderSelect(ticket) == true)
    {
      //ord_data.is_hystory = HYST_FALSE;
      if(get_data == true)
      {
//--- long      
        ord_data.ticket = ulong(OrderGetInteger(ORDER_TICKET));
        ord_data.time_setup = datetime(OrderGetInteger(ORDER_TIME_SETUP));
        ord_data.type = ENUM_ORDER_TYPE(OrderGetInteger(ORDER_TYPE));
        ord_data.state = ENUM_ORDER_STATE(OrderGetInteger(ORDER_STATE));
        ord_data.expiration = datetime(OrderGetInteger(ORDER_TIME_EXPIRATION));
        ord_data.time_done = datetime(OrderGetInteger(ORDER_TIME_DONE));
        ord_data.t_set_msc = datetime(OrderGetInteger(ORDER_TIME_SETUP_MSC));
        ord_data.t_done_msc = datetime(OrderGetInteger(ORDER_TIME_DONE_MSC));
        ord_data.type_filling = ENUM_ORDER_TYPE_FILLING(OrderGetInteger(ORDER_TYPE_FILLING));
        ord_data.type_time = ENUM_ORDER_TYPE_TIME(OrderGetInteger(ORDER_TYPE_TIME));
        ord_data.magic = OrderGetInteger(ORDER_MAGIC);
        ord_data.reason = ENUM_ORDER_REASON(OrderGetInteger(ORDER_REASON));
        ord_data.pos_id = OrderGetInteger(ORDER_POSITION_ID);
        ord_data.pos_by_id = OrderGetInteger(ORDER_POSITION_BY_ID);
//--- double        
        ord_data.vol_init = OrderGetDouble(ORDER_VOLUME_INITIAL);
        ord_data.vol_cur = OrderGetDouble(ORDER_VOLUME_CURRENT);
        ord_data.price_open = OrderGetDouble(ORDER_PRICE_OPEN);
        ord_data.sl = OrderGetDouble(ORDER_SL);
        ord_data.tp = OrderGetDouble(ORDER_TP);
        ord_data.price_cur = OrderGetDouble(ORDER_PRICE_CURRENT);
        ord_data.price_stlim = OrderGetDouble(ORDER_PRICE_STOPLIMIT);
//--- string        
        ord_data.symbol = OrderGetString(ORDER_SYMBOL);
        ord_data.comment = OrderGetString(ORDER_COMMENT);
        ord_data.ext_id = OrderGetString(ORDER_EXTERNAL_ID);      
      }
      else ord_data.state = ENUM_ORDER_STATE(OrderGetInteger(ORDER_STATE));
      switch(ord_data.state)
      { 
        case ORDER_STATE_STARTED:
        case ORDER_STATE_REQUEST_ADD:
        case ORDER_STATE_REQUEST_MODIFY:
        case ORDER_STATE_REQUEST_CANCEL:
          ord_data.real_state = ORDER_BUSY;
        break; 
        case ORDER_STATE_PARTIAL:
          ord_data.real_state = ORDER_EXIST_PARTIAL;
        break;
        case ORDER_STATE_PLACED:
          ord_data.real_state = ORDER_EXIST;
        break;
      }
    }
    else ord_data.error_code = GetLastError();
//---    
    if((ord_data.error_code != ERR_SUCCESS) ||
       (ord_data.real_state == ORDER_NOT_SPECIFIED))
    {
      return(SELECT_ERROR);
    }
    else
    {
      switch(ord_data.real_state)
      {
        case ORDER_BUSY:
          return(SELECT_BUSY);
        break;
        case ORDER_EXIST:   
        case ORDER_EXIST_PARTIAL:
          return(SELECT_TRUE);
        break;
        default:   
          return(SELECT_FALSE);
        break;                                             
      }
    }
  } 
  else
  {
    ord_data.error_code = ERR_ZERO_TICKET; 
    return(SELECT_ERROR);
  }
}
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  ORDER_DATA order_data;
  if(OrderRealSelect(Ticket, order_data, true) == SELECT_FALSE)
  {
    Print("SL = ", order_data.sl);
  }
   
  return(INIT_SUCCEEDED);
}

Результат

2020.04.23 19:59:32.207 SL_test (GOLD-6.20,M1)  SL = 0.0
2020.04.23 20:00:59.224 SL_test (GOLD-6.20,M1)  SL = 0.0
 
Спасибо за уделенное время. Буду решать проблему по другому. Вам всяческих успехов.
Причина обращения: