Новая версия платформы MetaTrader 5 build 5370: улучшения в веб-версии - страница 23

 
fxsaber #:
Копирование строки выделенного прохода в буфер. Аналог этого.
Есть в планах.
fxsaber #:
mqd-формат читать можно, если фреймами будет передача.

А если там свои данные эксперт передавал. Опишу необходимость добавления графиков и напрмиер дописывать в конец буфера графики и потоми только их сохранять в файл с именем .opt файла, но своим расширением.

Opt файл наверное просто самый новый брать. Думаю будет надежно.

 
Forester #:

А если там свои данные эксперт передавал.

Там любые данные.
 

@Slava#:

//+------------------------------------------------------------------+
//| заголовок кеша                                                   |
//+------------------------------------------------------------------+
struct TestCacheHeader
  {
   UINT              version;                // версия кеша
   wchar_t           copyright[64];          // копирайт
   UINT              header_size;            // размер заголовка
   UINT              record_size;            // размер кешируемой записи (TestCacheRecord с буфером параметров)
   //---
   wchar_t           expert_name[64];        // имя эксперта
   wchar_t           expert_path[128];       // имя эксперта с путём от MQL5
   wchar_t           server[64];             // источник истории (торговый сервер)
   wchar_t           symbol[32];             // символ тестирования
   UINT16            period;                 // период чарта
   INT64             date_from;              // дата начала данных в настройках тестирования
   INT64             date_to;                // конечная дата в настройках тестирования
   INT64             date_forward;           // конечная дата соответствующего форварда
   int               opt_mode;               // режим оптимизации (0-полная оптимизация, 1-генетика, 2 или 3-форвард)
   int               ticks_mode;             // режим генерации тиков
   int               last_criterion;         // критерий оптимизации при последнем сеансе
   DWORD             msc_min;                // минимальное время выполнения в миллисекундах
   DWORD             msc_max;                // максимальное время выполнения в миллисекундах
   DWORD             msc_avg;                // среднее время выполнения в миллисекундах
   int               common_reserve[16];
   //---
   wchar_t           group[80];              // имя группы + hedging/netting
   wchar_t           trade_currency[32];     // валюта депозита
   int               trade_deposit;          // начальный депозит
   int               trade_condition;        // режим работы торговли (0-без задержек, -1-произвольная задержка, nnn-количество миллисекунд)
   int               trade_leverage;         // плечо
   int               trade_hedging;          // 1 - netting, 2 - hedging
   int               trade_currency_digits;
   int               trade_reserve[6];
   //---
   char              hash_ex5[16];           // контрольная сумма скомпилированного эксперта
   UINT              parameters_size;        // размер буфера параметров эксперта
   UINT              parameters_total;       // количество параметров
   UINT              opt_params_size;        // размер буфера оптимизируемых параметров эксперта
   UINT              opt_params_total;       // количество оптимизируемых параметров
   UINT              dwords_cnt;             // размер номера прохода большой генетики
   UINT              snapshot_size;          // размер снапшота для тотальной оптимизации и для форварда после тотальной оптимизации
   UINT              passes_total;           // общее количество проходов оптимизации (для генетической оптимизации 0)
   UINT              passes_passed;          // количество пройденных проходов
   // далее следуют выставленные параметры эксперта (в т.ч. строковые) в структуре TestCacheInput
   //--- конец заголовка. далее следуют записи о каждом проходе
  };
//+------------------------------------------------------------------+
//| входные параметры тестирования                                   |
//+------------------------------------------------------------------+
struct TestCacheInput
  {
   wchar_t           name[64];
   int               flag;                    // оптимизируемый параметр
   int               type;                    // тип TYPE_XXX
   int               digits;                  // количество знаков после запятой
   int               offset;                  // смещение в буфере параметров
   int               size;                    // размер значения параметра в буфере
   //--- 0-start,1-step,2-stop
   union { INT64 integers[3]; double numbers[3]; };
  };
   m_header.header_size=sizeof(TestCacheHeader)+m_inputs.Total()*sizeof(TestCacheInput)+m_header.parameters_size;
//--- кешируемая запись содержит номер прохода (при генетике - номер по порядку), структуру результатов тестирования (если математика, то 1 double), буфер оптимизируемых параметров и генетический проход
   m_header.record_size=sizeof(INT64)+m_header.opt_params_size;
   if(m_mathematics)
      m_header.record_size+=sizeof(double);
   else
      m_header.record_size+=sizeof(ExpTradeSummary);
   if(m_header.dwords_cnt>1)
      m_header.record_size+=m_header.dwords_cnt*sizeof(DWORD);
   else
     {
      if(m_genetics)
         m_header.record_size+=sizeof(INT64);
     }
