trading-signals
Version:
Technical indicators to run technical analysis with JavaScript / TypeScript.
51 lines (50 loc) • 2.19 kB
TypeScript
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>[];
}
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<Result, Input, State extends object = Record<string, never>> implements Indicator<Result, Input> {
#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<Input = number, State extends object = Record<string, never>> extends TechnicalIndicator<number, Input, State> {
protected previousResult?: number;
protected setResult(value: number, replace: boolean): number;
protected rollbackLastResult(): void;
}
export declare abstract class TrendIndicatorSeries<Input = number, SignalState = TradingSignals, State extends object = Record<string, never>> extends IndicatorSeries<Input, State> {
#private;
protected abstract calculateSignalState(result?: number | null | undefined): SignalState;
protected setResult(value: number, replace: boolean): number;
getSignal(): {
state: SignalState;
hasChanged: boolean;
};
}
export {};