English 中文 Español Português
preview
Моделирование рынка (Часть 06): Перенос данных из MetaTrader 5 в Excel

Моделирование рынка (Часть 06): Перенос данных из MetaTrader 5 в Excel

MetaTrader 5Тестер |
402 1
Daniel Jose
Daniel Jose

Введение

Одним из моментов, осложняющих жизнь некоторых людей с MetaTrader 5, является отсутствие, так сказать, определенных ресурсов.

Многим, особенно тем, кто не занимается программированием, очень сложно передавать информацию между MetaTrader 5 и другими программами. Одной из таких программ является Excel. Многие люди используют Excel для управления и контроля своих рисков, так как это очень хорошая программа, которую легко освоить даже тем, кто не является программистом на VBA. Однако перенос информации из MetaTrader 5 в Excel или наоборот - задача не из легких, особенно если мы не владеем навыками программирования.

Тем не менее, это очень полезно, ведь облегчает жизнь тем, кто хочет работать и управлять рисками через Excel. Без соответствующих навыков программирования велика вероятность того, что пользователь будет использовать незнакомые программы или откажется от использования MetaTrader 5 просто потому, что не сможет перенести информацию из платформы в Excel.

К счастью, Excel предлагает несколько интересных способов добиться этого. Позже мы их рассмотрим более подробно. Однако в MetaTrader 5 нет стандартных ресурсов для отправки информации в Excel, поэтому необходимо обладать навыками программирования или приобрести инструмент для передачи данных.


Понимание проблемы

Для начала давайте разберемся с первыми встречающимися трудностями и с наиболее распространенными способами передачи данных между программами и Excel. Одним из наиболее распространенных методов является использование RTD (Real Time Data) или DDE (Dynamic Data Exchange). Однако оба решения требуют знаний о том, как программировать интерфейс COM (Component Object Model), а многие программисты не знакомы с ним. Более того, даже если вам удастся создать нечто подобное, решение не очень гибкое.

И RTD, и DDE являются однонаправленными формами связи, то есть они служат только мостом между одной системой и другой, не позволяя делать некоторые вещи, которые также нам интересны, особенно в Excel. Однако, тот факт, что Excel имеет встроенную поддержку этих систем, является большим преимуществом, поскольку у нас будет своего рода коммуникация в режиме реального времени.

Но давайте подумаем шире: как часто действительно нужна информация в Excel в режиме реального времени? В большинстве случаев небольшая задержка вполне допустима. И здесь мы не говорим о тех, кто хочет использовать Excel в качестве системы управления для торговых роботов. Если вы используете MetaTrader 5, вы определенно хотите, чтобы расчеты производились на самой платформе, а не отправлялись в Excel, который рассчитывает позицию и на основе полученных результатов заставляет советника принимать решение в MetaTrader 5, так как это бессмысленно.

Однако те, кто торгует в течение двух и более дней, или те, кто торгует по стратегии Long Short, несомненно, захотят использовать Excel, который поможет им управлять капиталом и принимать решения по контролю рисков с большей уверенностью. В этом случае хочется, чтобы Excel получал котировки и информацию автоматически. Давайте представим, что работаем со стратегией Long Short и имеем 20 позиций в этой модели. Нам придется вручную обновлять 40 котировок каждый день или каждый час, в зависимости от того, как мы торгуем.

Риск допустить какую-то ошибку или сделать что-то глупое просто огромен, не говоря уже о времени, которое потратим на перенос 40 котировок одна за другой. Вот это кропотливая работа!

Поэтому некоторые люди ищут решения данной проблемы. Одно из них - использовать котировки, взятые непосредственно из Интернета.


Веб-решение

Это веб-решение основано на использовании самого Excel для автоматического выполнения обновлений. Однако, здесь есть небольшая проблема.

Хотя это простое в создании решение, оно не является подходящим. Это связано с тем, что между котировками существует задержка, которая может быть более или менее продолжительной. Однако данная задержка связана не с захватами самих котировок, а с тем, что большинство услуг по предоставлению финансовой информации являются платными.

Бесплатный сыр только в мышеловке. Особо когда речь идет о заработке.

Я не возьмусь судить, правильно или неправильно взимать плату за эти услуги. Здесь возникает вопрос: какой смысл пользоваться этим, если у вас в руках есть платформа? В данном случае MetaTrader 5.

