Перейти к содержанию

Операции с сиБотами

В этой статье рассматривается жизненный цикл сиБота в cTrader CLI. Вы узнаете, как запускать сиБота из терминала, просматривать и останавливать работающие экземпляры, размещать сиБота на VPS или облачном сервере с помощью Docker и тестировать его на исторических данных.

Предварительные требования

  • cTrader CLI установлен.
  • У вас готовы cTrader ID, файл учетных данных и номер торгового счета.
  • СиБот экспортирован в файл .algo, скомпилированный для .NET 8.

Просмотр метаданных сиБота

Перед запуском сиБота выполните metadata, чтобы вывести список поддерживаемых параметров. В выводе указаны имена и типы всех свойств сиБота.

ctrader-cli metadata <path-to-algo-file>

Используйте имена параметров из метаданных при передаче значений через командную строку или файл .cbotset.

Запуск сиБота

Запустите сиБота с помощью run. Путь к файлу .algo указывается первым аргументом. Параметры --account, --symbol и --period обязательны.

ctrader-cli run <path-to-algo-file> --account=<account-id> --symbol=<symbol> --period=<period>

Параметры можно передать тремя способами.

Источник Когда использовать Пример
Значения по умолчанию Если уже заданные параметры сиБота подходят для работы. ctrader-cli run /opt/mycbot.algo --account=1234567 --symbol=EURUSD --period=h1
Через командную строку Чтобы изменить одно или два значения без создания файла. ctrader-cli run /opt/mycbot.algo --account=1234567 --symbol=EURUSD --period=h1 --Periods=15 --ConsolidationPeriods=3
Файл .cbotset Чтобы повторно использовать набор значений при разных запусках; экспортируйте файл из настольного приложения cTrader. ctrader-cli run /opt/mycbot.algo /opt/mysettings.cbotset --account=1234567 --symbol=EURUSD --period=h1

Для запуска без постоянного контроля важны два необязательных флага.

Параметр Назначение
--full-access Запускает сиБота без ограничений прав доступа, когда ему нужно читать или записывать локальные файлы либо обращаться к сети.
--exit-on-stop Завершает процесс cTrader CLI, когда сиБот останавливается самостоятельно; полезно в скриптах и контейнерах.

Запуск сиБота на VPS или облачном сервере

Инструмент, работающий только через терминал, можно запускать на небольшом сервере Linux. Это позволяет сиБоту работать непрерывно с меньшими затратами, чем на настольном компьютере. Наиболее переносимый способ — использовать Docker-образ cTrader CLI.

Загрузите последнюю версию образа:

docker pull ghcr.io/spotware/ctrader-console:latest

Запустите сиБота в контейнере. Параметр --mount подключает папку хост-системы к контейнеру, а параметры -e передают настройки через переменные окружения:

docker run -d -it \
  --name ctrader.console.run.mybot \
  --mount type=bind,src=/cAlgo/Robots,dst=/mnt/Robots \
  -e CTID='mycid' \
  -e PWD-FILE='/mnt/Robots/ctrader-cli.pwd' \
  -e ACCOUNT='9102302' \
  -e SYMBOL='EURUSD' \
  -e PERIOD='H1' \
  ghcr.io/spotware/ctrader-console:latest run "/mnt/Robots/My bot.algo" --environment-variables
Элемент Значение
--name ctrader.console.run.mybot Задает имя контейнера.
--mount type=bind,src=...,dst=... Подключает папку хост-системы к пути /mnt/Robots в контейнере.
-e CTID='mycid' Задает cTrader ID в качестве переменной окружения.
-e PWD-FILE='/mnt/Robots/ctrader-cli.pwd' Задает путь к файлу с паролем внутри контейнера.
-e ACCOUNT='9102302' Задает номер торгового счета.
-e SYMBOL='EURUSD' Задает торговый инструмент.
-e PERIOD='H1' Задает таймфрейм.
"<path>" Путь к файлу сиБота внутри контейнера.
--environment-variables Предписывает cTrader CLI считывать настройки из переменных окружения.

Примечание

В Docker-образе доступны все функции cTrader CLI, включая бэктестинг и оптимизацию.

Запуск из настольного приложения cTrader

