bifurcado de antekov/mt5-manager
# Настройки и конфигурация
| |
| |
[Документация](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` | Обязательное; для начала `{}` | Словарь управляемых экземпляров |
| |
| `mt5_folder` | Обязательное | Базовая папка всех существующих и новых экземпляров |
| |
| `mt5_exe` | Обязательное; указывайте `terminal64.exe` | Имя исполняемого файла; создание поддерживает именно это имя |
| |
| `database` | Обязательное | Полный путь к общей SQLite в `Common/Files` пользователя Windows |
| |
| `terminal_template` | `terminal-template` | Единственная папка исходной установки с terminal64.exe и MetaEditor64.exe |
| |
| `startup_timeout_sec` | 180 | Ожидание состояния на каждом этапе запуска, от 10 до 900 секунд |
| |
| `disk_warning_mb` | 1024 | Минимальный желаемый запас после копирования, в МиБ; допускается 0 |
| |
| |
Относительные пути разрешаются от папки выбранного JSON, а не от папки скрипта.
| |
При сохранении менеджер записывает разрешённые пути. Переменные окружения внутри
| |
строк JSON, например `%APPDATA%`, не раскрываются: подставляйте готовый путь.
| |
| |
На странице «Настройки» меняются базовая папка терминалов и папка исходной
| |
установки MT5. В сворачиваемом разделе «Дополнительные параметры» доступны
| |
максимальное время ожидания запуска и порог предупреждения о свободном месте.
| |
Они сохраняются вместе с папками кнопкой «Сохранить настройки». После изменения `mt5_folder`
| |
менеджер предложит перенести папки существующих экземпляров и при необходимости
| |
штатно остановить терминалы. При отмене настройки не сохраняются. После переноса
| |
терминалы остаются остановленными. Одноимённые папки назначения не объединяются.
| |
Если проект менеджера находится внутри базовой папки, её поле заблокировано:
| |
сначала перенесите проект за её пределы. Ручное редактирование JSON файлы не переносит.
| |
| |
## Исходная установка и файлы экземпляров
| |
| |
Оба EXE берутся только из `terminal_template`. Эта папка может находиться вне
| |
`mt5_folder` и не обязана содержать сам проект менеджера. После сохранения настроек
| |
под полем этой папки показывается результат проверки обоих EXE. Для отсутствующих
| |
файлов доступен сворачиваемый блок загрузки внутри «Размещения терминалов»;
| |
существующие файлы не заменяются. При несохранённом пути результат прежней проверки
| |
не показывается и загрузка недоступна.
| |
Общего `servers.dat` больше нет: пользователь при необходимости выбирает его
| |
в форме создания экземпляра. Выбранный файл целиком копируется в
| |
`config/servers.dat` только новой копии. Без загрузки менеджер не копирует этот файл.
| |
| |
Сервис собирается из `ServiceStateWriter.mq5` текущего проекта через
| |
`terminal_template/MetaEditor64.exe`. Если EX5 не старее исходника, при создании
| |
можно использовать уже собранный файл. Кнопка раскладывания принудительно пересобирает
| |
сервис. Готовый EX5 из исходной установки не используется.
| |
При отдельном размещении проекта результат сборки находится рядом с исходником;
| |
в `MQL5/Shared Projects` MetaEditor переносит его в каталог сервисов терминала.
| |
В экземпляры сервис по-прежнему копируется в
| |
`MQL5/Services/Shared Projects/mt5-manager/ServiceStateWriter.ex5`.
| |
| |
При чтении старой конфигурации непустой `mt5_installation` становится значением
| |
`terminal_template`. Устаревшие `mt5_installation` и `service_ex5` удаляются из
| |
конфигурации в памяти и исчезают из JSON при следующем сохранении.
| |
| |
## Запись экземпляра
| |
| |
Ключ `terminals` — имя папки, по которому сервис регистрируется в SQLite:
| |
| |
```json
| |
{
| |
"MetaTrader5.5": {
| |
"name": "Демо-терминал",
| |
"login": "",
| |
"server": "",
| |
"password": ""
| |
}
| |
}
| |
```
| |
| |
Это фрагмент содержимого `terminals`, а не полная конфигурация. При создании
| |
имя предлагается автоматически, но его можно изменить. Для новых имён
| |
проверяется допустимость одного компонента пути Windows и отсутствие занятого
| |
имени без учёта регистра. Имена папок разных экземпляров должны быть уникальны,
| |
поскольку база использует имя папки как ключ. Имя экземпляра — один компонент
| |
пути Windows, без вложенных каталогов.
| |
| |
`name` — отображаемое название; оно не переименовывает папку. Расположение всегда
| |
вычисляется как `mt5_folder / имя экземпляра`. Поле `path` из старых конфигураций
| |
игнорируется и удаляется при следующем сохранении. Само чтение конфигурации
| |
не переписывает файл.
| |
| |
После изменения базовой папки поиск процессов, запуск и распространение сервиса
| |
сразу используют новые пути. Менеджер не переносит файлы и не останавливает процессы
| |
в прежнем каталоге. Если новой папки ещё нет или она указана неверно, экземпляр
| |
не будет найден, пока вы не исправите базу или не разместите терминал по нужному пути.
| |
Несколько терминалов могут использовать один торговый счёт.
| |
| |
## Реквизиты счёта
| |
| |
Пустые `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.
| |
Менеджер открывает базу только для чтения и не создаёт файл при ошибке пути.
| |
Сервис при открытии создаёт отсутствующий файл и таблицы `terminals` и `states`,
| |
в том числе когда файл SQLite уже существует, но пуст. Ошибки создания таблиц
| |
попадают в журнал сервиса, после чего открытие повторяется на следующей итерации.
| |
Полный путь базы выводится при запуске сервиса и в сообщениях об ошибках чтения Python.
| |
При создании экземпляра менеджер берёт только имя файла из `database` и подставляет
| |
его в `services.ini`. Размещение Python-базы в другой папке приведёт к расхождению.
| |
| |
| Параметр сервиса | Значение в образце | Назначение |
| |
|---|---|---|
| |
| `InpDatabase` | `mt5-manager.sqlite` | Имя базы внутри `Common/Files` |
| |
| `InpIntervalSec` | 2 | Основной интервал записи в секундах |
| |
| `InpJitterMs` | 1000 | Случайная добавка к паузе в миллисекундах |
| |
| `InpBusyTimeout` | 3000 | Ожидание блокировки SQLite в миллисекундах |
| |
| |
Последнее состояние хранится с Unix-временем в секундах. Миллисекунды в параметрах
| |
паузы и ожидания SQLite остаются единицами этих параметров. Для уже установленных
| |
копий команда «Собрать и разложить сервис» проверяет запись ServiceStateWriter
| |
в `config/services.ini` и восстанавливает её автозапуск. При необходимости изменения
| |
конфигурации сначала остановите терминал. Остальные сервисы и заданные интервалы
| |
сохраняются.
|