При использовании данного решения пользователь открывает в Google электронную таблицу, связанную с его электронной почтой. На этом листе введите следующую команду:

GoogleFinance

Добавив данную команду в ячейку онлайн-таблицы, можно выполнить ряд действий, связанных с символом, данные которого мы хотим получить. Все эти данные будут регулярно обновляться. Обычно между этими обновлениями есть задержка. Если мы торгуем позицией, которая может быть изменена только через несколько дней, эта задержка не является проблемой. Это если рассуждать в терминах "Buy and Hold", но если мы занимаемся трейдингом, всё может быть немного сложнее.

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

Хотя данное решение работает в большинстве случаев, оно подходит не для всех. В некоторых случаях нам действительно нужна котировка, и, как правило, только она, но с минимальной задержкой. Однако, как бы мы ни старались, скорость обновления менее одной минуты при таком решении не будет достигнута. Это можно увидеть на изображении 01.

Изображение 01

Изображение 01 - Окно свойств

На изображении 01 мы видим окно свойств, в котором настраивается время обновления компонента, импортированного программой Excel. Если вы не знаете, как найти это окно, или никогда его не видели, не волнуйтесь. Я вам покажу, как добраться до него. Но прошу заметить: даже если вы установили минимальное время в одну минуту, это не означает, что у используемой котировки будет минутная задержка между ними, так как функция GoogleFinance не обновляется с такой скоростью.

Поэтому хорошо, что вы знаете, чем мы здесь занимаемся. Я вам покажу, как получить котировку символа с минутной задержкой. Если вы хотите получать котировки в режиме реального времени, с каждым изменением цены, вам придется использовать другой способ. Здесь рассмотренный подход в большинстве случаев будет хорошо служить своей цели и окажется весьма полезным при решении самых разных задач. Это связано с тем, что требуемый нам вид программирования очень прост для понимания, и мы получим очень эффективный способ связи между MetaTrader 5 и Excel.


Понимание реализации

Существуют гораздо более сложные решения, использующие Python для получения котировок в реальном времени, и более простые, который использует RTD или DDE. Однако тот, который мы рассмотрим здесь, может быть создан прямо на MQL5, легко и быстро реализован, и в то же время приятен в использовании.

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

  • Советники (или роботы), - это приложения MetaTrader 5, которые позволяют нам отправлять ордеры или торговые запросы на биржевой сервер. Данные программы в основном предназначены для решения именно таких задач.
  • Индикаторы позволяют добавить или отобразить что-либо на графике. Они выполняют различные функции, связанные с мониторингом цен, чтобы показать нам что-нибудь конкретное, для чего они были запрограммированы.
  • Скрипты позволяют выполнить определенное задание. Обычно скрипты появляются и исчезают из графика очень быстро, не задерживаясь в нем надолго. Но они всегда связаны с конкретным графиком.
  • Сервисы, как и скрипты, обычно выполняют какую-то конкретную задачу и быстро исчезают. Но, в отличие от скриптов, сервисы не привязаны к конкретному графику и остаются активными даже тогда, когда в терминале MetaTrader 5 не открыты графики.

Как вы могли заметить, все приложения MetaTrader 5 полезны. Но сервисы единственные, которые не зависят от того, есть ли на платформе открытый график, поэтому они являются лучшим решением.

Примечание: хотя сервисы и скрипты имеют разное поведение, так как скрипты связаны с графиком, с точки зрения кода они практически идентичны. Единственное различие между ними заключается в том, что у сервиса в коде включено следующее свойство:

#property service

Сам факт наличия данной строки в коде скрипта превращает его из скрипта в сервис.

Поэтому решение, которое мы будем использовать, - это создание сервиса. Однако, как мы уже говорили, его можно использовать и в качестве скрипта. В этом случае он будет связан с графиком. Единственное изменение, которое необходимо внести в код, - это удалить следующее свойство, которое было показано выше. Мы вернемся к этому позже, когда рассмотрим сам код.


Начинаем внедрение решения

Поскольку некоторые читатели могут не обладать достаточными знаниями в области Excel, мы покажем, как делать в Excel хотя бы самые простые вещи. Если вы уже знакомы с данной программой, то можете переходить к следующей теме, где мы покажем, как реализовать сервис на MQL5, чтобы использовать его в MetaTrader 5 и получать нужные данные прямо в Excel.

