领域服务拆分
交易执行、行情接入、监控、回测与交易日志各自独立部署;服务边界围绕业务职责,而不是围绕页面或数据库表拆分。
Stock Server 是一个持续迭代的交易工程项目,将 Web 分析界面、多服务后端、策略回测、多券商交易接入和生产运行治理,连接为一条可验证、可观测的交易工程链路。
› market.data → chart / signals
› strategy.config → backtest worker
› broker.adapters → orders / events
› execution → trade logs / review
› environment → paper / live
仅展示模块关系,不连接行情、账户或交易服务。
交易执行、行情接入、监控、回测与交易日志各自独立部署;服务边界围绕业务职责,而不是围绕页面或数据库表拆分。
ServerBootstrap 与 registerAction 统一普通请求、SSE stream、health、CORS 与错误响应,降低前后端和服务间集成成本。
回测页面采用升级版 TradingView Lightweight Charts,扩展可复用图表组件、指标插件与实时 tick 更新能力,将回测过程和行情回放映射为交互式 K 线界面。
围绕 @icocoding/ib-node-api 封装账户、仓位、订单、合约和实时订阅;处理事件流、错误传递与 Action API 映射,降低 TWS 接入复杂度。
回测计算由独立的任务模块组织,将策略配置、交易过程与结果记录分离,支持任务的创建、暂停、恢复和结果查询。
TradeLog 通过前端组合函数接入 n8n Webhook 与东方财富接口,支持交易操作、状态查询及成交导入;具体自动化编排由工作流配置决定。
// Vue Web application request GET /api/getPositions Caddy → host-based reverse proxy ServerBootstrap → action name resolved from /api/ registerAction("getPositions", handler) handler(reqData) → { code, msg, data } // Continuous data uses Server-Sent Events GET /api/getMarketDataStream?symbol=AAPL event: data → client chart / monitor store // Shared response shape keeps clients predictable type ActionResponse<T> = { code: number; msg: string; data: T }
回测页面复用升级版 TradingView 图表组件,将 K 线实例、指标、Tooltip 和交易跟踪状态封装为 Vue 能力,并对外暴露可控的行情回放与实时数据入口。
const chartRef = ref<IChartApi>() const stockInfo = reactive({ stockCode, timeOffset, tooltipType }) defineExpose({ startTrack, stopTrack, onTickData })
依据 Action 名称区分普通请求与 Stream 请求;同一服务基座处理路由校验、异步执行和流生命周期。
function registerAction(name, fn) { name.endsWith('Stream') ? streamsMap.set(name, fn) : actionsMap.set(name, fn) } resolveStream(req, onData, onEnd)
先启动 IBKR Gateway,再由 server-ibkr-api 使用 @icocoding/ib-node-api 通过 TWS API Socket 建立连接,并统一连接状态、重连、错误事件与 paper/live 配置。
// 1. Start IBKR Gateway (paper / live) IBKR Gateway → TWS API Socket // 2. Connect from server-ibkr-api const ibnext = new IBApiNext({ reconnectInterval: 1000 }) ibnext.connect(isLive ? liveClientId : paperClientId) ibnext.connectionState.subscribe(onState) ibnext.error.subscribe(onBrokerError)
功能入口位于 frontend/src/views/tradelog 的持仓页面。可切换 n8n 代理或嵌入式交易端,两种模式均向页面返回统一的资产、持仓、委托和成交状态。
统一 HTTPS/HTTP2 代理入口。按路径将 `/trade`、`/lb`、`/ib`、`/okx` 等请求路由到后端服务,隔离前端与具体端口,并集中处理面向 Web 前端和本地开发的访问入口。
自动交易执行域:承接策略触发,管理订单生命周期、Paper Worker 与订单监控服务。模拟与实盘使用独立配置与运行环境,减少调试误操作风险。
持续运行的市场与风险控制域。包含盘前扫描、候选池、证券主数据同步、安全列表、自动化配置与监控任务,负责把市场事件转化为可操作信号。
历史数据验证与策略评估域。通过回测 Worker 执行策略,保存交易过程和结果,使研究参数、信号与最终表现可以被重复验证。
交易后分析与投资组合域。维护组合、持仓、交易流水、指标和 AI 分析,将账户执行结果回流到研究与决策界面。东方财富自动化操作由前端 TradeLog 模块负责发起。
Interactive Brokers 适配层。依赖已启动的 IBKR Gateway,再通过 @icocoding/ib-node-api 连接 TWS API Socket;将账户摘要、仓位、盈亏、订单、合约详情和实时订阅转换为 Action 与 SSE 接口。
LongBridge 行情与交易接入层,封装行情订阅、账户查询和交易请求;通过独立服务组织连接、事件与接口响应。
OKX REST 适配层,提供公开行情、账户、仓位与订单接口。私有请求以 HMAC 签名,默认模拟盘;真实下单需显式的 live 与许可开关。
Vue 3、Vite、Pinia 与 Element Plus。页面按热力图、个股、回测、IBKR、监控和交易日志等业务域组织。
每个能力独立为 TypeScript 服务。ServerBootstrap 统一实现 HTTPS、HTTP/2、health、CORS、普通请求和 SSE stream。
commons 维护券商抽象、市场模型、策略与工具;server-base 维护 action 注册、初始化扫描和服务基座。
连接行情可视化、策略回测、模拟与实盘执行、交易日志和组合分析的全栈工程平台。以 Vue 3 / TypeScript 构建交互界面,以 Node.js 多服务、共享领域模型和 Action / SSE 契约组织后端,处理数据流、异步任务、券商事件与运行环境之间的协作。
AutoTrading 承载交易与研究服务;WorthInvesting 提供独立分析前端,复用共享模型与图表能力。项目也包含复用 Web 界面的 Electron 桌面应用工程。
本页为软件项目介绍,不提供投资建议、收益承诺或公开交易入口。示意图和代码为结构说明,不代表实时状态;券商功能与自动化能力受账户权限、配置和实际运行环境限制。