RSIを作る
RSIの作成
RSIのサンプルコードは下記です。
export default (): ContainerIndicator<{
period: number
lineColor: string
initialHeight: number | string
}, {
rsiBuffer: IndicatorBuffer
}> => {
return {
type: "c",
name: "tutor.RSI",
onInit() {
const { initialHeight, lineColor } = this.params
this.initialHeight = initialHeight
const diffBuffer = this.addWorkBuffer(); //1
const rsiBuffer = this.rsiBuffer = this.addLineBuffer({ lineColor });
this.addPercentLine(70, "darkgray")//2
this.addPercentLine(30, "darkgray")
this.digits = 0 //3
this.getMin = (index, lows) => 0 //4
this.getMax = (index, highs) => 100 //5
this.onChartChange = ({ index, times, opens, highs, lows, closes, spreads }) => {
const period = this.params.period;
const diff = closes.get(index) - closes.get(index - 1)
diffBuffer.set(index, diff);
let sumGain = 0, sumLoss = 0
for (let i = index - period + 1; i <= index; i++) {
const diff = diffBuffer.get(i)
if (diff > 0) {
sumGain += diff
} else if (diff <= 0) {
sumLoss -= diff
} else {
sumGain = NaN, sumLoss = NaN;
break;
}
}
const avgGain = sumGain / period, avgLoss = (Math.abs(sumLoss)) / period;
const rsi = avgLoss === 0 ? 100 : avgGain === 0 ? 0 : (100 - (100 / (1 + (avgGain / avgLoss))))
rsiBuffer.set(index, rsi)
}
this.getDisplayData = (index) => {
return { rsi: this.rsiBuffer.get(index) }
}
},
params: {
period: 14,
lineColor: "purple",
initialHeight: "25%"
}
}
}
1 | 計算の為に必要だが表示は不要の場合、addWorkBuffer関数を使ってWorkBufferを作成します。 strategy.chartからaddContainerIndicatorでこのインジケーターを呼び出した場合、workBufferを公開する必要は無い為、thisには設定していません | ||||||
2 | 特定の価格に横線を表示するにはaddPercentLineメソッドを使用します。 | ||||||
3 | インジケーターバッファーに設定した価格の小数点以下の桁数は、規定では表示中の通貨と同じになります。
なお、次のようにインジケーターのsymbolプロパティを参照することで表示中の通貨名や小数点以下の桁数を取得することができます。 | ||||||
4 | 規定ではチャートに表示されるインジケーターの最小価格は、表示中のバーの中の最小価格となります。より小さい価格を返したい場合はgetMinメソッドで最小価格を返してください | ||||||
5 | 規定ではチャートに表示されるインジケーターの最大価格は、表示中のバーの中の最大価格となります。より小さい価格を返したい場合はgetMinメソッドで最大価格を返してください |