До того, как сделать что-либо ещё, нам нужно будет отредактировать небольшой файл. MetaTrader 5 будет использовать его позже, но мы не можем просто поместить его в любое место. В целях безопасности MQL5 не позволяет использовать любую точку системы файлов нашего компьютера. Чтобы сделать это правильно, откроем MetaEditor и на вкладке навигации сделаем так, как показано на анимации 01 ниже:

Анимация 01

Анимация 01 - Доступ к нужной директории

В результате откроется проводник по файлам операционной системы, и мы окажемся в папке FILES, внутри директории MQL5. Создаваемый файл должен изначально находиться в данной папке. Внутри данной папки нам нужно будет создать файл, показанный ниже. Это просто пример того, что мы будем делать на самом деле.

PETR4;
VALE3;
ITUB3;

Сохраните данный файл под именем QUOTE.CSV. Но пока не закрывайте проводник. Он понадобится нам на следующем этапе, чтобы легко найти только что сохраненный файл.

Теперь откроем Excel с чистым листом и выполним следующую последовательность действий, чтобы связать файл QUOTE.CSV с электронной таблицей, которую мы создаем в Excel.

Изображение 02

Изображение 02

На рисунке 02 показано, где находится нужная нам опция. Если она недоступна в Excel, можно найти её в Get Data. В любом случае необходимо выбрать опцию импорта данных из текстового файла. Процесс будет почти таким же, как и при импорте данных из Интернета, но здесь мы будем использовать файл.

Изображение 03

Изображение 03

После использования опции, показанной на рисунке 02, откроется окно поиска. Переместим его в указанное место в файловом проводнике, чтобы получить файл QUOTE.CSV, который будет храниться в директории MQL5. Как только он будет найден, выберем его, и увидим содержимое, показанное на рисунке 03. Обратите внимание на настройки загрузки файлов, показанные в верхней части рисунка 03. Если всё правильно, нажмем на стрелку рядом с кнопкой Load и выберем Load To..... Мы перейдем к изображению 04.

Изображение 04

Изображение 04

На изображении 04 можно выбрать место вставки данных в электронную таблицу. В данном случае, поскольку это только демонстрация, оставим всё так, как указано в выделенной области. Затем нажмем на кнопку "OK", и получим результат, показанный на изображении 05.

Изображение 05

Изображение 05

Хорошо. Данные уже загружены, но остается ещё один шаг: указать Excel, как и когда обновлять данные. Помните, что мы не используем сервер RTD или DDE. Поэтому необходимо указать Excel, когда обновлять эти данные, иначе они никогда не обновятся. Если у вас есть навыки работы с VBA, то можно разработать нечто лучшее. Но здесь я хочу всё упростить, чтобы каждый мог достичь предложенной цели. Чтобы Excel знал, как и когда обновлять данные в файле QUOTE.CSV, мы должны получить доступ к тому, что показано на изображении 06.

Изображение 06

Изображение 06

При выборе таблицы в Excel активируется вкладка Query. В ней выберем элемент "Свойства", как показано на рисунке выше. Когда мы нажмем на этот пункт, увидим изображение 07.

Изображение 07

Изображение 07

Внимательно посмотрите на изображение 07. В этом окне нужно изменить некоторые параметры, чтобы Excel мог автоматически обновлять данные. Прошу заметить, что обновляемым объектом является только таблица, которую мы только что создали на основе данных из файла QUOTE.CSV. Поэтому измените конфигурацию, показанную на изображении 07, на ту, которая показана на изображении 08.

Изображение 08

Изображение 08

Когда мы подтвердим изменения, нажав кнопку OK, Excel будет следовать заданным настройкам. Таким образом, примерно каждые 60 секунд данные в электронной таблице будут обновляться по мере внесения изменений в файл. Попробуем сделать следующее: откроем файл в текстовом редакторе и добавим значение, примерно так, как показано ниже.

PETR4;30.80
VALE3;190.31
ITUB3;25.89

Далее сохраним файл QUOTE.CSV, но закрывать текстовый редактор не нужно. Подождем немного и проверим результат в Excel. Можно увидеть, как электронная таблица обновляется почти как по волшебству, как показано на изображении 09.

