@sunrise1002/tats
Version:
Techincal Indicators written in javascript
85 lines (84 loc) • 2.49 kB
JavaScript
/**
* 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;
}
;
}
;
}
}