в конце прошлой недели случилось "прощай виндовс", то есть многострадальная ОС на рабочем компе на#@улась. На выходных всё переставил, восстановил и теперь по свежачку "софт который ОБЯЗАТЕЛЬНО должен быть, если вы используете MetaTrader"
СЛУЖБА ВРЕМЕНИ.
В виндовс она как говорится "ни в п. ни красну армию" :-) Время в десктопных Windows существенно плавает даже несмотря на синхронизацию ntp.
До смешного: если в виртуалке запустить Linux, то в нём время будет идти точнее чем в хост-системе.
Поэтому обязательно ставим нормальный ntpd. Берётся Meinberg NTP https://www.meinbergglobal.com/english/sw/ntp.htm#ntp_stable . Не забудьте только почитать инструкции, там всё просто и единственный нюанс - для Win11 рекомендуется создать отдельную учётку для сервиса.
RAM Диск
Нужен для быстрого обмена данными через файлы и базы между советниками,индикаторами и даже между разными терминалами. А также для временных файлов которые не надо "хранить вечно"
Софта для RAM-дисков много разного, на вкус и цвет. Я использую ImDisk https://sourceforge.net/projects/imdisk-toolkit/ С ним всё просто - скачиваем архив, распаковываем, запускаем bat-ник от имени администратора.
Единственное при создании диска ставлю галочку "выделять память динамически"
Далее из каталога COMMON/Files (общий каталог данных всех терминалов) делаю символьную ссылку на созданный RAM-диск:
cd %APPDATA%\MetaQuotes\Terminal\Common\Files
link /D R R:
Теперь любой советник может работать с файлами и базами в %COMMON%/R , которые общие и работают быстро-быстро. Очень удобно и полезно
Планировщик
Для периодических задач можно конечно использовать и системный планировщик. Но у него интерфейс довольно-таки страшный и запутанный, и шаг вправо-влево можно легко что-нибудь испортить. Пусть системный планировщик занимается системными вещами, а для повседневности что-нибудь поудобнее.
Есть офигенный планировщик Z-Cron https://z-dbackup.de/en/z-cron-scheduler/ ; Приятный GUI в трее, запускает задачи по расписанию или при старте
Помимо простого запуска программ, можно планировать встроенные функции (их там много, чуть не более 100) самые очевидно-нужные:
- WATCH - проверить работает ли программа и при необходимости перезапустить
- ZIPFILE, ZIPFOLDER - упаковать файл или каталог в архив
При инсталляции только не забудьте указать чтобы z-cron автостартовал :
На планировщик вешаются:
- инициализация RAM-диска (при старте планировщика - наделать на RAM диске нужных вам каталогов и баз)
- периодическая чистка MetaTrader - удаление старых журналов и кешей,
- простые бекапы
- поддержка MT в постоянной работе
- ping серверов
Бекапы
Тут без комментариев, все и так понимают что бекапы строго нужны. Софт от тех-же авторов : https://z-dbackup.de/en/backup-program/
Реверс-прокси
MetaTrader не может делать http запросы на нестандартные порты и к тому-же есть существенные вопросы про их безопасность.
Поэтому лучше ставить реверс и запросами/разрешениями управлять в конфигурации прокси.
Так как я использую и локальные веб-страницы/приложения/сайты, ту-же docu-wiki например, то почти без раздумий ставлю apache.
Самая простая (и удобная) сборка apache для видовс : XAMPP https://www.apachefriends.org/ , заодно и полезный MySQL там есть
Про настройку читать документацию https://httpd.apache.org/docs/trunk/howto/reverse_proxy.html или в интернетах, например https://tecadmin.net/setup-apache-reverse-proxy/
Если считаете что apache жирноват, поставьте другой проксик, их много разных. Но реверс-прокси должен быть обязательно
NSSM - простое управление службами
Программа для удобного управления службами. Например чтобы сделать windows-service из bat-файла.
Берётся тут https://www.nssm.cc/ и там-же детальная инструкция. Без NSSM в виндовс, как без рук.
Строго необходима, хотя-бы для установке telegraph
Telegraf - Маршрутизатор данных (метрик)
Вкратце: telegraf берёт данные(метрики) из разных источников и отправляет в разные назначения.
Вещь непростая, конфигурируется через текстовый конфиг, но если вы с ней (с ним) не знакомы - обязательно познакомьтесь и освойте.
Вот он, красавчег : https://www.influxdata.com/time-series-platform/telegraf/
Источники, получатели и обработка данных внутри telegraph управляется плагинами https://docs.influxdata.com/telegraf/v1/plugins/,
наиболее полезные для работы с MetaTrader и на которые стоит обратить внимание:
ВХОДЫ:
- input/exec - периодически запускает программу и берёт её выхлоп как данные
- input/execd - запускает программу как демон (то есть она постоянно "висит") и читает её stdout
- input/file - периодически перечитывает заданный файл (файлы)
- input/filecount - периодично считает кол-во и общий размер файлов в указанном каталоге
- input/filestat - периодично репортит о наличии указанных файлов, их размере, времени изменения, контрольной сумме
- input/http_listener_v2 - принимает данные по http. На него робот сможет отправлять данные и алерты через стандартный WebRequest
- input/mqtt_consumer - подписывается на топики mqtt и берёт оттуда данные
- input/socket_listener - принимает данные по udp или tcp; На него робот сможет отправлять данные через Socket
- input/tail - следит за изменением файла (лог-файла) и берёт добавленные строки. То есть транслирует данные из журналов. Нужен для обработки журналов MT
- input/sql - исполняет SQL запрос и берёт из него данные. SQLite, Postres и MySQL конечно поддерживаются
ВЫХОДЫ:
- output/exec - запускает программу и пишет в stdin метрики
- output/execd - постоянно поддерживает программу запущенной и кормит ей данные
- output/file - (до)записывает данные в файл как в журнал, контроллирует размер, ротирует, сжимает старые данные
- output/http - осуществляет http-запрос с данными
- output/mqtt_producer - отправляет данные в топики MQTT
- output/socket_writer - отправляет данные по udp или tcp. Робот может открыть tcp-socket на приём соединений и получать данные от telegraph
- output/sql - исполняет SQL-запрос для сохранения данных
обычно telegraf используется в связке с базой для хранения метрик (их много разных), и графаной для GUI и смарт-алертов.
Но это подчас излишне, и так можно навернуть крыше-сносящих сценариев:
"робот генерирует алерт, алерт попадает в журнал, телеграф его подхватывает, транслирует в MQTT и одновременно запускает внешний скрипт"
"телеграф делает rest-запросы наружу (например берёт котиры или новости), кладёт в SQLite и этим пользуются все индикаторы и роботы"
"робот принимает tcp через Socket, телеграф ретранслирует туда топик mqtt, робот реагирует на полученные сигналы"
"робот в MetaTrader записывает файл, телеграф дёргает веб-хук, TradingView исполняет"
MQTT брокер
Простой, быстрый брокер сообщений publish/subscribe : mosquitto https://mosquitto.org/ Он маленький, хлеба не просит и я его ставлю на каждом хосте и их объединяю. Сигналы, мониторинг, копирование - всё через mqtt.
А вместе с телеграф так вообще прелестно
ОПЦИОНАЛЬНОЕ
Прочий софт, который может пригодится, не считаю обязательным (например, на VDS я это не ставлю, а на рабочих "лошадях" то ставлю то нет):
MSYS2 - https://www.msys2.org/ unix-like среда, тулзы и компиляторы. Привычные по linux команды, нормальные компиляторы вместо вижуал-си
База для тайм-серий и метрик. Раньше юзал influx (influxdata.com), сейчас присматриваюсь к QuestDB (https://questdb.com/), вроде как быстрее, у него более внятный SQL и присутствует REST-интерфейс для запросов, можно обращаться прямо из мета-трейдер через WebRequest
Упомянутая ранее графана https://grafana.com/ как GUI и для сложных алертов
CouchDB https://couchdb.apache.org/ база "документов". Удобная и простая база данных которая хранит json и имеет REST-API. Очень приятная вещь - можно например использовать как бек для Web-GUI робота, или хранить в ней конфиги и результаты которые не очень соотносятся с SQL. Благодаря Rest-api к ней можно обращаться прямо из советников через WebRequest (и реверс-прокси конечно, потому что порт нестандратный)
LabPlot https://apps.kde.org/de/labplot/ - "чертилка" данных. Удобный интерфейс для генерации графиков из CSV-файлов и баз данных. Роботы, скрипты, индикаторы генерируют много разных данных - их надо чертить и смотреть. Python, pandas, anaconda это конечно хорошо и круто, но в LabPlot можно быстро "мышкой натыкать". Да и питон я не люблю