English 中文 Español Deutsch 日本語 Português
Структура данных в MetaTrader 4 build 600 и выше

Структура данных в MetaTrader 4 build 600 и выше

MetaTrader 4Примеры | 17 февраля 2014, 11:41
11 612 3
MetaQuotes
MetaQuotes

Введение

Начиная с 600 билда MetaTrader 4, изменилась структура, а также место хранения файлов клиентского терминала. Теперь MQL4-программы разнесены по отдельным каталогам в зависимости от типа программы (эксперты, индикаторы, скрипты). Данные терминала в большинстве случаев теперь хранятся в специальном каталоге данных отдельно от места установки терминала. В данной статье мы подробно опишем, каким образом осуществляется перенос данных, а также причины введения такой системы хранения.


Почему была введена новая система хранения данных

Система Microsoft Windows XP, выпущенная 13 лет назад, разрешает программам записывать собственные данные по месту установки, даже если она была произведена в системную папку Program Files. Для записи в любую папку пользователю достаточно иметь администраторские права на компьютере.

При работе в 64-битных системах для 32 и 64-битных приложений предусмотрены отдельные каталоги установки: Program Files и Program Files (x86). Особенности работы, описанные в статье, относятся к обоим каталогам.

Начиная с Windows Vista, компания Microsoft ввела ограничение на запись в каталог Program Files. Так, при включенной системе User Account Control (UAC) программам запрещается хранить собственные данные в каталоге Program Files. Все данные должны сохраняться в отдельном каталоге пользователя. Такое ограничение было введено с целью защиты от вредоносных программ, а также для того чтобы работа с программой под одной учетной записью никак не могла изменить или испортить данные этой же программы, необходимые для другой учетной записи. В дальнейшем требования безопасности в операционных системах Microsoft только усиливались, в частности, начиная с Windows 8, система UAC не отключается никогда, даже если в ее настройках установлена опция "Никогда не уведомлять".

Для обеспечения совместимости старых программ при использовании UAC Microsoft ввела систему виртуализации. Если программа пытается сохранить свои данные в каталог Program Files, то фактически (физически) эти данные сохраняются в отдельном каталоге вида C:\Users\<имя-пользователя>\AppData\Local\VirtualStore\Program Files. При этом проводник Windows показывает файлы так, как будто они сохраняются в каталоге установки. Компания Microsoft заявляет, что данный режим предусмотрен только для совместимости и в последующем может быть убран.

Для соответствия рекомендациям Microsoft, начиная с 600 билда, в клиентском терминале MetaTrader 4 изменена структура хранения данных. Терминал теперь также будет сохранять свои данные в каталоге пользователя.


Каталог данных пользователя

В новой версии все данные конкретного пользователя, работающего с определенной копией терминала MetaTrader 4, хранятся в специальном месте, называемом каталог данных терминала. Находится этот каталог на системном диске (диске, на котором установлена операционная система Windows) по пути следующего вида

C:\Users\Имя_учетной_записи\AppData\Roaming\MetaQuotes\Terminal\Instance_id
гдe:
  • С: - имя системного диска;
  • Имя_учетной_записи - учетная запись пользователя, под которой он работает в Windows;
  • Instance_id - уникальное имя папки, в которой хранятся данные этого пользователя для работы с конкретной копией терминала MetaTrader 4. Уникальное имя состоит из 16 символов. Имя генерируется на основе пути к каталогу установки терминала, поскольку путь к каталогу установки терминала в явном виде не может быть использован в качестве имени папки. Достаточно большая длина уникального имени обусловлена тем, что на одном компьютере может быть установлено множество копий терминала.

В меню терминала "Файл" добавлена команда "Открыть каталог данных" для поиска и открытия каталога данных.

Открыть каталог данных

