@stvy/fund-indicators 1.0.0 → 1.0.2

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.
Files changed (52) hide show
  1. package/.github/workflows/publish.yml +79 -0
  2. package/AGENTS.md +322 -0
  3. package/dist/index.cjs +1615 -0
  4. package/dist/index.d.cts +779 -0
  5. package/dist/index.d.cts.map +1 -0
  6. package/dist/index.mjs +1518 -0
  7. package/package.json +10 -29
  8. package/pnpm-workspace.yaml +2 -0
  9. package/src/dca.ts +420 -0
  10. package/src/index.ts +133 -0
  11. package/src/jstat.d.ts +17 -0
  12. package/src/pattern.ts +447 -0
  13. package/src/risk.ts +516 -0
  14. package/src/statistics.ts +428 -0
  15. package/src/technical.ts +738 -0
  16. package/src/types.ts +369 -0
  17. package/test/index.test.ts +355 -0
  18. package/tsconfig.json +20 -0
  19. package/dist/browser/fund-indicators.esm.js +0 -7505
  20. package/dist/browser/fund-indicators.esm.min.js +0 -8
  21. package/dist/browser/fund-indicators.esm.min.js.map +0 -7
  22. package/dist/browser/fund-indicators.js +0 -7517
  23. package/dist/browser/fund-indicators.min.js +0 -8
  24. package/dist/browser/fund-indicators.min.js.map +0 -7
  25. package/dist/dca.d.ts +0 -91
  26. package/dist/dca.d.ts.map +0 -1
  27. package/dist/dca.js +0 -354
  28. package/dist/dca.js.map +0 -1
  29. package/dist/index.d.ts +0 -18
  30. package/dist/index.d.ts.map +0 -1
  31. package/dist/index.js +0 -141
  32. package/dist/index.js.map +0 -1
  33. package/dist/pattern.d.ts +0 -60
  34. package/dist/pattern.d.ts.map +0 -1
  35. package/dist/pattern.js +0 -386
  36. package/dist/pattern.js.map +0 -1
  37. package/dist/risk.d.ts +0 -115
  38. package/dist/risk.d.ts.map +0 -1
  39. package/dist/risk.js +0 -502
  40. package/dist/risk.js.map +0 -1
  41. package/dist/statistics.d.ts +0 -78
  42. package/dist/statistics.d.ts.map +0 -1
  43. package/dist/statistics.js +0 -402
  44. package/dist/statistics.js.map +0 -1
  45. package/dist/technical.d.ts +0 -105
  46. package/dist/technical.d.ts.map +0 -1
  47. package/dist/technical.js +0 -633
  48. package/dist/technical.js.map +0 -1
  49. package/dist/types.d.ts +0 -327
  50. package/dist/types.d.ts.map +0 -1
  51. package/dist/types.js +0 -7
  52. package/dist/types.js.map +0 -1
