メインのチャート画面
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
チャートに見えてる最後のバーインデックスを取得します。
注意
チャートの拡大率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 内容を一部修正)