В корне каждого каталога данных терминала также находится файл origin.txt, который содержит путь к папке установки терминала, к которой относятся эти данные. Это позволяет сопоставить каждый каталог данных терминала с конкретным каталогом установки терминала, например, если у пользователя установлено несколько копий терминала MetaTrader 4. Такой способ работы с терминалом, когда каталог данных находится отдельно от каталога установки, является основным режимом.

Для дополнительного удобства при каждом запуске терминала в его журнал выводится запись, в которой указывается путь к каталогу данных. Например:

2014.02.10 12:48:28.477 Data Folder: C:\Users\JohnSmith\AppData\Roaming\MetaQuotes\Terminal\9F86138A4E27C7218E9EC98A5F8D8CA1


Перенос файлов MQL4-программ при обновлении на MetaTrader 4 build 600 и выше

При запуске после обновления терминал проверяет, и если его нет, то создает каталог данных. Если этот каталог отличается от каталога установки, в него производится копирование штатных данных терминала - стандартные MQL4-программы, исторические данных, конфигурационные файлы, шаблоны и т.д. В каталоге установки остаются только те файлы, которые терминал не изменяет в процессе работы (исполняемые файлы, компилятор mql.dll, звуковые файлы и т.д.). Каталог данных терминала будет отличаться от каталога установки в следующих случаях:

  • Если включена система UAC. Исключением является случай, когда терминал установлен на переносном устройстве (внешний жесткий диск, usb флеш-накопитель и т.д.).
  • Если у текущего пользователя компьютера ограничены права на запись в каталог установки.
  • Если пользователь работает через удаленное соединение (RDP).

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

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

Исходная папка в каталоге установки
Содержимое Конечная папка в каталоге данных терминала
\experts
Эксперты (торговые роботы)
Примечание: переносятся только файлы из корневого каталога \experts. Никакие подкаталоги не переносятся, поскольку невозможно достоверно определить их содержимое.
\MQL4\Experts
\experts\indicatorsПользовательские индикаторы
\MQL4\Indicators
\experts\scripts
Скрипты (программы на MQL4 для однократного выполнения на графике)\MQL4\Scripts
\experts\includeВключаемые в другие программы файлы исходного кода с расширением MQH и MQ4\MQL4\Include
\experts\librariesБиблиотеки в виде исходного кода MQ4 и скомпилированные из них исполняемые файлы EX4 для динамического вызова собранных в них функций другими MQL4-программами\MQL4\Libraries
\experts\filesСпециальная "файловая песочница", только в пределах этой папки MQL4-программам разрешается выполнять файловые операции\MQL4\Files
\experts\logs
Файлы журналов работы MQL4-программ
\MQL4\Logs
\experts\presets
Файлы наборов настроек для MQL4-программ
\MQL4\Presets
\experts\images
Файлы картинок для использования в ресурсах\MQL4\Images


Далее проверяется, хранил ли клиентский терминал данные в каталоге виртуализации (виртуальное хранилище операционной системы, описанное выше). В большинстве случаев, когда терминал установлен в каталоге Program Files и операционной системой является Windows Vista и выше, данные терминала хранятся именно в этом каталоге. Если данные обнаружены, осуществляется их копирование по вышеописанной схеме.

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

При копировании в процессе миграции в журнал терминала выводятся записи о том, откуда были скопированы файлы и куда. Для просмотра журналов целиком откройте вкладку "Журнал" в окне "Терминал" и выполните команду "Открыть" в контекстном меню. Будет открыт каталог, в котором хранятся файлы журнала терминала.

Если процесс миграции успешно выполнен для данной копии терминала, то при последующих обновлениях терминала MetaTrader 4 миграция уже не производится. Если каталог данных отличается от каталога установки и при миграции были перенесены не только стандартные файлы, но и пользовательские MQL4-программы, показывается информационный диалог:

Успешное завершение миграции


Режим Portable