Для использования cTrader CLI необязательно уметь работать с командной строкой.

  1. В настольном приложении cTrader подготовьте сиБота с нужными параметрами.
  2. Нажмите правой кнопкой мыши на локальный экземпляр сиБота и выберите Запустить во внешнем процессе. cTrader CLI запустится автоматически и будет выполнять этот экземпляр независимо от приложения.
  3. Закройте настольное приложение, чтобы снизить нагрузку на процессор и оперативную память. СиБот продолжит работать в процессе cTrader CLI.

Просмотр и остановка сиБотов

Выведите список экземпляров сиБотов, которые сейчас работают на торговом счете:

ctrader-cli cbots --ctid=letstrade --password=secret --account=1234567 -q

Остановите работающий экземпляр по его идентификатору, который команда run показывает в выводе:

ctrader-cli stop --ctid=letstrade --password=secret --account=1234567 -q --instance=<instance-id>

Чтобы остановить все работающие сиБоты одновременно, откройте интерактивную оболочку и выполните stop all yes. Процесс cTrader CLI завершается после остановки последнего экземпляра.

Бэктестинг сиБота

Протестируйте сиБота на исторических данных с помощью backtest. Первым аргументом указывается путь к файлу .algo, после него можно добавить необязательный файл .cbotset. Для тестирования также нужны торговый инструмент, таймфрейм и диапазон дат:

ctrader-cli backtest <path-to-algo-file> [<path-to-cbotset-file>] --account=<account-id> --symbol=<symbol> --period=<period> --start=<start-date> --end=<end-date> --data-mode=<data-mode>

Параметры среды тестирования

Флаги среды тестирования перечислены после команды backtest в справочнике CLI. Обязательны только --start, --end и --data-mode. Необязательные флаги позволяют задать начальный баланс, комиссии, спред, источники данных и файлы отчетов.

Режимы данных

Значение Описание
open Использует цены открытия базового таймфрейма; работает быстро, но менее точно учитывает изменения цены внутри бара.
m1 Использует минутные данные, загруженные с сервера.
m1-csv Использует минутные данные, переданные через --data-file.
tick-csv Использует тиковые данные, переданные через --data-file.
ticks Использует тиковые данные, загруженные с сервера; самый точный, но и самый медленный режим. Обязателен для тиковых, диапазонных таймфреймов и Renko.

Совет

Укажите в --data-dir папку, которая сохраняется между запусками, чтобы cTrader CLI повторно использовал загруженные ценовые данные, а не скачивал их при каждом тестировании. В Docker подключите эту папку к каталогу хост-системы, чтобы данные сохранились после остановки контейнера.

Пример использования

Проведите тестирование примера сиБота с одним файлом параметров .cbotset:

ctrader-cli backtest "C:/test/sample martingale.algo" C:/test/special-parameters.cbotset \
  --ctid=letstrade --pwd-file=C:/test/password.pwd --account=1234567 --symbol=EURUSD --period=h1 \
  --start="01/01/2025 12:34" --end="31/01/2025 20:56" \
  --balance=10000 --commission=30 --commission-type=UsdPerMillionUsdVolume --spread=1 --data-mode=m1

Результаты тестирования

cTrader CLI выводит ход выполнения в терминал, а после завершения показывает сводку. Полные результаты находятся в папке Backtesting рядом с файлом .algo. Для каждого запуска создается отдельная папка:

…/data/{cBotName}/{BacktestingInstanceID}/Backtesting
Файл Содержимое
События (JSON) Все важные торговые события, например открытие и закрытие позиций.
Журнал (TXT) Запуск и остановка сиБота, торговые операции и их результаты.
Параметры (.cbotset) Параметры и значения, использованные при тестировании.
Отчет (HTML) Визуальный отчет со статистикой торговли и историей ордеров, который открывается в браузере.

--report и --report-json позволяют дополнительно сохранять отчеты по заданному пути, помимо указанной выше папки.

Особенности работы Algo API в cTrader CLI

Некоторые элементы API cTrader Algo ведут себя иначе при запуске сиБота через cTrader CLI, поскольку графический интерфейс отсутствует.

Элемент API Поведение в cTrader CLI
MessageBox Возвращает MessageBoxResult.None.
Window Все методы игнорируются, окно не отображается.
Notifications.PlaySound Ignored.
Chart.TakeChartshot Возвращает null.