Изображение 09

Изображение 09

Теперь изменим значения ещё раз с помощью текстового редактора, пока не поймем, что происходит. Обратите внимание, что с данного момента мы можем делать многое, не прибегая к сложным или неэффективным решениям. Ещё один момент, который может быть интересен, - это возможность использования локального ресурса. Таким образом, Excel можно запускать на другом терминале, а не на MetaTrader 5, без необходимости размещать их на одной машине.


Реализация сервиса на MQL5

В объяснении предыдущей темы мы упомянули об использовании файла и о том, где его следует размещать. Однако, чтобы закончить данную статью, нам нужно создать сервис, который будет работать на MetaTrader 5, но не волнуйтесь, потому что его очень легко создать и использовать. В конце статьи вы найдете демонстрационное видео, которое ответит на все ваши вопросы о том, как работает система.

Прежде всего, надо сказать, что, в отличие от того, что было показано в демонстрационном видео, не обязательно иметь символы в окне Market Watch. В видеоролике символы показаны только для того, чтобы вы могли наглядно проследить за процессом. При обычном исполнении в этом нет необходимости: сервис может работать сам по себе, не мешая символам в окне просмотра рынка или работе MetaTrader 5.

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

01. //+------------------------------------------------------------------+
02. #property service
03. #property copyright "Daniel Jose"
04. #property description "Quote sharing service between"
05. #property description "MetaTrader 5 and Excel"
06. #property version   "1.00"
07. //+------------------------------------------------------------------+
08. input string user01 = "Quote.csv"; //FileName
09. //+------------------------------------------------------------------+
10. class C_ShareAtExcel
11. {
12.     private :
13.             string  szSymbol[],
14.                     szFileName;
15.             int     maxBuff;
16.             bool    bError;
17. //+------------------------------------------------------------------+
18. inline void Message(const string szMsg)
19.                     {
20.                             PrintFormat("Sharing service with Excel: [%s].", szMsg);
21.                     }
22. //+------------------------------------------------------------------+
23.     public  :
24. //+------------------------------------------------------------------+
25.             C_ShareAtExcel(string szArg)
26.                     :bError(true),
27.                      maxBuff(0),
28.                      szFileName(szArg)
29.                     {
30.                             int     file;
31.                             string  sz0, szRet[];
32.     
33.                             if ((file = FileOpen(szFileName, FILE_CSV | FILE_READ | FILE_ANSI)) == INVALID_HANDLE)
34.                             {
35.                                     Message("Failed");
36.                                     return;
37.                             }
38.                             while (!FileIsEnding(file))
39.                             {
40.                                     sz0 = FileReadString(file);
41.                                     if (StringSplit(sz0, ';', szRet) > 1)
42.                                     {
43.                                             ArrayResize(szSymbol, maxBuff + 1);
44.                                             szSymbol[maxBuff] = szRet[0];
45.                                             StringToUpper(szSymbol[maxBuff]);
46.                                             maxBuff++;
47.                                     }
48.                             }
49.                             FileClose(file);
50.                             bError = false;
51.                             Message("Started");
52.                     }
53. //+------------------------------------------------------------------+
54.             ~C_ShareAtExcel()
55.                     {
56.                             ArrayResize(szSymbol, 0);
57.                             Message("Finished");
58.                     }
59. //+------------------------------------------------------------------+
60.             void Looping(int seconds)
61.                     {
62.                             string  szInfo;
63.                             int     file;
64.                             
65.                             while ((!_StopFlag) && (!bError))
66.                             {
67.                                     szInfo = "";
68.                                     for (int c0 = 0; c0 < maxBuff; c0++)
69.                                             szInfo += StringFormat("%s;%0.2f\r\n", szSymbol[c0], iClose(szSymbol[c0], PERIOD_D1, 0));
70.                                     if ((file = FileOpen(szFileName, FILE_TXT | FILE_WRITE | FILE_ANSI | FILE_SHARE_WRITE)) != INVALID_HANDLE)
71.                                     {
72.                                             FileWriteString(file, szInfo);
73.                                             FileClose(file);
74.                                     };
75.                                     Sleep(seconds * 1000);
76.                             }
77.                     }
78. //+------------------------------------------------------------------+
79. };
80. //+------------------------------------------------------------------+
81. C_ShareAtExcel *share;
82. //+------------------------------------------------------------------+
83. void OnStart()
84. {
85.     share = new C_ShareAtExcel(user01);
86.     
87.     share.Looping(2);
88.     
89.     delete share;
90. }
91. //+------------------------------------------------------------------+

