UNPKG

@sunrise1002/tats

Version:

Techincal Indicators written in javascript

85 lines (84 loc) 2.49 kB
/** * Created by AAravindan on 5/7/16. */ import { LinkedList } from './LinkedList'; export default class FixedSizeLinkedList extends LinkedList { constructor(size, maintainHigh, maintainLow, maintainSum) { super(); this.size = size; this.maintainHigh = maintainHigh; this.maintainLow = maintainLow; this.maintainSum = maintainSum; this.totalPushed = 0; this.periodHigh = 0; this.periodLow = Infinity; this.periodSum = 0; if (!size || typeof size !== 'number') { throw ('Size required and should be a number.'); } this._push = this.push; this.push = function (data) { this.add(data); this.totalPushed++; }; } add(data) { if (this.length === this.size) { this.lastShift = this.shift(); this._push(data); //TODO: FInd a better way if (this.maintainHigh) if (this.lastShift == this.periodHigh) this.calculatePeriodHigh(); if (this.maintainLow) if (this.lastShift == this.periodLow) this.calculatePeriodLow(); if (this.maintainSum) { this.periodSum = this.periodSum - this.lastShift; } } else { this._push(data); } //TODO: FInd a better way if (this.maintainHigh) if (this.periodHigh <= data) (this.periodHigh = data); if (this.maintainLow) if (this.periodLow >= data) (this.periodLow = data); if (this.maintainSum) { this.periodSum = this.periodSum + data; } } *iterator() { this.resetCursor(); while (this.next()) { yield this.current; } } calculatePeriodHigh() { this.resetCursor(); if (this.next()) this.periodHigh = this.current; while (this.next()) { if (this.periodHigh <= this.current) { this.periodHigh = this.current; } ; } ; } calculatePeriodLow() { this.resetCursor(); if (this.next()) this.periodLow = this.current; while (this.next()) { if (this.periodLow >= this.current) { this.periodLow = this.current; } ; } ; } }