cTraderでもスクリプトは作れる
MT4ではインジケーター、EAの他にスクリプトというプログラムを作成することができます。スクリプトは実行したら特定の処理を行い、すぐに停止するというタイプのプログラムです。
cTraderではインジケーターとcBotしか作ることができず、一見スクリプトは作れないかのように見えますが、同じ機能のものはcTraderでも簡単に作成できます。
cBotとして作成すればいい
cBotを新規作成して、処理内容をOnStart()内に書き込んで、最後にStop()を呼び出してあげればもうできあがりです。(実際はStop()を呼ばなくても、OnBar()やOnTick()が空っぽであれば自動で止まるようですが、一応Stop()で止めておいた方が安心でしょう。)
cBotとして作るため、外部パラメータを持たせることも可能です。MT4でも同じようにEAとして作ることでパラメータを持たせることはできますが、MT4の場合は実行の度にパラメータ画面が表示されてしまうため、ちょっとしたスクリプトでは使い勝手が悪いのです。
使い方
普通のcBotと同じです。チャート左側ツールバーのアイコンから選んであらかじめパラメータを設定して、チャート上に配置します。実行したいときは右下スクリプト(cBot)名の
ボタンを押すだけです。
cTraderの場合は、あらかじめパラメータ設定までしたcBotをいくつもチャート上に配置しておき、必要に応じて起動させることができるため、スクリプト実行とも相性がいいです。
特にパラメータ付きスクリプトの使い勝手なら、MT4よりもcTraderの方が優れていると言えるのではないでしょうか。
実際に作ってみよう
サンプル:AutoFibonacci
せっかくなので、ある程度使えそうなスクリプトを一つ作ってみましょう。
実行するとチャート上に自動的にフィボナッチリトレースメントを作成してくれるスクリプトです。
フィボナッチリトレースメントには基準点となる最高値、最安値が必要なので、どの期間で最高値最安値を探すかはパラメータで設定できるようにしておきます。
最初からあるParameter部分を上記のように変更するだけです。Defaultは好きな値を入れてください。
次にOnStart()内に処理部分を書いていきます。
LINQという機能を使ってるため、知らないとわかりにくいかもしれません。
まず2行目では全部のBarから最初の部分をスキップさせてPeriod本だけのBarを取り出して、bars名前をつけた配列にしました。
3行目では最高値のbars内のインデックスを求めてます。barsからインデックスと高値の組み合わせを、高値の大きい順に並び替えて、一番最初の要素のインデックスを取り出してます。4行目も最安値のインデックスも同様に取り出しています。
LINQを知らず、よくわからなければ、ここはとりあえずそーゆーもんだと思っておいてください。
続いて、フィボナッチリトレースメントを描くための始点と終点を設定します。
ここはわかりやすいですよね。最高値と最安値のどちらが先に来るかにより、始点と終点が入れ替わるため、場合分けして始点(t1,y1)と終点(t2,y2)を設定してます。
あとは描くだけ。
2行目のDrawFibonacciRetracementで描く際の名前は他とかぶらないようにGuidを取得して文字列化して使ってます。とりあえずかぶらない文字列が欲しいときはGuid.NewGuid().ToString()と覚えてしまっていいです。色は適当に黄色にしてますが好きに変えてください。
描いた後は、3,4行目でレベル表示の調整をしてあります。デフォルトだとやたらと線が表示されてみにくいので。
ちょっとわかりにくいかもしれませんが、ChartFibonacciRetracementの持つFibonacciLevelsのうち、上記visibleLevels配列に値が含まれてるものだけ、IsVisibleをtrueにする、という処理をしています。(→参考:FibonacciLevel)
見える線を変更したい場合はvisibleLevels内の数値を編集してください。(ここに指定できるのはあらかじめ設定してある数値に限ります。チャート上のフィボナッチリトレースメントを右クリックで確認できます。)
5行目は今描いたフィボナッチリトレースメントをマウスで編集可能にしています。この1行がないと、cBot停止と同時に描いたものが消えるため、見かけ上なにも起きません。
6行目でcBotを止めて終了です。
コード全体
テンプレートで出力されてるOnTick()など余計な部分は消してもかまわないのですが、今後機能拡張することも考えて残しておきます。
一応algoファイルもあげておきます。
あとはご自由に
自分で作っておけば、思い立ったときに好きなように機能を変えることもできます。
例えばチャート上に見えてる期間で自動的にPeriodを設定するとか、フィボナッチエクスパンジョンも同時に書くとか、Stop()で止めずに、起動しっぱなしで自動的にリトレースメントを更新していくようにするとか。
自由に編集して、自分仕様のプログラムを作ってみてください。