cTraderが4.2にアップデートされました
まぁいつもcTrader起動しっぱなしなのでアップデート配信されてるの全然気づかなかったんですけど。いつから配信されてたんですかね。
cTrader4.1から4.2へのアップデートなのでいわゆるマイナーバージョンアップでして、たしかに使い勝手はさほど変わっていないのですが、cBot開発者目線から見るとかなり大きな変更がなされてます。
この記事では4.2でなにが変わったのかを公式フォーラムのこの情報を参考に簡単に紹介したいと思います。
cTrader仕組みの変更点
まずはcTrader内部仕組み自体の変更点から。
フレームワークが.NetFramework 4 から.Net 6に変更
これ、まさかマイナーバージョンアップでやるとは思いませんでした。cTrader開発陣からしたら結構とんでもない変更だと思うのですが・・・
詳しい説明は省きますが、cBot開発者である私達のメリットだけ一言で伝えるとcBotやインジケーター開発でC#の新しい機能が使えるようになりました。
これまで、そのままではC#4.0相当の機能しか(少し面倒なことしてもC#7.2までの機能しか)使えなかったのですが、この変更によりそのままC#10.0の機能が使えるようになりました。
一気にバージョンが上がるので、新しく使えるようになる機能はたくさんあるのですが、一つだけ紹介します。
例えば文字列中に変数の値をはめこむときはC#4.0ではこう書く必要がありました。
var message = String.Format("価格は{0}円です", price);
それがこう書けるようになります。
var message = $"価格は{price}円です";
これは文字列補完式というC#6.0から使える機能なので、最近C#使ってる人からしたら「え?これができなかったの?マジ?」というレベルの話だと思います。
これでやっと最近のC#の書き方でcBotやインジケーターが開発ができるようになりました。
古いcBotやインジケーターもそのまま利用可能
.Netの変更なんてきくと古いものが使えなくなるんじゃないかと不安になる方も多いと思いますが、そんなことはないそうです。
cBotやインジケーターはcTrader本体とは別で動く形に変更されており、以前の.Net Framework4.xで作成されたcBotやインジケーターでも問題なく使えるようになっています。
また、仮に動かなかったとしてもAutomateの開発画面から簡単にTargetFrameworkを切り替えられるようになっているため、旧インジケーターも開発者なら比較的簡単に.Net 6対応に変更することができます。
当然ながらフレームワークを.Net 6に切り替えたインジケーターはcTrader4.1以前では動作しなくなりますのでご注意ください。
cBotやインジケーターが別プロセスで動くように
cBotやインジケーターが別プロセスとなり、「よくないコードからのセキュリティが向上した( better security from potentially malicious code)」とのことです。
これまでのcTraderではcTrader本体とcBot,インジケーターが同じプロセス内で動作しており、チャートにいくつインジケーターを設置しても、タスクマネージャーではこんな表示でした。
それがcTrader4.2からはこうなりました。
cBotやインジケーターが一つずつ別プロセスとして動いているのがわかります。(どれがどれだかわからないのは難点ではありますが・・・)
で、これの何が嬉しいかというと、プロセスが分離されるため、cBotやインジケーターからcTrader本体の動作に干渉しにくくなります。
例えばインジケーターに無限ループみたいなおかしなコードが合った場合、いままでならcTraderごと落ちるか、cTrader本体が完全にフリーズしてしまい、強制終了する他なす術がありませんでした。
それがcTrader4.2ではインジケーターが別プロセスとなったため、インジケーターでなにかあってもcTrader本体は止まることなくインジケーターを削除するなり、再起動するなりできるようになりました。
おそらくこれが公式の言う「better security」だと思います。
悪意あるcBotやインジケーターが実行できなくなったとかそういう話ではありませんので、信頼できないcBotやインジケーターの利用についてはこれまで通りご注意ください。
開発しやすさに関わる変更点
続いて直接cBot開発のしやすさに関わる変更点です。
cBotやインジケーターのビルドがcTrader非依存に
仕組みの変更に近いのですが、開発しやすさに直結するのでこっちに。
これまではcBotやインジケーターはcTraderを使わずにはビルドできませんでした。具体的にはcTrader組み込み環境でビルドするか、Visual Studioに専用拡張機能を入れてcTraderと連携させビルドするかの2択でした。
普段VS Codeを使ってるajinoriとしては結構不満だったのですが、これがとうとう解消されました。
なお、VS Codeでの開発方法については公式マニュアルにも記載があります。
cTraderなしでも環境さえ整えれば dotnet buildでビルドできるようになったため、各々が自分の好きな環境でcBot開発ができるようになりました。
VS code でも Riderでも使い慣れた環境でビルドまでできちゃいます。もっと言えばMacやLinuxだってcBotやインジケーター開発だけならできちゃうわけです。
これで開発環境にこだわりがある人もcBot開発に手を出しやすくなりましたね!
cBot起動中に編集・ビルドされた場合
これまではcBot起動中はそのcBotを編集してビルドすることはできなかったのですが、ビルドがcTrader非依存になったため、起動中のcBotがどこかで編集・更新されるということが起こりうるようになりました。
この場合はちゃんと起動中のcBotにアイコンが表示されます。これが表示されてる場合は一度停止して再度開始すれば最新ビルドが反映されます。
いちいちcBotを停止しないとビルドができないというのは煩わしいですし、かといって動いてるものが古いか新しいかわからないというのも困るので、この仕様はありがたいですね。
(なお、cTraderでビルドする場合はこれまで通りcBotを停止しないとビルドできない仕様のままです。)
IndicatorにOnDestroy() メソッドが追加
インジケーター終了時に特定の処理を走らせることができるようになりました。cBotでいうOnStop()メソッドに相当するものです。
今までは「インジケーター終了時に使ってた線を消す」とかできず、不便で仕方なかったんです。これでインジケーターでできることの幅が広がりそうです。
Automate タブにIndicatorのログが表示されるように
これまでもAutomate画面ではボトムパネル一番右にはAutomateタブがあり、cBot,インジケーター両方のPrint内容が出力されていたのですが、Trade画面ではなぜかcBot logタブとなっていてインジケーターのPrint出力の内容は一切表示されないようになっていました。
これが改修され、Trade画面でもAutomateタブと名称が変更され、インジケーターのログやPrint出力内容が表示されるようになりました。
実際インジケーター利用中にPrint出力を確認できないというのはかなり不便だったのでこの改修も嬉しいですね。
ただ、私の作ったインジケーターではどうせ出力されないからと思って開発用のPrint文がそのままになってるインジが結構あるんですよね。直さないと・・・
その他
- cBot最適化が便利になりました。最適化メニューで設定できることが増えたり、途中経過を見ることができるようになってるようです。
- 組み込み開発環境が見やすくなりました。組み込みのインテリセンスもC#10.0に対応したようです。
- 組み込み開発環境でCtrl+Dでコードフォーマットができるようになりました。
- cTraderからビルドする際に使用する.Net SDKを選択できるようになりました。
- API Referenceが階層化されて見やすくなりました。
ざっとこんなところでしょうか。
実際cTraderを利用するだけなら見た目の機能はほとんど変わってないのでマイナーバージョンアップが妥当なんでしょうね。
しかし中身を考えるとやはり大規模なアップデートだと思います。
まだ市場休日に表示されないインジケーターがあるなど、バグもあるようですが、徐々に精錬されていくことを期待しています。