UNPKG

@barfinex/types

Version:

Core TypeScript type definitions and shared interfaces for the Barfinex ecosystem. Provides strongly-typed contracts for modules, services, and plugins.

286 lines 9.05 kB
import { Candle } from './candle.interface'; import { TimeFrame, WorkingEnv } from './common.interface'; import { GeneticSchema, ConfigValidator, StatsValidator } from './genetic.interface'; import { Order } from './order.interface'; import { PluginInterface } from './plugin.interface'; import { Connector, ConnectorType, MarketType } from './connector.interface'; import { InspectorTradeSettingsConfig } from './inspector.interface'; import { Subscription, Instrument, Provider, Advisor, PluginMeta, DetectorStrategyDefinition } from '.'; export type DetectorConfig = { apiPort: number; sysName: string; defaultSysName?: string; multiEnabled?: boolean; instances?: DetectorInstanceConfig[]; strategyDefinitions?: DetectorStrategyDefinition[]; path: string; logLevel: string; }; export type DetectorInstanceRouteConfig = { connectorType?: ConnectorType; marketType?: MarketType; symbols?: string[]; }; export type DetectorInstanceConfig = { sysName: string; enabled: boolean; route?: DetectorInstanceRouteConfig; loaderSysName?: string; options?: Partial<Detector>; }; export type DetectorPluginConfig = { modules: any[]; metas: PluginMeta[]; }; export type DetectorModuleConfig = DetectorConfig & { plugins?: DetectorPluginConfig; }; export interface DetectorQualityGateConfig { enabled?: boolean; minClosedTrades?: number; minWinRate?: number; minAvgRr?: number; maxConsecutiveLosses?: number; cooldownMs?: number; } export interface DetectorPerformanceConfig { enabled?: boolean; writeToQuestDb?: boolean; questTableTrades?: string; questTableSummary?: string; } /** * Interface representing the configuration options for a detector. */ export interface Detector { /** * A unique key for the detector. */ key: string; /** * Stable UUID for UI studio (generated by provider at app registration). */ studioKey?: string; sysname: string; logLevel: string; currency: string; useNotifications: { telegram: { token: string; chatId: string; messageFormat: string; isActive: boolean; }; }; advisor: Advisor; /** * The base API URL used by the detector. */ restApiUrl: string; /** * List of connector configurations. */ providers: Provider[]; /** * Port number used for the inspector API. */ /** * Optional system name for the detector. */ detectorSysname?: string; /** * Array of symbols the detector will operate on. */ instruments: Instrument[]; /** * Array of active orders associated with the detector. */ orders: Order[]; /** * Array of time frames the detector will use. */ intervals: TimeFrame[]; /** * Configuration for indicators used by the detector. */ indicators: Indicator[]; /** * Optional plugins configuration for the detector. */ plugins?: { modules: any[]; metas: PluginMeta[]; }; /** * Indicates if the detector operates in sandbox mode. */ useSandbox: boolean; /** * Indicates if the detector should start from scratch. */ useScratch: boolean; /** * Indicates if the detector is blocked. */ isBlocked?: boolean; /** * Indicates if the detector is currently active. */ isActive?: boolean; subscriptions: Subscription[]; tradeSettings?: InspectorTradeSettingsConfig; qualityGate?: DetectorQualityGateConfig; performance?: DetectorPerformanceConfig; customConfig?: Record<string, any>; preloadHistory?: boolean; } export interface Indicator { /** Optional key to store/read this indicator in the group. If omitted, key is derived from name+period (e.g. sma7, rsi14). */ key?: string; name: string; parameters: IndicatorParameters; visual: IndicatorVisual; } export interface IndicatorParameters { period: number; source: string | { peak: string; trough: string; }; overboughtLevel?: number; oversoldLevel?: number; } export interface IndicatorVisual { group?: string; paneSysName: string; } /** * Interface for metadata used in genetic algorithms and strategy creation. */ export interface Meta { /** * Parameters for the genetic algorithm. */ parameters: GeneticSchema; /** * Function to calculate a score for the detector. * @param detector - The detector to score. * @returns The calculated score. */ score: (detector: Detector) => number; /** * Function to retrieve statistics for the detector. * @param detector - The detector to analyze. * @returns The statistics for the detector. */ stats: (detector: Detector) => unknown; /** * Function to create a new detector instance. * @param provider - The connector provider for the detector. * @param cfg - The configuration options for the detector. * @param env - The working environment for the detector. * @returns A Promise resolving to the created detector. */ create: (provider: Connector, cfg: Detector, env: WorkingEnv) => Promise<Detector>; /** * Optional function to validate the detector configuration. */ validate?: ConfigValidator; /** * Optional function to validate the detector's statistics. */ validateStats?: StatsValidator; /** * Optional filter function for ticks. * @param solution - The detector options to filter. * @returns A function that filters ticks. */ ticksFilter?: (solution: Detector) => (tick: Candle) => boolean; /** * Function to retrieve plugins for testing purposes. * @param cfg - The detector configuration. * @returns An array of test plugins. */ testPlugins?: (cfg: Detector) => PluginInterface[]; /** * Function to retrieve plugins for genetic algorithms. * @param cfg - The detector configuration. * @returns An array of genetic plugins. */ geneticPlugins?: (cfg: Detector) => PluginInterface[]; } /** * Runtime status of detector for API responses. * - active: registered and sending heartbeats, isActive=true * - disabled: registered but isActive=false * - blocked: isBlocked=true * - offline: not sending heartbeats (process down or not registered) */ export type DetectorStatus = 'active' | 'disabled' | 'blocked' | 'offline'; /** * Detector item as returned by GET /api/detectors (list). * Same as Detector with added status field from provider. */ export type DetectorListItem = Detector & { status: DetectorStatus; }; /** * Interface representing a snapshot of the detector's state. */ export interface SnapshotData { /** * Array of orders in the detector's state. */ orders: Array<Order>; /** * The detector's options at the time of the snapshot. */ options: Detector; /** * Plugin-specific data for the snapshot. */ pluginsData: Record<string, Record<string, unknown>>; } export declare enum DetectorEventType { SERVICE_STARTED = "SERVICE_STARTED", SERVICE_STOPPED = "SERVICE_STOPPED", DETECTOR_INITIALIZED = "DETECTOR_INITIALIZED", DETECTOR_STARTED = "DETECTOR_STARTED", DETECTOR_STOPPED = "DETECTOR_STOPPED", ERROR_OCCURRED = "ERROR_OCCURRED", RESTART_ATTEMPT = "RESTART_ATTEMPT", TICK_RECEIVED = "TICK_RECEIVED", CANDLE_UPDATED = "CANDLE_UPDATED", ORDERBOOK_UPDATED = "ORDERBOOK_UPDATED", MARKET_SNAPSHOT = "MARKET_SNAPSHOT", CONNECTION_LOST = "CONNECTION_LOST", CONNECTION_RESTORED = "CONNECTION_RESTORED", ENTRY_SIGNAL = "ENTRY_SIGNAL", EXIT_SIGNAL = "EXIT_SIGNAL", NO_ACTION = "NO_ACTION", CONDITION_EVALUATED = "CONDITION_EVALUATED", ORDER_PLACED = "ORDER_PLACED", ORDER_FILLED = "ORDER_FILLED", ORDER_PARTIALLY_FILLED = "ORDER_PARTIALLY_FILLED", ORDER_CANCELED = "ORDER_CANCELED", ORDER_REJECTED = "ORDER_REJECTED", POSITION_OPENED = "POSITION_OPENED", POSITION_CLOSED = "POSITION_CLOSED", RISK_TRIGGERED = "RISK_TRIGGERED", PNL_UPDATED = "PNL_UPDATED", BALANCE_UPDATED = "BALANCE_UPDATED", LEVERAGE_SET = "LEVERAGE_SET", RISK_ADJUSTED = "RISK_ADJUSTED", INDICATOR_UPDATED = "INDICATOR_UPDATED", PERFORMANCE_SNAPSHOT = "PERFORMANCE_SNAPSHOT", QUALITY_GATE_STATE = "QUALITY_GATE_STATE", RISK_CONTEXT_UPDATED = "RISK_CONTEXT_UPDATED", DECISION_CONTEXT_UPDATED = "DECISION_CONTEXT_UPDATED", HEALTH_CHECK_FAILED = "HEALTH_CHECK_FAILED", WEBHOOK_RECEIVED = "WEBHOOK_RECEIVED", CONFIG_UPDATED = "CONFIG_UPDATED", MOCK_EVENT = "MOCK_EVENT" } export type DetectorEventCategory = 'system' | 'market_data' | 'signals' | 'orders' | 'metrics' | 'infrastructure'; export declare const DetectorEventGroups: Record<DetectorEventCategory, DetectorEventType[]>; //# sourceMappingURL=detector.interface.d.ts.map