データの並んだやつ
DataSeriesインターフェース
Barsから高値だけとか終値だけとか取り出すとこれが返ってきます。
public interface DataSeries : IEnumerable<double>
関連するインターフェース:IndicatorDataSeries
一応、cAlgoで独自に定義されてるインターフェースですが、中身としては読み取り専用のdoubleの配列に単純なプロパティとメソッドを持たせたものです。
Last()以外のメソッドはFunctionsで拡張メソッドとして定義されてるんですが、使うだけなら普通のメンバと変わらす別に意識しないでで使えます。
プロパティ
(double) this[int index]
インデックスを指定して要素を取得します。基本的な配列の使い方です。
(int) Count
要素数を取得します。
(double) LastValue
最後の要素を取得します。Bars.~Pricesであれば一番最近の価格です。
メソッド
(double) Last(int index)
(index+1)個前の要素を返します。
(bool) HasCrossedAbove(DataSeries data, int period)
ローソク足過去period本の間に自身のデータがdataとクロスして上抜けたかどうかを返します。
(bool) HasCrossedAbove(double value, int period)
ローソク足過去period本の間に自身のデータがvalueを上抜けたかどうかを返します。
(bool) HasCrossedBelow(DataSeries data, int period)
ローソク足過去period本の間に自身のデータがdataとクロスして下抜けたかどうかを返します。
(bool) HasCrossedBelow(double value, int period)
ローソク足過去period本の間に自身のデータがvalueを下抜けたかどうかを返します。
(bool) IsRising()
最後の値が一つ前の値より上かどうか返します。
(bool) IsFalling()
最後の値が一つ前の値より下かどうか返します。
(double) Maximum(int period)
period間の最大値を求めます。
(double) Maximum(int period)
period間の最小値を求めます。
(double) Sum(int period)
period間の合計値を求めます。
TimeSeriesインターフェース
DataSeriesのDateTime版。Bars.OpenTimes用です。
public interface TimeSeries : IEnumerable<DateTime>
DataSeriesと同じようなもんですが、GetIndexByTime()というとっても使用頻度の高いメソッドを持ちます。
プロパティ
(DateTime) this[int index]
インデックスを指定して要素を取得します。基本的な配列の使い方です。
(int) Count
要素数を取得します。
(double) LastValue
最後の要素を取得します。一番最近のローソク足の開始時間になります。
メソッド
(int) GetIndexByTime(DateTime time)
timeが指すBarsのインデックスを返します。例えば1時間足で引数に13時20分が渡されると13時開始のBarのインデックスが返ります。未来の時間が渡されると最新のBarインデックスが返ります。
(int) GetIndexByExactTime(DateTime time)
timeに開始したBarsのインデックスを返します。timeぴったりに開始したローソク足が存在しないと結果は-1になります。例えば1時間足で引数に13時20分が渡されたら-1が返ります。未来の時間が渡されても-1が返ります。nullじゃないので注意。
(double) Last(int index)
(index+1)個前の要素を返します。
補足
Get~Timeメソッドの引数DataTimeにおける注意点
引数のプロパティDateTime.Kindの値が.Localだと例外が発生します。RobotのTimeZoneがUTC以外の場合はKindが.Utcでも例外が発生します。
DateTime.Kindの初期値は.UnSpecifiedなのでほとんどの場合問題ありませんが、DateTime.NowはKind.Localのため、現在時刻を使う場合は注意が必要です。
インジケータの表示用
インジケータの表示用に使われるのもこのDataSeriesを継承したものです。
IndicatorDataSeriesインターフェース
public interface IndicatorDataSeries : DataSeries, IEnumerable
DataSeriesを継承しており、特有のメンバはありません。つまりDataSeriesとプロパティ、メソッドはすべて一緒です。唯一の違いはthis[index]に値を代入できるようになってることです。
主な使われ方はIndicatorで[Output]属性つけて宣言しておいて、Calculate()内で表示させたい値を計算してthis[index]=valueのように値を代入します。[Output]属性つけとけば初期化はcTraderが勝手にやってくれます。
表示用以外に自分で使うために宣言することもできますが、インターフェースなのでnewでオブジェクトを作ることはできません。この場合はAlgoのCreateDateSeries();を呼び出して初期化します。
プロパティ・メソッド
(double) this(int index) {get; set;}
インデックスを指定し要素を取得します。代入可能です。
DataSeriesのメソッドとプロパティすべて
上記参照
サンプルコード
IndicatorDataSeries myDataSeries;
//クラスじゃないのでこれはできない。 コンパイルエラー
//myDataSeries = new IndicatorDataSeries();
//これで初期化する
myDataSeries = CreateDataSeries();