import type { SignalThresholds } from './SignalThresholds.type.js'; type Nullable = Result | null; interface Indicator { isStable: boolean; add(input: Input): Nullable; getRequiredInputs(): number; getResult(): Nullable; getResultOrThrow(): Result; replace(input: Input): Nullable; update(input: Input, replace: boolean): Nullable; updates(input: Input[], replace: boolean): Nullable[]; } export declare const TradingSignal: { readonly BEARISH: 'BEARISH'; readonly BULLISH: 'BULLISH'; readonly SIDEWAYS: 'SIDEWAYS'; readonly UNKNOWN: 'UNKNOWN'; }; export type TradingSignals = (typeof TradingSignal)[keyof typeof TradingSignal]; export declare abstract class TechnicalIndicator> implements Indicator { #private; protected result: Result | undefined; protected state: State; abstract getRequiredInputs(): number; protected trackState(replace: boolean): void; getState(): State & { result: Result | undefined; }; 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)[]; } export declare abstract class IndicatorSeries> extends TechnicalIndicator { protected previousResult?: number; protected setResult(value: number, replace: boolean): number; protected rollbackLastResult(): void; } export declare abstract class TrendIndicatorSeries> extends IndicatorSeries { #private; protected abstract calculateSignalState(result?: number | null | undefined): SignalState; protected setResult(value: number, replace: boolean): number; getSignal(): { state: SignalState; hasChanged: boolean; }; } export declare abstract class TrendIndicator, SignalState = TradingSignals> extends TechnicalIndicator { #private; protected abstract calculateSignalState(result?: Result | null | undefined): SignalState; protected previousResult?: Result; protected setResult(value: Result, replace: boolean): Result; getSignal(): { state: SignalState; hasChanged: boolean; }; } export declare abstract class ZeroCrossSeries extends TrendIndicatorSeries { protected calculateSignalState(result: number | null | undefined): "BEARISH" | "BULLISH" | "SIDEWAYS" | "UNKNOWN"; } export declare abstract class ThresholdCrossSeries> extends TrendIndicatorSeries { #private; constructor({ overbought, oversold }: Required); protected calculateSignalState(result?: number | null | undefined): "BEARISH" | "BULLISH" | "SIDEWAYS" | "UNKNOWN"; } export {};