//#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 };