Библиотеки: MT4Orders QuickReport - страница 3

 
Forester #:

Какой броузер? Сколько сделок? У меня от 100 000 тоже около 10 сек думает, но показывает.

Chrome. 40К строк. Со второго клика иногда появляется чарт. Сильнее всего грузит CPU формирование Turnover-графика.

 
Варианты улучшения:
  • Можно попробовать выгрузить отчет в бинарный файл и считывать его в броузере, возможно он сможет работать и с большим числом строк. Но тогда придется вручную выбирать бинарный файл из за ограничений безопасности. Т.е. не сможем сразу после теста автоматически открыть отчет.
Здесь делается через файл. Проблем с автоматическим открытием не возникает.

  • Думаю можно не только через MT4Orders делать выгрузку сделок, но и из обычного MQL5 кода.

Будет сложно.

MQL5 Ордера истории - Извлечь цену открытия и закрытия каждой транзакции в истории сделок
MQL5 Ордера истории - Извлечь цену открытия и закрытия каждой транзакции в истории сделок
  • 2023.11.20
  • www.mql5.com
Каждая позиция имеет уникальный идентификатор, который присваивается всем сделкам. Идентификатор позиции - это уникальное число, которое присваивается каждой вновь открытой позиции и не изменяется в течение всей ее жизни. Идентификатор позиции указывается в каждом ордере , которая ее открыла
 
fxsaber #:

Chrome. 40К строк. Со второго клика иногда появляется чарт. Сильнее всего грузит CPU формирование Turnover-графика.

Попробуйте Mozilla. До 100 000 показывает и увеличивает. 700 000 попробовал - показал, но увеличить уже не может, память съедает всю.

fxsaber #:
Здесь делается через файл. Проблем с автоматическим открытием не возникает.

Пару дней потребует. Отложу в долгий ящик, если 5млн окажется мало. Пока неактуально.

fxsaber #:
Будет сложно.

Тоже в ящик. Добавить строчку

#include <MT4Orders.mqh>
проще)
 
Forester #:

если 5млн окажется мало.

Зачем работать с подобными html-стейтментами?

 
Кстати, библиотека на 90% кроссплатформенная вышла - работает на MT4 и MT5. Там немного работы, чтобы и на MT4 запускалось.
 
Данную библиотеку не нужно менять, чтобы получить html-стейтмент замониторенных счетов сервиса Сигналов.
 
fxsaber #:
Кстати, библиотека на 90% кроссплатформенная вышла - работает на MT4 и MT5. Там немного работы, чтобы и на MT4 запускалось.
Если кто-нибудь доработает - обновлю код, чтобы было доступно для всех.

fxsaber #:
Здесь делается через файл. Проблем с автоматическим открытием не возникает.

У вас создается JavaScript текстовый файл, который вызывается из HTML страницы (кстати, можно не в отдельный файл сохранять, а добавить в код страницы, как в моей версии).
Я описал вариант сохранения данных не в текстовый, а в бинарный файл. Его как JavaScript файл нельзя автоматически загрузить, т.к. это не JS код, придется через кнопку выбирать этот файл на диске, чтобы началось его чтение. Возможно тогда можно будет считывать более 5,6 млн строк.

fxsaber #:

Зачем работать с подобными html-стейтментами?

Пока не нужно. Но если появится такая необходимость, то есть план как это сделать.

fxsaber #:

Не догадался. К сожалению, очень медленный этот google.charts и неудобный, если сравнивать с highcharts.

Поменял на highchart. Он оказался лучше: google.charts зависал при 700 000 сделках, а highchart отобразил их без особых тормозов и смог увеличить до отдельных сделок.

Можно выбрать Ordinal - равномерный шаг (как в отчетах тестера MetaQuotes), или Logarithmic - логарифмический масштаб (может пригодиться, если у вас экспоненциальный рост баланса). После изменения этих пунктов, нужно снова кликнуть на нужный график для применения выбранной опции.
 
Forester #:
Если кто-нибудь доработает - обновлю код, чтобы было доступно для всех.
#ifndef __MQL5__

#property strict

long OrderOpenTimeMsc( void ) { return(OrderOpenTime() * 1000); }
long OrderCloseTimeMsc( void ) { return(OrderCloseTime() * 1000); }

double OrderOpenPriceRequest( void ) {return(OrderOpenPrice()); }
double OrderClosePriceRequest( void ) {return(OrderClosePrice()); }

enum ENUM_ACCOUNT_MARGIN_MODE
{
  ACCOUNT_MARGIN_MODE_RETAIL_NETTING,
  ACCOUNT_MARGIN_MODE_EXCHANGE,
  ACCOUNT_MARGIN_MODE_RETAIL_HEDGING  
};

#define SYMBOL_CUSTOM (-1)

#define ACCOUNT_MARGIN_MODE (-1)
#define ACCOUNT_CURRENCY_DIGITS (-2)

long AccountInfoInteger2( const int Property )
{
  switch (Property)
  {
    case ACCOUNT_MARGIN_MODE:
      return(ACCOUNT_MARGIN_MODE_RETAIL_HEDGING);
    case ACCOUNT_CURRENCY_DIGITS:
      return(2);      
  }
  
  return(AccountInfoInteger(Property));
}

#define AccountInfoInteger AccountInfoInteger2

// string BASEPATH_ = (::TerminalInfoString(TERMINAL_DATA_PATH) + "\\MQL4\\Files\\");

#endif // #ifndef __MQL5__

#define REPORT_BROWSER            // Open report in browswer automatically. Require DLL.
#include <MT4Orders_QuickReport.mqh> // https://www.mql5.com/ru/code/47816

void OnStart()
{  
  QuickReport("QuickReport", true);
}
 
Forester #:

Поменял на highchart. Он оказался лучше: google.charts зависал при 700 000 сделках, а highchart отобразил их без особых тормозов и смог увеличить до отдельных сделок.

Круто получилось!

Можно выбрать Ordinal - равномерный шаг (как в отчетах тестера MetaQuotes), или Logarithmic - логарифмический масштаб (может пригодиться, если у вас экспоненциальный рост баланса). После изменения этих пунктов, нужно снова кликнуть на нужный график для применения выбранной опции.

Полезно.


Похоже, нарушена хронология.

 
fxsaber #:
Спасибо за код. Добавил в \MT4Orders_QuickReport.mqh
fxsaber #:
Похоже, нарушена хронология.


Это только у отчета тестера MQ. У виртуального не было.
Я выводил в массив для построения графика все операции, в т.ч. лимитные. Они баланс не изменяют, так что особо не мешали.

Оказалось, что тестер MQ переносит в архив удаляемые лимитные ордера с опозданием:

Ордер

99 1005 2023.05.29 00:03:59.281 2023.05.29 00:03:59.331

попал в историю на 2 тика позже. Должен был после 00:03:59.331, тик  00:03:59.380 пропустил, перенёс в историю на  00:03:59.430 тике.
Ордер

123 1005 2023.05.29 00:03:59.331 2023.05.29 00:03:59.380
попал в архив на 1 тик позже. Выше на скриншоте есть еще примеры.


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

В вашем виртуальном тестере все чётко: (массив общий и в историю отправляются на своем тике)

Вывод лимиток на графики убрал, теперь этих полосок с неправильным временем нет.