UNPKG

@4ex/indicators

Version:

Technical indicators for ohlc charts written in TypeScript

104 lines (103 loc) 3.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.KST = void 0; const fp_1 = require("lodash/fp"); const technicalindicators_1 = require("technicalindicators"); const types_1 = require("../types"); const defaultInput = { signalPeriod: 9, rocLength1: 10, rocLength2: 15, rocLength3: 20, rocLength4: 30, smaLength1: 10, smaLength2: 10, smaLength3: 10, smaLength4: 15, }; /** * The Know Sure Thing (KST) is a momentum oscillator developed * by Martin Pring to make rate-of-change readings easier for * traders to interpret. In a 1992 Stocks and Commodities article, * Pring referred to the indicator as "Summed Rate of Change (KST)", * but the KST term stuck with technical analysts. The indicator is * relatively common among technical analysts preferring momentum * oscillators to make decisions */ class KST { /** * * @param {OHLC[]} series candle series * @param {number} signalPeriod signal line period * @param {number} rocLength1 * @param {number} rocLength2 * @param {number} rocLength3 * @param {number} rocLength4 * @param {number} smaLength1 * @param {number} smaLength2 * @param {number} smaLength3 * @param {number} smaLength4 */ constructor(series, signalPeriod = defaultInput.signalPeriod, rocLength1 = defaultInput.rocLength1, rocLength2 = defaultInput.rocLength2, rocLength3 = defaultInput.rocLength3, rocLength4 = defaultInput.rocLength4, smaLength1 = defaultInput.smaLength1, smaLength2 = defaultInput.smaLength2, smaLength3 = defaultInput.smaLength3, smaLength4 = defaultInput.smaLength4) { // super(); const values = fp_1.map(types_1.OHLCEnum.CLOSE)(series); this.indicator = new technicalindicators_1.KST({ values, ROCPer1: rocLength1, ROCPer2: rocLength2, ROCPer3: rocLength3, ROCPer4: rocLength4, SMAROCPer1: smaLength1, SMAROCPer2: smaLength2, SMAROCPer3: smaLength3, SMAROCPer4: smaLength4, signalPeriod, }); } /** * Retrieve KST values for instance * @return {KnowSureThingOutput[]} values for instance data */ getResults() { return this.indicator.getResult(); } /** * Calculate KST to next tick * @param {OHLC} candle new candle to add to series * @return {KnowSureThingOutput | undefined} next KST value or undefined if * period is greater than actual series length */ next(candle) { return this.indicator.nextValue(candle[types_1.OHLCEnum.CLOSE]); } /** * Create instance from data * @param {KnowSureThingInput} input input data * @return {KST} KST instance */ static generator({ series, signalPeriod, rocLength1, rocLength2, rocLength3, rocLength4, smaLength1, smaLength2, smaLength3, smaLength4, }) { return new KST(series, signalPeriod, rocLength1, rocLength2, rocLength3, rocLength4, smaLength1, smaLength2, smaLength3, smaLength4); } /** * Get KST values from input * @param {KnowSureThingInput} input input data * @return {KnowSureThingOutput[]} KST values */ static calculate(input) { const { series, signalPeriod, rocLength1, rocLength2, rocLength3, rocLength4, smaLength1, smaLength2, smaLength3, smaLength4, } = Object.assign(Object.assign({}, defaultInput), input); const values = fp_1.map(types_1.OHLCEnum.CLOSE)(series); return technicalindicators_1.KST.calculate({ values, ROCPer1: rocLength1, ROCPer2: rocLength2, ROCPer3: rocLength3, ROCPer4: rocLength4, SMAROCPer1: smaLength1, SMAROCPer2: smaLength2, SMAROCPer3: smaLength3, SMAROCPer4: smaLength4, signalPeriod, }); } } exports.KST = KST;