cAlgo Tips & Sample cTrader Tools (cBot インジケーター)

時間足切替時の表示位置を固定する 【cTrader tools】

2020年11月22日

このときの短時間足の動きが見たい!

ある日のこと

過去にさかのぼって日足チャートを見ていたら、気になる値動きを見つけました。

「このときの1時間足や15分足の動きはどうなってるんだろう?」

そう思って、チャートの時間足をポチッと切り替えたら・・・

チャートのスクロールが戻った!今のどこだっけ!!

 

同じ経験した人もいるはず

cTraderでは時間足を変えると、自動的にスクロールが直近の時間まで戻ります。過去の値動きをより短い時間足で確認しようとするときは不便で仕方ありません。

「スクロールすればいいだけじゃん」と思うかもしれませんが、想像してみてください。

日足で数か月前のところにに気になる値動きを見つけたとしたら、15分足で数か月分さかのぼるためにどれだけスクロールしなければいけないか

 

インジケーターで解決

というわけで表示位置を固定できるインジケーターを作りました。簡単なのでソースコード付きで配布します。自由にいじってみてください。

ダウンロードしたalgoファイルをダブルクリックし、cTraderで開こうとすると、インストールするかどうか聞かれますので、そのままインストールしてください。これだけで、すでに使えるようになってますし、Automate画面からコードの編集も可能です。

使い方も簡単です。まずインジケーターのCustom項目からTimeSyncを選んで、チャートに追加してください。

そして長時間足で気になる値動きを見つけたらそこに縦線(垂直ライン:VerticalLine)を引きます。(チャート画面右側のツールバーから)

で、時間足を変えると自動的に縦線の位置までチャートがスクロールします。あまりに昔だとちょっと時間かかります。

 

パラメータ
DisplayAfter

スクロールした後、縦線の右側に何本のローソク足を表示するか。0だとチャートの一番右側に縦線が来て違和感があります。

DisplayLabel

左上に"TimeSync"と表示するかどうか。なにも表示されないとインジケーターが適用されてるかどうかわからないので基本表示推奨。ただ、他に左上に情報を表示するインジケーターやcBotを使用してる場合は、重なってうっとうしいのでfalseにしたほうがいいです。

TargetRecent

縦線が複数ある場合、これがYesだと一番右側(直近)のラインを基準にします。
Noだとどれが選ばれるかわかりません。(けど、仕組み上ほぼ最後に描かれた線になるはずです。)

 

 

ソースコード解説

ここからはプログラムする人用。まずは簡単なので中身見てみてください。1行ごとにしつこくコメントも入ってます。

 

仕組み

インジケーターは時間足が変わると同時に自動的に初期化されます

これを利用して、時間足が変わった際に初期化処理でチャート上から縦線を探してその場所までチャートをスクロールさせてるだけです。普通Indicatorでメイン部分となるCalculateは使いません。

 

メイン部分

ただでさえ簡単なソースコードですが、「縦線探してスクロール」だけならもっと単純化できます。

var lines = Chart.FindAllObjects<ChartVerticalLine>();
if(lines.Count() != 0) { 
    var index = Bars.OpenTimes.GetIndexByTime(lines.Last().Time);
    Chart.ScrollXTo(index);
}

インジケーターを新規作成して、この5行をInitialize()内にコピペすれば、もう出来上がりです。(縦線がチャートの一番左側に来るようスクロールされます)

まず、チャート内のすべての縦線を取得し、if文で縦線が存在してるかを確認、1本でもあれば配列の最後の縦線の時間からローソク足のインデックスを取得してその場所までスクロール、という流れです。

配布のソースコード内では直近の縦線を取得するための処理と表示位置の調整を行ってるので、少しコードが追加されてるだけです。

 

よく使うメソッド

TimeSeries->GetIndexByTime

上記の3行目をわかりやすく書くとこうなります。

TimeSeries times = Bars.OpenTimes;
times.GetIndexByTime(lines.Last().Time);

BarsのOpenTimesプロパティ(TimeSeries型)を取得して、TimeSeriesが持つメソッドGetIndexByTimeを使用しています。

これは時間からバー(ローソク足)の位置を表すindexを取得するためのメソッドです。

今回はスクロール位置の指定に使っているだけですが、取得したindexを利用してBars[index]などというようにその時間のデータを参照したりできます。

 

 

インジケーターはこんなこともできる

インジケーターというと移動平均だとかMACDだとかなんか価格から数値を計算してグラフみたいに表示するイメージだと思います。

もちろんその通りなんですが、cTraderで作るIndicatorではこんなツールっぽいものも作れるということが今回お伝えしたかった内容です。(MT4でもできますけど)

テンプレートにたった5行書き加えるだけでそこそこ使えそうなツールが出来上がるなんて感動しませんか?

-cAlgo Tips & Sample, cTrader Tools (cBot インジケーター)
-, ,

© 2024 cTrader's Life Powered by AFFINGER5