ctrader-cli
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseOverview
概述
The cTrader CLI is a headless client for the cTrader platform: accounts and symbols, market data, orders and positions, history, price alerts, and the full cBot lifecycle, all without the desktop UI.
It offers two invocation pipelines, and choosing the right one is the single most valuable thing to internalize. Batch verbs return compact machine-readable payloads for scripting. Shell-routed verbs run through the interactive command shell, which reaches a much larger command surface and returns a richer payload. The same verb can be served by either pipeline, and the pipeline you land in determines the JSON casing, the payload wrapper, and which flags are accepted. Everything below exists to make that choice deliberate rather than accidental.
The CLI runs natively on every platform. On Windows it installs with as ; on macOS and Linux it installs from the Spotware Homebrew tap (, then ) as — the same CLI with identical verbs, flags, and environment variables. Command shapes throughout this skill use the Windows executable name; on macOS or Linux drop the suffix and everything else carries over unchanged ( covers the per-OS credential setup).
winget install Spotware.cTrader.CLIctrader-cli.exebrew tap spotware/tap https://github.com/spotware/homebrew-tapbrew install spotware/tap/ctrader-clictrader-cli.exereferences/setup.mdBehavior described here matches build ; re-confirm details that matter on a newer build.
5.9.0.38cTrader CLI是cTrader平台的无头客户端:无需桌面UI即可操作账户与交易品种、获取市场数据、管理订单与持仓、查看历史记录、设置价格预警,以及完成cBot的全生命周期管理。
它提供两种调用管道,理解并选择正确的管道是最关键的要点。批处理(Batch) 动词返回紧凑的机器可读负载,适用于脚本编写。Shell路由(Shell-routed) 动词通过交互式命令Shell运行,可调用的命令范围更广,返回的负载更丰富。同一个动词可通过任意一种管道调用,管道类型决定了JSON的大小写、负载包装方式以及可接受的参数。以下内容旨在帮助你有意识地做出正确选择,而非误选管道。
CLI可在所有平台原生运行。在Windows系统上,可通过安装,文件名为;在macOS和Linux系统上,需先添加Spotware的Homebrew源(),再执行进行安装,文件名为——不同平台的CLI拥有完全相同的动词、参数和环境变量。本技能中所有命令示例均使用Windows可执行文件名;在macOS或Linux系统上,只需去掉后缀,其余内容保持不变(涵盖了各平台的凭证设置方法)。
winget install Spotware.cTrader.CLIctrader-cli.exebrew tap spotware/tap https://github.com/spotware/homebrew-tapbrew install spotware/tap/ctrader-clictrader-cli.exereferences/setup.md本文描述的行为对应版本;若使用更新版本,请重新确认关键细节。
5.9.0.38Invocation discipline
调用规范
Use this template for every call, adjusting only the timeout:
bash
timeout 30 ctrader-cli.exe <verb> [flags] -e </dev/null 1>out.txt 2>err.txt; echo "EXIT:$?"Each element earns its place:
- bounds every call. Use 30 seconds for data commands and 240 for
timeout,build, andbacktest.run - guarantees termination. With stdin redirected the process never waits for a prompt; it completes the requested work, reaches end of stream, and exits.
</dev/null - Separate and
1>captures, with unique file names per invocation, keep the payload away from the command echo. Concurrent sessions on a shared machine can otherwise clobber fixed names.2> - Read directly. A pipe reports the exit status of the last stage, so piping into
$?orheaddiscards the CLI's own code.grep
Budget roughly 1.5 to 2 seconds of process start-up per call. When you need several read-only results, fold them into one process through piped stdin, which amortizes that cost:
bash
printf 'accounts\nsymbols\nq\n' | timeout 60 ctrader-cli.exe -e --account=<n>Two commands run in 4.1 to 4.4 seconds this way versus 5.1 to 5.8 seconds as separate calls. Blank lines and lines beginning with are ignored, so a piped script may carry comments. Note that a piped session is a shell session: its output arrives in shell-routed shape (camelCase, wrapped objects), not batch shape.
#On Windows, bash consumes backslashes in unquoted arguments, so always double-quote Windows paths: .
--report-json="C:\reports\run.json"每次调用请使用以下模板,仅需调整超时时间:
bash
timeout 30 ctrader-cli.exe <verb> [flags] -e </dev/null 1>out.txt 2>err.txt; echo "EXIT:$?"每个元素都有其作用:
- 限制每次调用的时长。数据查询命令使用30秒,
timeout、build和backtest命令使用240秒。run - 确保进程终止。重定向标准输入后,进程不会等待用户输入,完成请求的工作后即会结束并退出。
</dev/null - 使用独立的和
1>捕获输出,且每次调用使用唯一的文件名,避免命令回显干扰负载内容。若在共享机器上并发执行会话,固定文件名可能会被覆盖。2> - 直接读取的值。管道会报告最后一个阶段的退出状态,因此若将输出通过管道传递给
$?或head,会丢失CLI自身的退出码。grep
每次调用进程启动大约需要1.5到2秒。若需要获取多个只读结果,可通过管道将多个命令合并到一个进程中执行,从而分摊启动成本:
bash
printf 'accounts\
symbols\
q\
' | timeout 60 ctrader-cli.exe -e --account=<n>通过这种方式执行两个命令耗时4.1到4.4秒,而分开执行则需要5.1到5.8秒。空行和以开头的行会被忽略,因此管道脚本可包含注释。请注意,管道会话属于Shell会话:其输出采用Shell路由格式(小驼峰命名、对象包装),而非批处理格式。
#在Windows系统中,bash会解析未加引号参数中的反斜杠,因此Windows路径需始终使用双引号包裹:。
--report-json="C:\\reports\\run.json"Routing: batch verbs and shell-routed verbs
路由:批处理动词与Shell路由动词
Six verbs have a genuine batch code path: , , , , , — the six that itself names for BATCH mode. and appear in 's BATCH MODE reference section, but they execute through the command shell in every invocation shape — banner first, then a camelCase JSON payload, and without a fall-through into the interactive menu — so call them with . Everything else is reached only through the command shell.
periodsaccountssymbolsmetadatarunbacktest--helpcreatebuild--help-q-q-q--quick| Verb class | Call it | Payload |
|---|---|---|
Batch data ( | without | PascalCase JSON, no banner |
Batch streaming ( | without | |
Scaffolding ( | with | camelCase JSON after the banner and timestamp header |
Shell-routed ( | with | camelCase wrapped under the command name, after a banner |
| bare, no flags at all | plain text, no credentials needed |
Concrete consequences worth knowing before your first call:
- does not accept
accounts -e;--accountrequires it. The two batch verbs differ deliberately.symbols -e - Batch returns
symbols,Id,Nameper entry. The same verb withDescriptionreturns-q,name,description,category— it swaps the numericassetClassfor classification fields rather than extending the batch schema, so use batchIdwhenever you need symbol ids.symbols - takes no flags whatsoever; passing
periodsto it returns-e.Error: Parameter e is not allowed - Shell-routed verbs take their arguments as explicit flags at launch time. works; a bare
symbol --symbol=EURUSDpositional does not.EURUSD - is recommended rather than required for shell-routed reads: it skips the command menu that otherwise prints after the payload, keeping stdout minimal for parsing. Without it the call still terminates cleanly under redirected stdin, printing the menu once and then
-qat exit 0.Bye. - An unrecognized verb routes to the shell menu and exits 0 under closed stdin, so never treat "exit 0" alone as proof the verb you intended actually ran.
ctrader-cli.exe --commands有六个动词拥有真正的批处理执行路径:、、、、、——这六个动词在的BATCH模式下被列出。和出现在的BATCH MODE参考部分,但无论以何种方式调用,它们都会通过命令Shell执行——先显示横幅,然后返回小驼峰命名的JSON负载,若未添加参数则会进入交互式菜单——因此调用时需添加。其余所有动词仅能通过命令Shell调用。
periodsaccountssymbolsmetadatarunbacktest--helpcreatebuild--help-q-q-q--quick| 动词类别 | 调用方式 | 负载格式 |
|---|---|---|
批处理数据( | 不添加 | 大驼峰命名JSON,无横幅 |
批处理流( | 不添加 | |
脚手架( | 添加 | 横幅和时间戳头部之后的小驼峰命名JSON |
Shell路由( | 添加 | 小驼峰命名,包裹在命令名称对应的键下,位于横幅之后 |
| 直接调用,无任何参数 | 纯文本,无需凭证 |
首次调用前需要了解的实际影响:
- 不接受
accounts -e参数;--account则需要该参数。这两个批处理动词的设计故意不同。symbols -e - 批处理模式的返回每个条目的
symbols、Id、Name。添加Description参数后,同一动词会返回-q、name、description、category——它用分类字段替换了数字assetClass,而非扩展批处理模式的 schema,因此当你需要交易品种ID时,请使用批处理模式的Id。symbols - 不接受任何参数;若传递
periods会返回-e。Error: Parameter e is not allowed - Shell路由动词在启动时需使用显式参数。有效;而直接传入
symbol --symbol=EURUSD作为位置参数无效。EURUSD - 对于Shell路由的读取操作,推荐添加参数:它会跳过负载输出后显示的命令菜单,使标准输出保持简洁以便解析。若未添加该参数,在重定向标准输入的情况下,调用仍会正常终止,显示一次菜单后输出
-q并以0状态码退出。Bye. - 若调用未识别的动词,会进入Shell菜单并在标准输入关闭时以0状态码退出,因此切勿仅以"退出码0"作为验证目标动词是否实际执行的依据。
ctrader-cli.exe --commandsCredentials
凭证
Two credential shapes work non-interactively. Prefer the first, which keeps secrets out of the process arguments entirely.
bash
undefined两种凭证格式支持非交互式调用。优先选择第一种,可完全避免将机密信息暴露到进程参数中。
bash
undefinedEnvironment-variable credentials: CTID and PWD-FILE are set in the environment.
环境变量凭证:CTID和PWD-FILE已在环境中设置。
timeout 30 ctrader-cli.exe accounts -e </dev/null
timeout 30 ctrader-cli.exe accounts -e </dev/null
Explicit credentials.
显式凭证。
timeout 30 ctrader-cli.exe accounts --ctid="<id>" --pwd-file="<path>" </dev/null
The mapping rule for `-e` is exact: an environment variable is consulted only when its name matches the long option name verbatim, hyphens preserved, compared case-insensitively, and only when `-e` is on the command line. So `CTID`, `PWD-FILE`, and `ACCOUNT` are read; `account` also works; `PWD_FILE` with an underscore is not consulted, and `ACCOUNT_ID` yields `Error: Option account does not exist`. An explicit flag always wins over the matching variable. `--environment-variables` is the long form of `-e`.
`--ctid` identifies the user (the cTrader ID, an email address) in every path; the trading account is selected separately with `--account`. The password file's first line is the password. `--pwd-file` is the flag name; there is no short alias. `--password` belongs to interactive use and should not appear in a scripted invocation.
Never read or print the value of `CTID` or `PWD-FILE`. Check presence and length only, and remember that `PWD-FILE` contains a hyphen, so `$PWD-FILE` does not interpolate it:
```bash
val="$(printenv 'PWD-FILE')"; echo "PWD-FILE length: ${#val}"The shell banner prints the cTrader ID on stdout as . Redact it when quoting captured output into reports or anything shared.
Connecting as <id>...timeout 30 ctrader-cli.exe accounts --ctid="<id>" --pwd-file="<path>" </dev/null
`-e`的映射规则非常严格:仅当环境变量的名称与长选项名称完全匹配(保留连字符,大小写不敏感),且命令行中添加了`-e`参数时,才会读取该环境变量。因此会读取`CTID`、`PWD-FILE`和`ACCOUNT`;`account`也有效;而带有下划线的`PWD_FILE`不会被读取,`ACCOUNT_ID`会返回`Error: Option account does not exist`。显式参数始终优先于对应的环境变量。`--environment-variables`是`-e`的长格式。
`--ctid`在所有路径中用于标识用户(即cTrader ID,一个电子邮件地址);交易账户需通过`--account`单独选择。密码文件的第一行即为密码。`--pwd-file`是参数名称,无短别名。`--password`仅适用于交互式使用,不应出现在脚本化调用中。
切勿读取或打印`CTID`或`PWD-FILE`的值。仅检查其是否存在及长度,且需注意`PWD-FILE`包含连字符,因此`$PWD-FILE`无法正确插值:
```bash
val="$(printenv 'PWD-FILE')"; echo "PWD-FILE length: ${#val}"Shell横幅会在标准输出中打印,其中包含cTrader ID。当将捕获的输出引用到报告或共享内容中时,请将其脱敏。
Connecting as <id>...Reading the output
读取输出
Locate the payload structurally, never by a fixed line count or byte offset. Scan for the timestamp header line or the first balanced or ; transient connection-retry lines can precede a payload that still arrives successfully.
{[Batch payloads begin at byte zero: no banner, no header, flat PascalCase JSON. Shell-routed payloads carry a banner of several lines whose wording varies, then a header line of the form echoing the command, then camelCase JSON wrapped under the command name such as . That header is local wall-clock time with the machine's own zone offset, which is distinct from timestamps inside the JSON body: those are UTC with a suffix.
[yyyy-MM-dd HH:mm:ss <local numeric offset>]{"orders": [...]}ZCasing therefore follows the pipeline, not the verb. returns and ; returns and . is worth singling out: its compact stdout summary is PascalCase (, ) while the file it writes for is camelCase (, , ). takes no report flags; its stdout payload is camelCase (, , ).
accountsIdBalanceordersidvolumeLotsbacktestEquityNetProfit--report-jsonmainequitytradeStatisticsbuildprojectPathsuccesserrorsStderr carries the CLI's own echo of the command line on batch-routed calls, on success as well as failure, so its mere presence never signals an error. Shell-routed calls typically leave stderr empty. Because of that split, treat stderr as a hint about which pipeline you reached, and never as a pass/fail signal.
Plain-text rather than JSON output comes from , , , , confirmation and refusal messages, and not-found messages such as . The timestamp-header rule applies to shell-routed JSON commands only.
periods--help--commands--versionOrder #N not found.Line endings are CRLF on Windows. Numbers are plain JSON numbers, already rounded by the CLI's own formatting, with no locale-dependent separators; the one exception is a zero-trade backtest summary, which renders and as a bare token that strict JSON parsers reject.
AverageTradeProfitFactor-请通过结构定位负载,切勿依赖固定行数或字节偏移。扫描时间戳头部行或第一个匹配的或;临时的连接重试行可能会出现在成功返回的负载之前。
{[批处理负载从字节0开始:无横幅、无头部,为扁平的大驼峰命名JSON。Shell路由负载包含几行内容各异的横幅,然后是一行格式为的头部行(回显命令),接着是包裹在命令名称下的小驼峰命名JSON,例如。该头部使用本地时钟时间及机器自身的时区偏移,与JSON主体内的时间戳不同:主体内的时间戳为UTC时间,带有后缀。
[yyyy-MM-dd HH:mm:ss <本地数字偏移>]{"orders": [...]}Z因此,大小写格式由管道类型决定,而非动词。返回和;返回和。值得单独说明:其标准输出中的紧凑摘要是大驼峰命名(, ),而通过写入文件的内容是小驼峰命名(, , )。不接受报告参数;其标准输出负载为小驼峰命名(, , )。
accountsIdBalanceordersidvolumeLotsbacktestEquityNetProfit--report-jsonmainequitytradeStatisticsbuildprojectPathsuccesserrors在批处理路由调用中,标准错误输出会携带CLI自身的命令行回显,无论成功或失败均会显示,因此仅存在标准错误输出并不代表错误。Shell路由调用通常会保持标准错误输出为空。因此,可将标准错误输出作为判断所使用管道的提示,但切勿将其作为成功/失败的信号。
纯文本输出(非JSON)来自、、、、确认与拒绝消息,以及未找到消息(如)。时间戳头部规则仅适用于Shell路由的JSON命令。
periods--help--commands--versionOrder #N not found.Windows系统上的行结尾为CRLF。数字为纯JSON数字,已由CLI自身格式化进行四舍五入,无区域相关分隔符;唯一例外是零交易的回测摘要,它会将和渲染为纯标记,严格的JSON解析器会拒绝该标记。
AverageTradeProfitFactor-Exit codes and failure detection
退出码与故障检测
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | Invalid usage, unrecognized flag, missing required parameter, or a validation error |
| 81 | Invalid cTrader ID or password |
| 82 | Account cannot be found |
| 124 | The external |
Message text is the primary detection signal and the exit code is the branch key. Nonzero codes outside this table exist for further error conditions but are not publicly documented, so read the message rather than assuming a numbered meaning. A wrapper shell can report a different code than a direct invocation, so prefer the message when the two disagree.
Never infer failure from the exit code alone. exits 0 for a successful compile and for a failed one: the JSON body's boolean is the authoritative signal, with diagnostics in . continues running after printing its summary, so the completion signal is the final JSON summary or the file appearing; a 124 with those artifacts present is a completed run, not a failure.
buildsuccesserrors: [{file, line, column, code, text}]backtest--report-jsonA non-numeric value for a numeric flag exits 1, but the message shape depends on the flag and the pipeline: returns a clean line on stdout, on batch-routed surfaces a trace, and on shell-routed verbs such as prints on stderr with no prefix. No single stream or prefix covers this class, so validate numeric flag values before invoking.
candles --count=abcError: Option --count has invalid number: abc--account=abcsymbolsSystem.FormatException--account=abcordersInvalid account number: 'abc'. Expected a numeric login id.Error:| 代码 | 含义 |
|---|---|
| 0 | 成功 |
| 1 | 使用无效、参数未识别、缺少必填参数或验证错误 |
| 81 | cTrader ID或密码无效 |
| 82 | 账户未找到 |
| 124 | 外部 |
消息文本是主要的检测信号,退出码是分支依据。除本表外,还存在其他未公开文档的非零退出码用于表示更多错误条件,因此请读取消息内容,而非假设代码的固定含义。包装Shell报告的退出码可能与直接调用不同,因此当两者不一致时,优先以消息内容为准。
切勿仅通过退出码推断故障。在编译成功和失败时均会以0状态码退出:JSON主体中的布尔值才是权威信号,诊断信息位于中。在打印摘要后会继续运行,因此完成信号是最终的JSON摘要或文件的出现;若出现124退出码但存在这些文件,则表示运行已完成,而非故障。
buildsuccesserrors: [{file, line, column, code, text}]backtest--report-json若为数值参数传入非数值值,会以1状态码退出,但消息格式取决于参数和管道:会在标准输出中返回清晰的行;在批处理路由的中使用会显示跟踪信息;在Shell路由动词(如)中使用会在标准错误输出中打印,且无前缀。此类错误没有统一的输出流或前缀,因此请在调用前验证数值参数的值。
candles --count=abcError: Option --count has invalid number: abcsymbols--account=abcSystem.FormatExceptionorders--account=abcInvalid account number: 'abc'. Expected a numeric login id.Error:Mutating commands
变更命令
The state-changing verbs are , , , , , , , , , , , and .
order place-marketorder place-limitorder place-stoporder place-stop-limitorder modifyorder cancelposition closeposition close-partialposition modifyalert createalert deletestopAuthorization gate. On a mutating verb, is the confirmation: it answers the confirmation prompt automatically and the command executes. Because is also the routine flag for shell-routed reads, it is easy to carry over by habit. Add to a mutating command only after the user has explicitly authorized that specific action, and only after you have confirmed the target account is a demo account by checking that reports . Never run a mutating command to discover how it behaves.
-q-q-qaccounts"Live": falseAt a flag-style launch line, is the confirmation form that applies. and return and exit 1. A trailing bare is shell-prompt syntax; mixing it into a flag-style line ends the process with a usage trace at exit 1. The keyword likewise belongs to the shell prompt; documents a separate launch flag — verify it before relying on it.
-q--yes-yRefused: confirmation requiredyesConsoleInvalidUsageExceptionall--help--allVolume is expressed in units by default. On EURUSD, with no , , and all resolve to the identical stored order of . Read the instrument's own limits first with , which returns , , , , , and .
--volume=1000--volume-type--volume=1000 --volume-type=units--volume=0.01 --volume-type=lotsvolume: 1000, volumeLots: 0.01symbol --symbol=<name>lotSizeminVolumemaxVolumevolumeStepdigitspipSizeStop loss and take profit are three-state on modify. A value replaces, removes, and omitting the flag preserves the current value. Supply prices as absolute values. A price on the wrong side of the reference is rejected before submission with a two-line then message at exit 1, leaving server state untouched.
0Warning:Error:Use the exact flag names , , and . Response keys differ per command: returns with (pending placements share this shape; expect with from a market order that fills immediately), returns with , and returns with . Read the key that the command you called returns.
--order=<id>--position=<id>--alert=<id>order place-limitorderIdstatus: "placed"positionIdstatus: "opened"alert createidstatus: "created"alert deletealertIdstatus: "deleted"After every mutation, re-read the affected entity with , , or and confirm the applied state before reporting success.
orderspositionsorders-history会改变状态的动词包括、、、、、、、、、、和。
order place-marketorder place-limitorder place-stoporder place-stop-limitorder modifyorder cancelposition closeposition close-partialposition modifyalert createalert deletestop授权验证。对于变更动词,即表示确认:它会自动回答确认提示并执行命令。由于也是Shell路由读取操作的常规参数,很容易习惯性地添加。仅当用户明确授权特定操作,且通过确认目标账户为模拟账户()后,才可在变更命令中添加参数。切勿为了测试行为而运行变更命令。
-q-qaccounts"Live": false-q在参数式启动行中,是有效的确认形式。和会返回并以1状态码退出。末尾直接添加属于Shell提示语法;将其混入参数式启动行,进程会以跟踪信息并以1状态码退出。关键字同样属于Shell提示语法;文档中存在单独的启动参数——请在依赖前验证其有效性。
-q--yes-yRefused: confirmation requiredyesConsoleInvalidUsageExceptionall--help--all默认情况下,交易量以单位表示。对于EURUSD,(无)、和最终都会存储为相同的订单:。请先通过读取工具自身的限制,它会返回、、、、和。
--volume=1000--volume-type--volume=1000 --volume-type=units--volume=0.01 --volume-type=lotsvolume: 1000, volumeLots: 0.01symbol --symbol=<name>lotSizeminVolumemaxVolumevolumeStepdigitspipSize修改订单时,止损和止盈为三态。传入值会替换原有设置,会移除设置,省略参数则保留当前值。价格需提供绝对值。若价格位于参考价格的错误一侧,会在提交前被拒绝,输出两行和消息并以1状态码退出,不会改变服务器状态。
0Warning:Error:请使用准确的参数名称、和。不同命令的响应键不同:返回和(待处理订单也采用此格式;若市价订单立即成交,会返回和),返回和,返回和。请读取你调用的命令返回的对应键。
--order=<id>--position=<id>--alert=<id>order place-limitorderIdstatus: "placed"positionIdstatus: "opened"alert createidstatus: "created"alert deletealertIdstatus: "deleted"每次变更后,请通过、或重新读取受影响的实体,并在报告成功前确认状态已生效。
orderspositionsorders-historySession preflight
会话预检
Before the first authenticated call, run the four-step preflight in : executable reachability, presence-and-length-only checks of and , password-file sanity, and a single go/no-go probe with . The three outcomes are exit 0 with a JSON account array (ready), exit 81 (credentials rejected), and exit 1 with a missing-parameter message (a fast, clear failure, never a hang). That reference also carries the exact wording to give a user whose configuration needs fixing.
references/setup.mdCTIDPWD-FILEaccounts -e首次认证调用前,请执行中的四步预检:可执行文件可达性检查、和的存在性及长度检查、密码文件完整性检查,以及使用进行一次成功/失败探测。三种结果分别为:以0状态码退出并返回JSON账户数组(就绪)、以81状态码退出(凭证被拒绝)、以1状态码退出并返回缺少参数的消息(快速明确的失败,不会挂起)。该文档还包含向配置需要修复的用户提供的准确说明话术。
references/setup.mdCTIDPWD-FILEaccounts -eReference files
参考文件
- - the preflight sequence and the user-facing setup instructions for each failure mode.
references/setup.md - - the full routing matrix, payload anatomy, and parsing recipes.
references/routing-and-output.md - - per-verb flags and payload shapes for the read-only surface.
references/commands.md - - the guarded mutation sequence, volume and protection semantics, and response shapes.
references/trading-write.md - - create, build, metadata, backtest, and run for cBots and indicators.
references/algo-lifecycle.md - - the failure table, message shapes, and recovery actions.
references/errors-and-exit-codes.md
- - 预检流程及针对每种故障模式的用户端设置说明。
references/setup.md - - 完整的路由矩阵、负载结构及解析方法。
references/routing-and-output.md - - 只读命令的逐动词参数及负载格式。
references/commands.md - - 受保护的变更流程、交易量与保护语义及响应格式。
references/trading-write.md - - cBots和指标的创建、构建、元数据、回测及运行。
references/algo-lifecycle.md - - 故障表、消息格式及恢复操作。",
references/errors-and-exit-codes.md