Исходный код сервиса

Как видите, код получился очень компактным. Однако, как это принято, здесь мы используем класс, чтобы, если в будущем будет принято такое решение, код можно было повторно использовать в другом типе приложения. Но ничто не мешает вам создать этот же код в виде отдельной процедуры со всем содержимым внутри функции OnStart.

Давайте теперь перейдем к деталям и объяснению того, как работает код. Таким образом, даже если мы только начинаем работать с MQL5, мы сможем адаптировать его для передачи другой информации в Excel. Примечание: здесь я имею в виду Excel, но ничто не мешает нам переносить данные в другие программы или системы.

В строке 02 указывается принадлежность кода. Это сообщит MQL5, что код следует рассматривать как сервис. Если хотите использовать его как скрипт, отключите или удалите данную строку. Это не повлияет на работу или выполнение кода, а лишь свяжет его с графиком, чтобы он мог работать.

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

В строке 10 мы начинаем создание нашего класса. Обратите внимание на строку 12, где мы объявляем приватную часть. Всё, что будет происходить с этого момента, будет приватной частью этого класса и не может быть доступно извне. Далее мы объявляем несколько глобальных переменных для класса, а сразу после этого, в строке 18, создаем процедуру для стандартизации сообщений, которые выводятся на терминал. Данные сообщения показывают, что делает сервис.

В строке 24 мы объявляем публичную часть. С этого момента ко всему, что находится в классе, можно получить доступ, как если бы оно было частью класса. Сразу после этого мы начинаем создавать конструктор для класса в строке 26. В качестве аргумента он получает имя файла, который будет использован. Обратите внимание, что программирование построено таким образом, что класс не является частью сервисного кода. Это правильный способ работы с объектно-ориентированным программированием (ООП). Даже если у нас есть информация в строке 08, мы должны думать, как будто у нас её нет и она будет передана позже.

Здесь, в строке 33, мы попытаемся открыть указанный файл. Если не получилось, мы укажем это в строке 35, и код вернется к строке 36. Но если к файлу можно получить доступ, мы начнем его читать. Чтение будет выполняться построчно, используя цикл, который начинается со строки 38. В строке 40 мы считываем полную строку из указанного файла. В строке 41 мы изолируем код символа от любой другой информации, присутствующей в нем. Прошу заметить, что мы используем разделитель (;) с точкой с запятой.

Если строка 41 показывает, что система действующая, мы выделим новую ячейку памяти и сохраним в ней код символа. Обратите внимание, что код не обязательно должен быть в верхнем регистре, поскольку мы настраиваем его в строке 45. Заметьте, однако, что не существует никакой проверки того, существует ли символ на самом деле. То есть нам нужно указать код действующего символа. Однако в данном случае такая проверка не совсем обязательна. Я имею в виду проверку кода символа, поскольку, когда данные будут загружены в Excel, мы быстро поймем, есть ли что-то странное, и сможем это исправить. Поэтому нет необходимости проверять код символа в MQL5.

Если всё прошло успешно, закроем файл и сообщим терминалу, что сервис активен, используя строку 51.

Далее мы рассмотрим деструктор класса. Его код начинается со строки 54. Всего в двух строках данный деструктор освободит выделенную память и сообщит, что класс удаляется из списка задач системы.

Теперь в строке 60 находится основная процедура нашей программы. Данная процедура заставит класс оставаться в цикле до тех пор, пока сервис не будет завершен. Цикл начинается со строки 65. Внимание: данный цикл не создает нагрузок на процессор или платформу. Между выполнением одной и другой задачи мы устанавливаем интервал, чтобы можно было выполнить и другие задачи. Данный интервал задается в секундах и передается в качестве аргумента в вызове. Этот аргумент используется в строке 75, где пауза возникает перед выполнением следующего цикла.