//+------------------------------------------------------------------+
//| Структура для статистики торговли                                |
//+------------------------------------------------------------------+
struct ExpTradeSummary
  {
   double            initial_deposit;     // начальный депозит
   double            withdrawal;          // снято средств
   double            profit;              // общая прибыль (+)
   double            grossprofit;         // общий плюс
   double            grossloss;           // общий минус
   double            maxprofit;           // максимально прибыльная сделка
   double            minprofit;           // максимально убыточная сделка
   double            conprofitmax;        // прибыль максимальной последовательности прибыльных сделок
   double            maxconprofit;        // максимальная прибыль среди последовательностей
   double            conlossmax;          // убыток максимальной последовательности убыточных сделок
   double            maxconloss;          // максимальный убыток среди последовательностей
   double            balance_min;         // минимальное значение баланса (для расчёта абсолютной просадки)
   double            maxdrawdown;         // максимальная просадка по балансу
   double            drawdownpercent;     // отношение максимальной просадки по балансу к её пику
   double            reldrawdown;         // максимальная относительная просадка по балансу в деньгах
   double            reldrawdownpercent;  // максимальная относительная просадка по балансу в процентах
   double            equity_min;          // минимальное значение equity (для расчёта абсолютной просадки по equity)
   double            maxdrawdown_e;       // максимальная просадка по equity
   double            drawdownpercent_e;   // отношение максимальной просадки по equity к её пику (+)
   double            reldrawdown_e;       // максимальная относительная просадка по equity в деньгах
   double            reldrawdownpercnt_e; // максимальная относительная просадка по equity в процентах
   double            expected_payoff;     // матожидание выигрыша (+)
   double            profit_factor;       // показатель прибыльности (+)
   double            recovery_factor;     // фактор восстановления (+)
   double            sharpe_ratio;        // коэффициент Шарпа (+)
   double            margin_level;        // минимальный уровень маржи
   double            custom_fitness;      // пользовательский фитнесс - результат OnTester (+)
   int               deals;               // общее количество сделок
   int               trades;              // количество сделок out/inout
   int               profittrades;        // количество прибыльных
   int               losstrades;          // количество убыточных
   int               shorttrades;         // количество шортов
   int               longtrades;          // количество лонгов
   int               winshorttrades;      // количество прибыльных шортов
   int               winlongtrades;       // количество прибыльных лонгов
   int               conprofitmax_trades; // максимальная последовательность прибыльных сделок
   int               maxconprofit_trades; // последовательность максимальной прибыли
   int               conlossmax_trades;   // максимальная последовательность убыточных сделок
   int               maxconloss_trades;   // последовательность максимального убытка
   int               avgconwinners;       // среднее количество последовательных прибыльных сделок
   int               avgconloosers;       // среднее количество последовательных убыточных сделок
  };


PS. Формат может поменяться. Данный формат соответствует версии 514

Предложение по улучшению

В структуре для каждого прохода ExpTradeSummary есть поле Initial deposit, которое для всех имеет одинаковые значения, оно же есть в заголовке TestCacheHeader как  int trade_deposit; Т.е. оно излишне.

Вместо него можно сохранять комплексный критерий, который сейчас не сохраняется. Видимо он рассчитывается из того, что есть в .opt  файле.
Хорошо бы его вместо начального депозита подставить. Размер структуры не поменяется. Т.е. модификация минимальна.

А если вместо double использовать 2 float элемента, то и мат. ожидание в пунктах можно сохранять, при том же размере структуры. Или просто отдельными double добавить их, и нач. депозит тоже оставить.

Считаю его так:

   HistoryDeals=OrdersHistoryTotal();
   for (int i = 0; i < HistoryDeals; i++){
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) ){
        if(OrderType()==OP_BUY || OrderType()==OP_SELL ){ 
            profit=OrderProfit() + OrderCommission() + OrderSwap();// может еще сборы какое то есть... нужно учесть все расходы
            AvgPips += (OrderLots()>0 ? profit / OrderLots() : 0); // заработанных пипсов с учетом расходов
   }}}
   if(HistoryDeals>0){AvgPips /= HistoryDeals;}// среднее заработанных пипсов с учетом комиссий и свопов
Думаю это больше скажет о стратегии, чем мат. ожидание в деньгах. Выводить в отчете можно оба.
 
Forester #:

Предложение по улучшению

В структуре для каждого прохода ExpTradeSummary есть поле Initial deposit, которое для всех имеет одинаковые значения, оно же есть в заголовке TestCacheHeader как  int trade_deposit; Т.е. оно излишне.

Архитектурно эти "лишние "восемь байтов для каждого прохода все же правильно хранить, как есть сейчас. Я бы предложил дополнить данную структуру резервными полями байтов на 40. И вот туда что-нибудь скидывать. Например, множество OnTesterX.


ЗЫ В данной структуре много ненужных показателей, на которые уходит большое количество вычислительных ресурсов. Особенно, когда много сделок в каждом оптимизационном проходе. И если в мат. режиме можно самому выбирать, что из этих показателей вычислять, то в обычном - нет. Когда-то для ускорения был введен режим по пипсам. Возможно, имеет смысл ввести режим выбора, какие показатели вычислять или нет.

 
Vitaliy Davydov #:

