Новая версия платформы MetaTrader 5 build 2815: Доступ к стакану цен из Python, улучшения в отладчике и профилировщике - страница 16

 

Насколько часто происходит запись в файл лога?

DJ      0       10:10:59.732    Scripts script xxx removed
NO      0       19:40:02.732    Terminal        RannForex MetaTrader 5 x64 build 2831 started for RannForex Limited

Внезапный ребут произошёл где-то в ~19.35. В итоге 9 часов из лога выпало. Он настолько редко сохраняет? Или как-то не прописывает в файл, что при аварийном завершении оно теряется?

 

МТ5, 2831.

Спустя некоторое время работы (возможно, когда происходит переход за полночь, пока точно не установил) CopyTicksRange странно обращается со временем.

Есть вот такой скрипт

void OnStart()
{
  MqlTick Ticks[1000]={};
  ulong FromMsc=1616009054658;
  int TicksCount=CopyTicksRange("USDCHF",Ticks,COPY_TICKS_INFO,FromMsc);
  Print("Got "+(string)TicksCount+" ticks");
  Print("Requested from "+TimeToString(FromMsc/1000,TIME_DATE | TIME_SECONDS));
  Print("First tick from "+TimeToString(Ticks[0].time_msc/1000,TIME_DATE | TIME_SECONDS));
}

Вывод

Got 1000 ticks
Requested from 2021.03.17 19:24:14
First tick from 2021.03.18 00:00:00

Если терминал перезагрузить, уже выводит нормально

Got 1000 ticks
Requested from 2021.03.17 19:24:14
First tick from 2021.03.17 19:24:15

Если нужен, есть дамп терминала, но весит даже в архиве больше 200Мб.

 
traveller00:

МТ5, 2831.

Спустя некоторое время работы (возможно, когда происходит переход за полночь, пока точно не установил) CopyTicksRange странно обращается со временем.

Спасибо, поставил проверку.

 

Бывает что пропускает тики в запросе к истории.  Ошибка, приходит редко, логов нет, и существует уже давно.

CopyTicksRange(m_symbol, m_ticks, m_flags, m_from, m_to);

 m_from, это последний полученный тик записанный в глобальную переменную , меняется только m_to, от старой истории к новой. Как в таком случае бывают пропуски тиков в истории я не пойму.

Наверное и за этого 
  • ERR_HISTORY_TIMEOUT – ticks synchronization waiting time is up, the function has sent all it had.
 

Очень редко замечаю не пустое поле CPU в TaskManager для советников.

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


И что показывает сам параметр CPU? Такой код имеет почти нулевую загрузку CPU, если верить TaskManager.

#include <fxsaber\Usage\Usage.mqh> // https://www.mql5.com/ru/code/33875

void OnInit()
{  
  USAGE::MinInterval = 50 * 1000; // 50 ms.
  
  EventSetMillisecondTimer((int)USAGE::MinInterval / 1000);  
}

void OnTimer()
{
  _USAGE // Расчет нагрузки.

  USAGE::GraphCreate(1200, 900, 200); // Вывели график нагрузки.
}

void OnDeinit( const int )
{
  USAGE::GraphDelete(); // Удалили график нагрузки.
}


А на самом деле более 10% времени занимает выполнение OnTimer - анимацию прикрепил, т.к. картинки не подключаются к сообщению по какой-то причине.

Файлы:
clip0189.gif  252 kb
 

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

Аналогично с объектами. И всей MQL-программы суммарно: все объекты, массивы, переменные и т.д.

 
fxsaber:

Спасибо, поставил проверку.

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

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


ЗЫ Флаги исторических тиков нужно так сравнивать.

 (Tick1.flags & 0x7F) == (Tick2.flags & 0x7F)

