trading-signals
Version:
Technical indicators to run technical analysis with JavaScript / TypeScript.
579 lines • 20.2 kB
text/typescript
//#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 };