2026-10-29 14:39:39 +03:00 | | | # Настройки и конфигурация
|
| | |
|
| | | [Документация](README.md) · [Установка](installation.md) · [Эксплуатация](maintenance.md)
|
| | |
|
| | | ## Выбор файла
|
| | |
|
| | | `python run.py --config-file config.local.json` выбирает файл настроек менеджера.
|
| | | Без аргумента используется `config.json` из рабочего каталога. Параметры запуска
|
| | | сети: `--host` (по умолчанию `0.0.0.0`) и `--port` (8000).
|
| | |
|
| | | Менеджер читает JSON при запуске. Изменения через веб-интерфейс сохраняются
|
| | | атомарной заменой файла и сразу применяются к конфигурации в памяти. Изменения
|
| | | JSON вручную требуют перезапуска менеджера. Не редактируйте файл одновременно
|
| | | с сохранением через интерфейс.
|
| | |
|
| | | Начальный документ без счетов находится в [config.example.json](../config.example.json).
|
| | | При подготовке личного файла замените `USERNAME` в `database` на путь текущего
|
| | | пользователя, как показано в [быстром старте](../README.md).
|
| | |
|
| | | ## Общие параметры JSON
|
| | |
|
| | | | Поле | Обязательность / значение по умолчанию | Назначение |
|
| | | |---|---|---|
|
| | | | `terminals` | Обязательное; для начала `{}` | Словарь управляемых экземпляров |
|
2026-10-31 07:26:44 +03:00 | | | | `mt5_folder` | Обязательное | Базовая папка всех существующих и новых экземпляров |
|
2026-10-29 14:39:39 +03:00 | | | | `mt5_exe` | Обязательное; указывайте `terminal64.exe` | Имя исполняемого файла; создание поддерживает именно это имя |
|
| | | | `database` | Обязательное | Полный путь к общей SQLite в `Common/Files` пользователя Windows |
|
2026-11-01 11:14:41 +03:00 | | | | `terminal_template` | `terminal-template` | Единственная папка исходной установки с terminal64.exe и MetaEditor64.exe |
|
2026-10-29 14:39:39 +03:00 | | | | `startup_timeout_sec` | 180 | Ожидание состояния на каждом этапе запуска, от 10 до 900 секунд |
|
| | | | `disk_warning_mb` | 1024 | Минимальный желаемый запас после копирования, в МиБ; допускается 0 |
|
| | |
|
| | | Относительные пути разрешаются от папки выбранного JSON, а не от папки скрипта.
|
| | | При сохранении менеджер записывает разрешённые пути. Переменные окружения внутри
|
| | | строк JSON, например `%APPDATA%`, не раскрываются: подставляйте готовый путь.
|
| | |
|
2026-11-01 11:14:41 +03:00 | | | На странице «Настройки» меняются базовая папка терминалов и папка исходной
|
| | | установки MT5. В сворачиваемом разделе «Дополнительные параметры» доступны
|
| | | максимальное время ожидания запуска и порог предупреждения о свободном месте.
|
| | | Они сохраняются вместе с папками кнопкой «Сохранить настройки». После изменения `mt5_folder`
|
2026-11-02 18:42:23 +03:00 | | | менеджер предложит перенести папки существующих экземпляров и при необходимости
|
| | | штатно остановить терминалы. При отмене настройки не сохраняются. После переноса
|
| | | терминалы остаются остановленными. Одноимённые папки назначения не объединяются.
|
| | | Если проект менеджера находится внутри базовой папки, её поле заблокировано:
|
| | | сначала перенесите проект за её пределы. Ручное редактирование JSON файлы не переносит.
|
2026-11-01 11:14:41 +03:00 | | |
|
| | | ## Исходная установка и файлы экземпляров
|
| | |
|
| | | Оба EXE берутся только из `terminal_template`. Эта папка может находиться вне
|
| | | `mt5_folder` и не обязана содержать сам проект менеджера. После сохранения настроек
|
| | | под полем этой папки показывается результат проверки обоих EXE. Для отсутствующих
|
| | | файлов доступен сворачиваемый блок загрузки внутри «Размещения терминалов»;
|
| | | существующие файлы не заменяются. При несохранённом пути результат прежней проверки
|
| | | не показывается и загрузка недоступна.
|
2026-11-01 19:40:01 +03:00 | | | Общего `servers.dat` больше нет: пользователь при необходимости выбирает его
|
| | | в форме создания экземпляра. Выбранный файл целиком копируется в
|
| | | `config/servers.dat` только новой копии. Без загрузки менеджер не копирует этот файл.
|
2026-11-01 11:14:41 +03:00 | | |
|
| | | Сервис собирается из `ServiceStateWriter.mq5` текущего проекта через
|
| | | `terminal_template/MetaEditor64.exe`. Если EX5 не старее исходника, при создании
|
| | | можно использовать уже собранный файл. Кнопка раскладывания принудительно пересобирает
|
| | | сервис. Готовый EX5 из исходной установки не используется.
|
| | | При отдельном размещении проекта результат сборки находится рядом с исходником;
|
| | | в `MQL5/Shared Projects` MetaEditor переносит его в каталог сервисов терминала.
|
| | | В экземпляры сервис по-прежнему копируется в
|
2026-10-31 06:48:02 +03:00 | | | `MQL5/Services/Shared Projects/mt5-manager/ServiceStateWriter.ex5`.
|
2026-10-29 14:39:39 +03:00 | | |
|
2026-11-01 11:14:41 +03:00 | | | При чтении старой конфигурации непустой `mt5_installation` становится значением
|
| | | `terminal_template`. Устаревшие `mt5_installation` и `service_ex5` удаляются из
|
| | | конфигурации в памяти и исчезают из JSON при следующем сохранении.
|
2026-10-29 14:39:39 +03:00 | | |
|
| | | ## Запись экземпляра
|
| | |
|
| | | Ключ `terminals` — имя папки, по которому сервис регистрируется в SQLite:
|
| | |
|
| | | ```json
|
| | | {
|
| | | "MetaTrader5.5": {
|
| | | "name": "Демо-терминал",
|
| | | "login": "",
|
| | | "server": "",
|
| | | "password": ""
|
| | | }
|
| | | }
|
| | | ```
|
| | |
|
| | | Это фрагмент содержимого `terminals`, а не полная конфигурация. При создании
|
| | | имя предлагается автоматически, но его можно изменить. Для новых имён
|
| | | проверяется допустимость одного компонента пути Windows и отсутствие занятого
|
| | | имени без учёта регистра. Имена папок разных экземпляров должны быть уникальны,
|
2026-10-31 07:26:44 +03:00 | | | поскольку база использует имя папки как ключ. Имя экземпляра — один компонент
|
| | | пути Windows, без вложенных каталогов.
|
| | |
|
| | | `name` — отображаемое название; оно не переименовывает папку. Расположение всегда
|
| | | вычисляется как `mt5_folder / имя экземпляра`. Поле `path` из старых конфигураций
|
| | | игнорируется и удаляется при следующем сохранении. Само чтение конфигурации
|
| | | не переписывает файл.
|
| | |
|
| | | После изменения базовой папки поиск процессов, запуск и распространение сервиса
|
| | | сразу используют новые пути. Менеджер не переносит файлы и не останавливает процессы
|
| | | в прежнем каталоге. Если новой папки ещё нет или она указана неверно, экземпляр
|
| | | не будет найден, пока вы не исправите базу или не разместите терминал по нужному пути.
|
2026-10-29 14:39:39 +03:00 | | | Несколько терминалов могут использовать один торговый счёт.
|
| | |
|
| | | ## Реквизиты счёта
|
| | |
|
| | | Пустые `login`, `server` и `password` означают использование сохранённых настроек
|
| | | самого терминала. Если их у терминала нет, он запускается без подключения.
|
| | | Для нового экземпляра с заданным счётом нужен полный набор из трёх значений.
|
| | | Номер счёта должен быть положительным целым; его можно передать числом или строкой.
|
| | |
|
| | | В интерфейсе пустое поле пароля сохраняет прежний пароль менеджера. Флажок
|
| | | «Убрать реквизиты из менеджера» очищает три поля менеджера, но не сохранённый
|
| | | счёт внутри терминала. После применения терминал использует собственные настройки.
|
| | | Старые записи с логином и сервером без пароля допустимы, если терминал уже умеет
|
| | | подключаться к этому счёту; при необходимости перенастройки потребуется пароль.
|
| | |
|
| | | Пароль хранится в JSON открытым текстом. API не выдаёт его обратно: возвращается
|
| | | `password_set`. Параметры первого входа передаются временным INI в UTF-16,
|
| | | который удаляется после настройки. В `config/common.ini` менеджер сохраняет
|
| | | `Login`, `Server` и `KeepPrivate=1` для последующего обычного запуска.
|
| | |
|
| | | ## База и параметры MQL5-сервиса
|
| | |
|
| | | Python читает `database`, а сервис открывает `InpDatabase` с флагом
|
| | | `DATABASE_OPEN_COMMON`. Они должны указывать на один файл в
|
| | | `%APPDATA%/MetaQuotes/Terminal/Common/Files` одного пользователя Windows.
|
2026-10-31 08:21:17 +03:00 | | | Менеджер открывает базу только для чтения и не создаёт файл при ошибке пути.
|
| | | Сервис при открытии создаёт отсутствующий файл и таблицы `terminals` и `states`,
|
| | | в том числе когда файл SQLite уже существует, но пуст. Ошибки создания таблиц
|
| | | попадают в журнал сервиса, после чего открытие повторяется на следующей итерации.
|
| | | Полный путь базы выводится при запуске сервиса и в сообщениях об ошибках чтения Python.
|
2026-10-29 14:39:39 +03:00 | | | При создании экземпляра менеджер берёт только имя файла из `database` и подставляет
|
| | | его в `services.ini`. Размещение Python-базы в другой папке приведёт к расхождению.
|
| | |
|
| | | | Параметр сервиса | Значение в образце | Назначение |
|
| | | |---|---|---|
|
| | | | `InpDatabase` | `mt5-manager.sqlite` | Имя базы внутри `Common/Files` |
|
| | | | `InpIntervalSec` | 2 | Основной интервал записи в секундах |
|
| | | | `InpJitterMs` | 1000 | Случайная добавка к паузе в миллисекундах |
|
| | | | `InpBusyTimeout` | 3000 | Ожидание блокировки SQLite в миллисекундах |
|
| | |
|
| | | Последнее состояние хранится с Unix-временем в секундах. Миллисекунды в параметрах
|
2026-10-31 14:22:28 +03:00 | | | паузы и ожидания SQLite остаются единицами этих параметров. Для уже установленных
|
| | | копий команда «Собрать и разложить сервис» проверяет запись ServiceStateWriter
|
| | | в `config/services.ini` и восстанавливает её автозапуск. При необходимости изменения
|
| | | конфигурации сначала остановите терминал. Остальные сервисы и заданные интервалы
|
| | | сохраняются.
|