must have

20 марта 2025, 03:35
Maxim Kuznetsov
2
38

в конце прошлой недели случилось "прощай виндовс", то есть многострадальная ОС на рабочем компе на#@улась. На выходных всё переставил, восстановил и теперь по свежачку "софт который ОБЯЗАТЕЛЬНО должен быть, если вы используете 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 можно быстро "мышкой натыкать". Да и питон я не люблю