チャートに描くなにか
トレードするにあたって、チャート上にはインジケーター以外にもいろいろと表示させたいものはあります。トレンドライン、フィボナッチリトレースメント、ちょっとしたメモなどなど。
cTraderでチャート画面上に描き込まれたこれらのオブジェクトはChartObject(のサブクラス)となってcBotやIndicatorから操作できるようになります。もちろん、cBotやIndicatorから新しくChartObjectを描き込むこともできます。ここではChartObjectでどんなことができるのか見てみましょう。
ChartObject インターフェース
チャート上に描かれたもの(=チャートオブジェクト、と呼びます)のベースインターフェースです。
public interface ChartObject
関連するインターフェース:
ChartStaticText, ChartText, ChartTrendLine, ChartEquidistantChannel, ChartFibonacciBase, ChartFibonacciExpansion, ChartFibonacciFan, ChartFibonacciRetracement, ChartHorizontalLine, ChartVerticalLine, ChartIcon, ChartShape, ChartEllipse, ChartTriangle, ChartRectangle, ChartAndrewsPitchfork, ChartDrawing,
cTrader内で描画されるチャートオブジェクトはすべてChartObjectを継承しています。ChartがもつプロパティであるObjectsはChartObjectのリストです。実際に操作する際もChartObjectのメンバは多用するため、確認しておきましょう。
プロパティ
IsIntaractiveがtrueの場合、ほとんどの項目がチャート画面からのマウス操作で変更できるため、プログラムで使用する際はユーザー側に変更されてる可能性があることを考慮する必要があります。
(sting) Name
チャートオブジェクトの名前を取得します。描くときに他と被らない名前を指定する必要があります。チャート上でもオブジェクト右クリックから参照可能。
(ChartObjectType) ObjectType
チャートオブジェクトの種類を取得します。
(bool) IsAlive
チャートオブジェクトがチャート上に存在するかどうか。チャート上から消せばfalseになります。
(bool) IsInteractive {get; set;}
チャートオブジェクトがマウスなどで操作可能かどうか。初期状態はfalseです。オブジェクトをチャート上からいじられたくなければこれをfalseのままにしておきましょう。
ただし、これがfalseの場合はそのチャートオブジェクトを作成したcBotやIndicatorが止まった時点で自動的にチャート上から消えます。
ポイント
他のプログラムで利用したいChartObjectはIsIntaractiveをTrueにしておく必要があります。
(bool) IsHidden {get; set;}
チャートオブジェクトが隠されてるかどうか。チャート左ツールバーの眼のボタンで切り替え可能です。
(bool) IsLocked {get; set;}
チャートオブジェクトがロックされてるかどうか。ロックされたオブジェクトはマウスで動かせなくなります。チャート上右クリックから変更可能。
(int) Zindex {get; set;}
チャートオブジェクトの重ね順です。チャートにいくつオブジェクトがあっても、初期状態では常に0で単純に描かれた順に重なります。
ChartObjectType 列挙型
チャートオブジェクトがなんなのかを表します。プロパティのObjectTypeで返ってくるのがこの型です。
名前もほぼそのままなのでわかると思いますが、一応チャート画面右側にあるツールバーの順番通りに並べておきます。
VerticalLine | 垂直線 |
HorizontalLine | 水平線 |
TrendLine | トレンドライン |
Drawing | フリーハンド |
EquidistantChannel | チャネルライン(トレンドラインを平行に並べたみたいなやつ) |
AndrewsPitchfork | アンドリューピッチフォーク |
FibonacciExpansion | フィボナッチエクスパンジョン |
FibonacciFan | フィボナッチファン |
FibonacciRetracement | フィボナッチリトレースメント |
Rectangle | 四角形 |
Ellipse | 楕円 |
Triangle | 三角形 |
Icon | アイコン |
Text | テキスト(スクロールで動く) |
StaticText | 固定テキスト(スクロールで動かない) |
Rayがありませんが、Rayの中身はTrendLineです。
この中でDrawingだけプログラムからは描けませんが、チャート上に描かれたものを取得することはできます。(取得したところでたいしたことできませんけど。)逆にStaticTextはプログラムからしか描けません。
サンプルコード
// Chart上のChartObjectすべてのオブジェクトのロックを外す
foreach (var chartObj in Chart.Objects) {
chartObj.IsLocked = false;
// トレンドラインだけは色を赤にする
if (chartObj.ObjectType == ChartObjectType.TrendLine) {
// ChartTrendLineのメンバ使うためにはキャストが必要
var tl = chartObj as ChartTrendLine;
tl.Color = Color.Red;
}
}
このプログラム自体に意味はないです。(別にロック外さなくてもプログラムからは操作できます。)こんな感じで使うとだけわかってもらえれば。