@barfinex/types
Version:
Core TypeScript type definitions and shared interfaces for the Barfinex ecosystem. Provides strongly-typed contracts for modules, services, and plugins.
167 lines • 4.31 kB
TypeScript
import { ConnectorType, MarketType } from './connector.interface';
import { HorizontalVolumeProfileSummary } from './horizontal-volume-profile.interface';
import { LiquidityMapSummaryByScope } from './liquidity-map.interface';
export declare enum DataMaturity {
INSUFFICIENT = "INSUFFICIENT",
FAST = "FAST",
INTRADAY = "INTRADAY",
FULL = "FULL"
}
export declare enum DetectorRole {
CONTEXT = "CONTEXT",
ZONE = "ZONE",
TRIGGER = "TRIGGER"
}
export declare enum DetectorDecision {
TRADE = "TRADE",
NO_TRADE = "NO_TRADE"
}
export type SignalDirection = 'LONG' | 'SHORT';
export type EntryType = 'limit' | 'market';
export type StrategyKind = 'OrderFlowReversal' | 'LiquidityGrab' | 'VWAPReversion' | 'RegimeTrendContinuation' | 'HtfBiasLtfOrderFlow' | 'LiquiditySweepReversal' | 'TrendPullback';
export interface InstrumentIdentity {
symbol: string;
marketType: MarketType;
connectorType: ConnectorType;
}
export interface CandlePoint {
time: number;
close: number;
open?: number;
high?: number;
low?: number;
volume?: number;
}
export interface CandlesContext {
cacheKey: string;
h1?: CandlePoint[];
h4?: CandlePoint[];
d1?: CandlePoint[];
}
export interface OrderFlowSnapshot {
snapshotKey: string;
shortWindowSec: number;
longWindowSec: number;
deltaRatio: number;
cvd: number;
aggressiveBuyVolume: number;
aggressiveSellVolume: number;
absorptionScore?: number;
tradeCount?: number;
avgTradeSize?: number;
maxTradeSize?: number;
buyVolume?: number;
sellVolume?: number;
delta?: number;
vwap?: number | null;
horizontalVolumeProfile?: HorizontalVolumeProfileSummary;
liquidityMap?: LiquidityMapSummaryByScope;
}
export interface OrderBookSnapshot {
snapshotKey: string;
depth: number;
imbalance: number;
bestBid: number;
bestAsk: number;
mid?: number;
spread?: number;
spreadPct?: number;
bidWallUsd?: number;
askWallUsd?: number;
walls?: {
bid: Array<{
price: number;
volume: number;
}>;
ask: Array<{
price: number;
volume: number;
}>;
};
}
export interface DetectorInput {
instrument: InstrumentIdentity;
dataContext: {
maturity: DataMaturity;
windows: {
candlesDays: number;
flowMinutes: number;
bookMinutes: number;
};
};
candles: CandlesContext;
orderFlow: OrderFlowSnapshot;
orderBook: OrderBookSnapshot;
}
export interface SignalSchema {
decision: DetectorDecision | 'TRADE' | 'NO_TRADE';
symbol: string;
market: MarketType;
direction?: SignalDirection;
confidence: number;
strategy?: StrategyKind;
entry?: {
price: number;
type: EntryType;
reason: string;
};
stop?: {
price: number;
reason: string;
};
targets: Array<{
price: number;
reason: string;
}>;
context: {
regime?: string;
bias?: SignalDirection | 'NEUTRAL';
delta: string | number;
orderBookImbalance: number;
dataMaturity: DataMaturity;
};
audit: {
detectorsFired: string[];
rejectedBy: string[];
inputsRef: {
candlesKey: string;
flowKey: string;
bookKey: string;
};
};
}
export interface ContextDetectorResult {
fired: boolean;
detector: string;
regime?: string;
bias?: SignalDirection | 'NEUTRAL';
levels?: number[];
zones?: string[];
levelsDetailed?: Record<string, number>;
zonesDetailed?: Array<{
type: string;
range: [number, number];
timeframe?: 'h1' | 'h4' | 'd1';
score?: number;
}>;
}
export interface TriggerDetectorResult {
fired: boolean;
detector: string;
strategy: StrategyKind;
direction?: SignalDirection;
confidence: number;
reason?: string;
entryPrice?: number;
stopPrice?: number;
targets?: Array<{
price: number;
reason: string;
}>;
}
export interface DetectorNode<T> {
name: string;
role: DetectorRole;
evaluate(input: DetectorInput): T;
}
//# sourceMappingURL=signal.interface.d.ts.map