跳转至

cBot 操作

本文介绍 cTrader CLI 中 cBot 的完整运行生命周期。了解如何从终端运行 cBot、列出和停止正在运行的实例、使用 Docker 将 cBot 托管在 VPS 或云服务器上, 以及使用历史数据对 cBot 进行回测。

前提条件

  • 已安装 cTrader CLI。
  • 已准备好你的 cTrader ID、凭据文件和账户号码。
  • cBot 已导出为面向 .NET 8 编译的 .algo 文件。

读取 cBot 元数据

运行 cBot 之前, 请使用 metadata 列出它接受的参数。输出会列出每个 cBot 属性的名称及其类型。

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

通过命令行或 .cbotset 文件传递参数时, 请使用元数据输出中显示的参数名称。

运行 cBot

使用 run 启动 cBot。 .algo 文件路径是第一个参数。必须提供 --account、--symbol 和 --period。

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

可以通过三种方式传递参数。

参数来源 适用场景 示例
默认值 cBot 的默认参数已经能满足需求。 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 当 cBot 需要读写本地文件或访问网络时, 可不受访问权限限制地运行 cBot。
--exit-on-stop 当 cBot 自行停止时退出 cTrader CLI 进程, 适用于脚本和容器。

在 VPS 或云服务器上运行 cBot

仅通过终端操作的工具可以在小型 Linux 实例上流畅运行。因此, 相比桌面计算机, cBot 可以以更低的成本持续运行。使用 cTrader CLI Docker 镜像是实现这一目标的最便于迁移的方式。

拉取最新镜像:

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

在容器中运行 cBot。 --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>" 容器内 cBot 文件的路径。
--environment-variables 指示 cTrader CLI 从环境变量读取配置。

注意

Docker 镜像支持 cTrader CLI 的所有功能, 包括回测和优化。

从 cTrader 桌面应用程序启动

即使不熟悉命令行, 你也可以使用 cTrader CLI。

  1. 在 cTrader 桌面应用程序中, 使用所需参数准备一个 cBot。
  2. 右键单击本地 cBot 实例, 然后选择在外部进程中启动。 cTrader CLI 会自动启动, 并独立运行该实例。
  3. 关闭桌面应用程序以节省 CPU 和 RAM 资源。 cBot 将继续在 cTrader CLI 进程中运行。

列出和停止 cBot

列出当前在交易账户上运行的 cBot 实例:

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

使用 run 输出中报告的实例标识符停止正在运行的实例:

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

要一次停止所有正在运行的 cBot, 请进入交互式 Shell 并运行 stop all yes。最后一个实例停止后, cTrader CLI 进程便会退出。

对 cBot 进行回测

使用 backtest 根据历史数据测试 cBot。 .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>

测试环境选项

测试环境选项列在CLI 参考文档中 backtest 条目下。必需的输入只有 --start、--end 和 --data-mode。可选选项用于设置初始余额、佣金、点差、数据源和报告输出。

数据模式

值 说明
open 使用基础时间周期的开盘价; 速度快, 但对每根 K 线内部价格变化的模拟精度较低。
m1 使用从服务器下载的 1 分钟数据。
m1-csv 使用通过 --data-file 提供的 1 分钟数据。
tick-csv 使用通过 --data-file 提供的 tick 数据。
ticks 使用从服务器下载的 tick 数据; 这是最精确但也最慢的模式。tick、区间柱和 Renko 时间周期必须使用此模式。

提示

将 --data-dir 设置为在多次运行之间保留的文件夹, 使 cTrader CLI 可以重复使用已下载的价格数据, 而不必每次回测都重新下载。在 Docker 中, 将此文件夹映射到宿主机目录, 以便容器停止后仍能保留数据。

操作示例

使用单个 .cbotset 参数文件对示例 cBot 运行回测:

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 会持续向终端输出进度, 完成后显示汇总结果。完整结果保存在 .algo 文件旁的 Backtesting 文件夹中, 每次运行对应一个独立的子文件夹:

…/data/{cBotName}/{BacktestingInstanceID}/Backtesting
文件 内容
事件 (JSON) 记录所有重要交易事件, 例如开仓和平仓。
日志 (TXT) 记录 cBot 的启动、停止、交易操作及其结果。
参数 (.cbotset) 回测中使用的参数及其值。
报告 (HTML) 可在网页浏览器中打开的可视化报告, 包含交易统计数据和订单历史记录。

除上述文件夹外, --report 和 --report-json 还会将报告保存到指定路径。

cTrader CLI 中 Algo API 的行为

由于没有图形界面, 在 cTrader CLI 中运行 cBot 时, cTrader Algo API 的部分成员会有不同的行为。

API 成员 在 cTrader CLI 中的行为
MessageBox 返回 MessageBoxResult.None。
Window 所有方法都会被忽略, 也不会显示任何窗口。
Notifications.PlaySound Ignored.
Chart.TakeChartshot 返回 null。