本文件包含 AI 编程代理处理 Northstar Pro 项目所需的关键信息。信息基于项目实际文件整理,如发现与源码不一致,请以源码为准。
Northstar Pro(盈富量化交易平台) 是一个基于 Java 和 Spring Boot 开发的量化交易平台,提供模块化的策略开发、回测、模拟交易和实盘部署框架。
- 当前源码版本:
9.0.0-M2(定义在根pom.xml的<northstar-version>属性) - 当前分支:
upgrade/jdk25 - 语言: Java 25(源码
pom.xml当前声明) - 构建工具: Maven 3.x
- 框架: Spring Boot 3.5.11
- Group ID:
org.dromara.northstar.pro - Artifact ID:
northstar - 仓库:
https://gitee.com/dromara/northstar - 前端子模块:
northstar-monitor-next(Git 子模块,独立仓库git@gitee.com:kevinhuangwl/northstar-monitor-next.git)
当前检出分支为 upgrade/jdk25,源码 pom.xml 已声明 <java.version>25</java.version>,Spring Boot 已升级到 3.5.11。env.sh / env.ps1 环境脚本会自动安装 Oracle JDK 25。工作目录中存在的 .flattened-pom.xml 会在构建时重新生成,未纳入 Git 跟踪,应以源码 pom.xml 为准。
- Spring Boot 3.5.11 - 应用框架
- Spring Data JPA - 数据持久化
- Spring Web - REST API 层
- Spring Scheduling - 任务调度
- Spring Retry 2.0.5 - 重试机制
- Spring Boot Cache - 缓存支持
- H2 Database 2.2.224 - 嵌入式数据库(生产环境文件模式,测试内存模式)
- Protocol Buffers 4.28.3 - 数据序列化
- Disruptor 3.4.4 - 高性能事件处理
- Netty-SocketIO 2.0.11 / socket.io-client 1.0.0 - 实时 WebSocket 通信
- Netty 4.1.104.Final
- Lombok 1.18.42 - 减少样板代码
- Fastjson2 2.0.56 / Jackson 2.16.1 - JSON 处理
- Guava 33.0.0-jre / Apache Commons(Lang3 3.17.0、IO 2.15.1、Math3 3.6.1、Codec 1.16.0)- 工具库
- Hutool-crypto 5.7.22 - 加密
- OkHttp3 4.12.0 / Retrofit2 2.11.0 - HTTP 客户端
- java-jwt 4.4.0 - 仅用于解码数据服务订阅令牌
- Ehcache 3.10.8
- 可选
smartprofile: TensorFlow Java 0.5.0
- OkHttp3 SSE / jtokkit 1.1.0 - Token 管理
- 支持多种 LLM 平台:OpenAI、Moonshot、DeepSeek、Ollama、Hunyuan、Zhipu 等
- Pinecone 向量存储、SearXNG 网页搜索、函数调用框架
- Vue 3.4.27 + Vite 5.2.12 + TypeScript 5.4.5
- Vue Router 4.3.2 + Pinia 2.1.7 + Vue I18n 9.13.1
- Element Plus 2.8.4 + TailwindCSS 3.4.4
- Klinecharts 9.8.12 + ECharts 5.5.0
- Monaco Editor 0.55.1
- Cypress 15.11.0 - E2E 测试
- 包管理器:pnpm >= 9
前端项目有独立的 northstar-monitor-next/AGENTS.md,前端开发请优先参考该文件。
northstar/
├── pom.xml # 父 POM,定义版本、模块、依赖管理
├── northstar-api/ # API 模块 - 核心接口、数据模型、指标与策略框架
├── northstar-gateway-sim/ # 模拟网关模块(模拟行情/交易)
├── northstar-gateway-playback/ # 回放网关模块(回测)
├── northstar-strategy-example/ # 策略示例模块
├── northstar-copilot/ # AI 助手模块
├── northstar-main/ # 主 Spring Boot 应用模块
├── northstar-monitor-next/ # 前端项目(Vue3 + Vite),以 Git 子模块引入
└── northstar-dist/ # 构建产物目录,非 Maven 模块
| 模块 | 根包 |
|---|---|
northstar-api |
org.dromara.northstar |
northstar-main |
org.dromara.northstar |
northstar-gateway-sim |
org.dromara.northstar.gateway.sim |
northstar-gateway-playback |
org.dromara.northstar.gateway.playback |
northstar-strategy-example |
org.dromara.northstar.strategy.example |
northstar-copilot |
org.dromara.northstar.copilot |
northstar-api/src/main/java/org/dromara/northstar/common/model/core/- 核心数据模型(Tick、Bar、Contract、Order、Trade、Position、Account、SubmitOrderReq等)northstar-api/src/main/java/org/dromara/northstar/common/constant/- 公共常量(Constants.java)northstar-api/src/main/java/org/dromara/northstar/strategy/- 策略框架(TradeStrategy、AbstractStrategy、IModuleContext、IAccount、IModuleAccount)northstar-api/src/main/java/org/dromara/northstar/indicator/- 指标框架(Indicator、AbstractIndicator、Configuration、Num)及指标实现northstar-api/src/main/java/org/dromara/northstar/gateway/- 网关抽象层(Gateway、MarketGateway、TradeGateway、IMarketCenter)northstar-main/src/main/java/org/dromara/northstar/app/restful/- REST 控制器northstar-main/src/main/java/org/dromara/northstar/app/service/- 服务层northstar-main/src/main/java/org/dromara/northstar/data/jdbc/- JPA Repository、Adapter、Entitynorthstar-main/src/main/java/org/dromara/northstar/event/- 事件引擎/Disruptor 处理器northstar-main/src/main/java/org/dromara/northstar/module/- 模组运行时northstar-main/src/main/java/org/dromara/northstar/account/- 账户与网关管理器northstar-main/src/main/java/org/dromara/northstar/config/- Spring 配置类northstar-main/src/main/java/org/dromara/northstar/app/auth/、app/security/- 认证与安全northstar-monitor-next/src/- 前端源码
northstar-main/src/main/java/org/dromara/northstar/NorthstarApplication.java
@SpringBootApplication
@EnableScheduling
@EnableJpaRepositories(basePackages = "org.dromara.northstar.data.jdbc")
public class NorthstarApplication { ... }| 文件 | 说明 |
|---|---|
pom.xml |
根 Maven POM,定义版本、模块、依赖管理 |
northstar-main/src/main/resources/application.yml |
主应用配置(Profile、SSL、数据库、日志、虚拟线程) |
northstar-main/src/main/resources/logback-spring.xml |
日志配置 |
northstar-monitor-next/package.json |
前端依赖与脚本 |
northstar-monitor-next/vite.config.ts |
Vite 构建配置 |
lombok.config |
Lombok 配置(lombok.addLombokGeneratedAnnotation=true) |
.gitmodules |
Git 子模块配置 |
env.sh / env.ps1 |
Linux / Windows 环境初始化脚本(安装 JDK 25) |
startup.sh |
生产启动脚本 |
update-protobuf-obj.ps1 |
重新生成 protobuf Java 类 |
# 编译打包(默认会执行单元测试)
mvn clean package
# 跳过测试加速构建
mvn clean package -DskipTests
# 包含 TensorFlow 的 smart profile
mvn clean package -P smart
# 运行单元测试
mvn test
# 运行集成测试(Failsafe,当前项目无 *IT.java)
mvn failsafe:integration-test
# 生成覆盖率报告
mvn jacoco:report
# 完整验证(含覆盖率检查)
mvn clean verify构建完成后,northstar-main 的可执行 jar 会输出到 northstar-dist/,默认名称为 northstar-9.0.0-M2.jar。
cd northstar-monitor-next
pnpm install
pnpm dev # 开发服务(默认端口 8848)
pnpm build # 生产构建,输出到 dist/
pnpm lint # eslint + prettier + stylelint
pnpm typecheck # tsc + vue-tsc
pnpm e2e # Cypress E2E 测试前端 dist/ 会在 northstar-main 的 Maven generate-resources 阶段被复制到 src/main/resources/static/。因此完整构建时需要先执行 pnpm build。
- 位置:各模块的
src/test/java - 框架:JUnit 5(Jupiter)、Mockito、AssertJ、Spring Boot Test
- 命名:
*Test.java - 插件:Maven Surefire 3.5.3
- 当前项目约有 80+ 个
*Test.java文件
- 位置:
northstar-main/src/test/java - 命名:
*IT.java - 插件:Maven Failsafe 3.5.3
- 当前工作树中未发现
*IT.java文件,但 Failsafe 已配置支持
- 工具:JaCoCo 0.8.13
- 最低行覆盖率:30%
- 排除项:
northstar-api: protobuf 生成代码、指标、策略、合约代码northstar-gateway-sim:org/dromara/northstar/gateway/sim/market/*
多数 northstar-main 的 Spring 测试使用:
@SpringBootTest(classes = NorthstarApplication.class, value="spring.profiles.active=unittest")主配置文件:northstar-main/src/main/resources/application.yml
| Profile | 端口 | SSL | 数据库 | 虚拟线程 |
|---|---|---|---|---|
prod / demo(默认) |
443 | 启用 | H2 文件模式 ./data/storage |
启用 |
dev |
80 | 禁用 | H2 文件模式 | 禁用 |
test / unittest / train / devtest |
80 | 禁用 | H2 内存模式 jdbc:h2:mem:testdb |
启用 |
e2e |
443 | 启用 | H2 内存模式 | 启用 |
默认激活的 profile 由环境变量 env 决定:
spring:
profiles:
active: ${env:prod}可通过 -Denv=<profile> 或 -Dspring.profiles.active=<profile> 覆盖。
server:
ssl:
key-store-type: JKS
key-store: classpath:keystore/northstar.quantit.tech.jks
key-store-password: s20ku0o017
enabled-protocols: TLSv1.2,TLSv1.3- 生产/默认:
jdbc:h2:file:./data/storage;DB_CLOSE_ON_EXIT=FALSE; - 测试内存模式:
jdbc:h2:mem:testdb - JPA:
ddl-auto: update,H2Dialect - H2 Console 在所有 profile 下均启用,路径
/h2-console
- 使用 SLF4J + Logback
- 日志文件输出到
logs/目录 - 主日志:
logs/Northstar_%d{yyyy-MM-dd}.log,保留 30 天 - 调试日志:
BroadcastHandler、MarketCenter、KlineData等,保留 3 天
- 数据源基础 URL:
https://marketplace.quantit.tech - 订阅令牌通过
quantit.datasource.secret或环境变量NS_DS_SECRET配置
项目使用自定义 Session + CSRF Token 方案,未使用 Spring Security。
AuthCheckerInterceptor:对/northstar/**请求校验 CSRF Token,放行/northstar/user/**和/northstar/resetUserController:登录、登出、校验接口UserInfo:保存用户账号密码及登录失败次数- 默认账号密码定义在
northstar-api/src/main/java/org/dromara/northstar/common/constant/Constants.java:- 用户 ID:
admin - 密码:
123456
- 用户 ID:
- 可通过环境变量覆盖:
NS_USERNS_PWD
- 登录失败 3 次后锁定账户
POST /northstar/user/login校验凭据- 成功后,随机 UUID 作为 CSRF Token 存入 HTTP Session(键
SESS_CSRF) - 后续
/northstar/**请求须携带请求头CSRF_token并匹配 Session 值 InternalLoopCallUtils生成一次性 UUID 用于内部循环调用(如 Copilot 函数调用),3 分钟后过期GET /northstar/user/validate检查 Session 有效性
MaliciousIPCollector/MaliciousRequestFilter:统计 404 请求 IP,单日超过 10 次则拦截CommonControllerAdvice:全局异常处理,将 404 请求 IP 记录到MaliciousIPCollector- Session Cookie 配置:
SameSite=strict、secure=true - CORS:在
AppConfig中配置,允许任意来源,暴露token响应头
java-jwt 仅用于解码数据服务订阅令牌(UserController.payedServices()),不用于用户认证。
位于 northstar-main/src/main/java/org/dromara/northstar/app/restful/,基础路径 /northstar/...:
| 控制器 | 功能 |
|---|---|
GatewayController |
网关 CRUD 和连接管理 |
ModuleController |
交易模组管理 |
TradeController |
订单提交和管理 |
MarketDataController |
行情数据查询 |
PlaybackController |
回测回放控制 |
StrategyExplorerController |
策略开发工具 |
CustomIndicatorController |
自定义指标管理 |
CopilotChatController |
AI 助手对话接口 |
UserController |
用户认证和管理 |
SseStreamController |
服务器推送实时数据 |
MultichartsController |
多图表数据接口 |
LoggingController |
应用日志访问 |
MetaDataController |
元数据管理 |
NotificationController |
通知设置 |
ContractConfigController |
合约配置 |
ResetController |
系统重置操作(仅在 e2e、dev profile 启用) |
CommonControllerAdvice |
全局异常处理 |
位于 northstar-main/src/main/java/org/dromara/northstar/app/service/,与控制器一一对应:
GatewayService- 网关生命周期管理,启动时恢复网关ModuleService- 模组生命周期、回测、模拟交易,启动时恢复模组TradeService- 交易订单处理MarketDataService- 行情数据服务PlaybackService- 回放服务StrategyExplorerService- 策略探索CopilotChatService- AI 对话ContractConfigService- 合约配置CustomIndicatorService- 自定义指标LoggingService- 日志服务MetaDataService- 元数据MultichartsService- 多图表NotificationService- 通知
采用 Adapter 模式 包装 Spring Data JPA Repository:
northstar-api/src/main/java/org/dromara/northstar/data/定义 Repository 接口:IGatewayRepositoryIModuleRepositoryIMarketDataRepositoryIAccountRepository
northstar-main/src/main/java/org/dromara/northstar/data/jdbc/提供:entity/- JPA 实体(以DO为后缀)*Repository.java- Spring Data JPA Repository*Adapter.java- Repository 适配器
RepositoryConfig通过@Bean将 Adapter 暴露为接口实现
部分 JPA 实体采用 JSON 字符串字段(dataStr、dataEncoded)存储复杂对象,并提供 convertFrom / convertTo 静态方法。
DisruptorFastEventEngine基于 LMAX Disruptor 实现,RingBuffer 大小 65536- 事件处理器位于
northstar-main/src/main/java/org/dromara/northstar/event/,包括:AccountHandler- 账户事件ConnectionHandler- 网关连接事件ModuleHandler- 模组事件SseBroadcastHandler- SSE 实时广播MarketDataPersistanceHandler- 行情数据持久化SimMarketHandler- 模拟市场EventNotificationHandler- 事件通知IllegalOrderHandler- 废单处理PlannedTradeHandler- 计划交易KlineDispatcher- K 线分发InternalDispatcher- 内部事件分发
- 接口:
I前缀(如IAccount、IModuleContext、IGatewayRepository)或无前缀(如TradeStrategy、Indicator) - 抽象类:
Abstract前缀(如AbstractStrategy、AbstractIndicator、AbstractEventHandler) - 实现类:描述性名称(如
GatewayManager、MarketCenter) - 测试类:
*Test.java(单元测试),*IT.java(集成测试) - JPA 实体:以
DO为后缀(如GatewayDescriptionDO、BarDO) - API 模型:视情况使用
VO/DTO后缀
- 使用 Lombok 减少样板代码(
@Data、@Slf4j、@Builder、@AllArgsConstructor等) - 控制器优先使用构造器注入配合
private final字段 - 服务/管理器类也常见
@Autowired字段注入 - 不可变字段使用
final - 代码注释主要使用中文
- 编码:UTF-8
- 使用 Maven Flatten Plugin 1.2.5 管理版本
- 版本定义在父 POM:
<northstar-version>9.0.0-M2</northstar-version> - 通过
<revision>${northstar-version}</revision>占位符供各模块继承 - 构建时生成
.flattened-pom.xml - 前端
package.json版本同步为9.0.0-M2
-
行情数据流:
外部网关 → MarketGateway → IMarketCenter → 模组 → 策略 -
订单流:
策略 → IModuleContext → 模组 → TradeGateway → 外部券商 -
事件流:
FastEventEngine / Disruptor → 事件处理器 → 组件更新 -
实时推送:
事件 → SseBroadcastHandler → SseStreamController → 前端 SSE 连接
TradeStrategy # 策略接口 - 所有策略必须实现
AbstractStrategy # 抽象基类 - 推荐继承
IModuleContext # 模组上下文 - 策略与框架交互
IAccount # 合约绑定物理账户
IModuleAccount # 模组级账户操作策略使用 @StrategicComponent("策略名称") 注解标记,框架通过 Spring 自动发现。
public interface Indicator {
Num get(int step); // 0=当前, -1=上一根
double value(int step);
boolean isReady();
void update(Num num); // 幂等更新
List<Indicator> dependencies();
Configuration getConfiguration();
}Num 记录:
public record Num(double value, long timestamp, boolean unstable)使用 TradeIntent 提交订单,可自动处理撤单追单:
ctx.submitOrderReq(TradeIntent.builder()
.contract(contract)
.operation(SignalOperation.BUY_OPEN)
.priceType(PriceType.OPP_PRICE)
.volume(1)
.timeout(5000)
.build());或使用 TradeHelper 简化交易:
TradeHelper helper = TradeHelper.builder()
.context(ctx)
.tradeContract(contract)
.build();
helper.doBuyOpen(1);
helper.doSellCloseAll();- 类标注
@StrategicComponent(MyStrategy.NAME),继承AbstractStrategy,实现TradeStrategy - 定义
InitParams extends DynamicParams,用@Setting标注参数字段 - 重写
initWithParams(DynamicParams params)接收参数 - 重写
initIndicators()创建并注册指标 - 实现
onMergedBar()或onTick()交易逻辑 - 交易前检查
ctx.getState()和indicator.isReady()
ModuleState 主要取值:
EMPTY- 空仓HOLDING_LONG- 持多仓HOLDING_SHORT- 持空仓PLACING_ORDER- 下单中PENDING_ORDER- 等待订单反馈
- 继承
AbstractIndicator,实现evaluate(Num num) - 如有依赖其他指标,重写
dependencies() - 使用
Configuration.builder()配置参数 - 返回
Num.of(value, timestamp, unstable) - 在策略中通过
ctx.registerIndicator(indicator)注册
BeginnerExampleStrategy- 最简策略示例IndicatorExampleStrategy- 带指标的策略示例MultiContractExampleStrategy- 多合约示例SimpleSpreadStrategy- 套利策略示例
nohup java -Xlog:gc*:gc.log -Xms2g -Xmx2g \
-Dloader.path=$(pwd) \
-Denv=prod \
-jar $(find /root/northstar-dist -name 'northstar-[0-9]*.*.jar') \
>/root/northstar-dist/ns.log &env.sh(Linux):创建~/northstar-env和~/northstar-dist,安装 Oracle JDK 25env.ps1(Windows):创建c:\northstar_env\和c:\northstar_dist\,安装 JDK 25 MSI 并更新用户 PATH
- 仓库中没有后端 Dockerfile 或 docker-compose.yml
- 仅有前端 Dockerfile:
northstar-monitor-next/Dockerfile(基于 Nginx 部署构建产物) - 仓库中没有 GitHub Actions、Gitee CI、Jenkinsfile 等 CI/CD 配置
northstar-external → git@gitee.com:kevinhuangwl/northstar-external.git
northstar-monitor-next → git@gitee.com:kevinhuangwl/northstar-monitor-next.git
- JDK 25 升级已完成:源码 POM 已目标 Java 25 / Spring Boot 3.5.11。构建前请确认本地 JDK 与 POM 配置一致。
- Protobuf 生成类不可手动修改:生成类位于
xyz.redtorch.pb包中,更新请使用update-protobuf-obj.ps1。 - H2 用于生产数据存储:生产环境使用 H2 文件模式,历史行情数据主要依赖外部 marketplace 服务。
- 虚拟线程:默认在非
devprofile 下启用。 .flattened-pom.xml不一致:工作目录中的.flattened-pom.xml文件未纳入 Git,且可能与源码 POM 不符,请勿以其为准。- H2 Console 在生产环境启用:路径
/h2-console,仅通过 CSRF 拦截器保护。 - 前端构建顺序:打包后端前必须先在前端目录执行
pnpm build生成dist/。 - 测试环境默认账号:
admin/123456,可通过NS_USER/NS_PWD环境变量覆盖。