adding data-services

This commit is contained in:
Bojan Kucera 2025-06-03 07:42:48 -04:00
parent e3bfd05b90
commit 405b818c86
139 changed files with 55943 additions and 416 deletions

View file

@ -0,0 +1,44 @@
// Service Types
export interface ServiceConfig {
name: string;
version: string;
environment: 'development' | 'staging' | 'production';
port?: number;
dependencies?: string[];
}
export interface HealthStatus {
service: string;
status: 'healthy' | 'unhealthy' | 'degraded';
timestamp: Date;
details?: Record<string, any>;
}
// API Response Types
export interface ApiResponse<T> {
success: boolean;
data?: T;
error?: string;
timestamp: Date;
}
export interface PaginatedResponse<T> {
data: T[];
total: number;
page: number;
limit: number;
hasNext: boolean;
}
// HTTP Response standards
export interface ErrorResponse {
status: number;
code: string;
message: string;
details?: any;
}
export interface SuccessResponse<T> {
status: number;
data: T;
}

View file

@ -0,0 +1,69 @@
// Configuration Types
export interface DatabaseConfig {
questdb: {
host: string;
port: number;
database: string;
};
postgres: {
host: string;
port: number;
database: string;
username: string;
password: string;
};
dragonfly: {
host: string;
port: number;
password?: string;
};
mongodb?: {
uri: string;
database: string;
};
}
export interface BrokerConfig {
name: string;
apiKey: string;
secretKey: string;
baseUrl: string;
sandbox: boolean;
rateLimit?: {
maxRequestsPerSecond: number;
maxRequestsPerMinute: number;
};
}
export interface DataProviderConfig {
name: string;
apiKey: string;
baseUrl: string;
rateLimits: {
requestsPerSecond: number;
requestsPerDay: number;
};
}
export interface LoggingConfig {
level: 'debug' | 'info' | 'warn' | 'error';
format: 'json' | 'text';
destination: 'console' | 'file' | 'both';
filePath?: string;
}
export interface SystemConfig {
databases: DatabaseConfig;
brokers: BrokerConfig[];
dataProviders: DataProviderConfig[];
logging: LoggingConfig;
services: {
[key: string]: ServiceConfig;
};
}
interface ServiceConfig {
port: number;
host: string;
dependencies: string[];
}

View file

@ -0,0 +1,42 @@
import { MarketData } from '../market/market-data';
import { Order } from '../trading/orders';
import { TradingSignal } from '../strategy/strategy';
// Event Types
export interface MarketDataEvent {
type: 'MARKET_DATA';
data: MarketData;
timestamp: Date;
}
export interface OrderEvent {
type: 'ORDER_CREATED' | 'ORDER_FILLED' | 'ORDER_CANCELLED';
order: Order;
timestamp: Date;
}
export interface SignalEvent {
type: 'SIGNAL_GENERATED';
signal: TradingSignal;
timestamp: Date;
}
// Define more specific events
export interface RiskAlertEvent {
type: 'RISK_ALERT';
alertLevel: 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL';
message: string;
portfolioId?: string;
strategyId?: string;
timestamp: Date;
}
export interface SystemEvent {
type: 'SYSTEM_STARTUP' | 'SYSTEM_SHUTDOWN' | 'SERVICE_ERROR';
serviceName: string;
message?: string;
timestamp: Date;
}
export type TradingEvent = MarketDataEvent | OrderEvent | SignalEvent;
export type Event = TradingEvent | RiskAlertEvent | SystemEvent;

View file

@ -0,0 +1,20 @@
// Export all types from their respective domains
// Market Data Types
export * from './market/market-data';
// Trading Types
export * from './trading/orders';
// Strategy Types
export * from './strategy/strategy';
export * from './strategy/backtest';
// Events
export * from './events/events';
// API Types
export * from './api/api';
// Configuration Types
export * from './config/config';

View file

@ -0,0 +1,48 @@
// Market Data Types
export interface OHLCV {
symbol: string;
timestamp: Date;
open: number;
high: number;
low: number;
close: number;
volume: number;
}
export interface MarketData {
symbol: string;
price: number;
bid: number;
ask: number;
volume: number;
timestamp: Date;
}
export interface OrderBook {
symbol: string;
bids: [number, number][]; // [price, size]
asks: [number, number][]; // [price, size]
timestamp: Date;
}
// Fundamental Data Types
export interface CompanyFundamentals {
symbol: string;
marketCap: number;
peRatio?: number;
pbRatio?: number;
roe?: number;
revenue: number;
netIncome: number;
lastUpdated: Date;
}
export interface NewsItem {
id: string;
headline: string;
summary: string;
sentiment: number; // -1 to 1
symbols: string[];
source: string;
publishedAt: Date;
}

View file

@ -0,0 +1,53 @@
// Trading Signal Types
import { SignalType } from './strategy';
export interface Signal {
symbol: string;
type: SignalType;
strength: number; // 0-1
price: number;
timestamp: Date;
strategyId: string;
metadata?: Record<string, any>;
}
export interface BacktestConfig {
strategyId: string;
startDate: Date;
endDate: Date;
symbols: string[];
initialCapital: number;
parameters: Record<string, any>;
}
export interface BacktestResult {
id: string;
strategyId: string;
startDate: Date;
endDate: Date;
symbols: string[];
initialCapital: number;
finalCapital: number;
totalReturn: number;
annualizedReturn: number;
maxDrawdown: number;
sharpeRatio: number;
trades: BacktestTrade[];
dailyPerformance: DailyPerformance[];
}
export interface BacktestTrade {
symbol: string;
side: 'BUY' | 'SELL';
quantity: number;
price: number;
timestamp: Date;
pnl?: number;
}
export interface DailyPerformance {
date: Date;
portfolioValue: number;
dailyPnL: number;
dailyReturn: number;
}

View file

@ -0,0 +1,28 @@
// Strategy Types
export type SignalType = 'BUY' | 'SELL' | 'HOLD';
export interface TradingSignal {
symbol: string;
type: SignalType;
strength: number; // 0-1
price: number;
timestamp: Date;
strategyId: string;
metadata?: Record<string, any>;
}
export interface Strategy {
id: string;
name: string;
description: string;
isActive: boolean;
riskLimits: RiskLimits;
parameters: Record<string, any>;
}
export interface RiskLimits {
maxPositionSize: number;
maxDailyLoss: number;
maxDrawdown: number;
allowedSymbols?: string[];
}

View file

@ -0,0 +1,35 @@
// Trading Types
export type OrderSide = 'BUY' | 'SELL';
export type OrderType = 'MARKET' | 'LIMIT' | 'STOP' | 'STOP_LIMIT';
export type OrderStatus = 'PENDING' | 'FILLED' | 'PARTIALLY_FILLED' | 'CANCELLED' | 'REJECTED';
export interface Order {
id: string;
symbol: string;
side: OrderSide;
type: OrderType;
quantity: number;
price?: number;
stopPrice?: number;
status: OrderStatus;
timestamp: Date;
strategyId: string;
}
export interface Position {
symbol: string;
quantity: number;
averagePrice: number;
marketValue: number;
unrealizedPnL: number;
timestamp: Date;
}
export interface Portfolio {
cash: number;
totalValue: number;
positions: Position[];
dayPnL: number;
totalPnL: number;
timestamp: Date;
}