SpotWare社からcTrader4.8が公開されました
SpotWare社のcTraderが4.8にアップデートされました。・・・1か月ほど前にね。更新が遅くなりましたがcTrader4.8の機能をご紹介します。
なお、最新版cTraderはSpotware社ホームページからダウンロード可能です。TradeViewやAxiorryの口座に接続してトレードすることもできますので、興味ある方はぜひお試しください。
cTrader4.8の新機能
インジケーター表示場所が選択可能になりました
これまで別窓に表示されるインジケーターはそれぞれ単体でしか表示できなかったのですが、今回のアップデートでRSIなどを重ねて表示できるようになりました。
インジケーターのパラメータ設定の一番上に表示場所を選択するPanelというのが追加され、ここで表示位置を選択できるようになります。移動平均線を別窓に表示させたりもできます。
で、RSIを重ねて表示させてみたらこんな感じになりました。
・・・えーっと、なんかおかしいですね。下の青い線は2本ともそれぞれ30の位置ののレベルラインです。残念ながらスケールは合わせてくれないようで・・・
単位の異なるインジケータを重ねて表示することを想定してこうなってるのだとは思いますが、「Y軸を共有する」的な設定ができないと厳しい気がします。アップデートに期待。
バックテストのレポートがhtmlで出力可能になりました
今までは履歴をエクセルファイルでの出力できるのみでしたが、概要をhtmlで出力できるようになりました。
ちょっとわかりにくいんですが、バックテスト画面の右上のボタンから保存できます。
個人的にはさほどメリットは感じませんが、誰かに見せたりする場合にはいいかもしれません。
試しに適当なSample cBotでレポート出してみました。
MT4のレポートよりきれいな感じにまとまってるように思います(ひいき目?)
cBotクラッシュ時に自動的に再起動されるようになりました
cTrader4.6でエラーが起きても、クラッシュせずに動き続けるように変更されてましたが、今回はたとえクラッシュしても勝手に再起動してくれるようになったみたいです。
・・・いまいち違いが判らないですが、どうあがいてもクラッシュしてしまうエラーが起きたとしても再起動してくれるようになった、ってことでいいのかな?
インジケーターのパラメータが保存できるようになりました
パラメータが多いインジケーターだといちいち設定変えて全チャートにいれるとか面倒ですよね。
自分仕様のパラメータを保存しておき、いつでも読み出せるようになりました。
なぜか今までcBotではできてたのにインジケーターではできなかったんですよね。
これがインジケーターのパラメータでもできるようになりました。.indisetという名前のファイルで保存されます。(中身は普通のjsonファイルです)
cTraderとは別でCLIからcBotを実行可能になりました
cTraderを起動せずともcBotだけ動かしておくことができるようになりました。データ収集用とかでずーっと動かしておきたいcBotとかある場合にはcTraderとは独立させて動かしておけるのはいいかもしれませんね。
うっかりcTrader閉じちゃっても裏で動き続けてくれるのは助かります。まぁうっかりPC閉じちゃったら結局だめですけど。
VDIとか使ってる場合、cTraderだとメモリ消費量が多くて費用がかさみがちなのが難点でしたが、もしかしたらこれで解決されるかもしれません。
使い方
まずはcTraderのダウンロードパスを確認します。公式サイトと異なりますが、おそらく多くの方はこっちだと思います。
C:\Users\{ユーザー名}\AppData\Local\Spotware\cTrader\{インストールID}\
コマンドライン上でここに移動するか、環境変数PATHに上記を追加すれば ctrader-cliコマンドが使えるようになります。
ctrader-cli
とコマンドうってみると使い方が表示されます。
詳細は公式リンクを参照してください。
cTrader CLI - cTrader Automate
残りは開発者向けの変更です。
cBot、インジケーター開発時のIDEを柔軟に選択できるようになりました
これまでは開発用外部IDEはVisualStudio推しで、その他のIDEを使うには自分で設定が必要だったのですが、今回のアップデートで使いやすくなりました。
右クリックメニューから「VisualStudioで開く」がなくなってて、埋め込みエディタの上部からIDEを選択して開くようになりました。
ただ開くだけじゃなく、必要な設定もしてくれます。
Visual Studio Codeで開いてみたところ、ちゃんとビルドタスクも生成されており、一発でビルドまでできる状態になってました。
RiderやSublimeTextも使えるようになってるので、これでほとんどのC#使いの人にとって「いつもの開発環境」が使いやすくなったのではないでしょうか。
なおVSCodeの場合、起動直後にintellisenseが効かないケースがあるようですが、一度ビルドすれば治ることが多いようです。
Sleep()メソッドが追加されました。
次の処理まで一定時間以上待ちたいときのために、cTrader標準でSleep()メソッドが追加されました。
「System.Threading.Thread.Sleep()と比較してバックテストをサポートしてる点が重要」と説明がありますが、そもそもThread.Sleep()とは全く別物と考えた方がよさそうです。
Thread.Sleep()はスレッドを完全に止めます。うっかりOnTick()内で数秒Sleepなんて入れてしまうと、OnTickの処理待ちがたまりにたまってフリーズしてしまうようなことが起きます。(このようなこともありそもそもThread.Sleep()自体使われるケースがほとんどないと思います。)
今回追加されたcTraderのSleep関数はその辺をうまくやってくれます。Sleep中に次のTickが来たときは、そのOnTick処理はスキップされます。
スレッドを完全に止めるわけでもないため、自分のコード以外の必要な処理を無駄に止めることもありません。
これから単に待ちたいだけの時はcTraderのSleep()関数を使うようにしましょう。
なお、上記仕様のため「待ったうえで毎Tick確実に実行したい処理」には向きません。このような場合はcTrader標準のSleepは使わずに、普通にTask.Delayで非同期処理をしましょう。
アクセス権限なしに専用の領域でファイルを扱えるようになりました
特定のフォルダでだけ権限設定なしにファイルの入出力ができるようになりました。MT4と同じような仕組みですね。
例えば開始時にファイルを保存するならこれだけ。
protected override void OnStart() {
File.WriteAllText("cbotlog.txt", "cbot started!");
}
これでC:\Users\{ユーザー名}\Documents\cAlgo\Data\cBots\{cBot名}` に"cbot started!"と書き込まれたファイルが作成されます。
cTrader側で特別なことをしてるわけではなく、cTrader4.8からcBot実行時のカレントディレクトリがこのフォルダに設定されており、AccessRightなしでもここへだけの読み書きができる状態になっているというだけなので、このようにC#標準の方法でファイル読み書きが可能です。
(cTrader4.7まではcBot実行時のカレントディレクトリはcTraderの実行ディレクトリと同じでした。)
コントロールが価格や時間に紐づけて配置できるようになりました。
これまでボタンなどのコントロールは画面上の決まった位置にしか配置できなかったため、「〇月〇日の高値部分にボタンを置いとく」みたいなことが簡単にはできませんでした。
今回のアップデートでチャート上にコントロール(ボタンなど) を配置する際に、日時と価格を指定してコントロールを配置できるようになり、ボタンもチャートと一緒にスクロールできるようになりました。
protected override void OnStart() {
File.WriteAllText("cbotlog.txt", "cbot started!");
var button = new Button {
Text = "Click me!",
VerticalAlignment = VerticalAlignment.Bottom,
};
Chart.AddControl(button, Bars.Count - 1, Bid);
}
こんな風に価格とインデックス(もしくは時刻)を指定してボタンを配置できます。
画像だとわかりにくいですが、スクロールしてもちゃんとついてきます。
ただちょっと使いにくいのが、位置を変えるときはいちいちChartから取り除いて、再度チャートに追加しなければならないようです。
また、価格だけ、時刻だけ、といった指定も一応可能にはなっているのですが、価格だけ指定した場合はHorizontalAlignmentにかかわらず横位置は左貼りつき、時刻だけ指定した場合はVerticalAlignmentにかかわらず縦位置は上貼りつきになるようです。(cTrader4.8.15現在。バグかもしれません。)
微妙に不便は残りますが、できることの幅が広がったのは確かだと思います。
その他
- PositonにCurrentPriceとDistanceプロパティが追加されました。
- Positionから自身のSymbolオブジェクトを参照できるようになりました。
- BarClosedイベントが追加されました。
- バックテストでスワップ損益が計算されるようになりました。
プロパティ追加とBarClosedについてはそのうち別記事を更新しますのでしばしお待ちくださいませ。
便利になっていくcTrader
少しずつできることが増えてきてるのはうれしいですね。細かな不便はそのうち解消されると思うので気長に待ちましょう。
これからもアップデート期待してます!