UNPKG

trading-signals

Version:

Technical indicators to run technical analysis with JavaScript / TypeScript.

579 lines 20.2 kB
//#region src/error/NotEnoughDataError.d.ts declare class NotEnoughDataError extends Error { constructor(requiredAmount: number); } //#endregion //#region src/types/Indicator.d.ts type Nullable<Result> = Result | null; interface Indicator<Result = number, Input = number> { isStable: boolean; add(input: Input): Nullable<Result>; getRequiredInputs(): number; getResult(): Nullable<Result>; getResultOrThrow(): Result; replace(input: Input): Nullable<Result>; update(input: Input, replace: boolean): Nullable<Result>; updates(input: Input[], replace: boolean): Nullable<Result>[]; } declare const TradingSignal: { readonly BEARISH: "BEARISH"; readonly BULLISH: "BULLISH"; readonly SIDEWAYS: "SIDEWAYS"; readonly UNKNOWN: "UNKNOWN"; }; type TradingSignals = (typeof TradingSignal)[keyof typeof TradingSignal]; declare abstract class TechnicalIndicator<Result, Input> implements Indicator<Result, Input> { protected result: Result | undefined; abstract getRequiredInputs(): number; getResult(): (Result & {}) | null; getResultOrThrow(): Result & ({} | null); get isStable(): boolean; add(input: Input): Result | null; replace(input: Input): Result | null; abstract update(input: Input, replace: boolean): Result | null; updates(inputs: readonly Input[], replace?: boolean): (Result | null)[]; } declare abstract class IndicatorSeries<Input = number> extends TechnicalIndicator<number, Input> { protected previousResult?: number; protected setResult(value: number, replace: boolean): number; } declare abstract class TrendIndicatorSeries<Input = number, SignalState = TradingSignals> extends IndicatorSeries<Input> { #private; protected abstract calculateSignalState(result?: number | null | undefined): SignalState; protected setResult(value: number, replace: boolean): number; getSignal(): { state: SignalState; hasChanged: boolean; }; } //#endregion //#region src/trend/MA/MovingAverage.d.ts declare abstract class MovingAverage extends IndicatorSeries { readonly interval: number; constructor(interval: number); } //#endregion //#region src/trend/SMA/SMA.d.ts declare class SMA extends MovingAverage { readonly prices: number[]; getRequiredInputs(): number; update(price: number, replace: boolean): number | null; } //#endregion //#region src/types/HighLowClose.d.ts type HighLow<T = number> = { high: T; low: T; }; type HighLowClose<T = number> = HighLow<T> & { close: T; }; type OpenHighLowClose<T = number> = HighLowClose<T> & { open: T; }; type OpenHighLowCloseVolume<T = number> = OpenHighLowClose<T> & { volume: T; }; type HighLowCloseVolume<T = number> = Omit<OpenHighLowCloseVolume<T>, 'open'>; //#endregion //#region src/trend/EMA/EMA.d.ts declare class EMA extends MovingAverage { #private; readonly interval: number; constructor(interval: number); getRequiredInputs(): number; update(price: number, replace: boolean): number; getResultOrThrow(): number; get isStable(): boolean; } //#endregion //#region src/trend/RMA/RMA.d.ts declare class RMA extends MovingAverage { #private; readonly interval: number; constructor(interval: number); getRequiredInputs(): number; update(price: number, replace: boolean): number; getResultOrThrow(): number; get isStable(): boolean; } //#endregion //#region src/trend/WMA/WMA.d.ts declare class WMA extends MovingAverage { readonly interval: number; readonly prices: number[]; constructor(interval: number); getRequiredInputs(): number; update(price: number, replace: boolean): number | null; } //#endregion //#region src/trend/WSMA/WSMA.d.ts declare class WSMA extends IndicatorSeries { #private; readonly interval: number; constructor(interval: number); getRequiredInputs(): number; update(price: number, replace: boolean): number | null; } //#endregion //#region src/trend/MA/MovingAverageTypes.d.ts type MovingAverageTypes = typeof EMA | typeof RMA | typeof SMA | typeof WMA | typeof WSMA; //#endregion //#region src/momentum/AO/AO.d.ts declare class AO extends TrendIndicatorSeries<HighLow<number>> { readonly shortInterval: number; readonly longInterval: number; readonly long: MovingAverage; readonly short: MovingAverage; constructor(shortInterval: number, longInterval: number, SmoothingIndicator?: MovingAverageTypes); getRequiredInputs(): number; update({ low, high }: HighLow<number>, replace: boolean): number | null; protected calculateSignalState(result: number | null | undefined): "BEARISH" | "BULLISH" | "SIDEWAYS" | "UNKNOWN"; } //#endregion //#region src/momentum/MOM/MOM.d.ts declare class MOM extends TrendIndicatorSeries { #private; readonly interval: number; constructor(interval: number); getRequiredInputs(): number; update(value: number, replace: boolean): number | null; protected calculateSignalState(result?: number | null | undefined): "BEARISH" | "BULLISH" | "SIDEWAYS" | "UNKNOWN"; } //#endregion //#region src/momentum/AC/AC.d.ts declare class AC extends TrendIndicatorSeries<HighLow<number>> { readonly shortAO: number; readonly longAO: number; readonly signalInterval: number; readonly ao: AO; readonly momentum: MOM; readonly signal: SMA; constructor(shortAO: number, longAO: number, signalInterval: number); getRequiredInputs(): number; update(input: HighLow<number>, replace: boolean): number | null; protected calculateSignalState(result: number | null | undefined): "BEARISH" | "BULLISH" | "UNKNOWN"; } //#endregion //#region src/momentum/CCI/CCI.d.ts declare class CCI extends TrendIndicatorSeries<HighLowClose<number>> { #private; readonly interval: number; constructor(interval: number); getRequiredInputs(): number; update(candle: HighLowClose<number>, replace: boolean): number | null; protected calculateSignalState(result?: number | null | undefined): "BEARISH" | "BULLISH" | "SIDEWAYS" | "UNKNOWN"; } //#endregion //#region src/momentum/CG/CG.d.ts declare class CG extends TrendIndicatorSeries { readonly interval: number; readonly signalInterval: number; signal: SMA; readonly prices: number[]; get isStable(): boolean; constructor(interval: number, signalInterval: number); getRequiredInputs(): number; protected calculateSignalState(result?: number | null | undefined): "BEARISH" | "BULLISH" | "SIDEWAYS" | "UNKNOWN"; update(price: number, replace: boolean): number | null; } //#endregion //#region src/trend/DEMA/DEMA.d.ts declare class DEMA extends IndicatorSeries { #private; readonly interval: number; constructor(interval: number); getRequiredInputs(): number; update(price: number, replace: boolean): number; get isStable(): boolean; } //#endregion //#region src/momentum/MACD/MACD.d.ts type MACDResult = { histogram: number; macd: number; signal: number; }; declare class MACD extends TechnicalIndicator<MACDResult, number> { #private; readonly short: EMA | DEMA; readonly long: EMA | DEMA; readonly signal: EMA | DEMA; readonly prices: number[]; constructor(short: EMA | DEMA, long: EMA | DEMA, signal: EMA | DEMA); getRequiredInputs(): number; update(price: number, replace: boolean): { histogram: number; macd: number; signal: number; } | null; protected calculateSignal(result?: MACDResult | null | undefined): "BEARISH" | "BULLISH" | "UNKNOWN"; getSignal(): { state: (typeof TradingSignal)[keyof typeof TradingSignal]; hasChanged: boolean; }; } //#endregion //#region src/momentum/OBV/OBV.d.ts declare class OBV extends TrendIndicatorSeries<OpenHighLowCloseVolume<number>> { readonly interval: number; readonly candles: OpenHighLowCloseVolume<number>[]; constructor(interval: number); getRequiredInputs(): number; update(candle: OpenHighLowCloseVolume<number>, replace: boolean): number | null; protected calculateSignalState(result: number | null | undefined): "BEARISH" | "BULLISH" | "SIDEWAYS" | "UNKNOWN"; } //#endregion //#region src/momentum/REI/REI.d.ts declare class REI extends TrendIndicatorSeries<HighLowClose<number>> { #private; readonly interval: number; constructor(interval: number); protected calculateSignalState(result?: number | null | undefined): "BEARISH" | "BULLISH" | "SIDEWAYS" | "UNKNOWN"; getRequiredInputs(): number; update(candle: HighLowClose<number>, replace: boolean): number | null; } //#endregion //#region src/momentum/ROC/ROC.d.ts declare class ROC extends TrendIndicatorSeries { readonly interval: number; readonly prices: number[]; constructor(interval: number); getRequiredInputs(): number; update(price: number, replace: boolean): number | null; protected calculateSignalState(result: number | null | undefined): "BEARISH" | "BULLISH" | "UNKNOWN"; } //#endregion //#region src/momentum/RSI/RSI.d.ts declare class RSI extends TrendIndicatorSeries { #private; readonly interval: number; constructor(interval: number, SmoothingIndicator?: MovingAverageTypes); getRequiredInputs(): number; update(price: number, replace: boolean): number | null; protected calculateSignalState(result: number | null | undefined): "BEARISH" | "BULLISH" | "SIDEWAYS" | "UNKNOWN"; } //#endregion //#region src/momentum/STOCH/StochasticOscillator.d.ts interface StochasticResult { stochD: number; stochK: number; } declare class StochasticOscillator extends TechnicalIndicator<StochasticResult, HighLowClose<number>> { #private; n: number; m: number; p: number; readonly candles: HighLowClose<number>[]; constructor(n: number, m: number, p: number); getRequiredInputs(): number; update(candle: HighLowClose<number>, replace: boolean): { stochD: number; stochK: number; } | null; protected calculateSignal(result?: StochasticResult | null | undefined): "BEARISH" | "BULLISH" | "SIDEWAYS" | "UNKNOWN"; getSignal(): { state: (typeof TradingSignal)[keyof typeof TradingSignal]; hasChanged: boolean; }; } //#endregion //#region src/momentum/STOCHRSI/StochasticRSI.d.ts declare class StochasticRSI extends TrendIndicatorSeries { #private; readonly interval: number; readonly smoothing: { readonly k: MovingAverage; readonly d: MovingAverage; }; constructor(interval: number, SmoothingRSI?: MovingAverageTypes, smoothing?: { readonly k: MovingAverage; readonly d: MovingAverage; }); getRequiredInputs(): number; update(price: number, replace: boolean): number | null; protected calculateSignalState(result?: number | null | undefined): "BEARISH" | "BULLISH" | "SIDEWAYS" | "UNKNOWN"; } //#endregion //#region src/momentum/TDS/TDS.d.ts declare class TDS extends TrendIndicatorSeries { private readonly closes; private setupCount; private setupDirection; getRequiredInputs(): number; update(close: number, replace: boolean): number | null; protected calculateSignalState(result?: number | null | undefined): "BEARISH" | "BULLISH" | "UNKNOWN"; } //#endregion //#region src/momentum/WILLR/WilliamsR.d.ts declare class WilliamsR extends TrendIndicatorSeries<HighLowClose<number>> { readonly interval: number; readonly candles: HighLowClose<number>[]; constructor(interval: number); getRequiredInputs(): number; update(candle: HighLowClose<number>, replace: boolean): number | null; protected calculateSignalState(result?: number | null | undefined): "BEARISH" | "BULLISH" | "SIDEWAYS" | "UNKNOWN"; } //#endregion //#region src/trend/ADX/ADX.d.ts declare class ADX extends IndicatorSeries<HighLowClose<number>> { #private; readonly interval: number; constructor(interval: number, SmoothingIndicator?: MovingAverageTypes); get mdi(): number | void; get pdi(): number | void; getRequiredInputs(): number; update(candle: HighLowClose<number>, replace: boolean): number | null; } //#endregion //#region src/trend/DMA/DMA.d.ts interface DMAResult { long: number; short: number; } declare class DMA extends TechnicalIndicator<DMAResult, number> { readonly short: MovingAverage; readonly long: MovingAverage; constructor(short: number, long: number, SmoothingIndicator?: MovingAverageTypes); get isStable(): boolean; getRequiredInputs(): number; update(price: number, replace: boolean): { long: number; short: number; } | null; } //#endregion //#region src/trend/DX/DX.d.ts declare class DX extends IndicatorSeries<HighLowClose<number>> { #private; readonly interval: number; mdi?: number; pdi?: number; constructor(interval: number, SmoothingIndicator?: MovingAverageTypes); getRequiredInputs(): number; update(candle: HighLowClose<number>, replace: boolean): number | null; } //#endregion //#region src/trend/LINREG/LinearRegression.d.ts type LinearRegressionResult = { prediction: number; slope: number; intercept: number; }; declare class LinearRegression extends TechnicalIndicator<LinearRegressionResult, number> { #private; readonly interval: number; readonly prices: number[]; constructor(interval: number); getRequiredInputs(): number; update(price: number, replace: boolean): LinearRegressionResult | null; get isStable(): boolean; } //#endregion //#region src/trend/PSAR/PSAR.d.ts type PSARConfig = { accelerationStep: number; accelerationMax: number; }; declare class PSAR extends IndicatorSeries<HighLow<number>> { private readonly accelerationStep; private readonly accelerationMax; private acceleration; private extreme; private lastSar; private isLong; private previousCandle; private prePreviousCandle; constructor(config: PSARConfig); get isStable(): boolean; getRequiredInputs(): number; update(candle: HighLow<number>, replace: boolean): number | null; getResultOrThrow(): number; } //#endregion //#region src/trend/SMA15/SMA15.d.ts declare class SMA15 extends MovingAverage { #private; readonly prices: number[]; getRequiredInputs(): number; update(price: number, replace: boolean): number | null; } //#endregion //#region src/trend/VWAP/VWAP.d.ts declare class VWAP extends IndicatorSeries<HighLowCloseVolume<number>> { #private; constructor(); getRequiredInputs(): number; update(candle: HighLowCloseVolume<number>, replace: boolean): number | null; } //#endregion //#region src/trend/ZIGZAG/ZigZag.d.ts type ZigZagConfig = { deviation: number; }; declare class ZigZag extends IndicatorSeries<HighLow> { #private; constructor(config: ZigZagConfig); getRequiredInputs(): number; update(candle: HighLow<number>, replace: boolean): number | null; } //#endregion //#region src/types/BandsResult.d.ts interface BandsResult { lower: number; middle: number; upper: number; } //#endregion //#region src/types/Period.d.ts interface PeriodResult { highest: number; lowest: number; } declare class Period extends TechnicalIndicator<PeriodResult, number> { #private; readonly interval: number; values: number[]; get highest(): number | undefined; get lowest(): number | undefined; constructor(interval: number); getRequiredInputs(): number; update(value: number, replace: boolean): { highest: number; lowest: number; } | null; } //#endregion //#region src/util/getAverage.d.ts declare function getAverage(values: number[]): number; //#endregion //#region src/util/getGrid.d.ts type GridConfig = { lower: number; upper: number; levels: number; spacing: 'arithmetic' | 'geometric'; tickSize?: number; }; declare function getGrid({ lower, upper, levels, tickSize, spacing }: GridConfig): number[]; //#endregion //#region src/util/getMaximum.d.ts declare function getMaximum(values: number[]): number; //#endregion //#region src/util/getMedian.d.ts declare function getMedian(values: number[]): number; //#endregion //#region src/util/getMinimum.d.ts declare function getMinimum(values: number[]): number; //#endregion //#region src/util/getQuartile.d.ts declare function getQuartile(values: number[], q: 0.25 | 0.5 | 0.75): number; //#endregion //#region src/util/getStandardDeviation.d.ts declare function getStandardDeviation(values: number[], average?: number): number; //#endregion //#region src/util/getStreaks.d.ts type Streak = { length: number; percentage: number; }; declare function getStreaks(prices: number[], keepSide: 'up' | 'down'): Streak[]; //#endregion //#region src/util/getWeekday.d.ts declare function isMonday(timezone: string, date?: Date): boolean; declare function isTuesday(timezone: string, date?: Date): boolean; declare function isWednesday(timezone: string, date?: Date): boolean; declare function isThursday(timezone: string, date?: Date): boolean; declare function isFriday(timezone: string, date?: Date): boolean; declare function isSaturday(timezone: string, date?: Date): boolean; declare function isSunday(timezone: string, date?: Date): boolean; //#endregion //#region src/util/pushUpdate.d.ts declare function pushUpdate<T>(array: T[], replace: boolean, item: T, maxLength: number): T | null | undefined; //#endregion //#region src/volatility/ABANDS/AccelerationBands.d.ts declare class AccelerationBands extends TechnicalIndicator<BandsResult, HighLowClose<number>> { #private; readonly interval: number; readonly width: number; constructor(interval: number, width: number, SmoothingIndicator?: MovingAverageTypes); getRequiredInputs(): number; update({ high, low, close }: HighLowClose<number>, replace: boolean): { lower: number; middle: number; upper: number; } | null; get isStable(): boolean; } //#endregion //#region src/volatility/ATR/ATR.d.ts declare class ATR extends IndicatorSeries<HighLowClose<number>> { #private; readonly interval: number; constructor(interval: number, SmoothingIndicator?: MovingAverageTypes); getRequiredInputs(): number; update(candle: HighLowClose<number>, replace: boolean): number | null; } //#endregion //#region src/volatility/BBANDS/BollingerBands.d.ts declare class BollingerBands extends TechnicalIndicator<BandsResult, number> { readonly interval: number; readonly deviationMultiplier: number; readonly prices: number[]; constructor(interval: number, deviationMultiplier?: number); getRequiredInputs(): number; update(price: number, replace: boolean): { lower: number; middle: number; upper: number; } | null; } //#endregion //#region src/volatility/BBW/BollingerBandsWidth.d.ts declare class BollingerBandsWidth extends IndicatorSeries { readonly bollingerBands: BollingerBands; constructor(bollingerBands: BollingerBands); getRequiredInputs(): number; update(price: number, replace: boolean): number | null; } //#endregion //#region src/volatility/IQR/IQR.d.ts declare class IQR extends IndicatorSeries { #private; readonly interval: number; constructor(interval: number); getRequiredInputs(): number; update(value: number, replace: boolean): number | null; } //#endregion //#region src/volatility/MAD/MAD.d.ts declare class MAD extends IndicatorSeries { readonly interval: number; readonly prices: number[]; constructor(interval: number); getRequiredInputs(): number; update(price: number, replace: boolean): number | null; static getResultFromBatch(prices: number[], average?: number): number; } //#endregion //#region src/volatility/TR/TR.d.ts declare class TR extends IndicatorSeries<HighLowClose<number>> { #private; getRequiredInputs(): number; update(candle: HighLowClose<number>, replace: boolean): number; } //#endregion export { AC, ADX, AO, ATR, AccelerationBands, BandsResult, BollingerBands, BollingerBandsWidth, CCI, CG, DEMA, DMA, DMAResult, DX, EMA, GridConfig, HighLow, HighLowClose, HighLowCloseVolume, IQR, IndicatorSeries, LinearRegression, LinearRegressionResult, MACD, MACDResult, MAD, MOM, NotEnoughDataError, OBV, OpenHighLowClose, OpenHighLowCloseVolume, PSAR, PSARConfig, Period, PeriodResult, REI, RMA, ROC, RSI, SMA, SMA15, StochasticOscillator, StochasticRSI, StochasticResult, Streak, TDS, TR, TechnicalIndicator, TradingSignal, TradingSignals, TrendIndicatorSeries, VWAP, WMA, WSMA, WilliamsR, ZigZag, ZigZagConfig, getAverage, getGrid, getMaximum, getMedian, getMinimum, getQuartile, getStandardDeviation, getStreaks, isFriday, isMonday, isSaturday, isSunday, isThursday, isTuesday, isWednesday, pushUpdate };