cAlgo API リファレンス

ChartとIndicatorArea【cAlgo API】

2020年10月21日

メインのチャート画面

Chartインターフェース

cTraderのTrade画面。このうちと①と④がChartです。このチャートのメインエリアにいろんなことするためのクラスです。

cBotやインジケーターは自分が動いてるチャートしか参照できませんので、実質、本体クラス(Algo)のもつChartプロパティが唯一のChartオブジェクトとなります。

public interface Chart : ChartArea

継承するChartAreaインターフェース同様、機能は大きく分けて3つ。マーカー部分が、Chart特有の機能です。

Ⅰ. エリア内のオブジェクト操作とローソク足の情報を取得する

Ⅱ. エリアの大きさ、Y軸のスケールと色や見た目、表示する項目などを設定、更新する

Ⅲ. エリア内で起きたマウスイベントとローソク足関連のイベントを処理する

要はChartAreaにローソク足表示に特化した機能を付け加えたものですね。順番に見ていきます。

 

 

Ⅰ.ローソク足の情報を取得するメンバ

プロパティ
(Bars) Bars

ローソク足の4本値と開始時刻が入ったBarの集まりを取得します。

(Symbol) Symbol

チャートの通貨ペアを取得します。文字列ではなく通貨ペアのオブジェクトです。

(string) SymbolName

チャートの通貨ペア名の文字列を取得します。

(TimeFrame) TimeFrame

チャートのタイムフレームを取得します。1時間足とか5分足とか。

(int) BarsTotal

チャートに読み込まれてるローソク足の本数をを取得します。Bars.Countと同じです。

ChartAreaのプロパティ

Objects

 

メソッド
ChartAreaのメソッドすべて

チャートオブジェクトを描画するDraw~Object系メソッドはすべてChartAreaが持ってます。

 

 

Ⅱ.色や見た目、表示項目などを設定更新するメンバ

プロパティ
(bool) IsScrollingEnable  {get; set;}

チャートのスクロールが有効かどうかを取得、設定します。trueがデフォルト、falseにするとマウスやキーボードでスクロールができなくなります。チャート上にマウスでオブジェクトを描かせるときにfalseにしたりします。

(ChartType) ChartType  {get; set;}

チャートタイプを取得、設定します。ローソクローソク言ってますが、このプロパティを変えればバーチャートや線グラフにすることもできます。

(int) FirstVisibleBarIndex

チャートに見えてる最初のバーインデックスを取得します。

(int) LastVisibleBarIndex

チャートに見えてる最後のバーインデックスを取得します。

注意

LastVisibleBarIndexのバグ?

チャートの拡大率20%以下でBacktestのVisualModeを始めると、チャートの端までローソク足が読み込まれてない状態で始まりますが、この状態ではLastVisibleBarIndexの値が機能しません。cTrader4.0にアップデートしても同様です。

最初に表示されたバーのインデックスがしばらく表示され、チャートの端(吹き出しで残り時間が表示されてる部分)まで読み込まれて初めて値が更新されます。仕様にしては意味不明なのでおそらくバグだと思います。

また、値が更新された後も、LastBarのインデックスと一致しないようです。(FirstVisibleBarIndexも同様)これら値は少なくともバックテスト環境で最新値が表示されてる状態ではあまりあてにしないほうがいいかもしれません。

(int) MaxVisibleBars

チャートに見えてるバーの数を取得します。

(int) ZoomLevel {get; set;}

拡大率を取得、設定します。5%~500%の間で5%刻みで指定可能。

(IndicatorArea[]) IndicatorAreas

インジケーターエリアのコレクションを取得します。

(ChartColorSettings) ColorSettings

チャート上の色設定をまとめたChartColorSettingsオブジェクトを取得します。

(ChartDisplaySettings) DisplaySettings

チャートの表示項目設定をまとめたChartDisplaySettingオブジェクトを取得します。

ChartAreaのプロパティすべて

Width,Height,TopY,BottomY,IsAlive

 

メソッド
(void) SetBarFillColor(long barIndex, Color color)

barIndex番目のローソク(Bars[barIndex])の塗りつぶし色をcolorにします。

(void) SetBarOutlineColor(long barIndex, Color color)

barIndex番目のローソク(Bars[barIndex])の線の色をcolorにします。

(void) SetBarColor(long barIndex, Color color)

