mql4 MT4 OnTrade

 

необходим аналог функции OnTrade для mql4

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

есть мысли как это сделать наиболее быстро желательно без переборов всех открытых сделок и всей истории 

 
Pavel Kolchin:

необходим аналог функции OnTrade для mql4

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

есть мысли как это сделать наиболее быстро желательно без переборов всех открытых сделок и всей истории

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Организация цикла перебора ордеров

fxsaber, 2017.10.18 12:29

Версия без обращения к истории.
struct HISTORY_UNIT
{
  long Ticket;
  int Type;
  double Lots; 
    
  HISTORY_UNIT( void ) : Ticket(::OrderTicket()), Type(::OrderType()), Lots(::OrderLots())
  {
  }

  bool operator !=( const HISTORY_UNIT &Unit ) const
  {
    return((this.Ticket != Unit.Ticket) || (this.Type != Unit.Type) || (this.Lots != Unit.Lots));
  }
      
  bool IsChange( void )
  {
    const HISTORY_UNIT Tmp;
    const bool Res = (this != Tmp);
    
    if (Res)
      this = Tmp;
      
    return(Res);
  }
};

// Возвращает true только в случае, если с последнего вызова произошли торговые изменения
bool IsChange( void )
{
  static HISTORY_UNIT History[];  

  const int Total = OrdersTotal();  
  bool Res = (ArraySize(History) != Total);

  for (int i = 0, j = Res ? ArrayResize(History, 0, Total) : 0; i < Total; i++)      
    if (OrderSelect(i, SELECT_BY_POS))
    {
      if (Res || (Res = History[j].IsChange()))
        ArrayResize(History, j + 1, Total);
      
      j++;
    }
  
  return(Res);
}

Эта версия особенно актуальна для MT5 на VPS, т.к. MT5 работает с Историей очень медленно и затратно по вычислительным ресурсам.

 
Pavel Kolchin:

необходим аналог функции OnTrade для mql4

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

есть мысли как это сделать наиболее быстро желательно без переборов всех открытых сделок и всей истории 


По-другому никак не сделать. Чем не устраивает полный перебор? Возможно, Вы на каждом тике его делаете. Тогда - да, неэффективно получается.

 
Ihor Herasko:

По-другому никак не сделать. Чем не устраивает полный перебор? Возможно, Вы на каждом тике его делаете. Тогда - да, неэффективно получается.


Почему неэффективно?
Список ордеров-позиций уже готов в терминале, остается по нему пробежаться и сравнить на изменения тп/сл/закрытие/открытие.

Неэффективно это когда, в одном тике/прерывании, повторяют один и тот же перебор много раз.

 
Taras Slobodyanik:

Почему неэффективно?
Список ордеров-позиций уже готов в терминале, остается по нему пробежаться и сравнить на изменения тп/сл/закрытие/открытие.

Неэффективно это когда, в одном тике/прерывании, повторяют один и тот же перебор много раз.


А я о чем? Полный перебор на каждом тике не нужен. Выше fxsaber даже код привел готовый. Суть та же.

 
Ihor Herasko:

А я о чем? Полный перебор на каждом тике не нужен. Выше fxsaber даже код привел готовый. Суть та же.


нее.. перебор как раз и нужен, иначе как определить перетаскивание тп/сл/отложки?
и перебирать по таймеру, каждые 100-200 мс

у fxsaber-а  не вижу проверки этих изменеий

 
Taras Slobodyanik:

нее.. перебор как раз и нужен, иначе как определить перетаскивание тп/сл/цены отложки?
и перебирать по таймеру, каждые 100-200 мс

у fxsaber-а  не вижу проверки этих изменеий

Имел в виду только открытие, закрытие, установку и удаление, когда изменяется количество элементов списка в истории счета. В этом списке не отражаются изменения SL и TP.

А вот список рабочих ордеров, конечно же, нужно просматривать весь. Тут согласен. 

Со списком рабочих ордеров нет никаких проблем, кстати. Ведь он априори не может быть слишком большим. На своем веку видел максимум 1 000 ордеров, которые разрешает держать брокер. Ну а обычное количество - в районе 200 - 500. Цикл перебора даже не будет заметен.

 

Так историю вообще нет смысла перебирать, разве что при старте.

Ведь есть список тикетов в мт + свой список = сравнил, что не совпало значит соответствующий флаг: тп/сл/открытие/изменение...

 
Taras Slobodyanik:

Так историю вообще нет смысла перебирать, разве что при старте.

Ведь есть список тикетов в мт + свой список = сравнил, что не совпало значит соответствующий флаг: тп/сл/открытие/изменение...

Если на эти списки эксперт влияет только сам, то в вопросе вообще нет смысла. Я так понял, что нужно отслеживать изменения, совершаемые другим экспертом или же самим трейдером.
 

я рассчитывал что есть какая нибудь функция, например, возвращающая последнее действие и время когда это было

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

просто обратиться и узнать делал что нибудь пользователь или нет, если нет - то ладно, если да - то запускаем переборы и ищем что он сделал

 
Pavel Kolchin:

я рассчитывал что есть какая нибудь функция, например, возвращающая последнее действие и время когда это было

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

просто обратиться и узнать делал что нибудь пользователь или нет, если нет - то ладно, если да - то запускаем переборы и ищем что он сделал

А предложенную выше функцию пробовали?