Операции с сиБотами¶
В этой статье рассматривается жизненный цикл сиБота в 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 необязательно уметь работать с командной строкой.
- В настольном приложении cTrader подготовьте сиБота с нужными параметрами.
- Нажмите правой кнопкой мыши на локальный экземпляр сиБота и выберите Запустить во внешнем процессе. cTrader CLI запустится автоматически и будет выполнять этот экземпляр независимо от приложения.
- Закройте настольное приложение, чтобы снизить нагрузку на процессор и оперативную память. СиБот продолжит работать в процессе 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. |