Здравствуйте.

У меня у одного в этой версии Git перестал работать?

2025.10.24 10:06:27.684 Git MQL5: push failed with -1 error, generic error


Со 2-го декабря опять перестал Git работать. То ли Commit не отправляет, то ли Pull не получает.

Вчера дома вечером после изменений отправил все c помощью Git Commit, сегодня пришел с утра на работу Git Pull - already up-to-date.

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

 
Vitaliy Davydov #:

Со 2-го декабря опять перестал Git работать. То ли Commit не отправляет, то ли Pull не получает.

Вчера дома вечером после изменений отправил все c помощью Git Commit, сегодня пришел с утра на работу Git Pull - already up-to-date.

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

выяснил - не отправляет Commit.
 
Новая версия платформы MetaTrader 5 build 5452  

Не отображается bmp картинки! ранее в других билдах они отображались, но с обновлением пропали в советнике 
Новая версия платформы MetaTrader 5 build 5430: Улучшенные графики на движке Blend2D
Новая версия платформы MetaTrader 5 build 5430: Улучшенные графики на движке Blend2D
  • 2025.11.13
  • MetaQuotes
  • www.metatrader5.com
Обновлено графическое ядро для отрисовки графиков. Теперь вместо устаревшего GDI используется современный движок Blend2D.  Более высокая производительность Blend2D использует современную архитектуру рендеринга и эффективно задействует многоядерные процессоры, что обеспечивает плавную отрисовку графиков и индикаторов даже при большом количестве...
 
fxsaber #:... В данной структуре много ненужных показателей, на которые уходит большое количество вычислительных ресурсов. Особенно, когда много сделок в каждом оптимизационном проходе. 

Пока получается вот так:


Все 43 критерия оценки можно отсортировать (столбец выделяется зеленым фоном) и каждому можно задать фильтры: от, до или от и до. Фильтры разных столбцов объединяются через И. Значения порогов - любые, а не фиксированные 0, 0.5, 50%, -1 как у МТ5.

Графики перерисовываю по столбцу который отсортирован. Покликал по разным - действительно самые интересные это те 8, что есть в MT5. Ну если уж сделал - пусть будут. Может кому захочется посмотреть по числу ошибок подряд или еще что...

Графики вместо таких

и

Сделал совмещенные


Сразу видно, что из Trall можно выбрать вариант получше, а от TP совсем нет пользы. т.к. графики слились в 1 линию.

Думаю так удобнее. Еще сделал по клику открытие Гугл чарта - в нем зум и он показывает точные значения.


Сейчас про 2D думаю как сделать... наверное так же линиями. Цветная мозаика трудна к восприятию.

 
Forester #:

Сразу видно, что из Trall можно выбрать вариант получше, а от TP совсем нет пользы. т.к. графики слились в 1 линию.

Очень полезная визуализация!

Forester #:

Все 43 критерия оценки можно отсортировать (столбец выделяется зеленым фоном) и каждому можно задать фильтры: от, до или от и до. Фильтры разных столбцов объединяются через И. Значения порогов - любые, а не фиксированные 0, 0.5, 50%, -1 как у МТ5.

Не хватает столбца с номером строки. Но, наконец, без мусора!

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

Ошибки, баги, вопросы

fxsaber, 2018.09.11 22:34

Актуально, не смотря на отличные кеши. Просьба открыть формат opt-файлов.

Как пример, зачем это нужно. Вот отсортировал результаты Оптимизации по прибыльности (PF)

Посмотрите на количество трейдов - они статистически ничего не значат: меньше 30. Но у них PF зашкаливает и таких результатов сотни/тысячи. Ну зачем этот мусор в таблице?

Если бы был открыть opt-формат, то можно было бы этот мусор автоматом убивать, оставляя только интересные более-менее стат. значимые результаты.

Что уж говорить о кастомных сортировках по нескольким критериям одновременно и т.д.


По сортировке проще объяснить на примере с этой страницы.

Здесь компрессоры отсортированы по степени сжатия - красный. Мне нужно было найти золотую середину между степенью сжатия и производительностью.

Зеленый - улучшение показателя скорости сжатия. Синий - разжатия.

Вы можете видеть, что каждое улучшение показателя сопровождается его подчеркиванием. Например, если показатель не подчеркнут, то эту строку не имеет смысл рассматривать, т.к. она уступает какой-то предыдущей строке. Таким образом по этой таблице почти сразу был найден великолепный компрессор - нижние зеленый/синий.


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

 
fxsaber #:

Очень полезная визуализация!

Не хватает столбца с номером строки.

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

Это может быть полезно, например, при составлении портфеля из разных проходов.


Ну и удалять бестолковые строки из таблицы по выбору. Как и столбцы - все 43 очень редко нужны.