Для работы терминала на съемных носителях, в несистемных каталогах, а также для работы в Windows XP в терминале предусмотрен режим запуска Portable. При запуске в данном режиме терминал будет пытаться сохранять свои данные в каталоге установки. В то же время запуск в режиме Portable не гарантирует того, что операционная система разрешит хранение данных в каталоге установки (например, если терминал установлен в каталог Program Files и включена система UAC).

Для возможности работы в режиме Portable необходимо соблюдение следующих требований:

Каталог установки
Операционная система
Требования
Program Files или другой системный каталог (например, Windows)
Windows XP
Наличие прав на запись в каталог установки
Другой несистемный каталог
Windows XP
Наличие прав на запись в каталог установки
Внешний жесткий диск, usb флеш-накопитель и т.д.Windows XPТерминал всегда будет запускаться в режиме Portable
Program Files или другой системный каталог (например, Windows)Windows Vista\Windows 7
Запуск терминала от имени администратора и отключенная система UAC
Другой несистемный каталогWindows Vista\Windows 7
Наличие прав на запись в каталог установки
Внешний жесткий диск, usb флеш-накопитель и т.д.Windows Vista\Windows 7Терминал всегда будет запускаться в режиме Portable
Program Files или другой системный каталог (например, Windows)
Windows 8 и выше
Запуск в режиме Portable невозможен, поскольку система UAC не отключается
Другой несистемный каталогWindows 8 и выше
Наличие прав на запись в каталог установки
Внешний жесткий диск, usb флеш-накопитель и т.д.Windows 8 и вышеТерминал всегда будет запускаться в режиме Portable


  • Если вы пользуетесь системой Windows Vista или выше и терминал установлен в Program Files, использование режима Portable не рекомендуется. Данный режим фактически предусмотрен для работы терминала на съемных носителях, а также для работы в Windows XP.
  • Если вы осуществили обновление терминала и все данные были скопированы в отдельный каталог данных пользователя, не рекомендуется пытаться перейти на использование режима Portable.
  • Для использования режима Portable после переноса данных в каталоге данных пользователя необходимо самостоятельно скопировать данные в каталог установки. Запуск терминала в режиме Portable не выполняет копирование данных из каталога данных в каталог установки.

Чтобы запустить терминал в режиме Portable, необходимо использовать ключ "/portable". Для удобства на Рабочем столе можно создать дополнительный ярлык запуска терминала с нужным именем и добавить ключ прямо в ярлык:

Запуск MetaTrader 4 в режиме Portable


Заключение

Изменение системы хранения данных терминалов MetaTrader 4 продиктовано требованиями операционных систем Windows, разрабатываемых компанией Microsoft. Такая система хранения данных была изначально использована в MetaTrader 5, и в настоящий момент она успешно используется многочисленными пользователями.

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

Последние комментарии | Перейти к обсуждению на форуме трейдеров (3)
[Удален] | 7 мар. 2014 в 06:19

Спасибо за запоздалую информацию. На самом деле, Вы уже пробовали эту тему и на ранних "билдах". Сейчас обновления терминала происходят в темную, без участия пользователя. Так вот, очевидно после очередного обновления, примерно год назад, вдруг диск С (201 ГБ) стал красным. Вирус?. Снес и восстановил систему(Windows-7(64))- бесполезно, все повторяется. Нашел причину: все правильно- пользователели/роуминг/Ваша папка. Надоело периодически её удалять, перенёс терминал на другой диск(2-ТБ!!!)- Ваша папка Logs, стала и его съедать. Смирился, подумал, что это происки Майкрософт и постоянно удалял эту папку. Всё вроде хорошо, но в определенный момент заметил странности в сохранении файлов. Стали пропадать изменения сделанные в программах. Несколько дней упорного труда, сохранил и все псу под хвост, открываешь файл - а там записано, то что ты уже давно забыл. Стал отключать интернет-вроде помогло. После "билд 600", всё стало гораздо хуже. Доходит до смешного: перерабатываешь файл под новую форму- все работает. Копируешь его во вновь созданную форму под другим именем-отладчик его бракует по произвольной причине. Но первоначальный файл проходит и отладчик и прекрасно работает. Или вот советник, уже переделанный под новые требования вдруг взбрыкивает, компилируешь, смотришь ошибку:откуда-то взялся давно удаленный mgh . Дополнительно: тестер не понимает конструкции Plot Arroy, приходится прописывать стрелки по старому. Уже прочитав Вашу статью, вспомнил что пару раз обновлял терминал "поверх" что не очень хорошо для многих программ. Скопировал нужные папки из 2-х мест: с диска С и из папки терминала. Терминал переустановил в чистую. Но всё что я скопировал оказалось полностью не соответсвующим реальному содержанию!! Вывод простой: из-за " дублирования " записей в двух местах терминал и редактор полностью или частично потеряли возможность адекватной работы в части обработки и создания пользовательских программ на компах с ОС Windows7(64)