barIndex番目のローソク(Bars[barIndex])の全体の色をcolorにします。

(void) ResetBarColor(long barIndex)

barIndex番目のローソク(Bars[barIndex])の色をデフォルト設定に戻します。

(void) ResetBarColors()

ローソク足全体の色設定をデフォルトに戻します。

(void) SetTickVolumeColor(long barIndex, Color color)

barIndex番目のティックボリュームの色をcolorにします。

(void) ResetTickVolumeColor(long barIndex)

barIndex番目のティックボリュームの色をデフォルトに戻します。

(void) ResetTickVolumeColors()

ティックボリューム全体の色をデフォルトに戻します。

(void) ScrollXby(int bars)

チャートの表示を現在位置からbars本分スクロールします。

(void) ScrollXto(int barIndex) 

barIndex番目のローソク足が一番左側に表示される位置までチャートをスクロールします。

(void) ScrollXto(DateTime time)

timeのローソク足が一番左側に表示される位置までチャートをスクロールします。

(bool) TryChangeTimeFrame(TimeFrame timeFrame)

チャートのタイムフレームをtimeFrameに変更しようと試みます。試みますがcBotでは必ず失敗してfalseが返ってきます。インジケーターでは変更できるので、たぶんtrueが返ってきてるのですが、タイムフレームが変わるとIndicatorは再起動されるため返り値が使えません。返り値の存在意義が謎。

(bool) TryChangeTimeFrameAndSymbol(TimeFrame timeFrame, string symbolName)

チャートのタイムフレームと通貨ペアをtimeFrameとsymbolNameに変更しようと試みます。同上。

ChartAreaのメソッド

SetYRange

 

(2021/3/3追記)

(void) AddHotKey(Action action, Key key, ModifierKeys modifiers)
(void) AddHotKey(Action action, String key)

cTrader4.0で追加。ホットキーを追加します。詳細はこちら。

KeyDownイベント【cAlgoAPI】

特定のキー押下で処理をする cTrader4.0でやっとできるようになりました。キーボードイベントの処理。これにより、自作インジケーターやcBot内でキーボードからいろんな処理を行わせることができます ...

続きを見る

 

 

Ⅲ. ローソク足関連のイベント

詳細は別記事で。こんなイベントを検知できます。

イベント
ChartTypeChanged

チャートタイプが変更された。例:ローソク足からバーチャートに変更、など

ColorsChanged

チャートの色設定が変更された。

DisplaySettingsChanged

表示項目設定が変更された。

IndicatorAreaAdded

別窓のインジケーターが追加された。

IndicatorAreaRemoved

インジケーターの窓が閉じられた。

ZoomChanged

拡大率が変更された。

ChartAreaのイベントすべて

 

 

ChartType列挙型

ChartのChartTypeプロパティはこの型で指定します。

Candlesticks ローソク足
Bars バーチャート
Line 線グラフ
Dots 点グラフ

 

 

インジケータ用の別窓

IndicatorAreaインターフェース

この図でいうと②③⑤。インジケーターが表示される別窓です。自分のチャートのインジケーターエリアしか触れないため、左側で動いてるcBotが取得できるのは②と③だけです。

public interface IndicatorArea : ChartArea

ChartAreaインターフェースを継承してます。

このクラスに特有のメンバはありません。表示されてるインジケーターの値すらとれません。できるのはChartAreaのメンバを使っていろいろ描いたりすることくらい。

 

プロパティとメソッド
ChartAreaのプロパティとメソッドすべて

 

サンプルコード
protected override void OnStart() {
    if (Chart.IndicatorAreas.Count >= 2) {
        var indiArea1 = Chart.IndicatorAreas[0];
        var indiArea2 = Chart.IndicatorAreas[1];
        // 1つ目のインジケーターエリアの真ん中に白い〇アイコンを描く
        indiArea1.DrawIcon("icon", ChartIconType.Circle, Bars.Count - 1, (indiArea1.TopY + indiArea1.BottomY) / 2, Color.White);
        // 2つ目のインジケーターエリアの一番上に緑の水平線を引く
        indiArea2.DrawHorizontalLine("horizontal_line", indiArea2.TopY, Color.Green);
    }
}

(2021/3/24 内容を一部修正)

-cAlgo API リファレンス
-,

© 2021 cTrader's Life Powered by AFFINGER5