UNPKG

@amcharts/amcharts5

Version:
63 lines 2.29 kB
import { OverboughtOversold } from "./OverboughtOversold"; /** * An implementation of a [[StockChart]] indicator. * * @see {@link https://www.amcharts.com/docs/v5/charts/stock/indicators/} for more info */ export class WilliamsR extends OverboughtOversold { _afterNew() { this._themeTags.push("williamsr"); super._afterNew(); this._editableSettings.unshift({ key: "period", name: this.root.language.translateAny("Period"), type: "number", minValue: 3, maxValue: 100, step: 1 }, { key: "seriesColor", name: this.root.language.translateAny("Period"), type: "color" }); this._setEditableSettingBounds("overBought", -30, -5, 1); this._setEditableSettingBounds("overSold", -95, -70, 1); } /** * @ignore */ prepareData() { if (this.series) { this.set("field", "close"); const dataItems = this.get("stockSeries").dataItems; let data = this._getDataArray(dataItems); let period = this.get("period", 14); for (let i = 0, len = data.length; i < len; i++) { const dataItem = data[i]; let h = -Infinity; let l = Infinity; let b = Math.max(0, i - period + 1); for (let j = b; j <= i; j++) { let vh = dataItems[j].get("highValueY"); let vl = dataItems[j].get("lowValueY"); if (vh == null || vl == null) { continue; } if (vh >= h) { h = vh; } if (vl <= l) { l = vl; } } if (h !== -Infinity && h - l != 0) { dataItem.valueS = -100 * (h - dataItem.value_y) / (h - l); } } this.series.updateData(data); } } } WilliamsR.className = "WilliamsR"; WilliamsR.classNames = OverboughtOversold.classNames.concat([WilliamsR.className]); //# sourceMappingURL=WilliamsR.js.map