@stvy/fund-indicators 1.0.0 → 1.0.5
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/.github/workflows/publish.yml +73 -0
- package/AGENTS.md +322 -0
- package/dist/index.cjs +7014 -0
- package/dist/index.d.cts +779 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.mjs +6917 -0
- package/package.json +15 -32
- package/pnpm-workspace.yaml +2 -0
- package/src/dca.ts +420 -0
- package/src/index.ts +133 -0
- package/src/jstat.d.ts +17 -0
- package/src/pattern.ts +447 -0
- package/src/risk.ts +516 -0
- package/src/statistics.ts +428 -0
- package/src/technical.ts +738 -0
- package/src/types.ts +369 -0
- package/test/index.test.ts +355 -0
- package/tsconfig.json +20 -0
- package/dist/browser/fund-indicators.esm.js +0 -7505
- package/dist/browser/fund-indicators.esm.min.js +0 -8
- package/dist/browser/fund-indicators.esm.min.js.map +0 -7
- package/dist/browser/fund-indicators.js +0 -7517
- package/dist/browser/fund-indicators.min.js +0 -8
- package/dist/browser/fund-indicators.min.js.map +0 -7
- package/dist/dca.d.ts +0 -91
- package/dist/dca.d.ts.map +0 -1
- package/dist/dca.js +0 -354
- package/dist/dca.js.map +0 -1
- package/dist/index.d.ts +0 -18
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -141
- package/dist/index.js.map +0 -1
- package/dist/pattern.d.ts +0 -60
- package/dist/pattern.d.ts.map +0 -1
- package/dist/pattern.js +0 -386
- package/dist/pattern.js.map +0 -1
- package/dist/risk.d.ts +0 -115
- package/dist/risk.d.ts.map +0 -1
- package/dist/risk.js +0 -502
- package/dist/risk.js.map +0 -1
- package/dist/statistics.d.ts +0 -78
- package/dist/statistics.d.ts.map +0 -1
- package/dist/statistics.js +0 -402
- package/dist/statistics.js.map +0 -1
- package/dist/technical.d.ts +0 -105
- package/dist/technical.d.ts.map +0 -1
- package/dist/technical.js +0 -633
- package/dist/technical.js.map +0 -1
- package/dist/types.d.ts +0 -327
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -7
- package/dist/types.js.map +0 -1
package/dist/statistics.js
DELETED
|
@@ -1,402 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* 统计特征模块
|
|
4
|
-
* 包含:偏度、峰度、赫斯特指数、自相关、Jarque-Bera 检验等
|
|
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.garch11 = exports.rollingKurtosis = exports.rollingSkewness = exports.returnQuantiles = exports.ljungBoxTest = exports.autocorrelation = exports.hurstExponent = exports.navStatisticalFeatures = exports.statisticalFeatures = void 0;
|
|
31
|
-
const ss = __importStar(require("simple-statistics"));
|
|
32
|
-
const risk_1 = require("./risk");
|
|
33
|
-
// ============================================================
|
|
34
|
-
// 统计特征汇总
|
|
35
|
-
// ============================================================
|
|
36
|
-
/**
|
|
37
|
-
* 计算收益率的完整统计特征
|
|
38
|
-
* @param nav 净值序列(自动转换为收益率)
|
|
39
|
-
*/
|
|
40
|
-
function statisticalFeatures(nav) {
|
|
41
|
-
const returns = (0, risk_1.navToReturns)(nav);
|
|
42
|
-
if (returns.length < 4) {
|
|
43
|
-
return {
|
|
44
|
-
mean: 0, median: 0, stdDev: 0, skewness: 0, kurtosis: 0,
|
|
45
|
-
min: 0, max: 0, range: 0, coefficientOfVariation: 0, jarqueBera: 0,
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
const mean = ss.mean(returns);
|
|
49
|
-
const median = ss.median(returns);
|
|
50
|
-
const stdDev = ss.standardDeviation(returns);
|
|
51
|
-
const skewness = ss.sampleSkewness(returns);
|
|
52
|
-
const kurtosis = ss.sampleKurtosis(returns);
|
|
53
|
-
const min = ss.min(returns);
|
|
54
|
-
const max = ss.max(returns);
|
|
55
|
-
const range = max - min;
|
|
56
|
-
const coefficientOfVariation = mean !== 0 ? stdDev / Math.abs(mean) : 0;
|
|
57
|
-
// Jarque-Bera 检验 = n/6 * (S² + K²/4)
|
|
58
|
-
const n = returns.length;
|
|
59
|
-
const jarqueBera = (n / 6) * (skewness * skewness + (kurtosis * kurtosis) / 4);
|
|
60
|
-
return {
|
|
61
|
-
mean, median, stdDev, skewness, kurtosis,
|
|
62
|
-
min, max, range, coefficientOfVariation, jarqueBera,
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
exports.statisticalFeatures = statisticalFeatures;
|
|
66
|
-
/**
|
|
67
|
-
* 计算净值序列(而非收益率)的统计特征
|
|
68
|
-
* @param nav 净值序列
|
|
69
|
-
*/
|
|
70
|
-
function navStatisticalFeatures(nav) {
|
|
71
|
-
if (nav.length < 4) {
|
|
72
|
-
return {
|
|
73
|
-
mean: 0, median: 0, stdDev: 0, skewness: 0, kurtosis: 0,
|
|
74
|
-
min: 0, max: 0, range: 0, coefficientOfVariation: 0, jarqueBera: 0,
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
const mean = ss.mean(nav);
|
|
78
|
-
const median = ss.median(nav);
|
|
79
|
-
const stdDev = ss.standardDeviation(nav);
|
|
80
|
-
const skewness = ss.sampleSkewness(nav);
|
|
81
|
-
const kurtosis = ss.sampleKurtosis(nav);
|
|
82
|
-
const min = ss.min(nav);
|
|
83
|
-
const max = ss.max(nav);
|
|
84
|
-
const range = max - min;
|
|
85
|
-
const coefficientOfVariation = mean !== 0 ? stdDev / Math.abs(mean) : 0;
|
|
86
|
-
const n = nav.length;
|
|
87
|
-
const jarqueBera = (n / 6) * (skewness * skewness + (kurtosis * kurtosis) / 4);
|
|
88
|
-
return {
|
|
89
|
-
mean, median, stdDev, skewness, kurtosis,
|
|
90
|
-
min, max, range, coefficientOfVariation, jarqueBera,
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
exports.navStatisticalFeatures = navStatisticalFeatures;
|
|
94
|
-
// ============================================================
|
|
95
|
-
// 赫斯特指数 (R/S Analysis)
|
|
96
|
-
// ============================================================
|
|
97
|
-
/**
|
|
98
|
-
* 赫斯特指数 - 通过 R/S 分析(重极差分析)计算
|
|
99
|
-
*
|
|
100
|
-
* 结果解读:
|
|
101
|
-
* - H > 0.5:趋势性(persistent),过去涨未来大概率继续涨
|
|
102
|
-
* - H < 0.5:均值回归(anti-persistent),过去涨未来大概率回落
|
|
103
|
-
* - H ≈ 0.5:随机游走,无可预测性
|
|
104
|
-
*
|
|
105
|
-
* @param nav 净值序列
|
|
106
|
-
* @param minWindowSize 最小窗口大小(默认16)
|
|
107
|
-
* @param maxWindowSize 最大窗口大小(默认为序列长度的1/2)
|
|
108
|
-
* @param numPoints 采样点数(默认10)
|
|
109
|
-
*/
|
|
110
|
-
function hurstExponent(nav, minWindowSize = 16, maxWindowSize, numPoints = 10) {
|
|
111
|
-
const returns = (0, risk_1.navToReturns)(nav);
|
|
112
|
-
const n = returns.length;
|
|
113
|
-
if (n < minWindowSize * 2) {
|
|
114
|
-
return {
|
|
115
|
-
hurstExponent: 0.5,
|
|
116
|
-
interpretation: 'random_walk',
|
|
117
|
-
dataPoints: [],
|
|
118
|
-
rSquared: 0,
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
const maxWin = maxWindowSize ?? Math.floor(n / 2);
|
|
122
|
-
const dataPoints = [];
|
|
123
|
-
// 生成不同窗口大小(对数等间距)
|
|
124
|
-
const logMin = Math.log(minWindowSize);
|
|
125
|
-
const logMax = Math.log(maxWin);
|
|
126
|
-
for (let p = 0; p < numPoints; p++) {
|
|
127
|
-
const logWindowSize = logMin + (p / (numPoints - 1)) * (logMax - logMin);
|
|
128
|
-
const windowSize = Math.floor(Math.exp(logWindowSize));
|
|
129
|
-
if (windowSize < 2 || windowSize > n)
|
|
130
|
-
continue;
|
|
131
|
-
// 将数据分为多个大小为 windowSize 的子区间
|
|
132
|
-
const numSubPeriods = Math.floor(n / windowSize);
|
|
133
|
-
if (numSubPeriods < 1)
|
|
134
|
-
continue;
|
|
135
|
-
let totalRS = 0;
|
|
136
|
-
let validCount = 0;
|
|
137
|
-
for (let s = 0; s < numSubPeriods; s++) {
|
|
138
|
-
const start = s * windowSize;
|
|
139
|
-
const subPeriod = returns.slice(start, start + windowSize);
|
|
140
|
-
const mean = ss.mean(subPeriod);
|
|
141
|
-
const std = ss.standardDeviation(subPeriod);
|
|
142
|
-
if (std === 0)
|
|
143
|
-
continue;
|
|
144
|
-
// 计算累积偏差序列
|
|
145
|
-
const cumDeviations = [];
|
|
146
|
-
let cumDev = 0;
|
|
147
|
-
for (const r of subPeriod) {
|
|
148
|
-
cumDev += r - mean;
|
|
149
|
-
cumDeviations.push(cumDev);
|
|
150
|
-
}
|
|
151
|
-
// R = max(cumDev) - min(cumDev)
|
|
152
|
-
const range = Math.max(...cumDeviations) - Math.min(...cumDeviations);
|
|
153
|
-
// S = 标准差
|
|
154
|
-
const rs = range / std;
|
|
155
|
-
totalRS += rs;
|
|
156
|
-
validCount++;
|
|
157
|
-
}
|
|
158
|
-
if (validCount > 0) {
|
|
159
|
-
const avgRS = totalRS / validCount;
|
|
160
|
-
dataPoints.push({ logN: Math.log(windowSize), logRS: Math.log(avgRS) });
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
if (dataPoints.length < 3) {
|
|
164
|
-
return {
|
|
165
|
-
hurstExponent: 0.5,
|
|
166
|
-
interpretation: 'random_walk',
|
|
167
|
-
dataPoints,
|
|
168
|
-
rSquared: 0,
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
// 对 log(N) 和 log(R/S) 做线性回归,斜率即为 Hurst 指数
|
|
172
|
-
const regressionData = dataPoints.map((d) => [d.logN, d.logRS]);
|
|
173
|
-
const regression = ss.linearRegression(regressionData);
|
|
174
|
-
const H = regression.m;
|
|
175
|
-
// 计算 R²
|
|
176
|
-
const predicted = dataPoints.map((d) => regression.m * d.logN + regression.b);
|
|
177
|
-
const actual = dataPoints.map((d) => d.logRS);
|
|
178
|
-
const meanActual = ss.mean(actual);
|
|
179
|
-
const ssTotal = actual.reduce((sum, v) => sum + (v - meanActual) ** 2, 0);
|
|
180
|
-
const ssResidual = actual.reduce((sum, v, i) => sum + (v - predicted[i]) ** 2, 0);
|
|
181
|
-
const rSquared = ssTotal > 0 ? 1 - ssResidual / ssTotal : 0;
|
|
182
|
-
// 判断结果
|
|
183
|
-
let interpretation;
|
|
184
|
-
if (H > 0.55)
|
|
185
|
-
interpretation = 'trending';
|
|
186
|
-
else if (H < 0.45)
|
|
187
|
-
interpretation = 'mean_reverting';
|
|
188
|
-
else
|
|
189
|
-
interpretation = 'random_walk';
|
|
190
|
-
return {
|
|
191
|
-
hurstExponent: Math.max(0, Math.min(1, H)), // 限制在 [0, 1]
|
|
192
|
-
interpretation,
|
|
193
|
-
dataPoints,
|
|
194
|
-
rSquared,
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
exports.hurstExponent = hurstExponent;
|
|
198
|
-
// ============================================================
|
|
199
|
-
// 自相关分析
|
|
200
|
-
// ============================================================
|
|
201
|
-
/**
|
|
202
|
-
* 计算收益率序列的自相关系数(ACF)
|
|
203
|
-
* @param nav 净值序列
|
|
204
|
-
* @param maxLag 最大滞后阶数(默认20)
|
|
205
|
-
*/
|
|
206
|
-
function autocorrelation(nav, maxLag = 20) {
|
|
207
|
-
const returns = (0, risk_1.navToReturns)(nav);
|
|
208
|
-
const n = returns.length;
|
|
209
|
-
if (n < maxLag + 2) {
|
|
210
|
-
maxLag = Math.max(1, n - 2);
|
|
211
|
-
}
|
|
212
|
-
const mean = ss.mean(returns);
|
|
213
|
-
const variance = returns.reduce((sum, r) => sum + (r - mean) ** 2, 0) / n;
|
|
214
|
-
const coefficients = [];
|
|
215
|
-
for (let lag = 0; lag <= maxLag; lag++) {
|
|
216
|
-
if (variance === 0) {
|
|
217
|
-
coefficients.push(lag === 0 ? 1 : 0);
|
|
218
|
-
continue;
|
|
219
|
-
}
|
|
220
|
-
let cov = 0;
|
|
221
|
-
for (let i = 0; i < n - lag; i++) {
|
|
222
|
-
cov += (returns[i] - mean) * (returns[i + lag] - mean);
|
|
223
|
-
}
|
|
224
|
-
cov /= n;
|
|
225
|
-
coefficients.push(cov / variance);
|
|
226
|
-
}
|
|
227
|
-
// 判断趋势持续性(基于 lag=1 的自相关系数)
|
|
228
|
-
let interpretation;
|
|
229
|
-
const lag1 = coefficients.length > 1 ? coefficients[1] : 0;
|
|
230
|
-
if (lag1 > 0.05)
|
|
231
|
-
interpretation = 'persistent';
|
|
232
|
-
else if (lag1 < -0.05)
|
|
233
|
-
interpretation = 'anti_persistent';
|
|
234
|
-
else
|
|
235
|
-
interpretation = 'no_correlation';
|
|
236
|
-
return { coefficients, maxLag, interpretation };
|
|
237
|
-
}
|
|
238
|
-
exports.autocorrelation = autocorrelation;
|
|
239
|
-
/**
|
|
240
|
-
* Ljung-Box 检验 - 检测自相关的统计显著性
|
|
241
|
-
* @param returns 收益率序列
|
|
242
|
-
* @param maxLag 最大滞后阶数
|
|
243
|
-
* @returns Q 统计量和 p 值近似
|
|
244
|
-
*/
|
|
245
|
-
function ljungBoxTest(returns, maxLag = 10) {
|
|
246
|
-
const n = returns.length;
|
|
247
|
-
const mean = ss.mean(returns);
|
|
248
|
-
const variance = returns.reduce((sum, r) => sum + (r - mean) ** 2, 0) / n;
|
|
249
|
-
if (variance === 0)
|
|
250
|
-
return { qStatistic: 0, approximatePValue: 1 };
|
|
251
|
-
// 计算各滞后期的自相关系数
|
|
252
|
-
const acf = [];
|
|
253
|
-
for (let k = 1; k <= maxLag; k++) {
|
|
254
|
-
let cov = 0;
|
|
255
|
-
for (let i = 0; i < n - k; i++) {
|
|
256
|
-
cov += (returns[i] - mean) * (returns[i + k] - mean);
|
|
257
|
-
}
|
|
258
|
-
cov /= n;
|
|
259
|
-
acf.push(cov / variance);
|
|
260
|
-
}
|
|
261
|
-
// Q = n(n+2) * Σ(ρk² / (n-k))
|
|
262
|
-
let q = 0;
|
|
263
|
-
for (let k = 0; k < maxLag; k++) {
|
|
264
|
-
q += (acf[k] * acf[k]) / (n - k - 1);
|
|
265
|
-
}
|
|
266
|
-
q *= n * (n + 2);
|
|
267
|
-
// p-value 近似(卡方分布,自由度=maxLag)
|
|
268
|
-
// 使用简化的正态近似
|
|
269
|
-
const df = maxLag;
|
|
270
|
-
const z = Math.pow(q / df, 1 / 3) - (1 - 2 / (9 * df));
|
|
271
|
-
const se = Math.sqrt(2 / (9 * df));
|
|
272
|
-
const zScore = z / se;
|
|
273
|
-
// 近似 p-value(使用正态分布近似卡方分布的立方根变换)
|
|
274
|
-
const pValue = 1 - normalCDF(zScore);
|
|
275
|
-
return { qStatistic: q, approximatePValue: Math.max(0, Math.min(1, pValue)) };
|
|
276
|
-
}
|
|
277
|
-
exports.ljungBoxTest = ljungBoxTest;
|
|
278
|
-
/** 标准正态分布 CDF 近似 */
|
|
279
|
-
function normalCDF(x) {
|
|
280
|
-
// Abramowitz and Stegun approximation
|
|
281
|
-
const a1 = 0.254829592;
|
|
282
|
-
const a2 = -0.284496736;
|
|
283
|
-
const a3 = 1.421413741;
|
|
284
|
-
const a4 = -1.453152027;
|
|
285
|
-
const a5 = 1.061405429;
|
|
286
|
-
const p = 0.3275911;
|
|
287
|
-
const sign = x < 0 ? -1 : 1;
|
|
288
|
-
x = Math.abs(x) / Math.sqrt(2);
|
|
289
|
-
const t = 1.0 / (1.0 + p * x);
|
|
290
|
-
const y = 1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * Math.exp(-x * x);
|
|
291
|
-
return 0.5 * (1.0 + sign * y);
|
|
292
|
-
}
|
|
293
|
-
// ============================================================
|
|
294
|
-
// 收益率分布特征
|
|
295
|
-
// ============================================================
|
|
296
|
-
/**
|
|
297
|
-
* 收益率分位数分析
|
|
298
|
-
* @param nav 净值序列
|
|
299
|
-
* @param quantiles 要计算的分位数列表
|
|
300
|
-
*/
|
|
301
|
-
function returnQuantiles(nav, quantiles = [0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99]) {
|
|
302
|
-
const returns = (0, risk_1.navToReturns)(nav);
|
|
303
|
-
const sorted = [...returns].sort((a, b) => a - b);
|
|
304
|
-
const result = new Map();
|
|
305
|
-
for (const q of quantiles) {
|
|
306
|
-
result.set(q, ss.quantileSorted(sorted, q));
|
|
307
|
-
}
|
|
308
|
-
return result;
|
|
309
|
-
}
|
|
310
|
-
exports.returnQuantiles = returnQuantiles;
|
|
311
|
-
/**
|
|
312
|
-
* 偏度的滚动计算
|
|
313
|
-
* @param returns 收益率序列
|
|
314
|
-
* @param window 滚动窗口
|
|
315
|
-
*/
|
|
316
|
-
function rollingSkewness(returns, window = 60) {
|
|
317
|
-
const result = [];
|
|
318
|
-
for (let i = 0; i < returns.length; i++) {
|
|
319
|
-
if (i < window - 1) {
|
|
320
|
-
result.push(null);
|
|
321
|
-
}
|
|
322
|
-
else {
|
|
323
|
-
const slice = returns.slice(i - window + 1, i + 1);
|
|
324
|
-
result.push(ss.sampleSkewness(slice));
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
return result;
|
|
328
|
-
}
|
|
329
|
-
exports.rollingSkewness = rollingSkewness;
|
|
330
|
-
/**
|
|
331
|
-
* 峰度的滚动计算
|
|
332
|
-
* @param returns 收益率序列
|
|
333
|
-
* @param window 滚动窗口
|
|
334
|
-
*/
|
|
335
|
-
function rollingKurtosis(returns, window = 60) {
|
|
336
|
-
const result = [];
|
|
337
|
-
for (let i = 0; i < returns.length; i++) {
|
|
338
|
-
if (i < window - 1) {
|
|
339
|
-
result.push(null);
|
|
340
|
-
}
|
|
341
|
-
else {
|
|
342
|
-
const slice = returns.slice(i - window + 1, i + 1);
|
|
343
|
-
result.push(ss.sampleKurtosis(slice));
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
return result;
|
|
347
|
-
}
|
|
348
|
-
exports.rollingKurtosis = rollingKurtosis;
|
|
349
|
-
// ============================================================
|
|
350
|
-
// GARCH(1,1) 波动率预测(简化实现)
|
|
351
|
-
// ============================================================
|
|
352
|
-
/**
|
|
353
|
-
* GARCH(1,1) 波动率预测 - 简化版
|
|
354
|
-
* 使用矩估计法近似参数,非最大似然估计
|
|
355
|
-
*
|
|
356
|
-
* @param returns 收益率序列
|
|
357
|
-
* @returns 条件方差序列和预测的下一期方差
|
|
358
|
-
*/
|
|
359
|
-
function garch11(returns) {
|
|
360
|
-
const n = returns.length;
|
|
361
|
-
if (n < 30) {
|
|
362
|
-
const v = ss.variance(returns);
|
|
363
|
-
return {
|
|
364
|
-
conditionalVariance: new Array(n).fill(v),
|
|
365
|
-
nextPeriodForecast: v,
|
|
366
|
-
omega: v * 0.1,
|
|
367
|
-
alpha: 0.1,
|
|
368
|
-
beta: 0.8,
|
|
369
|
-
};
|
|
370
|
-
}
|
|
371
|
-
// 简化参数估计(矩估计法)
|
|
372
|
-
const unconditionalVar = ss.variance(returns);
|
|
373
|
-
// 用收益率平方的自相关来估计 alpha + beta
|
|
374
|
-
const squaredReturns = returns.map((r) => r * r);
|
|
375
|
-
const meanSquared = ss.mean(squaredReturns);
|
|
376
|
-
// 估计一阶自相关
|
|
377
|
-
let autocov = 0;
|
|
378
|
-
for (let i = 0; i < n - 1; i++) {
|
|
379
|
-
autocov += (squaredReturns[i] - meanSquared) * (squaredReturns[i + 1] - meanSquared);
|
|
380
|
-
}
|
|
381
|
-
autocov /= n;
|
|
382
|
-
const autoCorr = meanSquared > 0 ? autocov / (ss.variance(squaredReturns)) : 0;
|
|
383
|
-
// 简化的参数估计
|
|
384
|
-
const alphaBeta = Math.max(0.5, Math.min(0.99, autoCorr + 0.8));
|
|
385
|
-
const alpha = Math.max(0.01, Math.min(0.3, (1 - alphaBeta) * 2));
|
|
386
|
-
const beta = alphaBeta - alpha;
|
|
387
|
-
const omega = unconditionalVar * (1 - alpha - beta);
|
|
388
|
-
// 递归计算条件方差
|
|
389
|
-
const conditionalVariance = [unconditionalVar];
|
|
390
|
-
for (let i = 1; i < n; i++) {
|
|
391
|
-
const prevVar = conditionalVariance[i - 1];
|
|
392
|
-
const newVar = omega + alpha * returns[i - 1] * returns[i - 1] + beta * prevVar;
|
|
393
|
-
conditionalVariance.push(Math.max(newVar, 1e-10));
|
|
394
|
-
}
|
|
395
|
-
// 预测下一期
|
|
396
|
-
const lastVar = conditionalVariance[n - 1];
|
|
397
|
-
const lastReturn = returns[n - 1];
|
|
398
|
-
const nextPeriodForecast = omega + alpha * lastReturn * lastReturn + beta * lastVar;
|
|
399
|
-
return { conditionalVariance, nextPeriodForecast, omega, alpha, beta };
|
|
400
|
-
}
|
|
401
|
-
exports.garch11 = garch11;
|
|
402
|
-
//# sourceMappingURL=statistics.js.map
|
package/dist/statistics.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"statistics.js","sourceRoot":"","sources":["../src/statistics.ts"],"names":[],"mappings":"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"}
|
package/dist/technical.d.ts
DELETED
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 技术指标模块 - 趋势、动量、震荡、通道类指标
|
|
3
|
-
* 基于 technicalindicators 库,所有函数接收净值序列作为输入
|
|
4
|
-
*/
|
|
5
|
-
import { NavSeries, MAResult, MACDResult, BollingerResult, ChannelResult, RSIResult, KDJResult, ADXResult, SARResult, MACrossSignal, MAAlignmentResult } from './types';
|
|
6
|
-
/** 简单移动平均线 (SMA) */
|
|
7
|
-
export declare function sma(nav: NavSeries, period: number): MAResult;
|
|
8
|
-
/** 指数移动平均线 (EMA) */
|
|
9
|
-
export declare function ema(nav: NavSeries, period: number): MAResult;
|
|
10
|
-
/** 加权移动平均线 (WMA) */
|
|
11
|
-
export declare function wma(nav: NavSeries, period: number): MAResult;
|
|
12
|
-
/** 双重指数移动平均线 (DEMA) */
|
|
13
|
-
export declare function dema(nav: NavSeries, period: number): MAResult;
|
|
14
|
-
/** 三重指数移动平均线 (TEMA) */
|
|
15
|
-
export declare function tema(nav: NavSeries, period: number): MAResult;
|
|
16
|
-
/** 考夫曼自适应均线 (KAMA) - 手动实现 */
|
|
17
|
-
export declare function kama(nav: NavSeries, period?: number, fast?: number, slow?: number): MAResult;
|
|
18
|
-
/**
|
|
19
|
-
* MACD 指标(DIF / DEA / 柱状线)
|
|
20
|
-
* @param nav 净值序列
|
|
21
|
-
* @param fastPeriod 快线周期(默认12)
|
|
22
|
-
* @param slowPeriod 慢线周期(默认26)
|
|
23
|
-
* @param signalPeriod 信号线周期(默认9)
|
|
24
|
-
*/
|
|
25
|
-
export declare function macd(nav: NavSeries, fastPeriod?: number, slowPeriod?: number, signalPeriod?: number): MACDResult;
|
|
26
|
-
/** RSI(相对强弱指标) */
|
|
27
|
-
export declare function rsi(nav: NavSeries, period?: number): RSIResult;
|
|
28
|
-
/**
|
|
29
|
-
* KDJ 指标
|
|
30
|
-
* @param nav 净值序列
|
|
31
|
-
* @param kPeriod K 周期(默认9)
|
|
32
|
-
* @param kSmooth K 平滑因子(默认3)
|
|
33
|
-
* @param dPeriod D 周期(默认3)
|
|
34
|
-
*/
|
|
35
|
-
export declare function kdj(nav: NavSeries, kPeriod?: number, kSmooth?: number, dPeriod?: number): KDJResult;
|
|
36
|
-
/**
|
|
37
|
-
* 布林带 (Bollinger Bands)
|
|
38
|
-
* @param nav 净值序列
|
|
39
|
-
* @param period 均线周期(默认20)
|
|
40
|
-
* @param stdDev 标准差倍数(默认2)
|
|
41
|
-
*/
|
|
42
|
-
export declare function bollingerBands(nav: NavSeries, period?: number, stdDev?: number): BollingerResult;
|
|
43
|
-
/**
|
|
44
|
-
* 唐奇安通道
|
|
45
|
-
* @param nav 净值序列
|
|
46
|
-
* @param period 回看周期(默认20)
|
|
47
|
-
*/
|
|
48
|
-
export declare function donchianChannel(nav: NavSeries, period?: number): ChannelResult;
|
|
49
|
-
/**
|
|
50
|
-
* 肯特纳通道
|
|
51
|
-
* @param nav 净值序列
|
|
52
|
-
* @param emaPeriod EMA 周期(默认20)
|
|
53
|
-
* @param atrPeriod ATR 周期(默认10)
|
|
54
|
-
* @param multiplier ATR 倍数(默认2)
|
|
55
|
-
*/
|
|
56
|
-
export declare function keltnerChannel(nav: NavSeries, emaPeriod?: number, atrPeriod?: number, multiplier?: number): ChannelResult;
|
|
57
|
-
/** ADX + DI */
|
|
58
|
-
export declare function adx(nav: NavSeries, period?: number): ADXResult;
|
|
59
|
-
/** ATR 近似值(基金净值无日内高低,用日涨跌幅绝对值近似) */
|
|
60
|
-
export declare function atr(nav: NavSeries, period?: number): MAResult;
|
|
61
|
-
/** CCI */
|
|
62
|
-
export declare function cci(nav: NavSeries, period?: number): MAResult;
|
|
63
|
-
/** ROC */
|
|
64
|
-
export declare function roc(nav: NavSeries, period?: number): MAResult;
|
|
65
|
-
/** 动量指标 = 当前净值 - N日前净值 */
|
|
66
|
-
export declare function momentum(nav: NavSeries, period?: number): MAResult;
|
|
67
|
-
/** Williams %R */
|
|
68
|
-
export declare function williamsR(nav: NavSeries, period?: number): MAResult;
|
|
69
|
-
/** 随机 RSI */
|
|
70
|
-
export declare function stochasticRSI(nav: NavSeries, rsiPeriod?: number, stochPeriod?: number, kPeriod?: number, dPeriod?: number): KDJResult;
|
|
71
|
-
/**
|
|
72
|
-
* SAR 抛物线转向
|
|
73
|
-
* @param nav 净值序列
|
|
74
|
-
* @param step 加速因子步长(默认0.02)
|
|
75
|
-
* @param max 最大加速因子(默认0.2)
|
|
76
|
-
*/
|
|
77
|
-
export declare function sar(nav: NavSeries, step?: number, max?: number): SARResult;
|
|
78
|
-
/** TRIX = 三重 EMA 的变化率 */
|
|
79
|
-
export declare function trix(nav: NavSeries, period?: number): MAResult;
|
|
80
|
-
/** DPO = 净值 - N/2+1 日前的 SMA */
|
|
81
|
-
export declare function dpo(nav: NavSeries, period?: number): MAResult;
|
|
82
|
-
/** 乖离率 = (净值 - MA) / MA * 100 */
|
|
83
|
-
export declare function bias(nav: NavSeries, period?: number): MAResult;
|
|
84
|
-
/**
|
|
85
|
-
* 净值百分位 - 当前净值在历史区间中所处的百分位
|
|
86
|
-
* @param nav 净值序列
|
|
87
|
-
* @param lookback 回看窗口(默认全部历史)
|
|
88
|
-
* @returns 0-100 的百分位值
|
|
89
|
-
*/
|
|
90
|
-
export declare function navPercentile(nav: NavSeries, lookback?: number): number;
|
|
91
|
-
/** 检测短期均线与长期均线的交叉信号 */
|
|
92
|
-
export declare function detectCrossSignal(fastMA: MAResult, slowMA: MAResult, lookback?: number): MACrossSignal;
|
|
93
|
-
/**
|
|
94
|
-
* 检测均线多空排列
|
|
95
|
-
* @param maList 从短期到长期排列的均线结果列表
|
|
96
|
-
*/
|
|
97
|
-
export declare function detectMAAlignment(maList: MAResult[]): MAAlignmentResult;
|
|
98
|
-
/**
|
|
99
|
-
* Mass Index - 基于 EMA 的波动范围比率累积,用于识别变盘点
|
|
100
|
-
* @param nav 净值序列
|
|
101
|
-
* @param emaPeriod EMA 周期(默认9)
|
|
102
|
-
* @param sumPeriod 累积周期(默认25)
|
|
103
|
-
*/
|
|
104
|
-
export declare function massIndex(nav: NavSeries, emaPeriod?: number, sumPeriod?: number): MAResult;
|
|
105
|
-
//# sourceMappingURL=technical.d.ts.map
|
package/dist/technical.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"technical.d.ts","sourceRoot":"","sources":["../src/technical.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoBH,OAAO,EACL,SAAS,EACT,QAAQ,EACR,UAAU,EACV,eAAe,EACf,aAAa,EACb,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,aAAa,EACb,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAiCjB,oBAAoB;AACpB,wBAAgB,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAI5D;AAED,oBAAoB;AACpB,wBAAgB,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAI5D;AAED,oBAAoB;AACpB,wBAAgB,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAI5D;AAED,uBAAuB;AACvB,wBAAgB,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAkB7D;AAED,uBAAuB;AACvB,wBAAgB,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAmC7D;AAED,6BAA6B;AAC7B,wBAAgB,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,GAAE,MAAW,EAAE,IAAI,GAAE,MAAU,EAAE,IAAI,GAAE,MAAW,GAAG,QAAQ,CA2BvG;AAMD;;;;;;GAMG;AACH,wBAAgB,IAAI,CAClB,GAAG,EAAE,SAAS,EACd,UAAU,GAAE,MAAW,EACvB,UAAU,GAAE,MAAW,EACvB,YAAY,GAAE,MAAU,GACvB,UAAU,CAsBZ;AAMD,kBAAkB;AAClB,wBAAgB,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,GAAE,MAAW,GAAG,SAAS,CAIlE;AAMD;;;;;;GAMG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,GAAE,MAAU,EAAE,OAAO,GAAE,MAAU,EAAE,OAAO,GAAE,MAAU,GAAG,SAAS,CA4B5G;AAMD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,GAAE,MAAW,EAAE,MAAM,GAAE,MAAU,GAAG,eAAe,CAyBvG;AAMD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,GAAE,MAAW,GAAG,aAAa,CAqBlF;AAMD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,SAAS,EACd,SAAS,GAAE,MAAW,EACtB,SAAS,GAAE,MAAW,EACtB,UAAU,GAAE,MAAU,GACrB,aAAa,CAoBf;AAMD,eAAe;AACf,wBAAgB,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,GAAE,MAAW,GAAG,SAAS,CAmBlE;AAMD,oCAAoC;AACpC,wBAAgB,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,GAAE,MAAW,GAAG,QAAQ,CAajE;AAMD,UAAU;AACV,wBAAgB,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,GAAE,MAAW,GAAG,QAAQ,CAWjE;AAMD,UAAU;AACV,wBAAgB,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,GAAE,MAAW,GAAG,QAAQ,CAIjE;AAMD,0BAA0B;AAC1B,wBAAgB,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,GAAE,MAAW,GAAG,QAAQ,CAUtE;AAMD,kBAAkB;AAClB,wBAAgB,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,GAAE,MAAW,GAAG,QAAQ,CAWvE;AAMD,aAAa;AACb,wBAAgB,aAAa,CAC3B,GAAG,EAAE,SAAS,EACd,SAAS,GAAE,MAAW,EACtB,WAAW,GAAE,MAAW,EACxB,OAAO,GAAE,MAAU,EACnB,OAAO,GAAE,MAAU,GAClB,SAAS,CAiBX;AAMD;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,GAAE,MAAa,EAAE,GAAG,GAAE,MAAY,GAAG,SAAS,CAWrF;AAMD,yBAAyB;AACzB,wBAAgB,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,GAAE,MAAW,GAAG,QAAQ,CAmBlE;AAMD,+BAA+B;AAC/B,wBAAgB,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,GAAE,MAAW,GAAG,QAAQ,CAejE;AAMD,iCAAiC;AACjC,wBAAgB,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,GAAE,MAAW,GAAG,QAAQ,CAclE;AAMD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAUvE;AAMD,uBAAuB;AACvB,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,QAAQ,EAChB,QAAQ,GAAE,MAAU,GACnB,aAAa,CAuBf;AAMD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,iBAAiB,CAuBvE;AAMD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,MAAU,EAAE,SAAS,GAAE,MAAW,GAAG,QAAQ,CA6BjG"}
|