核心对象和服务注册表
本文档涵盖构成 Homalos 交易系统主干的基本数据结构和服务发现机制。核心对象定义了市场数据、订单、交易和仓位的主要数据模型,而服务注册表则提供了集中式服务发现和健康监控功能。
EventBus 通讯系统请参见事件驱动系统,TradingEngine 编排请参见交易引擎。
核心数据对象
Homalos 系统使用一套全面的数据类来表示交易实体。所有核心对象都继承自BaseData并遵循一致的模式,包括网关属性和合约规范化。
基础数据结构
该类BaseData作为所有交易对象的基础,提供网关归属和可扩展性:
@dataclass
class BaseData:
gateway_name: str
extra: dict | None = field(default=None, init=False)所有数据对象都会自动生成ho_symbol格式规范化的符号标识符(),{symbol}.{exchange.value}以确保整个系统的识别一致性。
市场数据对象
TickData 结构
该类TickData提供全面的市场数据,包括五级订单簿、每日统计数据和限价。它支持交易所时间戳和本地时间戳,以便进行延迟分析。
BarData 结构
BarData表示特定交易间隔的K线数据,包含 OHLCV 信息以及交易额和未平仓合约数据。
交易对象
订单管理对象
订单管理系统使用三个主要对象:
OrderRequest用于订单创建请求OrderData用于跟踪订单状态TradeData用于记录交易执行情况
该类OrderData包括is_active()检查订单状态ACTIVE_STATUSES和create_cancel_request()取消订单的方法。
头寸和账户对象
头寸和账户数据提供实时投资组合跟踪,自动计算可用余额和规范化标识符。
合约和数据对象
该系统包括ContractData用于工具规范、QuoteData用于报价管理以及用于市场数据操作的各种请求对象( SubscribeRequest、HistoryRequest、QuoteRequest)
服务注册系统
该类ServiceRegistry为所有系统组件提供集中式服务发现和健康监控。它以事件驱动的服务形式运行,管理服务注册、心跳监控和服务发现请求。
服务生命周期管理
服务注册表处理四种主要事件类型:
| 事件类型 | 处理程序 | 描述 |
|---|---|---|
SERVICE_REGISTER | handle_register() | 注册新服务并广播SERVICE_UPDATED |
SERVICE_UNREGISTER | handle_unregister() | 删除服务和广播SERVICE_UPDATED |
SERVICE_HEART_BEAT | handle_heartbeat() | 更新服务心跳时间戳 |
SERVICE_DISCOVERY | handle_discovery_request() | 使用经过过滤的服务信息进行响应 |
发现系统支持基于模式的过滤,并返回不包含敏感数据的经过清理的服务信息。
心跳监控
注册表运行一个后台线程来监视服务健康状况:
- 心跳超时:10秒
- 检查间隔:5秒
- 自动清理:超过超时的服务将自动取消注册
- 失败事件:
SERVICE_FAILED针对超时场景发布事件
事件驱动集成
核心对象和服务注册表通过标准化的事件类型和数据结构与事件系统无缝集成。
核心对象的事件类型
事件系统为每个核心对象类别定义了特定的事件类型:
| 对象类别 | 事件类型 |
|---|---|
| 市场数据 | TICK_UPDATED,MARKET_TICK, MARKET_BAR |
| 订单 | ORDER_UPDATED,ORDER_SUBMITTED, ORDER_CANCELLED, ORDER_FILLED |
| 交易 | TRADE_UPDATED,TRADE |
| 职位 | POSITION_UPDATED |
| 账户 | ACCOUNT_UPDATED |
| 合同 | CONTRACT_UPDATED |
数据流和组件关系
线程安全和回调处理
该类BaseGateway通过辅助类实现线程安全回调处理ThreadSafeCallback,确保正确的事件循环集成:
- 事件循环集成:用于
asyncio.run_coroutine_threadsafe()异步任务调度 - 重试逻辑:使用指数退避实现自动重试
- 统计跟踪:监控性能分析的成功/失败率
- 资源管理:适当清理线程池和事件循环
配置集成
服务注册表和核心对象通过system.yaml文件与系统配置集成,该文件定义:
- 事件总线配置:队列大小、计时器间隔、监控设置
- 数据库配置:连接池、批处理、WAL 模式
- 网关配置:连接参数、超时、重试设置
- 服务管理:健康检查间隔、超时值、自动恢复设置