cBotとIndicatorどっちで作ろう・・・?
cTrader用のツールを作ろうとした際、こんな風に迷ったことありませんか?・・・ありませんか、私だけですか、そうですか。
でも、いつかあなたもこんな風に迷うことがあるかもしれませんので、話は勝手に進めます。気が向いたらお付き合いください。
cBotとIndicator、実は機能自体はよく似てる
「いやいや、そもそも全然違うもんだろ!」と言いたい気持ちはわかります。
当たり前の事実として、自動売買させるならcBotですし、MAやRSIみたいなものを表示させるならIndicatorで作ります。それはいいんです。
問題はちょっとしたツールを作りたいとき、例えば「直近高値安値に水平線引く」とか「ボタン押したら、なんか計算して表示する」みたいなの、どっちで作りますか?これら機能だけであればcBotでもIndicatorでもどっちでも作れるんですよ。
ここではcBotとIndicator、それぞれに何ができて何ができないのかはっきりさせて、「どっちで作るか」問題を解決していきましょう。
cBotとIndicatorの違い
ではまずは両者の違いをはっきりさせていきましょう。いろんなことができそうなcBotはIndicatorと比べるとどのくらいできることが多いのでしょうか。
cBotにできて、Indicatorにできないこと
各種発注
さすがに注文機能はcBot専用です。Indicatorには売買機能は持たせられません。エントリー、決済注文だけでなく、ポジション修正や注文修正もできません。
(先日の記事ではIndicatorからでも発注できちゃう、とか書いてますが、あれはそもそもcAlgoの枠をがっつりはみ出してるので例外です。)
そのため、注文系ツールは迷う余地なくcBotで作ることになります。
口座情報を参照する
意外なことにIndicatorからは口座情報が見れません。AccountプロパティはRobotクラスのみのメンバなのです。Indicatorから見れてもいいような気がするんですが、なんででしょうね。
でも実は口座残高だけであればHistoryの最後の履歴のBalanceプロパティから知ることができますし、有効証拠金もPositionsの損益と合わせて計算すれば出ますので、さほど困ることはない気がします。
ただブローカー名を使いたいとか口座通貨を知りたいというときはどうしょうもないです。Indicatorではあきらめてください。そんなケースあまりなさそうですけど。
チャート上のクリック一つで起動と停止
見落としがちかもしれませんがここもポイント。Indicatorではチャートに追加したり外したりというのは意外に面倒です。
頻繁に起動と停止を繰り返す用であればcBotで作ってチャート上に置いておく方が便利でしょう。自分でボタン作って内部で起動と停止を制御すればIndicatorでもできますが、特に理由がなければ素直にcBotにしとけばいいかと。
停止時の処理を実装する
なぜかOnStop()で停止時の処理を実装することができるのはcBotだけです。シンプルなツールでは困らないと思いますが、Disposableなオブジェクトを使ってたりする場合、停止時の処理ができないとなると起動中常に使うオブジェクトのDisposeを呼び出すタイミングが難しいです。
Indicatorは時間足切替などで再起動されるため、終了のタイミングがプログラム側ではわかりません。ツールによっては停止時に後始末ができないのは厳しいでしょう。
どうしても終了時の処理が必要になるようなツールではcBotで作るしかなさそうです。
思いつく限りこんなもんですかね。
つまり、これら以外のことはすべてIndicatorでもできます。Positionsのぞいたり、チャートにトレンドラインかいたり、ボタンやチェックボックス使ったりということも可能です。
「意外とIndicatorっていろんなことできるんだな」って思いませんか?
Indicatorにできて、cBotにできないこと
では逆にIndicatorにしかできないことってあるのでしょうか。実はこれも結構あるのです。
チャート上にインジケーターのグラフを表示させる
そりゃそうだ。これぞIndicatorですから。この目的なら迷うことなくIndicatorを選びますよね。
cBotでもチャートオブジェクト使えば似たようなことはできるのですが、表示させやすいのはIndicatorの方なので一応挙げておきます。
起動中の時間足や通貨ペアの切り替え
cBotではこれができないのが一番つらいです。Indicatorでは起動中に時間足や通貨ペアが切り替え可能ですし、切り替え後は自動的に初期化(再起動)されます。
初期化されるという点が若干不便ですが、切り替えできないよりはマシですので、常に起動しっぱなしにするならIndicatorで作る方がいいでしょう。
cTrader起動時に自動で起動
これもIndicatorならでは。cBotは再生ボタン押すまで動きだしません。cTrader再起動時、ツール起動させるためだけに全チャート巡回して再生ボタン押すなんてばからしいですよね。
というか、自動売買でも同じことが言えるので、これは本当はcBotでもできてほしいところなんですけどね。MT4のEAでは当たり前にできるのに・・・
チャート外側に別窓で専用のスペースを作る
Indicatorでは自分専用のスペースをチャートの外側に作ることができます。何の話かって?RSIとか表示させようとするとチャートとは別窓で表示されますよね?あれのことです。
もちろん本来はインジケーターのグラフを表示させるためのスペースなんですが、グラフを表示させずにボタンやテキストボックスなどを並べて、ちょっとしたUIを作ることも可能です。
また、トレンドラインなどのチャートオブジェクトも自由に描けるため、アイディア次第でいろんな使い方ができます。
結論:発注しないシンプルなツールならIndicatorで作るべし
なんとなく「cBotはIndicatorの上位互換」みたいな印象をお持ちの方も多いかもしれません。私も最初はそう思って「とりあえずcBotで作っておくか」ってなってました。
でも実は発注さえしないならほとんどの場合はIndicatorとして作った方が便利なんです。使ってみるとわかりますが、「時間足の切り替えができる」というメリットが結構大きいんですよね。
cBotで作るべきなのは、「発注系ツール」と「起動と停止を繰り返すスクリプト系ツール」。あとはAccount情報がどうしても欲しい場合や絶対に終了時の後始末が必要な場合ですが・・・まぁこのケースはさほど多くないかとかと。
「cTraderでツール作るなら基本Indicatorで!」と覚えておきましょう。