---
title: "MetaTrader 5 build 1485: дополнительные режимы тестирования и графика в стандартной библиотеке - Последние обновления"
description: "Изменен порядок отображения записей в журналах терминала и MetaEditor. Ранее в начале журнала показывались самые свежие записи, теперь —... - Последние обновления"
image: "https://www.metatrader5.com/i/logo_metatrader5.png"
url: "https://www.metatrader5.com/ru/releasenotes/terminal/1392"
---

# MetaTrader 5 build 1485: дополнительные режимы тестирования и графика в стандартной библиотеке

## Изменен порядок отображения записей в журналах терминала и MetaEditor. Ранее в начале журнала показывались самые свежие записи, теперь — самые старые

24 ноября 2016

### Terminal

1. Изменен порядок отображения записей в журналах терминала и MetaEditor. Ранее в начале журнала показывались самые свежие записи, теперь — самые старые. Обратный порядок сортировки сделает чтение журнала более удобным и привычным.

   ![](https://www.metatrader5.com/c/17/0/terminal_1.png)

   Кроме того, через контекстное меню журнала теперь можно скрыть столбцы "Время" и "Источник".
2. В торговой истории у ордеров и сделок закрытия позиций в режиме хеджинга теперь показывается тикет закрытой позиции. Это облегчит поиск парных операций открытия и закрытия.

   ![](https://www.metatrader5.com/c/17/0/terminal_2.png)
3. Исправлена ошибка, приводившая к копированию уровней SL/TP из имеющейся позиции в новую позицию по тому же инструменту. Ошибка проявлялась при использовании функций торговли одним кликом (например, на графике, в окне "Обзор рынка") в режиме хеджинга.
4. Исправлено отображение объектов-стрелок на экранах сверхвысокого разрешения (4К).

### MQL5

1. Добавлена функция [ArrayPrint](https://www.mql5.com/ru/docs/array/arrayprint) для вывода в журнал массивов простых типов и структур.

   ```
   void  ArrayPrint(    const void&   array[],             // выводимый массив    uint          digits=_Digits,      // количество десятичных знаков после запятой    const string  separator=NULL,      // разделитель между значениями полей структуры    ulong         start=0,             // индекс первого выводимого элемента    ulong         count=WHOLE_ARRAY,   // количество выводимых элементов    ulong         flags=ARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_LIMIT|ARRAYPRINT_ALIGN        );
   ```

   ArrayPrint выводит в журнал не все поля массива структур – поля-массивы и поля-указатели объектов пропускаются. Для вывода всех полей такой структуры понадобится собственная функция массового вывода с желаемым форматированием.

   ```
   //--- выводит значения 10 последних баров    MqlRates rates[];    if(CopyRates(_Symbol,_Period,1,10,rates))      {       ArrayPrint(rates);       Print("Проверка\n[time]\t[open]\t[high]\t[low]\t[close]\t[tick_volume]\t[spread]\t[real_volume]");       for(int i=0;i<10;i++)         {          PrintFormat("[%d]\t%s\t%G\t%G\t%G\t%G\t%G\t%G\t%I64d\t",i,          TimeToString(rates[i].time,TIME_DATE|TIME_MINUTES|TIME_SECONDS),          rates[i].open,rates[i].high,rates[i].low,rates[i].close,          rates[i].tick_volume,rates[i].spread,rates[i].real_volume);         }      }    else       PrintFormat("CopyRates failed, error code=%d",GetLastError()); //--- пример вывода /*                     [time]  [open]  [high]   [low] [close] [tick_volume] [spread] [real_volume]    [0] 2016.11.09 04:00:00 1.11242 1.12314 1.11187 1.12295         18110       10   17300175000    [1] 2016.11.09 05:00:00 1.12296 1.12825 1.11930 1.12747         17829        9   15632176000    [2] 2016.11.09 06:00:00 1.12747 1.12991 1.12586 1.12744         13458       10    9593492000    [3] 2016.11.09 07:00:00 1.12743 1.12763 1.11988 1.12194         15362        9   12352245000    [4] 2016.11.09 08:00:00 1.12194 1.12262 1.11058 1.11172         16833        9   12961333000    [5] 2016.11.09 09:00:00 1.11173 1.11348 1.10803 1.11052         15933        8   10720384000    [6] 2016.11.09 10:00:00 1.11052 1.11065 1.10289 1.10528         11888        9    8084811000    [7] 2016.11.09 11:00:00 1.10512 1.11041 1.10472 1.10915          7284       10    5087113000    [8] 2016.11.09 12:00:00 1.10915 1.11079 1.10892 1.10904          8710        9    6769629000    [9] 2016.11.09 13:00:00 1.10904 1.10913 1.10223 1.10263          8956        7    7192138000    Проверка    [time] [open] [high] [low] [close] [tick_volume] [spread] [real_volume]    [0] 2016.11.09 04:00:00 1.11242 1.12314 1.11187 1.12295 18110 10 17300175000    [1] 2016.11.09 05:00:00 1.12296 1.12825 1.1193 1.12747 17829 9 15632176000    [2] 2016.11.09 06:00:00 1.12747 1.12991 1.12586 1.12744 13458 10 9593492000    [3] 2016.11.09 07:00:00 1.12743 1.12763 1.11988 1.12194 15362 9 12352245000    [4] 2016.11.09 08:00:00 1.12194 1.12262 1.11058 1.11172 16833 9 12961333000    [5] 2016.11.09 09:00:00 1.11173 1.11348 1.10803 1.11052 15933 8 10720384000    [6] 2016.11.09 10:00:00 1.11052 1.11065 1.10289 1.10528 11888 9 8084811000    [7] 2016.11.09 11:00:00 1.10512 1.11041 1.10472 1.10915 7284 10 5087113000    [8] 2016.11.09 12:00:00 1.10915 1.11079 1.10892 1.10904 8710 9 6769629000    [9] 2016.11.09 13:00:00 1.10904 1.10913 1.10223 1.10263 8956 7 7192138000 */
   ```
2. Исправлена ошибка сложения строк вида S1=S2+S1
3. Изменено поведение функции [ArrayResize](https://www.mql5.com/ru/docs/array/arrayresize). При передаче в качестве параметра reserve_size значения -1 функция освобождает неиспользованную (зарезервированную) память, если при этом не происходит увеличение размера массива. Изменение размера массива на 0 со значением reserve_size=-1 эквивалентно вызову ArrayFree. Новое поведение позволяет оптимизировать использование памяти в MQL5-программах.

   ```
   void OnStart()   {    int arr[]; //--- сколько памяти использовано изначально     Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB"); //--- сколько памяти использовано для массива размером 1, но с резервом    ArrayResize(arr,1,1024*1024);    Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB"); //--- после увеличения массива размер используемой памяти не изменится за счет резерва    ArrayResize(arr,1024*512,1024*1024);    Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB"); //--- после уменьшения массива размер памяти также не изменится    ArrayResize(arr,1);    Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB"); //--- не используемая массивом память освободится за счет удаления резерва    ArrayResize(arr,1,-1);    Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");   }
   ```
4. В стандартную библиотеку добавлены функции для построения графиков. Для использования включите файл MQL5\Include\Graphics\Graphic.mqh в свой проект.Построение графика из 3 серий данных при помощи GraphPlot:

   ```
   #include <Graphics/Graphic.mqh> double Func1(double x) { return MathPow(x,2); } double Func2(double x) { return MathPow(x,3); } double Func3(double x) { return MathPow(x,4); } void OnStart()   {    GraphPlot(Func1,Func2,Func3,-2,2,0.05,CURVE_LINES);   }
   ```

   Результат:

   ![](https://www.metatrader5.com/c/17/0/terminal_8.png)

   Построение графика на основе массива данных при помощи GraphPlot:

   ```
   #include <Math/Stat/Binomial.mqh> #include <Graphics/Graphic.mqh> void OnStart(void)   {    double    vars[101];    double    results[101];    const int N=2000; //---      MathSequence(0,N,20,vars);    MathProbabilityDensityBinomial(vars,N,M_PI/10,true,results);    ArrayPrint(results,4);    GraphPlot(results); //---   }
   ```

   Результат:

   ![](https://www.metatrader5.com/c/17/0/terminal_8_2.png)
5. Обновлены функции работы с математической статистикой в стандартной библиотеке. Проведена большая проверка качества и точности всех функций как в MQL5-версии, так и в исходном языке R. Для контроля точности и скорости работы вместе со статистической библиотекой распространяются юнит-тесты. Они находятся в каталоге \MQL5\Scripts\UnitTests\Stat.

     - TestStat.mq5 — основной тестовый скрипт для проверки результатов вычислений
     - TestPrecision.mq5 — тест точности вычислений
     - TestBenchmark.mq5 — тест с замером производительности вычислений

### Tester

1. Расширены настройки задержки исполнения торговых запросов при тестировании. Теперь проверить торгового робота можно в еще большем количестве разнообразных торговых условий: от идеального случая без задержек до любой задержки, заданной пользователем.

   ![](https://www.metatrader5.com/c/17/0/terminal_10.png)

   Ранее был доступен только [режим произвольных задержек](https://www.metatrader5.com/ru/terminal/help/algotrading/testing#settings).
2. Исправлена ошибка формирования тикового объема баров при тестировании в режиме OHLC на М1.
3. Исправлено проставление времени открытия у ордеров и позиций с точностью до миллисекунд при торговле в режиме хеджинга.
4. Исправлена ошибка "old tick" (тик устарел), появлявшаяся при мультивалютном либо мультитаймфреймовом тестировании в режиме реальных тиков.
5. Ускорена работа функции CopyTicks в случае, когда запрошенные тики читались из базы на диске.

### MetaEditor

1. Команды работы с версионным хранилищем исходных кодов MQL5 Storage добавлены в контекстное меню файла в Навигаторе и на панель инструментов.

   ![](https://www.metatrader5.com/c/17/0/terminal_15.png)
2. Исправлена ошибка, приводившая к нарушению целостности локальной базы MQL5 Storage при работе более чем с 1024 файлами в хранилище.
3. Исправлены ошибки отображения дерева файлов MQL5 Storage.
4. Исправлено отображение файла после массовой замены текста.

Обновлена документация.

**Предыдущие новости:**

- [MetaTrader 5 iOS build 1425](https://www.metatrader5.com/ru/releasenotes/iphone/1391)
- [MetaTrader 5 build 1455: Библиотеки математических функций в MQL5](https://www.metatrader5.com/ru/releasenotes/terminal/1384)
- [Веб-платформа MetaTrader 5: оптимизация кода и новые возможности интерфейса](https://www.metatrader5.com/ru/releasenotes/terminal/1382)
- [MetaTrader 5 iOS build 1403](https://www.metatrader5.com/ru/releasenotes/iphone/1379)
- [MetaTrader 5 Android build 1372](https://www.metatrader5.com/ru/releasenotes/android/1377)
