Блог им. metaquotes
В этом обновлении был улучшен веб-терминал. Мы добавили в него разные цветовые схемы для интерфейса, а также улучшили окно спецификации инструмента.
Помимо этого, в MQL5 появилась поддержка нового алгоритма умножения матриц General Matrix Multiplication (GeMM). Он позволяет значительно ускорить вычисления на большинстве процессоров. На данный момент новый алгоритм поддерживается в методе matrix::GeMM.
Также в MQL5 появилась поддержка работы с моделями ONNX. Это позволит значительно облегчить использование нейронных сетей в торговых советниках.
MetaTrader 5 Client Terminal build 3620
Скомпилируйте проект и запустите его на EURUSD H1, чтобы посмотреть результат.
Помимо готовой модели и MQL5-кода для ее запуска, в проекте также доступен Python скрипт PricePredictionTraining.py. Он показывает, как самостоятельно создать модель ONNX. Для работы скрипта установите на свой компьютер Python, а также необходимые модули из командной строки:
#import "mmlib.dll"
bool sgemm(uint flags,matrix<float> &C,const matrix<float> &A,const matrix<float> &B,ulong M,ulong N,ulong K,float alpha,float beta);
#import
C++extern "C" __declspec(dllexport) bool sgemm(UINT flags,float *C,const float *A,const float *B,UINT64 M,UINT64 N,UINT64 K,float alpha,float beta)
Для правильной обработки матриц и векторов, кроме их буферов, следует передавать их размеры.MQL5: Добавлена новая функция CopySeries для копирования синхронизированных таймсерий из MqlRates в отдельные массивы.
Функция CopySeries позволяет за один раз получать только нужные таймсерии в разные указанные массивы, при этом они все синхронизированы между собой. Это означает, что все значения в полученных массивах по конкретному индексу N будут принадлежать одному и тому же бару на указанной паре символ/таймфрейм. В этом случае не требуется заботиться о том, чтобы все полученные таймсерии были синхронизированы по времени открытия бара.
В отличие от CopyRates, которая возвращает полный набор таймсерий в виде массива MQLRates, функция CopySeries позволяет программисту получать только нужные таймсерии на основе комбинации флагов, указывающих тип запрашиваемых таймсерий. При этом порядок массивов, передаваемых в функцию, должен соответствовать порядку полей в структуре MqlRates:
struct MqlRates
{
datetime time; // время начала периода
double open; // цена открытия
double high; // наивысшая цена за период
double low; // наименьшая цена за период
double close; // цена закрытия
long tick_volume; // тиковый объем
int spread; // спред
long real_volume; // биржевой объем
}
Таким образом, если необходимо получить значения таймсерий time, close и real_volume для последних 100 баров текущего символа/таймфрейма, вызов должен быть следующим:
datetime time[];
double close[];
long volume[];
CopySeries(NULL,0,0,100,COPY_RATES_TIME|COPY_RATES_CLOSE|COPY_RATES_VOLUME_REAL,time,close,volume);
При этом важен порядок массивов «time, close, volume» — он должен соответствовать порядку полей в структуре MqlRates. А вот порядок значений в маске rates_mask значения не имеет, маска могла быть такой :
COPY_RATES_VOLUME_REAL|COPY_RATES_TIME|COPY_RATES_CLOSE
Пример
//--- input parameters
input datetime InpDateFrom=D'2022.01.01 00:00:00';
input datetime InpDateTo =D'2023.01.01 00:00:00';
input uint InpCount =20;
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart(void)
{
//--- массивы для получения таймсерий из ценовой структуры Rates
double open[];
double close[];
float closef[];
datetime time1[], time2[];
//---запросим цены закрытия в массив типа double
ResetLastError();
int res1=CopySeries(NULL, PERIOD_CURRENT, 0, InpCount,
COPY_RATES_TIME|COPY_RATES_CLOSE, time1, close);
PrintFormat("1. CopySeries returns %d values. Error code=%d", res1, GetLastError());
ArrayPrint(close);
//--- теперь запросим еще цены открытия, а цены закрытия в массив типа float
ResetLastError();
int res2=CopySeries(NULL, PERIOD_CURRENT, 0, InpCount,
COPY_RATES_TIME|COPY_RATES_CLOSE|COPY_RATES_OPEN, time2, open, closef);
PrintFormat("2. CopySeries returns %d values. Error code=%d", res2, GetLastError());
ArrayPrint(closef);
//--- сравним полученные данные
if((res1==res2) && (time1[0]==time2[0]))
{
Print(" | Time | Open | Close double | Close float |");
for(int i=0; i<10; i++)
{
PrintFormat("%d | %s | %.5f | %.5f | %.5f |",
i, TimeToString(time1[i]), open[i], close[i], closef[i]);
}
}
/* Результат
1. CopySeries returns 0 values. Error code=0
[ 0] 1.06722 1.06733 1.06653 1.06520 1.06573 1.06649 1.06694 1.06675 1.06684 1.06604
[10] 1.06514 1.06557 1.06456 1.06481 1.06414 1.06394 1.06364 1.06386 1.06239 1.06247
2. CopySeries returns 0 values. Error code=0
[ 0] 1.06722 1.06733 1.06653 1.06520 1.06573 1.06649 1.06694 1.06675 1.06684 1.06604
[10] 1.06514 1.06557 1.06456 1.06481 1.06414 1.06394 1.06364 1.06386 1.06239 1.06247
| Time | Open | Close double | Close float |
0 | 2023.03.01 17:00 | 1.06660 | 1.06722 | 1.06722 |
1 | 2023.03.01 18:00 | 1.06722 | 1.06733 | 1.06733 |
2 | 2023.03.01 19:00 | 1.06734 | 1.06653 | 1.06653 |
3 | 2023.03.01 20:00 | 1.06654 | 1.06520 | 1.06520 |
4 | 2023.03.01 21:00 | 1.06520 | 1.06573 | 1.06573 |
5 | 2023.03.01 22:00 | 1.06572 | 1.06649 | 1.06649 |
6 | 2023.03.01 23:00 | 1.06649 | 1.06694 | 1.06694 |
7 | 2023.03.02 00:00 | 1.06683 | 1.06675 | 1.06675 |
8 | 2023.03.02 01:00 | 1.06675 | 1.06684 | 1.06684 |
9 | 2023.03.02 02:00 | 1.06687 | 1.06604 | 1.06604 |
*/
}
MetaTrader 5 Web Terminal build 3620
Веб-терминал: https://trade.metatrader5.com/terminal
Обновление доступно через систему Live Update и на сайте: https://www.metatrader5.com/ru/download
Вы можете прокомментировать «слухи» об окончании Вами поддержки изменений Мосбиржи?
БКС уже признал это и обещал выпустить рассылку по своим клиентам с исправлением. Посмотрим, насколько он честен.
Такое ощущение, что прочитал про нововедение и вспоминаешь симбиан на нокии.
Очень слабо, поучитесь или возьмите пример с изи скальп, который теперь Тайгер трейд.
И не обязательно заводить разговор про скальпинг.
При этом игнорировать объем сделанного за все время не надо. В этом релизе мы дали возможность штатно запускать внутри MQL5 программ почти любые системы машинного обучения, сконвертированные в ONNX формат.
Натренированные сети можно запускать в терминале, тестере и в клауд сети.
Это означает, что мы подняли сложность создаваемых роботов на новую высоту. И все это доступно теперь для Маркета приложений.
Приведите конкретные проблемы, пожалуйста.