平均足を例にコンテナインジケーターを作成する

概要

コンテナインジケーターの作成方法を平均足を例に説明します。

コンテナインジケーターとは、「高さ」を持ち、単独で表示できるインジケーターです。
アイテムインジケーターとは、単独では表示できず、コンテナインジケーターに組み込んで表示するインジケーターです。
アイテムインジケーターとの共通箇所は説明を省略します。必要に応じてアイテムインジケーターの説明も参照してください。
参照:単純移動平均を作る

操作

インジケーター「新規登録」または「編集」画面を開き、解説のソースを入力、登録してください。

コンテナインジケーターの作成

ここでは平均足を例にコンテナインジケータの実装方法の説明をします。

コンテナインジケーターを作成するには、indicatorTypeプロパティに[INDICATOR_TYPE.CONTAINER」を設定し、initメソッド内でheightを設定します。

下記のソースを入力、登録してください。

{
    indicatorName: "tutor.lib.HeikinAshi1"
    ,indicatorType: INDICATOR_TYPE.CONTAINER
    , init: function () {
        var params = this.params;
        var candleStickBufferArr = this.addCandleStickBuffer([//1
            params.upColor,
            params.downColor
        ]);
        this.openBuffer = candleStickBufferArr[0];
        this.highBuffer = candleStickBufferArr[1];
        this.lowBuffer = candleStickBufferArr[2];
        this.closeBuffer = candleStickBufferArr[3];
        this.setIndicatorShortName("heikin")
            .setBufferInfo(this.openBuffer, "hOpen")
            .setBufferInfo(this.closeBuffer, "hClose")
            .setShowDefaultScaleLine(true)//2
            .setHeight(150);//3
    }
    , calc: function (index, times, opens, highs, lows, closes, spreads) {
        if(index==0){
             return; //4
        }
        var preOpen = opens.get(index - 1),
            preClose = closes.get(index - 1);
        var openVal = (preOpen + preClose) / 2,
            highVal = highs.get(index),
           lowVal = lows.get(index),
            closeVal = (opens.get(index) + highs.get(index) + lows.get(index) + closes.get(index)) / 4;
        this.openBuffer.set(index, (preOpen + preClose) / 2);
        this.highBuffer.set(index, highs.get(index));
        this.lowBuffer.set(index, lows.get(index));
        this.closeBuffer.set(index, (opens.get(index) + highs.get(index) + lows.get(index) + closes.get(index)) / 4);
    }
    , params: [
        {upColor:"blue"},
        {downColor:"red"}
    ]
}
1
addCandleStickBufferメソッドはローソク足を描画するインジケーターバッファーを格納した配列を戻します。 参照:addCandleStickBuffer
2
メインローソク足と同様のレートラインを表示する設定をしています。 参照:showDefaultScaleLine
独自のレートラインを設定する場合はshowScaleLineを参照してください。
参照:showScaleLine
3
コンテナインジケーターの高さを設定しています。
参照:height
4
平均足はindex:0は計算できないため、index:0を無視しています。
index:0を無視しない場合、高値と安値は計算可能の為、ヒゲだけが描画されます。

アイテムインジケーターをドロップ可能にする

ユーザー作成のコンテナインジケーターは規定では他のアイテムインジケーターをドロップすることはできません。acceptDropFromメソッドを実装すれば、この動作を変更することができます。

参照:acceptDropFrom

既定のコンテナインジケーター「メインローソク足」は全てのアイテムインジケーターがドロップ可能です。
{
    indicatorName: "tutor.lib.HeikinAshi2"
    ,indicatorType: INDICATOR_TYPE.CONTAINER
    , init: function () {
        var params = this.params;
        var candleStickBufferArr = this.addCandleStickBuffer([
            params.upColor,
            params.downColor
        ]);
        this.openBuffer = candleStickBufferArr[0];
        this.highBuffer = candleStickBufferArr[1];
        this.lowBuffer = candleStickBufferArr[2];
        this.closeBuffer = candleStickBufferArr[3];
        this.setIndicatorShortName("heikin")
            .setBufferInfo(this.openBuffer, "hOpen")
            .setBufferInfo(this.closeBuffer, "hClose")
            .setShowDefaultScaleLine(true)
            .setHeight(150);
    }
    , calc: function (index, times, opens, highs, lows, closes, spreads) {
        if(index==0){
             return;
        }
        var preOpen = opens.get(index - 1),
            preClose = closes.get(index - 1);
        var openVal = (preOpen + preClose) / 2,
            highVal = highs.get(index),
           lowVal = lows.get(index),
            closeVal = (opens.get(index) + highs.get(index) + lows.get(index) + closes.get(index)) / 4;
        this.openBuffer.set(index, (preOpen + preClose) / 2);
        this.highBuffer.set(index, highs.get(index));
        this.lowBuffer.set(index, lows.get(index));
        this.closeBuffer.set(index, (opens.get(index) + highs.get(index) + lows.get(index) + closes.get(index)) / 4);
    }
    , acceptDropFrom:function(){//1
        return true;
    }        
    , params: [
        {upColor:"blue"},
        {downColor:"red"}
    ]
} 
                   
1
全てのアイテムインジケーターをドロップ可能にしています。インジケーター名をもとにインジケーターごとにドロップ可否を設定することも可能です。 参照:acceptDropFrom