@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/risk.js DELETED
@@ -1,502 +0,0 @@
1
- "use strict";
2
- /**
3
- * 风险与绩效指标模块
4
- * 包含:波动率、最大回撤、VaR、CVaR、夏普比率、索提诺、卡尔玛、特雷诺、Omega 等
5
- */
6
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
- if (k2 === undefined) k2 = k;
8
- var desc = Object.getOwnPropertyDescriptor(m, k);
9
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
- desc = { enumerable: true, get: function() { return m[k]; } };
11
- }
12
- Object.defineProperty(o, k2, desc);
13
- }) : (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- o[k2] = m[k];
16
- }));
17
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
- Object.defineProperty(o, "default", { enumerable: true, value: v });
19
- }) : function(o, v) {
20
- o["default"] = v;
21
- });
22
- var __importStar = (this && this.__importStar) || function (mod) {
23
- if (mod && mod.__esModule) return mod;
24
- var result = {};
25
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
- __setModuleDefault(result, mod);
27
- return result;
28
- };
29
- Object.defineProperty(exports, "__esModule", { value: true });
30
- exports.benchmarkMetrics = exports.informationRatio = exports.trackingError = exports.calculateAlpha = exports.calculateBeta = exports.performanceMetrics = exports.consecutiveWinLoss = exports.profitFactor = exports.profitLossRatio = exports.winRate = exports.omegaRatio = exports.treynorRatio = exports.calmarRatio = exports.sortinoRatio = exports.sharpeRatio = exports.riskMetrics = exports.calculateCVaR = exports.calculateVaR = exports.maxDrawdownDuration = exports.maxDrawdown = exports.volatilityCone = exports.rollingVolatility = exports.downsideVolatility = exports.annualizedVolatility = exports.totalReturn = exports.annualizeReturn = exports.navToReturns = void 0;
31
- const ss = __importStar(require("simple-statistics"));
32
- const jstat_1 = require("jstat");
33
- // ============================================================
34
- // 辅助函数
35
- // ============================================================
36
- const TRADING_DAYS_PER_YEAR = 242; // A股年交易日数
37
- /** 净值序列 → 日收益率序列 */
38
- function navToReturns(nav) {
39
- const returns = [];
40
- for (let i = 1; i < nav.length; i++) {
41
- returns.push((nav[i] - nav[i - 1]) / nav[i - 1]);
42
- }
43
- return returns;
44
- }
45
- exports.navToReturns = navToReturns;
46
- /** 日收益率 → 年化收益率(几何平均) */
47
- function annualizeReturn(dailyReturns) {
48
- if (dailyReturns.length === 0)
49
- return 0;
50
- // 几何年化 = (1 + 累计收益) ^ (242/n) - 1
51
- const cumulative = dailyReturns.reduce((acc, r) => acc * (1 + r), 1);
52
- const years = dailyReturns.length / TRADING_DAYS_PER_YEAR;
53
- if (years <= 0 || cumulative <= 0)
54
- return 0;
55
- return Math.pow(cumulative, 1 / years) - 1;
56
- }
57
- exports.annualizeReturn = annualizeReturn;
58
- /** 累计收益率 */
59
- function totalReturn(nav) {
60
- if (nav.length < 2)
61
- return 0;
62
- return (nav[nav.length - 1] - nav[0]) / nav[0];
63
- }
64
- exports.totalReturn = totalReturn;
65
- // ============================================================
66
- // 波动率
67
- // ============================================================
68
- /** 年化波动率 */
69
- function annualizedVolatility(returns) {
70
- if (returns.length < 2)
71
- return 0;
72
- return ss.standardDeviation(returns) * Math.sqrt(TRADING_DAYS_PER_YEAR);
73
- }
74
- exports.annualizedVolatility = annualizedVolatility;
75
- /** 下行波动率(年化),只计算负收益 */
76
- function downsideVolatility(returns, riskFreeRate = 0) {
77
- const downsideReturns = returns.filter((r) => r < riskFreeRate / TRADING_DAYS_PER_YEAR);
78
- if (downsideReturns.length < 2)
79
- return 0;
80
- // 对低于无风险利率的收益计算标准差
81
- const deviations = downsideReturns.map((r) => Math.pow(r - riskFreeRate / TRADING_DAYS_PER_YEAR, 2));
82
- const meanSqDev = deviations.reduce((a, b) => a + b, 0) / returns.length; // 注意分母用总天数
83
- return Math.sqrt(meanSqDev) * Math.sqrt(TRADING_DAYS_PER_YEAR);
84
- }
85
- exports.downsideVolatility = downsideVolatility;
86
- /**
87
- * 滚动波动率
88
- * @param returns 日收益率
89
- * @param window 滚动窗口大小
90
- */
91
- function rollingVolatility(returns, window = 20) {
92
- const result = [];
93
- for (let i = 0; i < returns.length; i++) {
94
- if (i < window - 1) {
95
- result.push(null);
96
- }
97
- else {
98
- const slice = returns.slice(i - window + 1, i + 1);
99
- result.push(ss.standardDeviation(slice) * Math.sqrt(TRADING_DAYS_PER_YEAR));
100
- }
101
- }
102
- return result;
103
- }
104
- exports.rollingVolatility = rollingVolatility;
105
- /**
106
- * 波动率锥 - 不同时间窗口的波动率分位数分布
107
- * @param returns 日收益率
108
- * @param windows 要分析的时间窗口列表
109
- * @param quantiles 要计算的分位数列表
110
- */
111
- function volatilityCone(returns, windows = [5, 10, 20, 60, 120], quantiles = [0.1, 0.25, 0.5, 0.75, 0.9]) {
112
- const cone = new Map();
113
- for (const w of windows) {
114
- const vols = [];
115
- for (let i = w - 1; i < returns.length; i++) {
116
- const slice = returns.slice(i - w + 1, i + 1);
117
- vols.push(ss.standardDeviation(slice) * Math.sqrt(TRADING_DAYS_PER_YEAR));
118
- }
119
- const sorted = [...vols].sort((a, b) => a - b);
120
- const qMap = new Map();
121
- for (const q of quantiles) {
122
- qMap.set(q, ss.quantileSorted(sorted, q));
123
- }
124
- cone.set(w, qMap);
125
- }
126
- return cone;
127
- }
128
- exports.volatilityCone = volatilityCone;
129
- // ============================================================
130
- // 最大回撤
131
- // ============================================================
132
- /**
133
- * 最大回撤分析
134
- * @param nav 净值序列
135
- * @param dates 可选日期序列
136
- */
137
- function maxDrawdown(nav, dates) {
138
- if (nav.length < 2) {
139
- return {
140
- maxDrawdown: 0, peakIndex: 0, troughIndex: 0,
141
- peakDate: null, troughDate: null, recoveryDate: null,
142
- durationDays: 0, recoveryDays: null, drawdownSeries: [],
143
- };
144
- }
145
- const drawdownSeries = [];
146
- let peak = nav[0];
147
- let peakIdx = 0;
148
- let maxDD = 0;
149
- let maxPeakIdx = 0;
150
- let maxTroughIdx = 0;
151
- for (let i = 0; i < nav.length; i++) {
152
- if (nav[i] > peak) {
153
- peak = nav[i];
154
- peakIdx = i;
155
- }
156
- const dd = (nav[i] - peak) / peak;
157
- drawdownSeries.push(dd);
158
- if (dd < maxDD) {
159
- maxDD = dd;
160
- maxPeakIdx = peakIdx;
161
- maxTroughIdx = i;
162
- }
163
- }
164
- // 寻找恢复点
165
- let recoveryIdx = null;
166
- const peakValue = nav[maxPeakIdx];
167
- for (let i = maxTroughIdx + 1; i < nav.length; i++) {
168
- if (nav[i] >= peakValue) {
169
- recoveryIdx = i;
170
- break;
171
- }
172
- }
173
- return {
174
- maxDrawdown: maxDD,
175
- peakIndex: maxPeakIdx,
176
- troughIndex: maxTroughIdx,
177
- peakDate: dates ? dates[maxPeakIdx] ?? null : null,
178
- troughDate: dates ? dates[maxTroughIdx] ?? null : null,
179
- recoveryDate: recoveryIdx != null && dates ? dates[recoveryIdx] ?? null : null,
180
- durationDays: maxTroughIdx - maxPeakIdx,
181
- recoveryDays: recoveryIdx != null ? recoveryIdx - maxTroughIdx : null,
182
- drawdownSeries,
183
- };
184
- }
185
- exports.maxDrawdown = maxDrawdown;
186
- /**
187
- * 最大回撤持续天数(从峰顶到下一次创新高)
188
- */
189
- function maxDrawdownDuration(nav) {
190
- let maxDuration = 0;
191
- let currentDuration = 0;
192
- let peak = nav[0];
193
- for (let i = 0; i < nav.length; i++) {
194
- if (nav[i] >= peak) {
195
- peak = nav[i];
196
- currentDuration = 0;
197
- }
198
- else {
199
- currentDuration++;
200
- maxDuration = Math.max(maxDuration, currentDuration);
201
- }
202
- }
203
- return maxDuration;
204
- }
205
- exports.maxDrawdownDuration = maxDrawdownDuration;
206
- // ============================================================
207
- // VaR / CVaR
208
- // ============================================================
209
- /**
210
- * VaR(在险价值)
211
- * @param returns 日收益率
212
- * @param confidence 置信度(默认 0.95)
213
- * @param method 计算方法:'historical'(历史模拟)| 'parametric'(参数法/正态假设)
214
- */
215
- function calculateVaR(returns, confidence = 0.95, method = 'historical') {
216
- if (returns.length < 2)
217
- return 0;
218
- if (method === 'historical') {
219
- const sorted = [...returns].sort((a, b) => a - b);
220
- return ss.quantileSorted(sorted, 1 - confidence);
221
- }
222
- else {
223
- // 参数法(正态分布假设)
224
- const mean = ss.mean(returns);
225
- const std = ss.standardDeviation(returns);
226
- const z = jstat_1.jStat.normal.inv(1 - confidence, 0, 1);
227
- return mean + z * std;
228
- }
229
- }
230
- exports.calculateVaR = calculateVaR;
231
- /**
232
- * CVaR / Expected Shortfall(条件在险价值 / 预期亏损)
233
- * @param returns 日收益率
234
- * @param confidence 置信度(默认 0.95)
235
- */
236
- function calculateCVaR(returns, confidence = 0.95) {
237
- if (returns.length < 2)
238
- return 0;
239
- const varValue = calculateVaR(returns, confidence, 'historical');
240
- const tailReturns = returns.filter((r) => r <= varValue);
241
- if (tailReturns.length === 0)
242
- return varValue;
243
- return ss.mean(tailReturns);
244
- }
245
- exports.calculateCVaR = calculateCVaR;
246
- // ============================================================
247
- // 风险指标汇总
248
- // ============================================================
249
- /**
250
- * 一次性计算所有风险指标
251
- * @param nav 净值序列
252
- * @param riskFreeRate 年化无风险利率(默认 0.025 = 2.5%)
253
- */
254
- function riskMetrics(nav, riskFreeRate = 0.025) {
255
- const returns = navToReturns(nav);
256
- const dd = maxDrawdown(nav);
257
- return {
258
- annualizedVolatility: annualizedVolatility(returns),
259
- downsideVolatility: downsideVolatility(returns, riskFreeRate),
260
- maxDrawdown: dd.maxDrawdown,
261
- maxDrawdownDuration: maxDrawdownDuration(nav),
262
- var95: calculateVaR(returns, 0.95),
263
- var99: calculateVaR(returns, 0.99),
264
- cvar95: calculateCVaR(returns, 0.95),
265
- cvar99: calculateCVaR(returns, 0.99),
266
- };
267
- }
268
- exports.riskMetrics = riskMetrics;
269
- // ============================================================
270
- // 绩效指标
271
- // ============================================================
272
- /**
273
- * 夏普比率 = (年化收益 - 无风险利率) / 年化波动率
274
- */
275
- function sharpeRatio(nav, riskFreeRate = 0.025) {
276
- const returns = navToReturns(nav);
277
- const annReturn = annualizeReturn(returns);
278
- const annVol = annualizedVolatility(returns);
279
- if (annVol === 0)
280
- return 0;
281
- return (annReturn - riskFreeRate) / annVol;
282
- }
283
- exports.sharpeRatio = sharpeRatio;
284
- /**
285
- * 索提诺比率 = (年化收益 - 无风险利率) / 下行波动率
286
- */
287
- function sortinoRatio(nav, riskFreeRate = 0.025) {
288
- const returns = navToReturns(nav);
289
- const annReturn = annualizeReturn(returns);
290
- const dv = downsideVolatility(returns, riskFreeRate);
291
- if (dv === 0)
292
- return 0;
293
- return (annReturn - riskFreeRate) / dv;
294
- }
295
- exports.sortinoRatio = sortinoRatio;
296
- /**
297
- * 卡尔玛比率 = 年化收益 / |最大回撤|
298
- */
299
- function calmarRatio(nav) {
300
- const returns = navToReturns(nav);
301
- const annReturn = annualizeReturn(returns);
302
- const dd = maxDrawdown(nav);
303
- if (dd.maxDrawdown === 0)
304
- return 0;
305
- return annReturn / Math.abs(dd.maxDrawdown);
306
- }
307
- exports.calmarRatio = calmarRatio;
308
- /**
309
- * 特雷诺比率 = (年化收益 - 无风险利率) / Beta
310
- * @param nav 基金净值
311
- * @param benchmarkNav 基准净值
312
- * @param riskFreeRate 无风险利率
313
- */
314
- function treynorRatio(nav, benchmarkNav, riskFreeRate = 0.025) {
315
- const fundReturns = navToReturns(nav);
316
- const benchReturns = navToReturns(benchmarkNav);
317
- const minLen = Math.min(fundReturns.length, benchReturns.length);
318
- const fRet = fundReturns.slice(-minLen);
319
- const bRet = benchReturns.slice(-minLen);
320
- const beta = calculateBeta(fRet, bRet);
321
- if (beta === 0)
322
- return null;
323
- const annReturn = annualizeReturn(fRet);
324
- return (annReturn - riskFreeRate) / beta;
325
- }
326
- exports.treynorRatio = treynorRatio;
327
- /**
328
- * Omega 比率 = 加权上行收益 / 加权下行亏损
329
- * @param nav 净值序列
330
- * @param threshold 阈值(默认 0)
331
- */
332
- function omegaRatio(nav, threshold = 0) {
333
- const returns = navToReturns(nav);
334
- const dailyThreshold = threshold / TRADING_DAYS_PER_YEAR;
335
- let gains = 0;
336
- let losses = 0;
337
- for (const r of returns) {
338
- if (r > dailyThreshold)
339
- gains += r - dailyThreshold;
340
- else
341
- losses += dailyThreshold - r;
342
- }
343
- if (losses === 0)
344
- return gains > 0 ? Infinity : 0;
345
- return gains / losses;
346
- }
347
- exports.omegaRatio = omegaRatio;
348
- /** 胜率 = 正收益天数 / 总天数 */
349
- function winRate(returns) {
350
- if (returns.length === 0)
351
- return 0;
352
- const wins = returns.filter((r) => r > 0).length;
353
- return wins / returns.length;
354
- }
355
- exports.winRate = winRate;
356
- /** 盈亏比 = 平均盈利 / 平均亏损的绝对值 */
357
- function profitLossRatio(returns) {
358
- const wins = returns.filter((r) => r > 0);
359
- const losses = returns.filter((r) => r < 0);
360
- if (losses.length === 0)
361
- return wins.length > 0 ? Infinity : 0;
362
- const avgWin = wins.length > 0 ? ss.mean(wins) : 0;
363
- const avgLoss = Math.abs(ss.mean(losses));
364
- if (avgLoss === 0)
365
- return 0;
366
- return avgWin / avgLoss;
367
- }
368
- exports.profitLossRatio = profitLossRatio;
369
- /** 利润因子 = 总盈利 / 总亏损 */
370
- function profitFactor(returns) {
371
- const totalWins = returns.filter((r) => r > 0).reduce((a, b) => a + b, 0);
372
- const totalLosses = Math.abs(returns.filter((r) => r < 0).reduce((a, b) => a + b, 0));
373
- if (totalLosses === 0)
374
- return totalWins > 0 ? Infinity : 0;
375
- return totalWins / totalLosses;
376
- }
377
- exports.profitFactor = profitFactor;
378
- /** 最大连续盈利/亏损天数 */
379
- function consecutiveWinLoss(returns) {
380
- let maxWins = 0, maxLosses = 0;
381
- let curWins = 0, curLosses = 0;
382
- for (const r of returns) {
383
- if (r > 0) {
384
- curWins++;
385
- curLosses = 0;
386
- maxWins = Math.max(maxWins, curWins);
387
- }
388
- else if (r < 0) {
389
- curLosses++;
390
- curWins = 0;
391
- maxLosses = Math.max(maxLosses, curLosses);
392
- }
393
- else {
394
- curWins = 0;
395
- curLosses = 0;
396
- }
397
- }
398
- return { maxWins, maxLosses };
399
- }
400
- exports.consecutiveWinLoss = consecutiveWinLoss;
401
- /**
402
- * 一次性计算所有绩效指标
403
- * @param nav 净值序列
404
- * @param riskFreeRate 年化无风险利率
405
- */
406
- function performanceMetrics(nav, riskFreeRate = 0.025) {
407
- const returns = navToReturns(nav);
408
- const consec = consecutiveWinLoss(returns);
409
- const dd = maxDrawdown(nav);
410
- const annReturn = annualizeReturn(returns);
411
- const annVol = annualizedVolatility(returns);
412
- const dv = downsideVolatility(returns, riskFreeRate);
413
- return {
414
- totalReturn: totalReturn(nav),
415
- annualizedReturn: annReturn,
416
- sharpeRatio: annVol > 0 ? (annReturn - riskFreeRate) / annVol : 0,
417
- sortinoRatio: dv > 0 ? (annReturn - riskFreeRate) / dv : 0,
418
- calmarRatio: dd.maxDrawdown !== 0 ? annReturn / Math.abs(dd.maxDrawdown) : 0,
419
- treynorRatio: null, // 需要基准数据,单独计算
420
- omegaRatio: omegaRatio(nav),
421
- winRate: winRate(returns),
422
- profitLossRatio: profitLossRatio(returns),
423
- profitFactor: profitFactor(returns),
424
- maxConsecutiveWins: consec.maxWins,
425
- maxConsecutiveLosses: consec.maxLosses,
426
- };
427
- }
428
- exports.performanceMetrics = performanceMetrics;
429
- // ============================================================
430
- // 相对基准指标(Alpha / Beta / 跟踪误差 / 信息比率)
431
- // ============================================================
432
- /** Beta 系数 */
433
- function calculateBeta(fundReturns, benchmarkReturns) {
434
- const minLen = Math.min(fundReturns.length, benchmarkReturns.length);
435
- const f = fundReturns.slice(-minLen);
436
- const b = benchmarkReturns.slice(-minLen);
437
- const cov = ss.sampleCovariance(f, b);
438
- const bVar = ss.variance(b);
439
- return bVar > 0 ? cov / bVar : 0;
440
- }
441
- exports.calculateBeta = calculateBeta;
442
- /** Alpha(年化超额收益) */
443
- function calculateAlpha(fundReturns, benchmarkReturns, riskFreeRate = 0.025) {
444
- const minLen = Math.min(fundReturns.length, benchmarkReturns.length);
445
- const f = fundReturns.slice(-minLen);
446
- const b = benchmarkReturns.slice(-minLen);
447
- const fAnnReturn = annualizeReturn(f);
448
- const bAnnReturn = annualizeReturn(b);
449
- const beta = calculateBeta(f, b);
450
- return fAnnReturn - (riskFreeRate + beta * (bAnnReturn - riskFreeRate));
451
- }
452
- exports.calculateAlpha = calculateAlpha;
453
- /** 跟踪误差(年化) */
454
- function trackingError(fundReturns, benchmarkReturns) {
455
- const minLen = Math.min(fundReturns.length, benchmarkReturns.length);
456
- const f = fundReturns.slice(-minLen);
457
- const b = benchmarkReturns.slice(-minLen);
458
- const excessReturns = f.map((r, i) => r - b[i]);
459
- return ss.standardDeviation(excessReturns) * Math.sqrt(TRADING_DAYS_PER_YEAR);
460
- }
461
- exports.trackingError = trackingError;
462
- /** 信息比率 = 超额收益 / 跟踪误差 */
463
- function informationRatio(fundReturns, benchmarkReturns) {
464
- const minLen = Math.min(fundReturns.length, benchmarkReturns.length);
465
- const f = fundReturns.slice(-minLen);
466
- const b = benchmarkReturns.slice(-minLen);
467
- const excessReturns = f.map((r, i) => r - b[i]);
468
- const meanExcess = ss.mean(excessReturns) * TRADING_DAYS_PER_YEAR;
469
- const te = ss.standardDeviation(excessReturns) * Math.sqrt(TRADING_DAYS_PER_YEAR);
470
- return te > 0 ? meanExcess / te : 0;
471
- }
472
- exports.informationRatio = informationRatio;
473
- /**
474
- * 一次性计算所有相对基准指标
475
- * @param fundNav 基金净值序列
476
- * @param benchmarkNav 基准净值序列(如沪深300净值)
477
- * @param riskFreeRate 年化无风险利率
478
- */
479
- function benchmarkMetrics(fundNav, benchmarkNav, riskFreeRate = 0.025) {
480
- const fundReturns = navToReturns(fundNav);
481
- const benchReturns = navToReturns(benchmarkNav);
482
- const minLen = Math.min(fundReturns.length, benchReturns.length);
483
- const f = fundReturns.slice(-minLen);
484
- const b = benchReturns.slice(-minLen);
485
- const beta = calculateBeta(f, b);
486
- const alpha = calculateAlpha(f, b, riskFreeRate);
487
- const te = trackingError(f, b);
488
- const ir = te > 0 ? informationRatio(f, b) : 0;
489
- const corr = ss.sampleCorrelation(f, b);
490
- // R² = correlation²
491
- const rSquared = corr * corr;
492
- return {
493
- alpha,
494
- beta,
495
- trackingError: te,
496
- informationRatio: ir,
497
- correlation: corr,
498
- rSquared,
499
- };
500
- }
501
- exports.benchmarkMetrics = benchmarkMetrics;
502
- //# sourceMappingURL=risk.js.map
package/dist/risk.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"risk.js","sourceRoot":"","sources":["../src/risk.ts"],"names":[],"mappings":"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"}
@@ -1,78 +0,0 @@
1
- /**
2
- * 统计特征模块
3
- * 包含:偏度、峰度、赫斯特指数、自相关、Jarque-Bera 检验等
4
- */
5
- import { NavSeries, ReturnSeries, StatisticalFeatures, HurstResult, AutocorrelationResult } from './types';
6
- /**
7
- * 计算收益率的完整统计特征
8
- * @param nav 净值序列(自动转换为收益率)
9
- */
10
- export declare function statisticalFeatures(nav: NavSeries): StatisticalFeatures;
11
- /**
12
- * 计算净值序列(而非收益率)的统计特征
13
- * @param nav 净值序列
14
- */
15
- export declare function navStatisticalFeatures(nav: NavSeries): StatisticalFeatures;
16
- /**
17
- * 赫斯特指数 - 通过 R/S 分析(重极差分析)计算
18
- *
19
- * 结果解读:
20
- * - H > 0.5:趋势性(persistent),过去涨未来大概率继续涨
21
- * - H < 0.5:均值回归(anti-persistent),过去涨未来大概率回落
22
- * - H ≈ 0.5:随机游走,无可预测性
23
- *
24
- * @param nav 净值序列
25
- * @param minWindowSize 最小窗口大小(默认16)
26
- * @param maxWindowSize 最大窗口大小(默认为序列长度的1/2)
27
- * @param numPoints 采样点数(默认10)
28
- */
29
- export declare function hurstExponent(nav: NavSeries, minWindowSize?: number, maxWindowSize?: number, numPoints?: number): HurstResult;
30
- /**
31
- * 计算收益率序列的自相关系数(ACF)
32
- * @param nav 净值序列
33
- * @param maxLag 最大滞后阶数(默认20)
34
- */
35
- export declare function autocorrelation(nav: NavSeries, maxLag?: number): AutocorrelationResult;
36
- /**
37
- * Ljung-Box 检验 - 检测自相关的统计显著性
38
- * @param returns 收益率序列
39
- * @param maxLag 最大滞后阶数
40
- * @returns Q 统计量和 p 值近似
41
- */
42
- export declare function ljungBoxTest(returns: ReturnSeries, maxLag?: number): {
43
- qStatistic: number;
44
- approximatePValue: number;
45
- };
46
- /**
47
- * 收益率分位数分析
48
- * @param nav 净值序列
49
- * @param quantiles 要计算的分位数列表
50
- */
51
- export declare function returnQuantiles(nav: NavSeries, quantiles?: number[]): Map<number, number>;
52
- /**
53
- * 偏度的滚动计算
54
- * @param returns 收益率序列
55
- * @param window 滚动窗口
56
- */
57
- export declare function rollingSkewness(returns: ReturnSeries, window?: number): (number | null)[];
58
- /**
59
- * 峰度的滚动计算
60
- * @param returns 收益率序列
61
- * @param window 滚动窗口
62
- */
63
- export declare function rollingKurtosis(returns: ReturnSeries, window?: number): (number | null)[];
64
- /**
65
- * GARCH(1,1) 波动率预测 - 简化版
66
- * 使用矩估计法近似参数,非最大似然估计
67
- *
68
- * @param returns 收益率序列
69
- * @returns 条件方差序列和预测的下一期方差
70
- */
71
- export declare function garch11(returns: ReturnSeries): {
72
- conditionalVariance: number[];
73
- nextPeriodForecast: number;
74
- omega: number;
75
- alpha: number;
76
- beta: number;
77
- };
78
- //# sourceMappingURL=statistics.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"statistics.d.ts","sourceRoot":"","sources":["../src/statistics.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAO3G;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,SAAS,GAAG,mBAAmB,CA2BvE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,SAAS,GAAG,mBAAmB,CAwB1E;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,SAAS,EACd,aAAa,GAAE,MAAW,EAC1B,aAAa,CAAC,EAAE,MAAM,EACtB,SAAS,GAAE,MAAW,GACrB,WAAW,CAkGb;AAMD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,GAAE,MAAW,GAAG,qBAAqB,CAkC1F;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,GAAE,MAAW,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,CAoC1H;AAuBD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,SAAS,EACd,SAAS,GAAE,MAAM,EAAwD,GACxE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAQrB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,GAAE,MAAW,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAW7F;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,GAAE,MAAW,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAW7F;AAMD;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG;IAC9C,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAgDA"}