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。
- 在 cTrader 桌面应用程序中, 使用所需参数准备一个 cBot。
- 右键单击本地 cBot 实例, 然后选择在外部进程中启动。 cTrader CLI 会自动启动, 并独立运行该实例。
- 关闭桌面应用程序以节省 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。 |