Новая версия платформы MetaTrader 5 build 2470 - страница 4

 
Alain Verleyen:

1. 

2. 

3.

Похоже после этого у тебя остался только один выход - обмани систему - прикинься буквой!

#define UUID   ##863AB5E6_E687_47C7_8BE9_6C2FBFC1D266
 
fxsaber:

Потдверждаю выделенное. Жесткое зависание при срабатывании пачки.


Понаблюдал за этой ситуацией. Со стороны выглядит это так.

Цена доходит до пачки ордеров. Они все горят желтым. Потом отходит обратно - горят зеленым. Ничего не исполнено.

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


Т.е. Терминал долгое время не получает никаких данных о срабатывании пачки, хоть на сервере она уже давно сработала. Затем происходит зависание. И при отвисании ситуации становится такой же, как на сервере.

Если смотреть пустой Терминал, залогиненный на этот же счет, то там все четко отрабатывает. Боевой же Терминал (где трудятся роботы) - такие жесткие зависания.


Что делать?


ЗЫ Предолагаю, что это как-то связано в HistorySelect. Скорее всего, какой-то конфликт происходит. Т.к. робот через HistorySelect активно делает проверки. И когда идет дозапись в историю в результате совершения сделок, а параллельно работает HistorySelect, то происходит какой-то конфликт.

При зависании terminal64.exe полностью загружает ядро CPU.

 
Alain Verleyen:

Build 2470. Это больше не компилируется, работало нормально до 2450.

invalid suffix 'AB5E6_E687_47C7_8BE9_6C2FBFC1D266'    2470.mq5    10    26

Смотря как используется. Так не устроит?

#define  UUID             "863AB5E6_E687_47C7_8BE9_6C2FBFC1D266"
 

Режим показа позиций в истории торгов.

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

 
fxsaber:

Потдверждаю выделенное. Жесткое зависание при срабатывании пачки.


Понаблюдал за этой ситуацией. Со стороны выглядит это так.

Цена доходит до пачки ордеров. Они все горят желтым. Потом отходит обратно - горят зеленым. Ничего не исполнено.

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


Т.е. Терминал долгое время не получает никаких данных о срабатывании пачки, хоть на сервере она уже давно сработала. Затем происходит зависание. И при отвисании ситуации становится такой же, как на сервере.

Если смотреть пустой Терминал, залогиненный на этот же счет, то там все четко отрабатывает. Боевой же Терминал (где трудятся роботы) - такие жесткие зависания.


Что делать?


ЗЫ Предолагаю, что это как-то связано в HistorySelect. Скорее всего, какой-то конфликт происходит. Т.к. робот через HistorySelect активно делает проверки. И когда идет дозапись в историю в результате совершения сделок, а параллельно работает HistorySelect, то происходит какой-то конфликт.

Следующий советник у меня в 100% случаев воспроизводит зависание на MQ-Demo.

// Воспроизведение зависания Терминала во время торговли.
// https://www.mql5.com/ru/forum/342097/page3#comment_16653213

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

input int inAmount = 5;

int OnInit()
{
  return(MessageBox("Run?", NULL, MB_YESNO) == IDNO);
}

ulong IsHistoryDeals( const long TimeMsc )
{    
  ulong Res = 0;

  Alert("Hello!"); // Без этого Алерта не виснет.
  
  if (::HistorySelect(TimeMsc / 1000, INT_MAX))
  {
    const int Total = ::HistoryDealsTotal();
    
    for (int i = Total - 1; !Res && (i >= 0); i--)
    {
      const ulong Ticket = ::HistoryDealGetTicket(i);
      
      if ((::HistoryDealGetInteger(Ticket, DEAL_TIME_MSC) >= TimeMsc) &&
          (::HistoryDealGetString(Ticket, DEAL_SYMBOL) == _Symbol))        
        Res = Ticket;
    }
  }
  
  return(Res);
}

void OnTick()
{
  while (!IsStopped() && (OrdersTotal() < inAmount))
    if (!IsHistoryDeals(TimeCurrent() * 1000))
      OrderSend(_Symbol, OP_BUYLIMIT, 0.1, Ask, 0, 0, 0, NULL, 0, 0, INT_MIN);

  for (int i = OrdersTotal() - 1; !IsStopped() && i >= 0; i--)
    if (!IsHistoryDeals(TimeCurrent() * 1000) && OrderSelect(i, SELECT_BY_POS))
      OrderModify(OrderTicket(), OrderClosePrice(), 0, OrderClosePrice(), 0, INT_MIN);
}


Получилось воспроизвести?


ЗЫ Лаконичный OnTick за счет MT4-style.

 

Добрый день

Такое впечатление, что некорректно работает: Показать на графике ---  --- Удалить все сделки

Пример: Удалили все сделки - После нажатия кнопки BUY (SELL), открывается сделка и на графике появляется одна метка.

При закрытии аналогично. (было до обновления)

После обновления терминала при нажатии кнопки BUY (SELL) высыпает на графике всю историю торговли!

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

 
fxsaber:

Следующий советник у меня в 100% случаев воспроизводит зависание на MQ-Demo.

Получилось воспроизвести?

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


Вишенка.

// Вызывает зависание всех Терминалов, что подключены к данному торговому счету.
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

input int inAmount = 5;

int OnInit()
{
  return(MessageBox("Run?", NULL, MB_YESNO) == IDNO);
}

void OnTick()
{
  while (!IsStopped() && (OrdersTotal() < inAmount))
    OrderSendAsync(_Symbol, OP_BUYLIMIT, 0.1, Ask, 0, 0, 0, NULL, 0, 0, INT_MIN);

  for (int i = OrdersTotal() - 1; !IsStopped() && i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS))
      OrderModifyAsync(OrderTicket(), OrderClosePrice(), 0, OrderClosePrice(), 0, INT_MIN);
}


Можно зайти на один и тот же счет одновременно с нескольких Терминалов на одной машине или на разных. Запустить этот советник на одном Терминале. И вызвать тем самым зависание ВСЕХ Терминалов!

Воспроизводится?


ЗЫ Совершение сделки по какой-то причине вызывает рисование всех сделок из истории.

 
Edgar Akhmadeev :

Смотря как используется. Так не устроит?

Я не хочу использовать строку.

Спасибо.

A100 :

Похоже после этого у тебя остался только один выход - обмани систему - прикинься буквой!

Хороший обходной путь, спасибо.
 
fxsaber:

ЗЫ Совершение сделки по какой-то причине вызывает рисование всех сделок из истории.

А причина зависания, случайно, не в этом?

Рисование много ресурсов жрет, если сделок тысячи.

Можно попробовать на инструменте, где нет истории.

 
Andrey Khatimlianskii:

А причина зависания, случайно, не в этом?

Рисование много ресурсов жрет, если сделок тысячи.

Можно попробовать на инструменте, где нет истории.

Поэтому и приписал. Мало ли. Я пока остановил торговые эксперименты через MT5. Уж больно крутой баг.

ЗЫ Возможно, только на моей конфигурации воспроизводится.
Причина обращения: