コンテンツにスキップ

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を利用するために、コマンドラインの操作を習得する必要はありません。

  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を一度に停止するには、対話型シェルを開いて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を返します。