Именно здесь, внутри данного цикла, и происходит волшебство. В строке 67 мы очищаем содержимое строки для сохранения в файл. Чтобы сделать запись максимально быстрой, поскольку мы можем писать, пока Excel считывает данные (да, такое может случиться), в строке 68 выполняется цикл. В этом цикле в строке 69 будут построены данные для отправки в Excel. На этом этапе можно разместить всё, что угодно. Буквально всё.

Когда цикл на строке 68 завершится, мы попытаемся получить доступ к файлу на строке 70. Внимание: обычно попытка записи в файл в то же время, когда другое приложение пытается его прочитать, приводит к ошибкам доступа. Некоторые из этих ошибок могут привести к сбоям в передаче данных. Данный тип сбоя широко изучается при работе с алгоритмами "производитель-потребитель". Но в этом случае MQL5, к счастью, позволяет нам использовать флаг FILE_SHARE_WRITE, который сообщает системе о том, что мы можем обращаться к файлу одновременно с другим приложением.

Если нам удалось записать файл, он будет сохранен в одном вызове, в строке 72. Сразу после этого, в строке 73, файл закрывается.

Таким образом, цикл завершается и продолжается в течение всего времени.


Заключение

В этой статье мы узнали, как просто и интересно перенести данные из MetaTrader 5 в Excel - идеальный способ отслеживания портфеля или сделок, которые не требуют обновления в реальном времени.

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


Перевод с португальского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/pt/articles/11794

Прикрепленные файлы |
ShareAtExcel.mq5 (4.03 KB)
Последние комментарии | Перейти к обсуждению на форуме трейдеров (1)
SuperTaz
SuperTaz | 3 окт. 2025 в 17:43

Файл "quote.csv" должен быть сохранен в кодировке ANSI.

Это все еще не работает, есть еще одна ошибка, которую нужно обнаружить...

Моделирование рынка (Часть 07): Сокеты (I) Моделирование рынка (Часть 07): Сокеты (I)
Сокеты. Знаете ли вы, для чего они нужны или как их использовать в MetaTrader 5? Если ответ отрицательный, давайте начнем с их изучения. В сегодняшней статье рассмотрим основы. Но поскольку существует несколько способов сделать то же самое, а нас всегда интересует результат, я хочу показать, что в самом деле существует простой способ передачи данных из MetaTrader 5 в другие программы, такие как, например, Excel. Однако основная идея заключается не в том, чтобы перенести данные из MetaTrader 5 в Excel, а в обратном, то есть в переносе данных из Excel или любой другой программы в MetaTrader 5.
Нейросети в трейдинге: Модели многократного уточнения прогнозов (Окончание) Нейросети в трейдинге: Модели многократного уточнения прогнозов (Окончание)
Представляем фреймворк RAFT — мощный инструмент для анализа и прогнозирования финансовых временных рядов. Его гибкая и оптимизированная архитектура обеспечивает точность прогнозов, стабильность работы и ускоряет обработку данных. RAFT снижает риски ошибок и облегчает создание эффективных торговых стратегий.
Система самообучения с подкреплением для алгоритмической торговли на MQL5 Система самообучения с подкреплением для алгоритмической торговли на MQL5
В статье создаётся многоагентная система машинного обучения для алгоритмической торговли на MetaTrader 5 на основе обучения с подкреплением. Система имеет трёхуровневую архитектуру: нейроны памяти хранят опыт, агенты принимают независимые решения, коллективный разум объединяет их через взвешенное голосование. Система непрерывно совершенствуется через Q-обучение, прунинг неэффективных нейронов и эволюционное снижение исследования.
От новичка до эксперта: Мониторинг бэкэнд операций с использованием MQL5 От новичка до эксперта: Мониторинг бэкэнд операций с использованием MQL5
Использование готового решения в торговле, не вникая во внутреннюю работу системы, может показаться комфортным, но это не всегда так для разработчиков. В конечном итоге может возникнуть проблема с обновлением, некорректной работой или непредвиденной ошибкой, и становится важным точно определить источник проблемы, чтобы быстро ее диагностировать и устранить. Сегодняшнее обсуждение посвящено раскрытию того, что обычно происходит за кулисами работы торгового советника, а также разработке специального пользовательского класса для отображения и ведения лога внутренних процессов с использованием MQL5. Это дает как разработчикам, так и трейдерам возможность быстро находить ошибки, отслеживать поведение и получать доступ к диагностической информации, специфичной для каждого советника.