rambo
rambo | 5 авг. 2014 в 13:34
Здравствуйте! Подскажите, пожалуйста, как теперь запускать советники в новом варианте МТ4? Раньше, было все просто - файл с расширением .ex4 копировался в папку experts и при перезапуске терминала советник был в числе доступных. Теперь же копирование в новую папку  MQL4\experts ничего не дает. Подскажите, пожалуйста, куда необходимо скопировать искомый файл советника .ex4 чтобы советник появился в списке доступных в терминале МТ4?
Oleg Sorokin
Oleg Sorokin | 16 нояб. 2015 в 14:28
Здравствуйте! Не могу ни как найти корни терминала, как прописывается он в винде в виде какого файла, а именно версии билдов где прописываются, мне нужно полностью со всеми следами удалить терминал чтобы загрузить более старую версию на время, как сделать может кто подскажет где тот файл прописывается в виндоус, который всё время при инсталяции активирует новый билд?
Рецепты MQL5 - Разработка мультивалютного индикатора для анализа расхождения цен Рецепты MQL5 - Разработка мультивалютного индикатора для анализа расхождения цен
В этой статье рассмотрим разработку мультивалютного индикатора для анализа расхождения цен за указанный период времени. Многие основные моменты уже рассматривались в предыдущей статье по программированию мультивалютных индикаторов "Разработка мультивалютного индикатора волатильности на MQL5". Поэтому на этот раз будем останавливаться только на новых функциях и тех функциях, которые претерпели сильные изменения. Если Вы впервые рассматриваете тему программирования мультивалютных индикаторов, то рекомендуется в первую очередь прочитать предыдущую статью.
SQL и MQL5: Работаем с базой данных SQLite SQL и MQL5: Работаем с базой данных SQLite
Данная статья рассчитана на программистов, проявившим интерес к использованию SQL в своих проектах. В статье читателям представляется функциональность SQLite, а также рассматриваются ее преимущества. Статья не требует знание функций SQLite, но минимальные знания SQL приветствуются.
Обновление на новый MetaTrader 4 билд 600 и выше Обновление на новый MetaTrader 4 билд 600 и выше
В новой версии терминала MetaTrader 4 была изменена структура хранения пользовательских данных. Если раньше все программы, шаблоны, профили и т.д. хранились прямо в папке установки терминала, то теперь данные, необходимые для работы конкретного пользователя терминала, хранятся в отдельной специальной папке, называемой каталог данных. В этой статье собраны ответы на популярные вопросы.
Оффлайновые графики и новый MQL4 Оффлайновые графики и новый MQL4
В новом MQL4 изменился формат хранения исторических данных и появилась соответствующая структура MqlRates для удобного хранения значений Time, Open, Low, High, Close и Volume. За многие годы трейдеры написали на MQL4 свои программы, которые собирают и записывают собственные данные в HST-файлы для создания оффлайновых графиков. Каждый трейдер может быть уверен - все ранее скомпилированные EX4-файлы будут работать в новом терминале MetaTrader 4 так же, как и раньше.