UNPKG

hft-js

Version:

High-Frequency Trading in Node.js

131 lines (130 loc) 6.15 kB
import type { BarData, CommissionRate, InstrumentData, MarginRate, OffsetType, OrderData, OrderFlag, OrderStatistic, PositionData, PositionDetail, ProductType, SideType, TapeData, TickData, TradeData, TradingAccount } from "./typedef.js"; export type RiskType = "place-order-risk" | "cancel-order-risk"; export interface IPlaceOrderRiskManager { onPlaceOrder: (symbol: string, offset: OffsetType, side: SideType, volume: number, price: number, flag: OrderFlag) => boolean | string; } export interface ICancelOrderRiskManager { onCancelOrder: (order: OrderData) => boolean | string; } export interface IRiskManagerReceiver { onRisk: (type: RiskType, reason?: string) => void; } export type ErrorType = "login-error" | "query-order-error" | "query-trade-error" | "query-instrument-error" | "query-margin-rate-error" | "query-commission-rate-error" | "query-accounts-error" | "query-positions-error" | "query-position-details-error" | "query-depth-market-data-error"; export interface IErrorReceiver { onError: (error: ErrorType, message: string) => void; } export interface ILifecycleListener extends IErrorReceiver { onOpen: () => void; onClose: () => void; } export interface IOrderReceiver { onEntrust: (order: OrderData) => void; onTrade: (order: OrderData, trade: TradeData) => void; onCancel: (order: OrderData) => void; onReject: (order: OrderData) => void; } export interface IOrdersReceiver { onOrders: (orders: OrderData[]) => void; } export interface ITickReceiver { onTick: (tick: TickData, tape: TapeData) => void; } export interface ITickSubscriber { subscribe: (symbols: string[], receiver: ITickReceiver) => void; } export interface ITickUnsubscriber { unsubscribe: (symbols: string[], receiver: ITickReceiver) => void; } export interface IBarReceiver { onBar: (bar: BarData) => void; onUpdateBar?: (bar: BarData, tick: TickData, tape: TapeData) => void; } export interface IBarSubscriber { subscribeBar: (symbols: string[], receiver: IBarReceiver) => void; } export interface IBarUnsubscriber { unsubscribeBar: (symbols: string[], receiver: IBarReceiver) => void; } export interface IStrategy extends IRiskManagerReceiver, IOrderReceiver { onInit: () => void; onDestroy: () => void; } export interface ICommissionRateReceiver { onCommissionRate: (rate: CommissionRate | undefined) => void; } export interface IMarginRateReceiver { onMarginRate: (rate: MarginRate | undefined) => void; } export interface IInstrumentReceiver { onInstrument: (instrument: InstrumentData | undefined) => void; } export interface IInstrumentsReceiver { onInstruments: (instruments: InstrumentData[] | undefined) => void; } export interface ITradingAccountsReceiver { onTradingAccounts: (accounts: TradingAccount[] | undefined) => void; } export interface IPositionReceiver { onPosition: (position: PositionData | undefined) => void; } export interface IPositionsReceiver { onPositions: (positions: PositionData[] | undefined) => void; } export interface IPositionDetailsReceiver { onPositionDetails: (positionDetails: PositionDetail[] | undefined) => void; } export interface IProvider { open: (lifecycle: ILifecycleListener) => boolean; close: (lifecycle: ILifecycleListener) => void; } export interface IOrderEmitter { addOrderReceiver: (receiver: IOrderReceiver) => void; removeOrderReceiver: (receiver: IOrderReceiver) => void; } export interface IQueryProvider { getTradingDay: () => number; getOrderStatistics: () => OrderStatistic[]; getOrderStatistic: (symbol: string) => OrderStatistic; queryCommissionRate: (symbol: string, receiver: ICommissionRateReceiver) => void; queryMarginRate: (symbol: string, receiver: IMarginRateReceiver) => void; queryInstrument: (symbol: string, receiver: IInstrumentReceiver) => void; queryPosition: (symbol: string, receiver: IPositionReceiver) => void; queryInstruments: (receiver: IInstrumentsReceiver, type?: ProductType) => void; queryTradingAccounts: (receiver: ITradingAccountsReceiver) => void; queryPositions: (receiver: IPositionsReceiver) => void; queryPositionDetails: (receiver: IPositionDetailsReceiver) => void; queryOrders: (receiver: IOrdersReceiver) => void; } export interface IMarketRecorderReceiver { onMarketData: (marketData: any) => void; } export type IMarketRecorderSymbols = (instrument: InstrumentData[]) => string[]; export interface IMarketRecorderProvider { isRecorderReady: () => boolean; setRecorder: (receiver: IMarketRecorderReceiver, symbols: IMarketRecorderSymbols) => void; startRecorder: (instrument: InstrumentData[]) => void; stopRecorder: () => void; } export interface IMarketProvider extends IProvider, ITickSubscriber, ITickUnsubscriber { getRecorder: () => IMarketRecorderProvider | undefined; } export type IPlaceOrderResultReceiver = { onPlaceOrderSent: (receiptId: string) => void; onPlaceOrderError: (reason: string) => void; }; export type ICancelOrderResultReceiver = { onCancelOrderSent: () => void; onCancelOrderError: (reason: string) => void; }; export interface ITraderProvider extends IProvider, IOrderEmitter, IQueryProvider { placeOrder: (symbol: string, offset: OffsetType, side: SideType, volume: number, price: number, flag: OrderFlag, receiver: IPlaceOrderResultReceiver) => void; cancelOrder: (order: OrderData, receiver: ICancelOrderResultReceiver) => void; } export interface IRuntimeEngine extends IQueryProvider, ITickSubscriber, ITickUnsubscriber, IBarSubscriber, IBarUnsubscriber { addStrategy: (strategy: IStrategy) => void; removeStrategy: (strategy: IStrategy) => void; addPlaceOrderRiskManager: (riskMgr: IPlaceOrderRiskManager) => void; addCancelOrderRiskManager: (riskMgr: ICancelOrderRiskManager) => void; placeOrder: (strategy: IStrategy, symbol: string, offset: OffsetType, side: SideType, volume: number, price: number, flag: OrderFlag, receiver: IPlaceOrderResultReceiver) => void; cancelOrder: (strategy: IStrategy, order: OrderData, receiver: ICancelOrderResultReceiver) => void; }