@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.
- package/.github/workflows/publish.yml +79 -0
- package/AGENTS.md +322 -0
- package/dist/index.cjs +1615 -0
- package/dist/index.d.cts +779 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.mjs +1518 -0
- package/package.json +10 -29
- 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/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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"}
|
package/dist/statistics.d.ts
DELETED
|
@@ -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
|
package/dist/statistics.d.ts.map
DELETED
|
@@ -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"}
|