fi-pool-server 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -0
- package/dist/db/index.d.ts +18 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +58 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrate.d.ts +11 -0
- package/dist/db/migrate.d.ts.map +1 -0
- package/dist/db/migrate.js +42 -0
- package/dist/db/migrate.js.map +1 -0
- package/dist/db/schema.d.ts +1101 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +149 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/services/analysis.d.ts +62 -0
- package/dist/services/analysis.d.ts.map +1 -0
- package/dist/services/analysis.js +74 -0
- package/dist/services/analysis.js.map +1 -0
- package/dist/services/daily-info.d.ts +150 -0
- package/dist/services/daily-info.d.ts.map +1 -0
- package/dist/services/daily-info.js +293 -0
- package/dist/services/daily-info.js.map +1 -0
- package/dist/services/embedding.d.ts +89 -0
- package/dist/services/embedding.d.ts.map +1 -0
- package/dist/services/embedding.js +227 -0
- package/dist/services/embedding.js.map +1 -0
- package/dist/services/llm.d.ts +64 -0
- package/dist/services/llm.d.ts.map +1 -0
- package/dist/services/llm.js +109 -0
- package/dist/services/llm.js.map +1 -0
- package/dist/services/pipeline.d.ts +161 -0
- package/dist/services/pipeline.d.ts.map +1 -0
- package/dist/services/pipeline.js +844 -0
- package/dist/services/pipeline.js.map +1 -0
- package/dist/services/pool.d.ts +142 -0
- package/dist/services/pool.d.ts.map +1 -0
- package/dist/services/pool.js +208 -0
- package/dist/services/pool.js.map +1 -0
- package/dist/services/sentiment.d.ts +31 -0
- package/dist/services/sentiment.d.ts.map +1 -0
- package/dist/services/sentiment.js +76 -0
- package/dist/services/sentiment.js.map +1 -0
- package/dist/services/session.d.ts +117 -0
- package/dist/services/session.d.ts.map +1 -0
- package/dist/services/session.js +176 -0
- package/dist/services/session.js.map +1 -0
- package/dist/services/stock.d.ts +82 -0
- package/dist/services/stock.d.ts.map +1 -0
- package/dist/services/stock.js +99 -0
- package/dist/services/stock.js.map +1 -0
- package/dist/services/word-count.d.ts +61 -0
- package/dist/services/word-count.d.ts.map +1 -0
- package/dist/services/word-count.js +120 -0
- package/dist/services/word-count.js.map +1 -0
- package/dist/tools/auxiliary.d.ts +93 -0
- package/dist/tools/auxiliary.d.ts.map +1 -0
- package/dist/tools/auxiliary.js +204 -0
- package/dist/tools/auxiliary.js.map +1 -0
- package/dist/tools/command.d.ts +193 -0
- package/dist/tools/command.d.ts.map +1 -0
- package/dist/tools/command.js +263 -0
- package/dist/tools/command.js.map +1 -0
- package/dist/tools/execute.d.ts +109 -0
- package/dist/tools/execute.d.ts.map +1 -0
- package/dist/tools/execute.js +112 -0
- package/dist/tools/execute.js.map +1 -0
- package/dist/tools/manager.d.ts +150 -0
- package/dist/tools/manager.d.ts.map +1 -0
- package/dist/tools/manager.js +200 -0
- package/dist/tools/manager.js.map +1 -0
- package/dist/tools/query.d.ts +163 -0
- package/dist/tools/query.d.ts.map +1 -0
- package/dist/tools/query.js +190 -0
- package/dist/tools/query.js.map +1 -0
- package/dist/utils/http-client.d.ts +87 -0
- package/dist/utils/http-client.d.ts.map +1 -0
- package/dist/utils/http-client.js +211 -0
- package/dist/utils/http-client.js.map +1 -0
- package/dist/utils/indicators.d.ts +194 -0
- package/dist/utils/indicators.d.ts.map +1 -0
- package/dist/utils/indicators.js +395 -0
- package/dist/utils/indicators.js.map +1 -0
- package/dist/utils/signals.d.ts +65 -0
- package/dist/utils/signals.d.ts.map +1 -0
- package/dist/utils/signals.js +171 -0
- package/dist/utils/signals.js.map +1 -0
- package/drizzle/0000_equal_marvel_apes.sql +124 -0
- package/drizzle/meta/0000_snapshot.json +858 -0
- package/drizzle/meta/_journal.json +13 -0
- package/package.json +58 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAMH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWd,CAAC;AAIJ,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOf,CAAC;AAIJ,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASnB,CAAC;AAIJ,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAanB,CAAC;AAIJ,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAY7B,CAAC;AAIJ,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWzB,CAAC;AAIJ,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAavB,CAAC;AAIJ,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAarB,CAAC;AAIJ,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIjB,CAAC;AAIH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYtB,CAAC"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drizzle ORM Schema — Fi-Pool-Manager
|
|
3
|
+
*
|
|
4
|
+
* 10 张表定义,与 docs/database-schema.md 完全对应。
|
|
5
|
+
* 使用 drizzle-orm/sqlite-core 定义 SQLite 表结构。
|
|
6
|
+
*
|
|
7
|
+
* 表清单:
|
|
8
|
+
* - pool 股池
|
|
9
|
+
* - pool_stock 股池与股票关联(M:N)
|
|
10
|
+
* - stock 股票基础信息
|
|
11
|
+
* - daily_info 日行情数据
|
|
12
|
+
* - daily_analysis_report 客观分析报告
|
|
13
|
+
* - sentiment_report 舆情报告
|
|
14
|
+
* - analysis_roler 多角色发言记录
|
|
15
|
+
* - final_report 最终报告
|
|
16
|
+
* - config 系统配置
|
|
17
|
+
* - vec_embedding 向量数据
|
|
18
|
+
*
|
|
19
|
+
* 迁移命令:
|
|
20
|
+
* npm run db:generate 生成迁移文件
|
|
21
|
+
* npm run db:migrate 执行迁移
|
|
22
|
+
*/
|
|
23
|
+
import { sqliteTable, text, integer, real, blob, uniqueIndex, index } from 'drizzle-orm/sqlite-core';
|
|
24
|
+
// ─── Pool 股池 ───────────────────────────────────────────────
|
|
25
|
+
export const pool = sqliteTable('pool', {
|
|
26
|
+
id: integer('id').primaryKey({ autoIncrement: true }),
|
|
27
|
+
name: text('name').notNull().unique(),
|
|
28
|
+
desc: text('desc').notNull().default(''),
|
|
29
|
+
poolAnalysis: text('pool_analysis').notNull().default(''),
|
|
30
|
+
poolSignal: integer('pool_signal').notNull().default(0), // -1:看空, 0:中性, 1:看多
|
|
31
|
+
createdAt: text('created_at').notNull().default("datetime('now')"),
|
|
32
|
+
updatedAt: text('updated_at').notNull().default("datetime('now')"),
|
|
33
|
+
}, (table) => ({
|
|
34
|
+
nameIdx: index('idx_pool_name').on(table.name),
|
|
35
|
+
signalIdx: index('idx_pool_signal').on(table.poolSignal),
|
|
36
|
+
}));
|
|
37
|
+
// ─── Stock 股票基础信息 ─────────────────────────────────────
|
|
38
|
+
export const stock = sqliteTable('stock', {
|
|
39
|
+
code: text('code').primaryKey(), // 6位代码,如 '600519'
|
|
40
|
+
name: text('name').notNull(),
|
|
41
|
+
currentPrice: real('current_price').notNull().default(0),
|
|
42
|
+
updatedAt: text('updated_at').notNull().default("datetime('now')"),
|
|
43
|
+
}, (table) => ({
|
|
44
|
+
nameIdx: index('idx_stock_name').on(table.name),
|
|
45
|
+
}));
|
|
46
|
+
// ─── PoolStock 股池与股票的关联(M:N)──────────────────────
|
|
47
|
+
export const poolStock = sqliteTable('pool_stock', {
|
|
48
|
+
id: integer('id').primaryKey({ autoIncrement: true }),
|
|
49
|
+
poolId: integer('pool_id').notNull().references(() => pool.id),
|
|
50
|
+
stockCode: text('stock_code').notNull().references(() => stock.code),
|
|
51
|
+
addedAt: text('added_at').notNull().default("datetime('now')"),
|
|
52
|
+
}, (table) => ({
|
|
53
|
+
uniqueIdx: uniqueIndex('idx_pool_stock_unique').on(table.poolId, table.stockCode),
|
|
54
|
+
poolIdx: index('idx_pool_stock_pool').on(table.poolId),
|
|
55
|
+
stockIdx: index('idx_pool_stock_stock').on(table.stockCode),
|
|
56
|
+
}));
|
|
57
|
+
// ─── DailyInfo 日行情数据 ──────────────────────────────────
|
|
58
|
+
export const dailyInfo = sqliteTable('daily_info', {
|
|
59
|
+
id: integer('id').primaryKey({ autoIncrement: true }),
|
|
60
|
+
code: text('code').notNull().references(() => stock.code),
|
|
61
|
+
date: text('date').notNull(), // 'yyyy-MM-dd'
|
|
62
|
+
open: real('open').notNull(),
|
|
63
|
+
high: real('high').notNull(),
|
|
64
|
+
low: real('low').notNull(),
|
|
65
|
+
close: real('close').notNull(),
|
|
66
|
+
volume: integer('volume').notNull(), // 股数
|
|
67
|
+
}, (table) => ({
|
|
68
|
+
codeDateUnique: uniqueIndex('idx_daily_info_unique').on(table.code, table.date),
|
|
69
|
+
codeIdx: index('idx_daily_info_code').on(table.code),
|
|
70
|
+
dateIdx: index('idx_daily_info_date').on(table.date),
|
|
71
|
+
}));
|
|
72
|
+
// ─── DailyAnalysisReport 客观分析报告 ──────────────────────
|
|
73
|
+
export const dailyAnalysisReport = sqliteTable('daily_analysis_report', {
|
|
74
|
+
id: integer('id').primaryKey({ autoIncrement: true }),
|
|
75
|
+
code: text('code').notNull().references(() => stock.code),
|
|
76
|
+
date: text('date').notNull(), // 'yyyy-MM-dd'
|
|
77
|
+
summary: text('summary').notNull().default(''), // 文本摘要
|
|
78
|
+
indicators: text('indicators').notNull().default('{}'), // JSON: 结构化指标数据
|
|
79
|
+
signals: text('signals').notNull().default('{}'), // JSON: 信号标记
|
|
80
|
+
createdAt: text('created_at').notNull().default("datetime('now')"),
|
|
81
|
+
}, (table) => ({
|
|
82
|
+
codeDateUnique: uniqueIndex('idx_dar_unique').on(table.code, table.date),
|
|
83
|
+
codeIdx: index('idx_dar_code').on(table.code),
|
|
84
|
+
dateIdx: index('idx_dar_date').on(table.date),
|
|
85
|
+
}));
|
|
86
|
+
// ─── SentimentReport 舆情报告 ──────────────────────────────
|
|
87
|
+
export const sentimentReport = sqliteTable('sentiment_report', {
|
|
88
|
+
id: integer('id').primaryKey({ autoIncrement: true }),
|
|
89
|
+
code: text('code').notNull().references(() => stock.code),
|
|
90
|
+
date: text('date').notNull(), // 'yyyy-MM-dd'
|
|
91
|
+
report: text('report').notNull().default(''),
|
|
92
|
+
sources: text('sources').notNull().default('[]'), // JSON: 来源列表
|
|
93
|
+
createdAt: text('created_at').notNull().default("datetime('now')"),
|
|
94
|
+
}, (table) => ({
|
|
95
|
+
codeDateUnique: uniqueIndex('idx_sr_unique').on(table.code, table.date),
|
|
96
|
+
codeIdx: index('idx_sr_code').on(table.code),
|
|
97
|
+
dateIdx: index('idx_sr_date').on(table.date),
|
|
98
|
+
}));
|
|
99
|
+
// ─── AnalysisRoler 多角色发言记录 ─────────────────────────
|
|
100
|
+
export const analysisRoler = sqliteTable('analysis_roler', {
|
|
101
|
+
id: integer('id').primaryKey({ autoIncrement: true }),
|
|
102
|
+
code: text('code').notNull().references(() => stock.code),
|
|
103
|
+
date: text('date').notNull(), // 'yyyy-MM-dd'
|
|
104
|
+
role: text('role').notNull(), // 角色名
|
|
105
|
+
responsibility: text('responsibility').notNull().default(''),
|
|
106
|
+
report: text('report').notNull().default(''),
|
|
107
|
+
round: integer('round').notNull().default(1), // 第几轮
|
|
108
|
+
wordCount: integer('word_count').notNull().default(0), // 实际字数
|
|
109
|
+
createdAt: text('created_at').notNull().default("datetime('now')"),
|
|
110
|
+
}, (table) => ({
|
|
111
|
+
codeDateIdx: index('idx_ar_code_date').on(table.code, table.date),
|
|
112
|
+
roleIdx: index('idx_ar_role').on(table.role),
|
|
113
|
+
}));
|
|
114
|
+
// ─── FinalReport 最终报告 ──────────────────────────────────
|
|
115
|
+
export const finalReport = sqliteTable('final_report', {
|
|
116
|
+
id: integer('id').primaryKey({ autoIncrement: true }),
|
|
117
|
+
code: text('code').notNull().references(() => stock.code),
|
|
118
|
+
date: text('date').notNull(), // 'yyyy-MM-dd'
|
|
119
|
+
summary: text('summary').notNull().default(''), // overview 内容
|
|
120
|
+
fullReport: text('full_report').notNull().default(''), // full 内容
|
|
121
|
+
roleSummary: text('role_summary').notNull().default('[]'), // JSON: 各角色核心观点
|
|
122
|
+
pipelineId: text('pipeline_id').notNull().default(''), // 流水线运行 ID
|
|
123
|
+
createdAt: text('created_at').notNull().default("datetime('now')"),
|
|
124
|
+
}, (table) => ({
|
|
125
|
+
codeDateUnique: uniqueIndex('idx_fr_unique').on(table.code, table.date),
|
|
126
|
+
codeIdx: index('idx_fr_code').on(table.code),
|
|
127
|
+
dateIdx: index('idx_fr_date').on(table.date),
|
|
128
|
+
}));
|
|
129
|
+
// ─── Config 系统配置 ──────────────────────────────────────
|
|
130
|
+
export const config = sqliteTable('config', {
|
|
131
|
+
key: text('key').primaryKey(),
|
|
132
|
+
value: text('value').notNull().default(''),
|
|
133
|
+
updatedAt: text('updated_at').notNull().default("datetime('now')"),
|
|
134
|
+
});
|
|
135
|
+
// ─── VecEmbedding 向量数据 ────────────────────────────────
|
|
136
|
+
export const vecEmbedding = sqliteTable('vec_embedding', {
|
|
137
|
+
id: integer('id').primaryKey({ autoIncrement: true }),
|
|
138
|
+
contentType: text('content_type').notNull(), // 'analysis' | 'final'
|
|
139
|
+
contentCode: text('content_code').notNull(), // 股票代码
|
|
140
|
+
contentDate: text('content_date').notNull(), // 报告日期
|
|
141
|
+
contentText: text('content_text').notNull(), // 原始文本(用于溯源)
|
|
142
|
+
embedding: blob('embedding'), // 向量数据(sqlite-vec)
|
|
143
|
+
createdAt: text('created_at').notNull().default("datetime('now')"),
|
|
144
|
+
}, (table) => ({
|
|
145
|
+
typeIdx: index('idx_ve_type').on(table.contentType),
|
|
146
|
+
codeIdx: index('idx_ve_code').on(table.contentCode),
|
|
147
|
+
typeCodeDateIdx: index('idx_ve_type_code_date').on(table.contentType, table.contentCode, table.contentDate),
|
|
148
|
+
}));
|
|
149
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* fi-pool-server
|
|
3
|
+
* Fi-Pool-Manager 核心服务入口
|
|
4
|
+
*
|
|
5
|
+
* 数据获取(腾讯财经接口)
|
|
6
|
+
* 本地技术指标计算
|
|
7
|
+
* LLM 分析引擎(LM Studio)
|
|
8
|
+
* 向量检索
|
|
9
|
+
* 舆情搜索(DashScope)
|
|
10
|
+
* 数据库访问(Drizzle ORM + SQLite)
|
|
11
|
+
*
|
|
12
|
+
* 使用方式:
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { initDatabase, queryTools, managerTools } from 'fi-pool-server';
|
|
15
|
+
*
|
|
16
|
+
* await initDatabase();
|
|
17
|
+
* const pools = await queryTools.listPools();
|
|
18
|
+
* const result = await managerTools.createPool('我的股池');
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* 工具模块分类:
|
|
22
|
+
* - managerTools — 股池管理(创建/删除/更新),返回 { success, data/error }
|
|
23
|
+
* - queryTools — 数据查询(直接返回数据,不包装)
|
|
24
|
+
* - commandTools — 报告输出与操作型接口
|
|
25
|
+
* - executeTools — 流水线执行(返回 { success, data/error })
|
|
26
|
+
* - auxiliaryTools — 辅助功能(帮助、配置、状态)
|
|
27
|
+
*
|
|
28
|
+
* @module fi-pool-server
|
|
29
|
+
*/
|
|
30
|
+
export { initDatabase, getDatabase, closeDatabase, getDbPath } from './db/index.js';
|
|
31
|
+
export { ensureDatabase } from './db/migrate.js';
|
|
32
|
+
export * from './db/schema.js';
|
|
33
|
+
export * as managerTools from './tools/manager.js';
|
|
34
|
+
export * as queryTools from './tools/query.js';
|
|
35
|
+
export * as commandTools from './tools/command.js';
|
|
36
|
+
export * as executeTools from './tools/execute.js';
|
|
37
|
+
export * as auxiliaryTools from './tools/auxiliary.js';
|
|
38
|
+
export * as stockService from './services/stock.js';
|
|
39
|
+
export * as poolService from './services/pool.js';
|
|
40
|
+
export * as dailyInfoService from './services/daily-info.js';
|
|
41
|
+
export * as analysisService from './services/analysis.js';
|
|
42
|
+
export * as llmService from './services/llm.js';
|
|
43
|
+
export * as sentimentService from './services/sentiment.js';
|
|
44
|
+
export * as sessionService from './services/session.js';
|
|
45
|
+
export * as wordCountService from './services/word-count.js';
|
|
46
|
+
export * as embeddingService from './services/embedding.js';
|
|
47
|
+
export { runFullPipeline, runLocalAnalysis, stage1FetchData } from './services/pipeline.js';
|
|
48
|
+
declare let VERSION: string;
|
|
49
|
+
export { VERSION };
|
|
50
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIjD,cAAc,gBAAgB,CAAC;AAI/B,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AAIvD,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,WAAW,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,gBAAgB,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,gBAAgB,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAI5D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAY5F,QAAA,IAAI,OAAO,QAAU,CAAC;AAQtB,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* fi-pool-server
|
|
3
|
+
* Fi-Pool-Manager 核心服务入口
|
|
4
|
+
*
|
|
5
|
+
* 数据获取(腾讯财经接口)
|
|
6
|
+
* 本地技术指标计算
|
|
7
|
+
* LLM 分析引擎(LM Studio)
|
|
8
|
+
* 向量检索
|
|
9
|
+
* 舆情搜索(DashScope)
|
|
10
|
+
* 数据库访问(Drizzle ORM + SQLite)
|
|
11
|
+
*
|
|
12
|
+
* 使用方式:
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { initDatabase, queryTools, managerTools } from 'fi-pool-server';
|
|
15
|
+
*
|
|
16
|
+
* await initDatabase();
|
|
17
|
+
* const pools = await queryTools.listPools();
|
|
18
|
+
* const result = await managerTools.createPool('我的股池');
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* 工具模块分类:
|
|
22
|
+
* - managerTools — 股池管理(创建/删除/更新),返回 { success, data/error }
|
|
23
|
+
* - queryTools — 数据查询(直接返回数据,不包装)
|
|
24
|
+
* - commandTools — 报告输出与操作型接口
|
|
25
|
+
* - executeTools — 流水线执行(返回 { success, data/error })
|
|
26
|
+
* - auxiliaryTools — 辅助功能(帮助、配置、状态)
|
|
27
|
+
*
|
|
28
|
+
* @module fi-pool-server
|
|
29
|
+
*/
|
|
30
|
+
// ─── 数据库 ────────────────────────────────────────────────────
|
|
31
|
+
export { initDatabase, getDatabase, closeDatabase, getDbPath } from './db/index.js';
|
|
32
|
+
export { ensureDatabase } from './db/migrate.js';
|
|
33
|
+
// ─── 数据库 Schema(供外部高级使用)─────────────────────────
|
|
34
|
+
export * from './db/schema.js';
|
|
35
|
+
// ─── 工具模块 ──────────────────────────────────────────────────
|
|
36
|
+
export * as managerTools from './tools/manager.js';
|
|
37
|
+
export * as queryTools from './tools/query.js';
|
|
38
|
+
export * as commandTools from './tools/command.js';
|
|
39
|
+
export * as executeTools from './tools/execute.js';
|
|
40
|
+
export * as auxiliaryTools from './tools/auxiliary.js';
|
|
41
|
+
// ─── 核心服务(供深度集成使用)───────────────────────────────
|
|
42
|
+
export * as stockService from './services/stock.js';
|
|
43
|
+
export * as poolService from './services/pool.js';
|
|
44
|
+
export * as dailyInfoService from './services/daily-info.js';
|
|
45
|
+
export * as analysisService from './services/analysis.js';
|
|
46
|
+
export * as llmService from './services/llm.js';
|
|
47
|
+
export * as sentimentService from './services/sentiment.js';
|
|
48
|
+
export * as sessionService from './services/session.js';
|
|
49
|
+
export * as wordCountService from './services/word-count.js';
|
|
50
|
+
export * as embeddingService from './services/embedding.js';
|
|
51
|
+
// ─── 流水线编排器(独立入口点)─────────────────────────────
|
|
52
|
+
export { runFullPipeline, runLocalAnalysis, stage1FetchData } from './services/pipeline.js';
|
|
53
|
+
// ─── 版本号(从 package.json 读取,保持与发布版本同步)──────
|
|
54
|
+
import { readFileSync } from 'fs';
|
|
55
|
+
import { fileURLToPath } from 'url';
|
|
56
|
+
import { dirname, resolve } from 'path';
|
|
57
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
58
|
+
const __dirname = dirname(__filename);
|
|
59
|
+
const pkgPath = resolve(__dirname, '../package.json');
|
|
60
|
+
let VERSION = '0.0.0';
|
|
61
|
+
try {
|
|
62
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
63
|
+
VERSION = pkg.version || VERSION;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// 无法读取时保持默认
|
|
67
|
+
}
|
|
68
|
+
export { VERSION };
|
|
69
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,+DAA+D;AAE/D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,mDAAmD;AAEnD,cAAc,gBAAgB,CAAC;AAE/B,8DAA8D;AAE9D,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AAEvD,mDAAmD;AAEnD,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,WAAW,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,gBAAgB,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,gBAAgB,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAE5D,iDAAiD;AAEjD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE5F,6CAA6C;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAExC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAEtD,IAAI,OAAO,GAAG,OAAO,CAAC;AACtB,IAAI,CAAC;IACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;AACnC,CAAC;AAAC,MAAM,CAAC;IACP,YAAY;AACd,CAAC;AAED,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 技术分析与信号检测服务
|
|
3
|
+
*
|
|
4
|
+
* 将 utils/indicators 和 utils/signals 中的纯函数组合为
|
|
5
|
+
* 面向流水线场景的高级分析接口。
|
|
6
|
+
*
|
|
7
|
+
* @module services/analysis
|
|
8
|
+
*/
|
|
9
|
+
import type { OHLCV } from '../utils/indicators.js';
|
|
10
|
+
import { type Signals } from '../utils/signals.js';
|
|
11
|
+
/**
|
|
12
|
+
* 结构化技术指标。
|
|
13
|
+
* 对应 daily_analysis_report.indicators 字段的 JSON 结构。
|
|
14
|
+
*/
|
|
15
|
+
export interface Indicators {
|
|
16
|
+
priceChangePct: number;
|
|
17
|
+
amplitude: number;
|
|
18
|
+
ma: {
|
|
19
|
+
ma5: number | null;
|
|
20
|
+
ma10: number | null;
|
|
21
|
+
ma20: number | null;
|
|
22
|
+
ma60: number | null;
|
|
23
|
+
};
|
|
24
|
+
macd: {
|
|
25
|
+
dif: number | null;
|
|
26
|
+
dea: number | null;
|
|
27
|
+
histogram: number | null;
|
|
28
|
+
};
|
|
29
|
+
rsi: {
|
|
30
|
+
rsi6: number | null;
|
|
31
|
+
rsi14: number | null;
|
|
32
|
+
};
|
|
33
|
+
kdj: {
|
|
34
|
+
k: number | null;
|
|
35
|
+
d: number | null;
|
|
36
|
+
j: number | null;
|
|
37
|
+
};
|
|
38
|
+
bb: {
|
|
39
|
+
upper: number | null;
|
|
40
|
+
mid: number | null;
|
|
41
|
+
lower: number | null;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* 对一组 OHLCV 数据计算完整的技术指标集合。
|
|
46
|
+
*
|
|
47
|
+
* @param data - OHLCV 日行情数组(按日期升序)
|
|
48
|
+
* @returns 结构化指标对象,最新位置的有效值
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* const ind = computeIndicators(ohlcvData);
|
|
52
|
+
* console.log(ind.ma.ma5, ind.rsi.rsi14);
|
|
53
|
+
*/
|
|
54
|
+
export declare function computeIndicators(data: OHLCV[]): Indicators;
|
|
55
|
+
/**
|
|
56
|
+
* 检测技术信号。
|
|
57
|
+
*
|
|
58
|
+
* @param data - OHLCV 数组
|
|
59
|
+
* @returns 信号检测结果
|
|
60
|
+
*/
|
|
61
|
+
export declare function computeSignals(data: OHLCV[]): Signals;
|
|
62
|
+
//# sourceMappingURL=analysis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../src/services/analysis.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAElE;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC1F,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC3E,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACnD,GAAG,EAAE;QAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC9D,EAAE,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CACxE;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,UAAU,CA2C3D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,CAUrD"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 技术分析与信号检测服务
|
|
3
|
+
*
|
|
4
|
+
* 将 utils/indicators 和 utils/signals 中的纯函数组合为
|
|
5
|
+
* 面向流水线场景的高级分析接口。
|
|
6
|
+
*
|
|
7
|
+
* @module services/analysis
|
|
8
|
+
*/
|
|
9
|
+
import { calcMA, calcMACD, calcRSI, calcKDJ, calcBollinger, calcPriceChangePct, calcAmplitude } from '../utils/indicators.js';
|
|
10
|
+
import { detectSignals } from '../utils/signals.js';
|
|
11
|
+
/**
|
|
12
|
+
* 对一组 OHLCV 数据计算完整的技术指标集合。
|
|
13
|
+
*
|
|
14
|
+
* @param data - OHLCV 日行情数组(按日期升序)
|
|
15
|
+
* @returns 结构化指标对象,最新位置的有效值
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* const ind = computeIndicators(ohlcvData);
|
|
19
|
+
* console.log(ind.ma.ma5, ind.rsi.rsi14);
|
|
20
|
+
*/
|
|
21
|
+
export function computeIndicators(data) {
|
|
22
|
+
const lastIdx = data.length - 1;
|
|
23
|
+
const ma5 = calcMA(data, 5);
|
|
24
|
+
const ma10 = calcMA(data, 10);
|
|
25
|
+
const ma20 = calcMA(data, 20);
|
|
26
|
+
const ma60 = calcMA(data, 60);
|
|
27
|
+
const { dif, dea, histogram } = calcMACD(data);
|
|
28
|
+
const rsi6 = calcRSI(data, 6);
|
|
29
|
+
const rsi14 = calcRSI(data, 14);
|
|
30
|
+
const { k, d, j } = calcKDJ(data);
|
|
31
|
+
const { upper, mid, lower } = calcBollinger(data);
|
|
32
|
+
return {
|
|
33
|
+
priceChangePct: calcPriceChangePct(data, lastIdx),
|
|
34
|
+
amplitude: calcAmplitude(data, lastIdx),
|
|
35
|
+
ma: {
|
|
36
|
+
ma5: ma5[lastIdx] ?? null,
|
|
37
|
+
ma10: ma10[lastIdx] ?? null,
|
|
38
|
+
ma20: ma20[lastIdx] ?? null,
|
|
39
|
+
ma60: data.length >= 60 ? (ma60[lastIdx] ?? null) : null,
|
|
40
|
+
},
|
|
41
|
+
macd: {
|
|
42
|
+
dif: dif[lastIdx] ?? null,
|
|
43
|
+
dea: dea[lastIdx] ?? null,
|
|
44
|
+
histogram: histogram[lastIdx] ?? null,
|
|
45
|
+
},
|
|
46
|
+
rsi: {
|
|
47
|
+
rsi6: rsi6[lastIdx] ?? null,
|
|
48
|
+
rsi14: rsi14[lastIdx] ?? null,
|
|
49
|
+
},
|
|
50
|
+
kdj: {
|
|
51
|
+
k: k[lastIdx] ?? null,
|
|
52
|
+
d: d[lastIdx] ?? null,
|
|
53
|
+
j: j[lastIdx] ?? null,
|
|
54
|
+
},
|
|
55
|
+
bb: {
|
|
56
|
+
upper: upper[lastIdx] ?? null,
|
|
57
|
+
mid: mid[lastIdx] ?? null,
|
|
58
|
+
lower: lower[lastIdx] ?? null,
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* 检测技术信号。
|
|
64
|
+
*
|
|
65
|
+
* @param data - OHLCV 数组
|
|
66
|
+
* @returns 信号检测结果
|
|
67
|
+
*/
|
|
68
|
+
export function computeSignals(data) {
|
|
69
|
+
const ma5 = calcMA(data, 5);
|
|
70
|
+
const ma10 = calcMA(data, 10);
|
|
71
|
+
const rsi14 = calcRSI(data, 14);
|
|
72
|
+
return detectSignals(data, { ma5: ma5[ma5.length - 1] ?? null, ma10: ma10[ma10.length - 1] ?? null }, rsi14[rsi14.length - 1] ?? null);
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=analysis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analysis.js","sourceRoot":"","sources":["../../src/services/analysis.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC9H,OAAO,EAAE,aAAa,EAAgB,MAAM,qBAAqB,CAAC;AAgBlE;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAa;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAEhC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAE9B,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAChC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAElD,OAAO;QACL,cAAc,EAAE,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC;QACjD,SAAS,EAAE,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;QACvC,EAAE,EAAE;YACF,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI;YACzB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI;YAC3B,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI;YAC3B,IAAI,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;SACzD;QACD,IAAI,EAAE;YACJ,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI;YACzB,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI;YACzB,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI,IAAI;SACtC;QACD,GAAG,EAAE;YACH,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI;YAC3B,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI;SAC9B;QACD,GAAG,EAAE;YACH,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI;YACrB,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI;YACrB,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI;SACtB;QACD,EAAE,EAAE;YACF,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI;YAC7B,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI;YACzB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI;SAC9B;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAa;IAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAEhC,OAAO,aAAa,CAClB,IAAI,EACJ,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,EACzE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAChC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 日行情数据服务
|
|
3
|
+
*
|
|
4
|
+
* 提供上游职责:
|
|
5
|
+
* 1. 从腾讯财经接口获取历史 K 线数据和实时报价
|
|
6
|
+
* 2. 将获取的数据批量写入 daily_info 表(upsert)
|
|
7
|
+
* 3. 查询已入库的日行情数据
|
|
8
|
+
* 4. 刷新数据入口(单只或全量)
|
|
9
|
+
*
|
|
10
|
+
* 内置请求频率控制:相邻两次 HTTP 调用至少间隔 1200ms。
|
|
11
|
+
*
|
|
12
|
+
* @module services/daily-info
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* 根据股票代码判断所属市场,返回前缀标识。
|
|
16
|
+
*
|
|
17
|
+
* 上海:600/601/603/605/688/900
|
|
18
|
+
* 深圳:000/001/002/300/301/200
|
|
19
|
+
*
|
|
20
|
+
* @param code - 六位股票代码
|
|
21
|
+
* @returns 'sh' 或 'sz'
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* getMarketPrefix('600519') // => 'sh'
|
|
25
|
+
* getMarketPrefix('000001') // => 'sz'
|
|
26
|
+
*/
|
|
27
|
+
export declare function getMarketPrefix(code: string): 'sh' | 'sz';
|
|
28
|
+
/**
|
|
29
|
+
* 行情 K 线数据点接口。
|
|
30
|
+
*/
|
|
31
|
+
export interface OHLCV {
|
|
32
|
+
/** 交易日期,格式 'yyyy-MM-dd' */
|
|
33
|
+
date: string;
|
|
34
|
+
/** 开盘价 */
|
|
35
|
+
open: number;
|
|
36
|
+
/** 最高价 */
|
|
37
|
+
high: number;
|
|
38
|
+
/** 最低价 */
|
|
39
|
+
low: number;
|
|
40
|
+
/** 收盘价 */
|
|
41
|
+
close: number;
|
|
42
|
+
/** 成交量(股数) */
|
|
43
|
+
volume: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 从腾讯财经接口获取最近 60 个交易日的日 K 线数据。
|
|
47
|
+
*
|
|
48
|
+
* 使用的接口:
|
|
49
|
+
* http://web.ifzq.gtimg.cn/appstock/app/fqkline/get?param=${marketCode},day,,,60,qfq
|
|
50
|
+
*
|
|
51
|
+
* 返回数据的 day/qfqday 数组格式为 [date, open, close, high, low, volume]。
|
|
52
|
+
*
|
|
53
|
+
* @param code - 六位股票代码
|
|
54
|
+
* @returns 日 K 线数据数组(按日期升序,最近的在最后)
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* const data = await fetchFromTencent('600519');
|
|
58
|
+
* console.log(data.length); // <= 60
|
|
59
|
+
*/
|
|
60
|
+
export declare function fetchFromTencent(code: string): Promise<OHLCV[]>;
|
|
61
|
+
/**
|
|
62
|
+
* 实时行情数据点接口。
|
|
63
|
+
*/
|
|
64
|
+
export interface RealTimeQuote {
|
|
65
|
+
/** 当前最新价格 */
|
|
66
|
+
price: number;
|
|
67
|
+
/** 股票名称 */
|
|
68
|
+
name: string;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 从腾讯实时行情接口获取当前价格和名称。
|
|
72
|
+
* 使用的接口:
|
|
73
|
+
* https://web.sqt.gtimg.cn/q=sh${code} 或 sz${code}
|
|
74
|
+
*
|
|
75
|
+
* 返回 JSONP 格式文本,解析为股票数据字段数组后提取所需信息。
|
|
76
|
+
*
|
|
77
|
+
* @param code - 六位股票代码
|
|
78
|
+
* @returns 实时行情 { price, name }
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* const { price, name } = await fetchRealTimeQuote('600519');
|
|
82
|
+
* // => { price: 1915.00, name: '贵州茅台' }
|
|
83
|
+
*/
|
|
84
|
+
export declare function fetchRealTimeQuote(code: string): Promise<RealTimeQuote>;
|
|
85
|
+
/**
|
|
86
|
+
* 批量插入或更新日行情数据。
|
|
87
|
+
* 按 (code, date) 唯一约束执行 upsert:
|
|
88
|
+
* - 已存在记录:更新 open/high/low/close/volume
|
|
89
|
+
* - 不存在记录:新增
|
|
90
|
+
*
|
|
91
|
+
* @param records - 行情数据记录数组
|
|
92
|
+
* @returns 成功处理的记录数
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* const n = await upsertDailyInfo([
|
|
96
|
+
* { code: '600519', date: '2024-06-01', open: 1500, high: 1510, low: 1490, close: 1505, volume: 1000000 },
|
|
97
|
+
* ]);
|
|
98
|
+
* // n === 1
|
|
99
|
+
*/
|
|
100
|
+
export declare function upsertDailyInfo(records: {
|
|
101
|
+
code: string;
|
|
102
|
+
date: string;
|
|
103
|
+
open: number;
|
|
104
|
+
high: number;
|
|
105
|
+
low: number;
|
|
106
|
+
close: number;
|
|
107
|
+
volume: number;
|
|
108
|
+
}[]): Promise<number>;
|
|
109
|
+
/**
|
|
110
|
+
* 查询指定股票的日行情数据。
|
|
111
|
+
* 可选的日期范围过滤。
|
|
112
|
+
*
|
|
113
|
+
* @param code - 股票代码
|
|
114
|
+
* @param startDate - 起始日期 'yyyy-MM-dd'(含),不指定则不限制起始
|
|
115
|
+
* @param endDate - 结束日期 'yyyy-MM-dd'(含),不指定则不限制结束
|
|
116
|
+
* @returns 日行情数据数组(按日期升序)
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* // 获取最近 10 天的数据
|
|
120
|
+
* const data = await getDailyInfo('600519', '2024-05-01', '2024-06-01');
|
|
121
|
+
*/
|
|
122
|
+
export declare function getDailyInfo(code: string, startDate?: string, endDate?: string): Promise<{
|
|
123
|
+
date: string;
|
|
124
|
+
id: number;
|
|
125
|
+
code: string;
|
|
126
|
+
open: number;
|
|
127
|
+
high: number;
|
|
128
|
+
low: number;
|
|
129
|
+
close: number;
|
|
130
|
+
volume: number;
|
|
131
|
+
}[]>;
|
|
132
|
+
/**
|
|
133
|
+
* 刷新最新行情数据。
|
|
134
|
+
*
|
|
135
|
+
* - 当指定 code 时:获取该股票的最新实时行情和 K 线数据,更新 stock 表和 daily_info 表。
|
|
136
|
+
* - 当不指定 code 时:遍历数据库中所有股票,逐个刷新。
|
|
137
|
+
*
|
|
138
|
+
* @param code - 可选股票代码。不传则刷新全部
|
|
139
|
+
* @returns 更新的 daily_info 记录总数
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* // 刷新单只
|
|
143
|
+
* const { updated } = await refreshData('600519');
|
|
144
|
+
* // 刷新全部
|
|
145
|
+
* const { updated } = await refreshData();
|
|
146
|
+
*/
|
|
147
|
+
export declare function refreshData(code?: string): Promise<{
|
|
148
|
+
updated: number;
|
|
149
|
+
}>;
|
|
150
|
+
//# sourceMappingURL=daily-info.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daily-info.d.ts","sourceRoot":"","sources":["../../src/services/daily-info.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AA8BH;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAQzD;AAcD;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU;IACV,IAAI,EAAE,MAAM,CAAC;IACb,UAAU;IACV,IAAI,EAAE,MAAM,CAAC;IACb,UAAU;IACV,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU;IACV,KAAK,EAAE,MAAM,CAAC;IACd,cAAc;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAuCrE;AAID;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAgC7E;AAyBD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE;IACP,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,EAAE,GACF,OAAO,CAAC,MAAM,CAAC,CAsBjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM;;;;;;;;;KAmBjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,WAAW,CAC/B,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA4C9B"}
|