cBotの操作¶
この記事では、cTrader CLIでのcBotのライフサイクルを説明します。ターミナルからcBotを実行する方法、実行中のインスタンスの一覧表示と停止、Dockerを使ったVPSやクラウドサーバーでの稼働、過去データを使用したバックテストの方法を紹介します。
前提条件 ¶
- 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>
パラメータを渡す方法は3つあります。
| 指定方法 | 使用する場面 | 例 |
|---|---|---|
| デフォルト値 | cBotのデフォルトパラメータで問題なく動作する場合に使用します。 | ctrader-cli run /opt/mycbot.algo --account=1234567 --symbol=EURUSD --period=h1 |
| コマンドラインから | ファイルを作成せずに1つか2つの値を上書きする場合に使用します。 | 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 |
自動実行では、2つのオプションの指定が役立ちます。
| オプション | 用途 |
|---|---|
--full-access | cBotがローカルファイルの読み書きやネットワークへのアクセスを必要とする場合に、アクセス権限の制限なしで実行します。 |
--exit-on-stop | cBotが自動的に停止したときにcTrader CLIプロセスを終了します。スクリプトやコンテナで便利です。 |
VPSまたはクラウドサーバーでcBotを実行する ¶
ターミナルだけで動作するツールなら、小規模なLinuxインスタンスでも快適に実行できます。そのため、デスクトップPCよりも低コストで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を一度に停止するには、対話型シェルを開いて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 | 基本時間枠の始値を使用します。高速ですが、各バー内部の価格変動を再現する精度は低くなります。 |
m1 | サーバーからダウンロードした1分足データを使用します。 |
m1-csv | --data-fileで指定した1分足データを使用します。 |
tick-csv | --data-fileで指定したティックデータを使用します。 |
ticks | サーバーからダウンロードしたティックデータを使用します。最も正確ですが、最も遅いモードです。ティック、レンジ、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) | 取引統計と注文履歴を視覚的に示すレポートで、Webブラウザで開けます。 |
--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を返します。 |