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,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 信号检测工具模块
|
|
3
|
+
*
|
|
4
|
+
* 基于技术指标识别买入/卖出信号。
|
|
5
|
+
* 用于在流水线中生成每日分析报告的 signals 字段。
|
|
6
|
+
*
|
|
7
|
+
* @module signals
|
|
8
|
+
*/
|
|
9
|
+
import { calcMA } from './indicators.js';
|
|
10
|
+
// ─── 默认值 ───────────────────────────────────────────────────
|
|
11
|
+
/** 空信号结果(所有信号为 false,量比为 0) */
|
|
12
|
+
const EMPTY_SIGNALS = {
|
|
13
|
+
goldenCross: false,
|
|
14
|
+
deadCross: false,
|
|
15
|
+
overbought: false,
|
|
16
|
+
oversold: false,
|
|
17
|
+
volumeSpike: false,
|
|
18
|
+
volumeRatio: 0,
|
|
19
|
+
};
|
|
20
|
+
// ─── 信号检测 ─────────────────────────────────────────────────
|
|
21
|
+
/**
|
|
22
|
+
* 检测技术信号
|
|
23
|
+
*
|
|
24
|
+
* 综合判断金叉/死叉、超买/超卖、放量等信号。
|
|
25
|
+
*
|
|
26
|
+
* 金叉/死叉判断逻辑:
|
|
27
|
+
* 计算 MA5 和 MA10 完整序列,取最后一个有效值及其前一个值进行比较。
|
|
28
|
+
* 金叉条件:前值 MA5 ≤ MA10 且 现值 MA5 > MA10
|
|
29
|
+
* 死叉条件:前值 MA5 ≥ MA10 且 现值 MA5 < MA10
|
|
30
|
+
*
|
|
31
|
+
* 量比逻辑:
|
|
32
|
+
* 取最后 5 个交易日(不含当日)成交量的平均值作为基准,
|
|
33
|
+
* 量比 = 当日成交量 / 基准均量。
|
|
34
|
+
*
|
|
35
|
+
* @param data - 完整 OHLCV 数组(按日期升序排列)
|
|
36
|
+
* @param latestMA - 当前最新的 MA5 与 MA10 值(由调用方预计算传入)
|
|
37
|
+
* @param latestRSI14 - 当前最新的 RSI14 值(由调用方预计算传入)
|
|
38
|
+
* @returns 信号检测结果
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* const ma5 = calcMA(data, 5);
|
|
43
|
+
* const ma10 = calcMA(data, 10);
|
|
44
|
+
* const rsi14 = calcRSI(data, 14);
|
|
45
|
+
* const signals = detectSignals(
|
|
46
|
+
* data,
|
|
47
|
+
* { ma5: ma5[ma5.length - 1], ma10: ma10[ma10.length - 1] },
|
|
48
|
+
* rsi14[rsi14.length - 1]
|
|
49
|
+
* );
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export function detectSignals(data, latestMA, latestRSI14) {
|
|
53
|
+
if (data.length === 0) {
|
|
54
|
+
return { ...EMPTY_SIGNALS };
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
goldenCross: detectGoldenCross(data),
|
|
58
|
+
deadCross: detectDeadCross(data),
|
|
59
|
+
overbought: latestRSI14 !== null && latestRSI14 > 80,
|
|
60
|
+
oversold: latestRSI14 !== null && latestRSI14 < 20,
|
|
61
|
+
volumeSpike: detectVolumeSpike(data),
|
|
62
|
+
volumeRatio: calcVolumeRatio(data),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
// ─── 内部检测函数 ─────────────────────────────────────────────
|
|
66
|
+
/**
|
|
67
|
+
* 从完整的 MA 序列中定位最后一个有效索引
|
|
68
|
+
*
|
|
69
|
+
* @param ma - 可能含 null 的 MA 数组
|
|
70
|
+
* @returns 最后一个非 null 值的索引,如无有效值返回 -1
|
|
71
|
+
*/
|
|
72
|
+
function lastValidIndex(ma) {
|
|
73
|
+
for (let i = ma.length - 1; i >= 0; i--) {
|
|
74
|
+
if (ma[i] !== null)
|
|
75
|
+
return i;
|
|
76
|
+
}
|
|
77
|
+
return -1;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* 检测金叉:MA5 上穿 MA10
|
|
81
|
+
*
|
|
82
|
+
* 从 data 中重新计算 MA5 和 MA10 序列,
|
|
83
|
+
* 判断最近一个有效位置是否发生上穿。
|
|
84
|
+
*
|
|
85
|
+
* @param data - OHLCV 数组
|
|
86
|
+
* @returns 是否发生金叉
|
|
87
|
+
*/
|
|
88
|
+
function detectGoldenCross(data) {
|
|
89
|
+
const ma5 = calcMA(data, 5);
|
|
90
|
+
const ma10 = calcMA(data, 10);
|
|
91
|
+
const idx = lastValidIndex(ma5);
|
|
92
|
+
if (idx < 1)
|
|
93
|
+
return false;
|
|
94
|
+
if (ma5[idx - 1] === null || ma10[idx - 1] === null || ma10[idx] === null) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
// 金叉:前值 MA5 ≤ MA10,现值 MA5 > MA10
|
|
98
|
+
return ma5[idx - 1] <= ma10[idx - 1] && ma5[idx] > ma10[idx];
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* 检测死叉:MA5 下穿 MA10
|
|
102
|
+
*
|
|
103
|
+
* @param data - OHLCV 数组
|
|
104
|
+
* @returns 是否发生死叉
|
|
105
|
+
*/
|
|
106
|
+
function detectDeadCross(data) {
|
|
107
|
+
const ma5 = calcMA(data, 5);
|
|
108
|
+
const ma10 = calcMA(data, 10);
|
|
109
|
+
const idx = lastValidIndex(ma5);
|
|
110
|
+
if (idx < 1)
|
|
111
|
+
return false;
|
|
112
|
+
if (ma5[idx - 1] === null || ma10[idx - 1] === null || ma10[idx] === null) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
// 死叉:前值 MA5 ≥ MA10,现值 MA5 < MA10
|
|
116
|
+
return ma5[idx - 1] >= ma10[idx - 1] && ma5[idx] < ma10[idx];
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* 检测放量信号
|
|
120
|
+
*
|
|
121
|
+
* 当日成交量 > 前 5 日均量 × 2。
|
|
122
|
+
* 若数据不足 6 个交易日,返回 false。
|
|
123
|
+
*
|
|
124
|
+
* @param data - OHLCV 数组
|
|
125
|
+
* @returns 是否放量
|
|
126
|
+
*/
|
|
127
|
+
function detectVolumeSpike(data) {
|
|
128
|
+
if (data.length < 6)
|
|
129
|
+
return false;
|
|
130
|
+
const currentVolume = data[data.length - 1].volume;
|
|
131
|
+
const avgVolume = averageOfLastN(data, 5, data.length - 1);
|
|
132
|
+
if (avgVolume <= 0)
|
|
133
|
+
return false;
|
|
134
|
+
return currentVolume > avgVolume * 2;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* 计算量比
|
|
138
|
+
*
|
|
139
|
+
* 量比 = 当日成交量 / 前 5 日均量。
|
|
140
|
+
* 若数据不足 6 个交易日或均量为 0,返回 0。
|
|
141
|
+
*
|
|
142
|
+
* @param data - OHLCV 数组
|
|
143
|
+
* @returns 量比值
|
|
144
|
+
*/
|
|
145
|
+
function calcVolumeRatio(data) {
|
|
146
|
+
if (data.length < 6)
|
|
147
|
+
return 0;
|
|
148
|
+
const currentVolume = data[data.length - 1].volume;
|
|
149
|
+
const avgVolume = averageOfLastN(data, 5, data.length - 1);
|
|
150
|
+
if (avgVolume <= 0)
|
|
151
|
+
return 0;
|
|
152
|
+
return currentVolume / avgVolume;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* 计算最近 N 个交易日的成交量平均值(排除指定索引)
|
|
156
|
+
*
|
|
157
|
+
* @param data - OHLCV 数组
|
|
158
|
+
* @param count - 取多少天
|
|
159
|
+
* @param excludeIndex - 要排除的索引(通常是当天)
|
|
160
|
+
* @returns 平均成交量
|
|
161
|
+
*/
|
|
162
|
+
function averageOfLastN(data, count, excludeIndex) {
|
|
163
|
+
let sum = 0;
|
|
164
|
+
let actualCount = 0;
|
|
165
|
+
for (let i = excludeIndex - 1; i >= 0 && actualCount < count; i--) {
|
|
166
|
+
sum += data[i].volume;
|
|
167
|
+
actualCount++;
|
|
168
|
+
}
|
|
169
|
+
return actualCount > 0 ? sum / actualCount : 0;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=signals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signals.js","sourceRoot":"","sources":["../../src/utils/signals.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAc,MAAM,iBAAiB,CAAC;AAyBrD,8DAA8D;AAE9D,+BAA+B;AAC/B,MAAM,aAAa,GAAY;IAC7B,WAAW,EAAE,KAAK;IAClB,SAAS,EAAE,KAAK;IAChB,UAAU,EAAE,KAAK;IACjB,QAAQ,EAAE,KAAK;IACf,WAAW,EAAE,KAAK;IAClB,WAAW,EAAE,CAAC;CACf,CAAC;AAEF,6DAA6D;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAa,EACb,QAAqD,EACrD,WAA0B;IAE1B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;IAC9B,CAAC;IAED,OAAO;QACL,WAAW,EAAE,iBAAiB,CAAC,IAAI,CAAC;QACpC,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC;QAChC,UAAU,EAAE,WAAW,KAAK,IAAI,IAAI,WAAW,GAAG,EAAE;QACpD,QAAQ,EAAE,WAAW,KAAK,IAAI,IAAI,WAAW,GAAG,EAAE;QAClD,WAAW,EAAE,iBAAiB,CAAC,IAAI,CAAC;QACpC,WAAW,EAAE,eAAe,CAAC,IAAI,CAAC;KACnC,CAAC;AACJ,CAAC;AAED,2DAA2D;AAE3D;;;;;GAKG;AACH,SAAS,cAAc,CAAC,EAAqB;IAC3C,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,OAAO,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,iBAAiB,CAAC,IAAa;IACtC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAE9B,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1B,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;QAC1E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,iCAAiC;IACjC,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC,CAAE,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAE,IAAI,GAAG,CAAC,GAAG,CAAE,GAAG,IAAI,CAAC,GAAG,CAAE,CAAC;AACnE,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CAAC,IAAa;IACpC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAE9B,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1B,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;QAC1E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,iCAAiC;IACjC,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC,CAAE,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAE,IAAI,GAAG,CAAC,GAAG,CAAE,GAAG,IAAI,CAAC,GAAG,CAAE,CAAC;AACnE,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,iBAAiB,CAAC,IAAa;IACtC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAElC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;IACnD,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE3D,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAEjC,OAAO,aAAa,GAAG,SAAS,GAAG,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,eAAe,CAAC,IAAa;IACpC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAE9B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;IACnD,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE3D,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAE7B,OAAO,aAAa,GAAG,SAAS,CAAC;AACnC,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,cAAc,CAAC,IAAa,EAAE,KAAa,EAAE,YAAoB;IACxE,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,KAAK,IAAI,CAAC,GAAG,YAAY,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,WAAW,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAClE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACtB,WAAW,EAAE,CAAC;IAChB,CAAC;IAED,OAAO,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
CREATE TABLE `analysis_roler` (
|
|
2
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
3
|
+
`code` text NOT NULL,
|
|
4
|
+
`date` text NOT NULL,
|
|
5
|
+
`role` text NOT NULL,
|
|
6
|
+
`responsibility` text DEFAULT '' NOT NULL,
|
|
7
|
+
`report` text DEFAULT '' NOT NULL,
|
|
8
|
+
`round` integer DEFAULT 1 NOT NULL,
|
|
9
|
+
`word_count` integer DEFAULT 0 NOT NULL,
|
|
10
|
+
`created_at` text DEFAULT (datetime('now')) NOT NULL,
|
|
11
|
+
FOREIGN KEY (`code`) REFERENCES `stock`(`code`) ON UPDATE no action ON DELETE no action
|
|
12
|
+
);
|
|
13
|
+
--> statement-breakpoint
|
|
14
|
+
CREATE TABLE `config` (
|
|
15
|
+
`key` text PRIMARY KEY NOT NULL,
|
|
16
|
+
`value` text DEFAULT '' NOT NULL,
|
|
17
|
+
`updated_at` text DEFAULT (datetime('now')) NOT NULL
|
|
18
|
+
);
|
|
19
|
+
--> statement-breakpoint
|
|
20
|
+
CREATE TABLE `daily_analysis_report` (
|
|
21
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
22
|
+
`code` text NOT NULL,
|
|
23
|
+
`date` text NOT NULL,
|
|
24
|
+
`summary` text DEFAULT '' NOT NULL,
|
|
25
|
+
`indicators` text DEFAULT '{}' NOT NULL,
|
|
26
|
+
`signals` text DEFAULT '{}' NOT NULL,
|
|
27
|
+
`created_at` text DEFAULT (datetime('now')) NOT NULL,
|
|
28
|
+
FOREIGN KEY (`code`) REFERENCES `stock`(`code`) ON UPDATE no action ON DELETE no action
|
|
29
|
+
);
|
|
30
|
+
--> statement-breakpoint
|
|
31
|
+
CREATE TABLE `daily_info` (
|
|
32
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
33
|
+
`code` text NOT NULL,
|
|
34
|
+
`date` text NOT NULL,
|
|
35
|
+
`open` real NOT NULL,
|
|
36
|
+
`high` real NOT NULL,
|
|
37
|
+
`low` real NOT NULL,
|
|
38
|
+
`close` real NOT NULL,
|
|
39
|
+
`volume` integer NOT NULL,
|
|
40
|
+
FOREIGN KEY (`code`) REFERENCES `stock`(`code`) ON UPDATE no action ON DELETE no action
|
|
41
|
+
);
|
|
42
|
+
--> statement-breakpoint
|
|
43
|
+
CREATE TABLE `final_report` (
|
|
44
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
45
|
+
`code` text NOT NULL,
|
|
46
|
+
`date` text NOT NULL,
|
|
47
|
+
`summary` text DEFAULT '' NOT NULL,
|
|
48
|
+
`full_report` text DEFAULT '' NOT NULL,
|
|
49
|
+
`role_summary` text DEFAULT '[]' NOT NULL,
|
|
50
|
+
`pipeline_id` text DEFAULT '' NOT NULL,
|
|
51
|
+
`created_at` text DEFAULT (datetime('now')) NOT NULL,
|
|
52
|
+
FOREIGN KEY (`code`) REFERENCES `stock`(`code`) ON UPDATE no action ON DELETE no action
|
|
53
|
+
);
|
|
54
|
+
--> statement-breakpoint
|
|
55
|
+
CREATE TABLE `pool` (
|
|
56
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
57
|
+
`name` text NOT NULL,
|
|
58
|
+
`desc` text DEFAULT '' NOT NULL,
|
|
59
|
+
`pool_analysis` text DEFAULT '' NOT NULL,
|
|
60
|
+
`pool_signal` integer DEFAULT 0 NOT NULL,
|
|
61
|
+
`created_at` text DEFAULT (datetime('now')) NOT NULL,
|
|
62
|
+
`updated_at` text DEFAULT (datetime('now')) NOT NULL
|
|
63
|
+
);
|
|
64
|
+
--> statement-breakpoint
|
|
65
|
+
CREATE TABLE `pool_stock` (
|
|
66
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
67
|
+
`pool_id` integer NOT NULL,
|
|
68
|
+
`stock_code` text NOT NULL,
|
|
69
|
+
`added_at` text DEFAULT (datetime('now')) NOT NULL,
|
|
70
|
+
FOREIGN KEY (`pool_id`) REFERENCES `pool`(`id`) ON UPDATE no action ON DELETE no action,
|
|
71
|
+
FOREIGN KEY (`stock_code`) REFERENCES `stock`(`code`) ON UPDATE no action ON DELETE no action
|
|
72
|
+
);
|
|
73
|
+
--> statement-breakpoint
|
|
74
|
+
CREATE TABLE `sentiment_report` (
|
|
75
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
76
|
+
`code` text NOT NULL,
|
|
77
|
+
`date` text NOT NULL,
|
|
78
|
+
`report` text DEFAULT '' NOT NULL,
|
|
79
|
+
`sources` text DEFAULT '[]' NOT NULL,
|
|
80
|
+
`created_at` text DEFAULT (datetime('now')) NOT NULL,
|
|
81
|
+
FOREIGN KEY (`code`) REFERENCES `stock`(`code`) ON UPDATE no action ON DELETE no action
|
|
82
|
+
);
|
|
83
|
+
--> statement-breakpoint
|
|
84
|
+
CREATE TABLE `stock` (
|
|
85
|
+
`code` text PRIMARY KEY NOT NULL,
|
|
86
|
+
`name` text NOT NULL,
|
|
87
|
+
`current_price` real DEFAULT 0 NOT NULL,
|
|
88
|
+
`updated_at` text DEFAULT (datetime('now')) NOT NULL
|
|
89
|
+
);
|
|
90
|
+
--> statement-breakpoint
|
|
91
|
+
CREATE TABLE `vec_embedding` (
|
|
92
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
93
|
+
`content_type` text NOT NULL,
|
|
94
|
+
`content_code` text NOT NULL,
|
|
95
|
+
`content_date` text NOT NULL,
|
|
96
|
+
`content_text` text NOT NULL,
|
|
97
|
+
`embedding` blob,
|
|
98
|
+
`created_at` text DEFAULT (datetime('now')) NOT NULL
|
|
99
|
+
);
|
|
100
|
+
--> statement-breakpoint
|
|
101
|
+
CREATE INDEX `idx_ar_code_date` ON `analysis_roler` (`code`,`date`);--> statement-breakpoint
|
|
102
|
+
CREATE INDEX `idx_ar_role` ON `analysis_roler` (`role`);--> statement-breakpoint
|
|
103
|
+
CREATE UNIQUE INDEX `idx_dar_unique` ON `daily_analysis_report` (`code`,`date`);--> statement-breakpoint
|
|
104
|
+
CREATE INDEX `idx_dar_code` ON `daily_analysis_report` (`code`);--> statement-breakpoint
|
|
105
|
+
CREATE INDEX `idx_dar_date` ON `daily_analysis_report` (`date`);--> statement-breakpoint
|
|
106
|
+
CREATE UNIQUE INDEX `idx_daily_info_unique` ON `daily_info` (`code`,`date`);--> statement-breakpoint
|
|
107
|
+
CREATE INDEX `idx_daily_info_code` ON `daily_info` (`code`);--> statement-breakpoint
|
|
108
|
+
CREATE INDEX `idx_daily_info_date` ON `daily_info` (`date`);--> statement-breakpoint
|
|
109
|
+
CREATE UNIQUE INDEX `idx_fr_unique` ON `final_report` (`code`,`date`);--> statement-breakpoint
|
|
110
|
+
CREATE INDEX `idx_fr_code` ON `final_report` (`code`);--> statement-breakpoint
|
|
111
|
+
CREATE INDEX `idx_fr_date` ON `final_report` (`date`);--> statement-breakpoint
|
|
112
|
+
CREATE UNIQUE INDEX `pool_name_unique` ON `pool` (`name`);--> statement-breakpoint
|
|
113
|
+
CREATE INDEX `idx_pool_name` ON `pool` (`name`);--> statement-breakpoint
|
|
114
|
+
CREATE INDEX `idx_pool_signal` ON `pool` (`pool_signal`);--> statement-breakpoint
|
|
115
|
+
CREATE UNIQUE INDEX `idx_pool_stock_unique` ON `pool_stock` (`pool_id`,`stock_code`);--> statement-breakpoint
|
|
116
|
+
CREATE INDEX `idx_pool_stock_pool` ON `pool_stock` (`pool_id`);--> statement-breakpoint
|
|
117
|
+
CREATE INDEX `idx_pool_stock_stock` ON `pool_stock` (`stock_code`);--> statement-breakpoint
|
|
118
|
+
CREATE UNIQUE INDEX `idx_sr_unique` ON `sentiment_report` (`code`,`date`);--> statement-breakpoint
|
|
119
|
+
CREATE INDEX `idx_sr_code` ON `sentiment_report` (`code`);--> statement-breakpoint
|
|
120
|
+
CREATE INDEX `idx_sr_date` ON `sentiment_report` (`date`);--> statement-breakpoint
|
|
121
|
+
CREATE INDEX `idx_stock_name` ON `stock` (`name`);--> statement-breakpoint
|
|
122
|
+
CREATE INDEX `idx_ve_type` ON `vec_embedding` (`content_type`);--> statement-breakpoint
|
|
123
|
+
CREATE INDEX `idx_ve_code` ON `vec_embedding` (`content_code`);--> statement-breakpoint
|
|
124
|
+
CREATE INDEX `idx_ve_type_code_date` ON `vec_embedding` (`content_type`,`content_code`,`content_date`);
|