package/dist/technical.js DELETED
@@ -1,633 +0,0 @@
1
- "use strict";
2
- /**
3
- * 技术指标模块 - 趋势、动量、震荡、通道类指标
4
- * 基于 technicalindicators 库,所有函数接收净值序列作为输入
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.massIndex = exports.detectMAAlignment = exports.detectCrossSignal = exports.navPercentile = exports.bias = exports.dpo = exports.trix = exports.sar = exports.stochasticRSI = exports.williamsR = exports.momentum = exports.roc = exports.cci = exports.atr = exports.adx = exports.keltnerChannel = exports.donchianChannel = exports.bollingerBands = exports.kdj = exports.rsi = exports.macd = exports.kama = exports.tema = exports.dema = exports.wma = exports.ema = exports.sma = void 0;
8
- const technicalindicators_1 = require("technicalindicators");
9
- // ============================================================
10
- // 辅助函数
11
- // ============================================================
12
- /** 将净值序列转为 high/low/close 格式(基金净值没有日内高低,三者相同) */
13
- function navToHLC(nav) {
14
- return nav.map((v) => ({ high: v, low: v, close: v }));
15
- }
16
- /** 对齐数组长度:前补 null 使其与输入等长 */
17
- function padLeft(arr, totalLen) {
18
- const padLen = totalLen - arr.length;
19
- const result = new Array(padLen).fill(null);
20
- for (const v of arr) {
21
- result.push(v ?? null);
22
- }
23
- return result;
24
- }
25
- /** 安全取数组最后一个非 null 值 */
26
- function lastNonNull(arr) {
27
- for (let i = arr.length - 1; i >= 0; i--) {
28
- if (arr[i] != null)
29
- return arr[i];
30
- }
31
- return null;
32
- }
33
- // ============================================================
34
- // 移动均线
35
- // ============================================================
36
- /** 简单移动平均线 (SMA) */
37
- function sma(nav, period) {
38
- const raw = technicalindicators_1.SMA.calculate({ values: nav, period });
39
- const values = padLeft(raw, nav.length);
40
- return { values, current: lastNonNull(values), period, type: 'SMA' };
41
- }
42
- exports.sma = sma;
43
- /** 指数移动平均线 (EMA) */
44
- function ema(nav, period) {
45
- const raw = technicalindicators_1.EMA.calculate({ values: nav, period });
46
- const values = padLeft(raw, nav.length);
47
- return { values, current: lastNonNull(values), period, type: 'EMA' };
48
- }
49
- exports.ema = ema;
50
- /** 加权移动平均线 (WMA) */
51
- function wma(nav, period) {
52
- const raw = technicalindicators_1.WMA.calculate({ values: nav, period });
53
- const values = padLeft(raw, nav.length);
54
- return { values, current: lastNonNull(values), period, type: 'WMA' };
55
- }
56
- exports.wma = wma;
57
- /** 双重指数移动平均线 (DEMA) */
58
- function dema(nav, period) {
59
- // DEMA = 2*EMA - EMA(EMA)
60
- const ema1 = technicalindicators_1.EMA.calculate({ values: nav, period });
61
- const ema1Padded = padLeft(ema1, nav.length);
62
- // 取非null部分做第二次EMA
63
- const ema1Values = ema1.filter((v) => v !== undefined);
64
- const ema2 = technicalindicators_1.EMA.calculate({ values: ema1Values, period });
65
- const values = new Array(nav.length).fill(null);
66
- const offset = nav.length - ema1Values.length;
67
- for (let i = 0; i < ema2.length; i++) {
68
- const idx = offset + i;
69
- if (idx < nav.length && ema2[i] != null && ema1Padded[idx] != null) {
70
- values[idx] = 2 * ema1Padded[idx] - ema2[i];
71
- }
72
- }
73
- return { values, current: lastNonNull(values), period, type: 'DEMA' };
74
- }
75
- exports.dema = dema;
76
- /** 三重指数移动平均线 (TEMA) */
77
- function tema(nav, period) {
78
- const ema1Raw = technicalindicators_1.EMA.calculate({ values: nav, period });
79
- const ema1Vals = ema1Raw.filter((v) => v !== undefined);
80
- const ema2Raw = technicalindicators_1.EMA.calculate({ values: ema1Vals, period });
81
- const ema2Vals = ema2Raw.filter((v) => v !== undefined);
82
- const ema3Raw = technicalindicators_1.EMA.calculate({ values: ema2Vals, period });
83
- // 将三层 EMA 全部填充到与 nav 等长
84
- const ema1Padded = padLeft(ema1Raw, nav.length);
85
- // ema2 的起始位置相对 ema1 又偏移了一截
86
- const offset2 = nav.length - ema1Vals.length;
87
- const ema2Full = new Array(nav.length).fill(null);
88
- for (let i = 0; i < ema2Raw.length; i++) {
89
- const idx = offset2 + i;
90
- if (idx < nav.length)
91
- ema2Full[idx] = ema2Raw[i] ?? null;
92
- }
93
- // ema3 的起始位置相对 ema2 又偏移了一截
94
- const offset3 = offset2 + (ema1Vals.length - ema2Vals.length);
95
- const ema3Full = new Array(nav.length).fill(null);
96
- for (let i = 0; i < ema3Raw.length; i++) {
97
- const idx = offset3 + i;
98
- if (idx < nav.length)
99
- ema3Full[idx] = ema3Raw[i] ?? null;
100
- }
101
- // TEMA = 3*EMA1 - 3*EMA2 + EMA3
102
- const values = new Array(nav.length).fill(null);
103
- for (let i = 0; i < nav.length; i++) {
104
- const v1 = ema1Padded[i];
105
- const v2 = ema2Full[i];
106
- const v3 = ema3Full[i];
107
- if (v1 != null && v2 != null && v3 != null) {
108
- values[i] = 3 * v1 - 3 * v2 + v3;
109
- }
110
- }
111
- return { values, current: lastNonNull(values), period, type: 'TEMA' };
112
- }
113
- exports.tema = tema;
114
- /** 考夫曼自适应均线 (KAMA) - 手动实现 */
115
- function kama(nav, period = 10, fast = 2, slow = 30) {
116
- const fastSC = 2 / (fast + 1);
117
- const slowSC = 2 / (slow + 1);
118
- const values = new Array(nav.length).fill(null);
119
- if (nav.length <= period)
120
- return { values, current: null, period, type: 'KAMA' };
121
- values[period] = nav[period];
122
- for (let i = period + 1; i < nav.length; i++) {
123
- // direction: 当前值与period前的值的绝对差
124
- const direction = Math.abs(nav[i] - nav[i - period]);
125
- // volatility: period内相邻差值绝对值之和
126
- let volatility = 0;
127
- for (let j = i - period + 1; j <= i; j++) {
128
- volatility += Math.abs(nav[j] - nav[j - 1]);
129
- }
130
- // efficiency ratio
131
- const er = volatility === 0 ? 0 : direction / volatility;
132
- // smoothing constant
133
- const sc = Math.pow(er * (fastSC - slowSC) + slowSC, 2);
134
- // KAMA
135
- const prevKama = values[i - 1];
136
- values[i] = prevKama + sc * (nav[i] - prevKama);
137
- }
138
- return { values, current: lastNonNull(values), period, type: 'KAMA' };
139
- }
140
- exports.kama = kama;
141
- // ============================================================
142
- // MACD
143
- // ============================================================
144
- /**
145
- * MACD 指标(DIF / DEA / 柱状线)
146
- * @param nav 净值序列
147
- * @param fastPeriod 快线周期(默认12)
148
- * @param slowPeriod 慢线周期(默认26)
149
- * @param signalPeriod 信号线周期(默认9)
150
- */
151
- function macd(nav, fastPeriod = 12, slowPeriod = 26, signalPeriod = 9) {
152
- const raw = technicalindicators_1.MACD.calculate({
153
- values: nav,
154
- fastPeriod,
155
- slowPeriod,
156
- signalPeriod,
157
- SimpleMAOscillator: false,
158
- SimpleMASignal: false,
159
- });
160
- const dif = padLeft(raw.map((r) => r.MACD), nav.length);
161
- const dea = padLeft(raw.map((r) => r.signal), nav.length);
162
- const histogram = padLeft(raw.map((r) => r.histogram), nav.length);
163
- return {
164
- dif,
165
- dea,
166
- histogram,
167
- currentDIF: lastNonNull(dif),
168
- currentDEA: lastNonNull(dea),
169
- currentHistogram: lastNonNull(histogram),
170
- };
171
- }
172
- exports.macd = macd;
173
- // ============================================================
174
- // RSI
175
- // ============================================================
176
- /** RSI(相对强弱指标) */
177
- function rsi(nav, period = 14) {
178
- const raw = technicalindicators_1.RSI.calculate({ values: nav, period });
179
- const values = padLeft(raw, nav.length);
180
- return { values, current: lastNonNull(values), period };
181
- }
182
- exports.rsi = rsi;
183
- // ============================================================
184
- // KDJ(随机指标,含 J 值)
185
- // ============================================================
186
- /**
187
- * KDJ 指标
188
- * @param nav 净值序列
189
- * @param kPeriod K 周期(默认9)
190
- * @param kSmooth K 平滑因子(默认3)
191
- * @param dPeriod D 周期(默认3)
192
- */
193
- function kdj(nav, kPeriod = 9, kSmooth = 3, dPeriod = 3) {
194
- const hlc = navToHLC(nav);
195
- const raw = technicalindicators_1.Stochastic.calculate({
196
- high: hlc.map((h) => h.high),
197
- low: hlc.map((h) => h.low),
198
- close: hlc.map((h) => h.close),
199
- period: kPeriod,
200
- signalPeriod: dPeriod,
201
- });
202
- const kArr = padLeft(raw.map((r) => r.k), nav.length);
203
- const dArr = padLeft(raw.map((r) => r.d), nav.length);
204
- // J = 3K - 2D
205
- const jArr = kArr.map((kVal, i) => {
206
- const dVal = dArr[i];
207
- if (kVal != null && dVal != null)
208
- return 3 * kVal - 2 * dVal;
209
- return null;
210
- });
211
- return {
212
- k: kArr,
213
- d: dArr,
214
- j: jArr,
215
- currentK: lastNonNull(kArr),
216
- currentD: lastNonNull(dArr),
217
- currentJ: lastNonNull(jArr),
218
- };
219
- }
220
- exports.kdj = kdj;
221
- // ============================================================
222
- // 布林带
223
- // ============================================================
224
- /**
225
- * 布林带 (Bollinger Bands)
226
- * @param nav 净值序列
227
- * @param period 均线周期(默认20)
228
- * @param stdDev 标准差倍数(默认2)
229
- */
230
- function bollingerBands(nav, period = 20, stdDev = 2) {
231
- const raw = technicalindicators_1.BollingerBands.calculate({ values: nav, period, stdDev });
232
- const middle = padLeft(raw.map((r) => r.middle), nav.length);
233
- const upper = padLeft(raw.map((r) => r.upper), nav.length);
234
- const lower = padLeft(raw.map((r) => r.lower), nav.length);
235
- // 计算带宽和 %B
236
- const bandwidth = [];
237
- const percentB = [];
238
- for (let i = 0; i < nav.length; i++) {
239
- const m = middle[i];
240
- const u = upper[i];
241
- const l = lower[i];
242
- if (m != null && u != null && l != null) {
243
- bandwidth.push((u - l) / m);
244
- percentB.push(u === l ? 0.5 : (nav[i] - l) / (u - l));
245
- }
246
- else {
247
- bandwidth.push(null);
248
- percentB.push(null);
249
- }
250
- }
251
- return { middle, upper, lower, bandwidth, percentB };
252
- }
253
- exports.bollingerBands = bollingerBands;
254
- // ============================================================
255
- // 唐奇安通道 (Donchian Channel)
256
- // ============================================================
257
- /**
258
- * 唐奇安通道
259
- * @param nav 净值序列
260
- * @param period 回看周期(默认20)
261
- */
262
- function donchianChannel(nav, period = 20) {
263
- const upper = [];
264
- const lower = [];
265
- const middle = [];
266
- for (let i = 0; i < nav.length; i++) {
267
- if (i < period - 1) {
268
- upper.push(null);
269
- lower.push(null);
270
- middle.push(null);
271
- continue;
272
- }
273
- const slice = nav.slice(i - period + 1, i + 1);
274
- const high = Math.max(...slice);
275
- const low = Math.min(...slice);
276
- upper.push(high);
277
- lower.push(low);
278
- middle.push((high + low) / 2);
279
- }
280
- return { upper, lower, middle };
281
- }
282
- exports.donchianChannel = donchianChannel;
283
- // ============================================================
284
- // 肯特纳通道 (Keltner Channel)
285
- // ============================================================
286
- /**
287
- * 肯特纳通道
288
- * @param nav 净值序列
289
- * @param emaPeriod EMA 周期(默认20)
290
- * @param atrPeriod ATR 周期(默认10)
291
- * @param multiplier ATR 倍数(默认2)
292
- */
293
- function keltnerChannel(nav, emaPeriod = 20, atrPeriod = 10, multiplier = 2) {
294
- const emaResult = ema(nav, emaPeriod);
295
- const atrResult = atr(nav, atrPeriod);
296
- const upper = [];
297
- const lower = [];
298
- for (let i = 0; i < nav.length; i++) {
299
- const e = emaResult.values[i];
300
- const a = atrResult.values[i];
301
- if (e != null && a != null) {
302
- upper.push(e + multiplier * a);
303
- lower.push(e - multiplier * a);
304
- }
305
- else {
306
- upper.push(null);
307
- lower.push(null);
308
- }
309
- }
310
- return { upper, lower, middle: emaResult.values };
311
- }
312
- exports.keltnerChannel = keltnerChannel;
313
- // ============================================================
314
- // ADX(平均趋向指标)
315
- // ============================================================
316
- /** ADX + DI */
317
- function adx(nav, period = 14) {
318
- const hlc = navToHLC(nav);
319
- const raw = technicalindicators_1.ADX.calculate({
320
- high: hlc.map((h) => h.high),
321
- low: hlc.map((h) => h.low),
322
- close: hlc.map((h) => h.close),
323
- period,
324
- });
325
- const adxArr = padLeft(raw.map((r) => r.adx), nav.length);
326
- const plusDI = padLeft(raw.map((r) => r.pdi), nav.length);
327
- const minusDI = padLeft(raw.map((r) => r.mdi), nav.length);
328
- return {
329
- adx: adxArr,
330
- plusDI,
331
- minusDI,
332
- currentADX: lastNonNull(adxArr),
333
- };
334
- }
335
- exports.adx = adx;
336
- // ============================================================
337
- // ATR(平均真实波幅 - 基于净值近似)
338
- // ============================================================
339
- /** ATR 近似值(基金净值无日内高低,用日涨跌幅绝对值近似) */
340
- function atr(nav, period = 14) {
341
- const hlc = navToHLC(nav);
342
- const raw = technicalindicators_1.ATR.calculate({
343
- high: hlc.map((h) => h.high),
344
- low: hlc.map((h) => h.low),
345
- close: hlc.map((h) => h.close),
346
- period,
347
- });
348
- // 由于净值无日内波动,ATR 退化为 EMA(|ΔP|)
349
- // 这里直接用技术库输出
350
- const values = padLeft(raw, nav.length);
351
- return { values, current: lastNonNull(values), period, type: 'SMA' };
352
- }
353
- exports.atr = atr;
354
- // ============================================================
355
- // CCI(商品通道指数)
356
- // ============================================================
357
- /** CCI */
358
- function cci(nav, period = 20) {
359
- const hlc = navToHLC(nav);
360
- const raw = technicalindicators_1.CCI.calculate({
361
- high: hlc.map((h) => h.high),
362
- low: hlc.map((h) => h.low),
363
- close: hlc.map((h) => h.close),
364
- period,
365
- });
366
- const values = padLeft(raw, nav.length);
367
- return { values, current: lastNonNull(values), period, type: 'SMA' };
368
- }
369
- exports.cci = cci;
370
- // ============================================================
371
- // ROC(变动率)
372
- // ============================================================
373
- /** ROC */
374
- function roc(nav, period = 12) {
375
- const raw = technicalindicators_1.ROC.calculate({ values: nav, period });
376
- const values = padLeft(raw, nav.length);
377
- return { values, current: lastNonNull(values), period, type: 'SMA' };
378
- }
379
- exports.roc = roc;
380
- // ============================================================
381
- // 动量指标 (Momentum)
382
- // ============================================================
383
- /** 动量指标 = 当前净值 - N日前净值 */
384
- function momentum(nav, period = 10) {
385
- const values = [];
386
- for (let i = 0; i < nav.length; i++) {
387
- if (i < period) {
388
- values.push(null);
389
- }
390
- else {
391
- values.push(nav[i] - nav[i - period]);
392
- }
393
- }
394
- return { values, current: lastNonNull(values), period, type: 'SMA' };
395
- }
396
- exports.momentum = momentum;
397
- // ============================================================
398
- // Williams %R(威廉指标)
399
- // ============================================================
400
- /** Williams %R */
401
- function williamsR(nav, period = 14) {
402
- const hlc = navToHLC(nav);
403
- const raw = technicalindicators_1.WilliamsR.calculate({
404
- high: hlc.map((h) => h.high),
405
- low: hlc.map((h) => h.low),
406
- close: hlc.map((h) => h.close),
407
- period,
408
- });
409
- const values = padLeft(raw, nav.length);
410
- return { values, current: lastNonNull(values), period, type: 'SMA' };
411
- }
412
- exports.williamsR = williamsR;
413
- // ============================================================
414
- // Stochastic RSI
415
- // ============================================================
416
- /** 随机 RSI */
417
- function stochasticRSI(nav, rsiPeriod = 14, stochPeriod = 14, kPeriod = 3, dPeriod = 3) {
418
- const raw = technicalindicators_1.StochasticRSI.calculate({
419
- values: nav,
420
- rsiPeriod,
421
- stochasticPeriod: stochPeriod,
422
- kPeriod,
423
- dPeriod,
424
- });
425
- const k = padLeft(raw.map((r) => r.k), nav.length);
426
- const d = padLeft(raw.map((r) => r.d), nav.length);
427
- const j = k.map((kVal, i) => {
428
- const dVal = d[i];
429
- return kVal != null && dVal != null ? 3 * kVal - 2 * dVal : null;
430
- });
431
- return { k, d, j, currentK: lastNonNull(k), currentD: lastNonNull(d), currentJ: lastNonNull(j) };
432
- }
433
- exports.stochasticRSI = stochasticRSI;
434
- // ============================================================
435
- // SAR(抛物线转向)
436
- // ============================================================
437
- /**
438
- * SAR 抛物线转向
439
- * @param nav 净值序列
440
- * @param step 加速因子步长(默认0.02)
441
- * @param max 最大加速因子(默认0.2)
442
- */
443
- function sar(nav, step = 0.02, max = 0.2) {
444
- const hlc = navToHLC(nav);
445
- const raw = technicalindicators_1.PSAR.calculate({
446
- high: hlc.map((h) => h.high),
447
- low: hlc.map((h) => h.low),
448
- step,
449
- max,
450
- });
451
- const values = padLeft(raw, nav.length);
452
- return { values, current: lastNonNull(values) };
453
- }
454
- exports.sar = sar;
455
- // ============================================================
456
- // TRIX(三重平滑指数)
457
- // ============================================================
458
- /** TRIX = 三重 EMA 的变化率 */
459
- function trix(nav, period = 12) {
460
- const ema1 = technicalindicators_1.EMA.calculate({ values: nav, period });
461
- const ema1Vals = ema1.filter((v) => v !== undefined);
462
- const ema2 = technicalindicators_1.EMA.calculate({ values: ema1Vals, period });
463
- const ema2Vals = ema2.filter((v) => v !== undefined);
464
- const ema3 = technicalindicators_1.EMA.calculate({ values: ema2Vals, period });
465
- const values = new Array(nav.length).fill(null);
466
- const offset = nav.length - ema3.length;
467
- for (let i = 1; i < ema3.length; i++) {
468
- const prev = ema3[i - 1];
469
- const curr = ema3[i];
470
- if (prev != null && curr != null && prev !== 0) {
471
- values[offset + i] = ((curr - prev) / prev) * 100;
472
- }
473
- }
474
- return { values, current: lastNonNull(values), period, type: 'SMA' };
475
- }
476
- exports.trix = trix;
477
- // ============================================================
478
- // DPO(去趋势价格震荡器)
479
- // ============================================================
480
- /** DPO = 净值 - N/2+1 日前的 SMA */
481
- function dpo(nav, period = 20) {
482
- const smaResult = sma(nav, period);
483
- const shift = Math.floor(period / 2) + 1;
484
- const values = [];
485
- for (let i = 0; i < nav.length; i++) {
486
- const smaIdx = i + shift;
487
- if (smaIdx < nav.length && smaResult.values[smaIdx] != null) {
488
- values.push(nav[i] - smaResult.values[smaIdx]);
489
- }
490
- else {
491
- values.push(null);
492
- }
493
- }
494
- return { values, current: lastNonNull(values), period, type: 'SMA' };
495
- }
496
- exports.dpo = dpo;
497
- // ============================================================
498
- // 均线偏离度 (BIAS / 乖离率)
499
- // ============================================================
500
- /** 乖离率 = (净值 - MA) / MA * 100 */
501
- function bias(nav, period = 20) {
502
- const maResult = sma(nav, period);
503
- const values = [];
504
- for (let i = 0; i < nav.length; i++) {
505
- const m = maResult.values[i];
506
- if (m != null && m !== 0) {
507
- values.push(((nav[i] - m) / m) * 100);
508
- }
509
- else {
510
- values.push(null);
511
- }
512
- }
513
- return { values, current: lastNonNull(values), period, type: 'SMA' };
514
- }
515
- exports.bias = bias;
516
- // ============================================================
517
- // 净值百分位
518
- // ============================================================
519
- /**
520
- * 净值百分位 - 当前净值在历史区间中所处的百分位
521
- * @param nav 净值序列
522
- * @param lookback 回看窗口(默认全部历史)
523
- * @returns 0-100 的百分位值
524
- */
525
- function navPercentile(nav, lookback) {
526
- const window = lookback ? nav.slice(-lookback) : nav;
527
- const current = nav[nav.length - 1];
528
- const sorted = [...window].sort((a, b) => a - b);
529
- let rank = 0;
530
- for (const v of sorted) {
531
- if (v < current)
532
- rank++;
533
- else if (v === current)
534
- rank += 0.5;
535
- }
536
- return (rank / sorted.length) * 100;
537
- }
538
- exports.navPercentile = navPercentile;
539
- // ============================================================
540
- // 均线交叉信号检测
541
- // ============================================================
542
- /** 检测短期均线与长期均线的交叉信号 */
543
- function detectCrossSignal(fastMA, slowMA, lookback = 5) {
544
- const fVals = fastMA.values;
545
- const sVals = slowMA.values;
546
- const len = Math.min(fVals.length, sVals.length);
547
- for (let i = len - 1; i >= Math.max(1, len - lookback); i--) {
548
- const fCurr = fVals[i];
549
- const fPrev = fVals[i - 1];
550
- const sCurr = sVals[i];
551
- const sPrev = sVals[i - 1];
552
- if (fCurr == null || fPrev == null || sCurr == null || sPrev == null)
553
- continue;
554
- // 金叉:快线从下方穿越慢线
555
- if (fPrev <= sPrev && fCurr > sCurr) {
556
- return { type: 'golden_cross', index: i, fastValue: fCurr, slowValue: sCurr };
557
- }
558
- // 死叉:快线从上方穿越慢线
559
- if (fPrev >= sPrev && fCurr < sCurr) {
560
- return { type: 'death_cross', index: i, fastValue: fCurr, slowValue: sCurr };
561
- }
562
- }
563
- return { type: 'none', index: -1, fastValue: 0, slowValue: 0 };
564
- }
565
- exports.detectCrossSignal = detectCrossSignal;
566
- // ============================================================
567
- // 均线排列状态
568
- // ============================================================
569
- /**
570
- * 检测均线多空排列
571
- * @param maList 从短期到长期排列的均线结果列表
572
- */
573
- function detectMAAlignment(maList) {
574
- const maValues = maList.map((m) => m.current ?? 0);
575
- const allValid = maList.every((m) => m.current != null);
576
- if (!allValid) {
577
- return { alignment: 'neutral', maValues, divergence: 0 };
578
- }
579
- // 多头排列:短期 > 长期(递减)
580
- let isBullish = true;
581
- let isBearish = true;
582
- for (let i = 1; i < maValues.length; i++) {
583
- if (maValues[i] >= maValues[i - 1])
584
- isBullish = false;
585
- if (maValues[i] <= maValues[i - 1])
586
- isBearish = false;
587
- }
588
- // 计算发散度(标准差)
589
- const mean = maValues.reduce((a, b) => a + b, 0) / maValues.length;
590
- const variance = maValues.reduce((sum, v) => sum + (v - mean) ** 2, 0) / maValues.length;
591
- const divergence = Math.sqrt(variance);
592
- const alignment = isBullish ? 'bullish' : isBearish ? 'bearish' : 'neutral';
593
- return { alignment, maValues, divergence };
594
- }
595
- exports.detectMAAlignment = detectMAAlignment;
596
- // ============================================================
597
- // Mass Index(质量指数)
598
- // ============================================================
599
- /**
600
- * Mass Index - 基于 EMA 的波动范围比率累积,用于识别变盘点
601
- * @param nav 净值序列
602
- * @param emaPeriod EMA 周期(默认9)
603
- * @param sumPeriod 累积周期(默认25)
604
- */
605
- function massIndex(nav, emaPeriod = 9, sumPeriod = 25) {
606
- // 由于净值没有 high/low,使用 EMA 的变化幅度近似
607
- const ema1 = technicalindicators_1.EMA.calculate({ values: nav, period: emaPeriod });
608
- const ema1Vals = ema1.filter((v) => v !== undefined);
609
- const ema2 = technicalindicators_1.EMA.calculate({ values: ema1Vals, period: emaPeriod });
610
- const ratios = [];
611
- for (let i = 0; i < ema2.length; i++) {
612
- const e1 = ema1Vals[i + (ema1Vals.length - ema2.length)];
613
- const e2 = ema2[i];
614
- if (e1 != null && e2 != null && e2 !== 0) {
615
- ratios.push(e1 / e2);
616
- }
617
- else {
618
- ratios.push(1);
619
- }
620
- }
621
- const values = new Array(nav.length).fill(null);
622
- const offset = nav.length - ratios.length;
623
- for (let i = sumPeriod - 1; i < ratios.length; i++) {
624
- let sum = 0;
625
- for (let j = i - sumPeriod + 1; j <= i; j++) {
626
- sum += ratios[j];
627
- }
628
- values[offset + i] = sum;
629
- }
630
- return { values, current: lastNonNull(values), period: sumPeriod, type: 'SMA' };
631
- }
632
- exports.massIndex = massIndex;
633
- //# sourceMappingURL=technical.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"technical.js","sourceRoot":"","sources":["../src/technical.ts"],"names":[],"mappings":"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"}