Т.е. перед сравнением выкидывать все, что дальше седьмого бита.

 
Aliaksandr Hryshyn:
Там довольно серьёзная ошибка, у меня привело это к вылету терминала
MM      0       15:57:02.657    Terminal        Alpari MT5 x64 build 2832 started for Alpari International
EH      0       15:57:02.658    Terminal        Windows 10 build 19042, AMD Ryzen 9 3900X 12-Core, 51 / 63 Gb memory, 90 / 125 Gb disk, IE 11, UAC, Admin, GMT+3
RG      0       15:57:02.658    Terminal        D:\Alpari MT5
IS      0       15:57:04.263    Indicators      custom indicator Price_analyze (EURUSD,M1) loaded succesfully
QH      0       15:57:04.339    Indicators      custom indicator ZigZag (EURUSD,M1) loaded succesfully
LG      0       15:57:04.573    Network '110041517': authorized on Alpari-Demo03 through MT5-Demo03.Europe.7 (ping: 36.74 ms, build 2715)
IQ      0       15:57:04.573    Network '110041517': previous successful authorization performed from 37.212.89.92 on 2021.03.17 18:05:02
ER      0       15:57:04.622    Network '110041517': terminal synchronized with Alpari International: 0 positions, 0 orders, 62 symbols, 0 spreads
DE      0       15:57:04.622    Network '110041517': trading has been enabled - hedging mode
IN      0       15:57:04.745    MQL5.community  activated for 'greshnik1', balance: 41.42
II      0       15:57:04.904    MQL5.chats      activated for 'Greshnik1'
IL      0       15:57:06.466    Network '110041517': scanning network for access points
FG      0       15:57:13.873    LiveUpdate      check for beta version
EL      0       15:57:13.995    LiveUpdate      new version build 2835 (IDE: 2835, Tester: 2835) is available
HJ      0       15:57:15.456    LiveUpdate      'mt5clw64' downloaded (28717 kb)
RO      0       15:57:17.516    LiveUpdate      'mt5clwide64' downloaded (23098 kb)
JE      0       15:57:18.265    LiveUpdate      'mt5clwtst64' downloaded (10200 kb)
JL      0       15:57:18.266    LiveUpdate      downloaded successfully
QJ      0       15:57:20.276    LiveUpdate      start "C:\Users\Sasha\AppData\Roaming\MetaQuotes\Terminal\C9196D1BF6FBB10EC313E847D2FF8377\liveupdate\terminal64.exe" /update /path:"D:\Alpari MT5" /portable
PN      0       15:57:20.852    Terminal        exit with code 0
JG      0       15:57:20.861    Network '110041517': disconnected from Alpari-Demo03
DR      0       15:57:20.892    Indicators      custom indicator Price_analyze (EURUSD,M1) removed
PK      0       15:57:20.892    Indicators      custom indicator ZigZag (EURUSD,M1) removed
QP      0       15:57:20.910    Terminal        stopped with 0
KD      0       15:57:21.026    Terminal        shutdown with 0
PS      0       15:57:22.238    LiveUpdate      updating...
CR      0       15:57:22.596    LiveUpdate      'D:\Alpari MT5\terminal64.exe' updated
JJ      0       15:57:23.097    LiveUpdate      'D:\Alpari MT5\metaeditor64.exe' updated
KE      0       15:57:24.352    LiveUpdate      'D:\Alpari MT5\metatester64.exe' updated
LM      0       15:57:24.373    LiveUpdate      updated successfully
DO      0       15:57:24.563    Terminal        shutdown with 0
CI      0       15:57:24.720    Terminal        update D:\Alpari MT5\MQL5 folder started
ON      0       15:57:25.023    Terminal        update D:\Alpari MT5\MQL5 folder finished
KK      0       15:57:25.563    Terminal        Alpari MT5 x64 build 2835 started for Alpari International
KJ      0       15:57:25.563    Terminal        Windows 10 build 19042, AMD Ryzen 9 3900X 12-Core, 51 / 63 Gb memory, 90 / 125 Gb disk, IE 11, UAC, Admin, GMT+3
HI      0       15:57:25.563    Terminal        D:\Alpari MT5
OR      0       15:57:26.256    Indicators      custom indicator Price_analyze (EURUSD,M1) loaded succesfully
EF      0       15:57:26.283    Indicators      custom indicator ZigZag (EURUSD,M1) loaded succesfully
RQ      0       15:57:26.715    Network '110041517': authorized on Alpari-Demo03 through MT5-Demo03.Europe.7 (ping: 36.74 ms, build 2715)
DS      0       15:57:26.715    Network '110041517': previous successful authorization performed from 37.212.89.92 on 2021.03.18 14:57:07
MP      0       15:57:26.772    Network '110041517': terminal synchronized with Alpari International: 0 positions, 0 orders, 62 symbols, 0 spreads
DS      0       15:57:26.772    Network '110041517': trading has been enabled - hedging mode
IL      0       15:57:26.893    MQL5.community  activated for 'greshnik1', balance: 41.42
PK      0       15:57:27.047    MQL5.chats      activated for 'Greshnik1'
PO      2       16:19:20.591    Terminal        crashlog generated
OS      0       16:19:20.614    Network '110041517': disconnected from Alpari-Demo03
CF      0       16:19:20.647    Indicators      custom indicator Price_analyze (EURUSD,M1) removed
KG      0       16:19:20.647    Indicators      custom indicator ZigZag (EURUSD,M1) removed
LM      2       16:19:21.243    Terminal        crashlog finalized

Вылет терминала. В неудачный момент попытался закрыть окно результатов оптимизации.

 
fxsaber:

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

Первым может быть другой тик

Все довольно печально.

  1. Представьте, что последний исторический тик, полученный от CopyTicksRange, имеет время 370. Совпадает с SymbolInfoTick.
  2. Вы делаете CopyTicksRange от 370 и получаете только один тик со временем 606.
  3. Делаете CopyTicksRange от 100 и получаете три тика: 220, 283 и 606.
  4. Запускаете другой Терминал и делаете запрос, как в п.3. Получаете четыре тика: 220, 283, 370 и 606!

БД свежих тиков Терминала пропускает тики - 100%. Баг.

 
fxsaber:

Все довольно печально.

  1. Представьте, что последний исторический тик, полученный от CopyTicksRange, имеет время 370.
  2. Вы делаете CopyTicksRange от 370 и получаете только один тик со временем 606.
  3. Делаете CopyTicksRange от 100 и получаете три тика: 220, 283 и 606.
  4. Анализ показывает, что тик из п.1 (имел время 370), в списке п.3. имеет время 220!

Можно подумать, что тик меняет свое время. Но, скорее всего, иногда CopyTicksRange выдает неправильное время крайнего правого тика. В данном примере это 370, а должен был выдать 220.

Самое хреновое, что SymbolInfoTick со временем 370 был! Это уже говорит в пользу того, что тик прошел мимо БД.

А вы не исключаете, что между запросом и ответом, между временем «to» и текущим временем с точностью до миллисекунд, может пройти ещё несколько тиков. Если вам нужны последние тики, то лучше использовать CopyTicks() имхо.

Я писал советник собирающий тики до определённого условия, писал их в файл и сверял с тем, что выгружается


и никаких расхождений не наблюдалось. Ни по времени, ни по флагам, ни по объёму или цене.

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