qntjs-lib 1.0.3 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +74 -8
- package/dist/bundle/index.d.ts +466 -207
- package/dist/bundle/index.js +2353 -1767
- package/dist/index.d.ts +2 -0
- package/dist/perf/dd.d.ts +80 -0
- package/dist/perf/distribution.d.ts +43 -0
- package/dist/perf/index.d.ts +5 -0
- package/dist/perf/returns.d.ts +47 -0
- package/dist/perf/volatility.d.ts +61 -0
- package/dist/untyped/index.d.ts +230 -1
- package/dist/untyped/index.js +2 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -2,4 +2,6 @@ export * as math from './math/index.js';
|
|
|
2
2
|
export * as ta from './ta/index.js';
|
|
3
3
|
export * as arr from './arr/arr.js';
|
|
4
4
|
export * as stats from './stats/index.js';
|
|
5
|
+
export * as perf from './perf/index.js';
|
|
6
|
+
export type { MaxDrawdownInfo, DrawdownDurationResult } from './perf/index.js';
|
|
5
7
|
export type { KstOptions, UltoscOptions, IchimokuOptions } from './ta/index.js';
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
export type DrawdownDurationResult = {
|
|
2
|
+
durations: Int32Array;
|
|
3
|
+
maxDuration: number;
|
|
4
|
+
};
|
|
5
|
+
export type MaxDrawdownInfo = {
|
|
6
|
+
maxDrawdown: number;
|
|
7
|
+
peakIndex: number;
|
|
8
|
+
troughIndex: number;
|
|
9
|
+
startIndex: number;
|
|
10
|
+
endIndex: number;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Compute the drawdown series from an equity/price series.
|
|
14
|
+
* For valid points: out[i] = equity[i]/peak - 1 (<= 0). NaNs propagate and do not update the peak.
|
|
15
|
+
* @param equity Array-like equity or price series
|
|
16
|
+
* @returns Float64Array of drawdowns (same length)
|
|
17
|
+
*/
|
|
18
|
+
export declare function dd(equity: ArrayLike<number>): Float64Array;
|
|
19
|
+
/**
|
|
20
|
+
* Compute the maximum drawdown magnitude over the entire series.
|
|
21
|
+
* Returns a positive number (0..+inf) or NaN when no valid points.
|
|
22
|
+
* @param equity Array-like equity or price series
|
|
23
|
+
* @returns Maximum drawdown magnitude (positive) or NaN
|
|
24
|
+
*/
|
|
25
|
+
export declare function maxdd(equity: ArrayLike<number>): number;
|
|
26
|
+
/**
|
|
27
|
+
* Compute detailed information about the maximum drawdown, including peak, trough, and recovery indices.
|
|
28
|
+
* When no valid points exist returns NaN/placeholder indices (-1).
|
|
29
|
+
* @param equity Array-like equity or price series
|
|
30
|
+
* @returns MaxDrawdownInfo with `maxDrawdown`, `peakIndex`, `troughIndex`, `startIndex`, and `endIndex`
|
|
31
|
+
*/
|
|
32
|
+
export declare function maxddDetails(equity: ArrayLike<number>): MaxDrawdownInfo;
|
|
33
|
+
/**
|
|
34
|
+
* Rolling maximum drawdown over a trailing window.
|
|
35
|
+
* For each index i computes the max drawdown observed within the trailing window.
|
|
36
|
+
* @param equity Array-like equity or price series
|
|
37
|
+
* @param window Rolling window length (positive integer)
|
|
38
|
+
* @returns Float64Array of rolling max drawdowns
|
|
39
|
+
*/
|
|
40
|
+
export declare function rollmaxdd(equity: ArrayLike<number>, window: number): Float64Array;
|
|
41
|
+
/**
|
|
42
|
+
* Compute drawdown durations (consecutive periods in current drawdown) and the maximum duration.
|
|
43
|
+
* Positions where equity is NaN are marked with -1.
|
|
44
|
+
* @param equity Array-like equity or price series
|
|
45
|
+
* @returns DrawdownDurationResult { durations: Int32Array, maxDuration: number }
|
|
46
|
+
*/
|
|
47
|
+
export declare function dduration(equity: ArrayLike<number>): DrawdownDurationResult;
|
|
48
|
+
/**
|
|
49
|
+
* Recovery factor: ratio of annualized return (CAGR) to maximum drawdown magnitude.
|
|
50
|
+
* Returns NaN if insufficient data, invalid start value, or zero/NaN max drawdown.
|
|
51
|
+
* @param equity Array-like equity or price series
|
|
52
|
+
* @param freq Periods per year (default 252)
|
|
53
|
+
* @returns Recovery factor or NaN
|
|
54
|
+
*/
|
|
55
|
+
export declare function recoveryFactor(equity: ArrayLike<number>, freq?: number): number;
|
|
56
|
+
/**
|
|
57
|
+
* Calmar ratio: CAGR over a lookback period divided by the max drawdown magnitude over the same period.
|
|
58
|
+
* If `lookbackPeriodYears` is null uses the entire series. Returns NaN on invalid inputs or zero drawdown.
|
|
59
|
+
* @param equity Array-like equity or price series
|
|
60
|
+
* @param lookbackPeriodYears Lookback window in years (null = full span)
|
|
61
|
+
* @param freq Periods per year (default 252)
|
|
62
|
+
* @returns Calmar ratio or NaN
|
|
63
|
+
*/
|
|
64
|
+
export declare function calmarRatio(equity: ArrayLike<number>, lookbackPeriodYears?: number | null, freq?: number): number;
|
|
65
|
+
/**
|
|
66
|
+
* Ulcer Index: measures depth and duration of drawdowns (root-mean-square of depths).
|
|
67
|
+
* Returns NaN for empty input.
|
|
68
|
+
* @param equity Array-like equity or price series
|
|
69
|
+
* @returns Ulcer Index (>=0) or NaN
|
|
70
|
+
*/
|
|
71
|
+
export declare function ulcerIndex(equity: ArrayLike<number>): number;
|
|
72
|
+
/**
|
|
73
|
+
* Rolling Ulcer Index computed over a trailing window.
|
|
74
|
+
* Returns NaN for windows with insufficient valid samples (< minPeriod) or invalid window.
|
|
75
|
+
* @param equity Array-like equity or price series
|
|
76
|
+
* @param window Rolling window length (positive integer)
|
|
77
|
+
* @param minPeriod Minimum number of valid points required in window
|
|
78
|
+
* @returns Float64Array of rolling ulcer index values
|
|
79
|
+
*/
|
|
80
|
+
export declare function rollUlcerIndex(equity: ArrayLike<number>, window: number, minPeriod?: number): Float64Array;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Value-at-Risk (VaR) estimator.
|
|
3
|
+
* Supports `historical` (empirical quantile) and `parametric` (normal) methods.
|
|
4
|
+
* Returns NaN for empty inputs or invalid alpha or when parametric stats are invalid.
|
|
5
|
+
* @param returns Array-like returns series
|
|
6
|
+
* @param alpha Tail probability (default 0.05)
|
|
7
|
+
* @param method 'historical' | 'parametric' (default 'historical')
|
|
8
|
+
* @returns VaR as a number (left-tail) or NaN
|
|
9
|
+
*/
|
|
10
|
+
export declare function valueAtRisk(returns: ArrayLike<number>, alpha?: number, method?: 'historical' | 'parametric'): number;
|
|
11
|
+
/**
|
|
12
|
+
* Expected shortfall (conditional tail expectation) estimator.
|
|
13
|
+
* Supports `historical` (empirical mean of losses <= VaR) and `parametric` (normal) methods.
|
|
14
|
+
* Returns NaN for empty inputs, invalid alpha, or invalid parametric stats.
|
|
15
|
+
* @param returns Array-like returns series
|
|
16
|
+
* @param alpha Tail probability (default 0.05)
|
|
17
|
+
* @param method 'historical' | 'parametric' (default 'historical')
|
|
18
|
+
* @returns Expected shortfall (left-tail) or NaN
|
|
19
|
+
*/
|
|
20
|
+
export declare function expectedShortfall(returns: ArrayLike<number>, alpha?: number, method?: 'historical' | 'parametric'): number;
|
|
21
|
+
/**
|
|
22
|
+
* Tail ratio: mean of upper tail divided by absolute mean of lower tail.
|
|
23
|
+
* Returns NaN for empty inputs, invalid alpha, or when either tail has no observations or lower mean is zero.
|
|
24
|
+
* @param returns Array-like returns series
|
|
25
|
+
* @param alpha Tail probability (default 0.05)
|
|
26
|
+
* @returns Tail ratio or NaN
|
|
27
|
+
*/
|
|
28
|
+
export declare function tailRatio(returns: ArrayLike<number>, alpha?: number): number;
|
|
29
|
+
/**
|
|
30
|
+
* Omega ratio: sum of gains above `requiredReturn` divided by sum of losses below it.
|
|
31
|
+
* Returns NaN for empty inputs or when there is no variation (all gains or all losses zero).
|
|
32
|
+
* @param returns Array-like returns series
|
|
33
|
+
* @param requiredReturn Threshold for gains/losses (default 0)
|
|
34
|
+
* @returns Omega ratio number, Infinity if no losses, or NaN when no variation
|
|
35
|
+
*/
|
|
36
|
+
export declare function omegaRatio(returns: ArrayLike<number>, requiredReturn?: number): number;
|
|
37
|
+
declare const _default: {
|
|
38
|
+
valueAtRisk: typeof valueAtRisk;
|
|
39
|
+
expectedShortfall: typeof expectedShortfall;
|
|
40
|
+
tailRatio: typeof tailRatio;
|
|
41
|
+
omegaRatio: typeof omegaRatio;
|
|
42
|
+
};
|
|
43
|
+
export default _default;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { cagr, cumreturns, logreturns, returns, dailyReturns } from './returns.js';
|
|
2
|
+
export { dd, dduration, maxdd, maxddDetails, recoveryFactor, calmarRatio, rollmaxdd, ulcerIndex, rollUlcerIndex } from './dd.js';
|
|
3
|
+
export type { DrawdownDurationResult, MaxDrawdownInfo } from './dd.js';
|
|
4
|
+
export { sharpe, sortino, rollsharpe, rollsortino, vol, rollvol } from './volatility.js';
|
|
5
|
+
export { valueAtRisk, expectedShortfall, omegaRatio, tailRatio } from './distribution.js';
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compute simple period returns from a level series.
|
|
3
|
+
* For each i>0: returns[i] = source[i]/source[i-1] - 1 when both values are finite and previous != 0.
|
|
4
|
+
* The first element is always NaN. Invalid or non-finite inputs produce NaN at that position.
|
|
5
|
+
* @param source Input level series (prices/equity)
|
|
6
|
+
* @returns Float32Array of simple returns (same length as `source`)
|
|
7
|
+
*/
|
|
8
|
+
export declare function returns(source: ArrayLike<number>): Float32Array;
|
|
9
|
+
/**
|
|
10
|
+
* Compute log returns from a level series.
|
|
11
|
+
* For each i>0: logreturns[i] = log(source[i]/source[i-1]) when both values are finite and previous>0.
|
|
12
|
+
* The first element is always NaN. Invalid or non-positive previous values yield NaN.
|
|
13
|
+
* @param source Input level series (prices/equity)
|
|
14
|
+
* @returns Float32Array of log returns (same length as `source`)
|
|
15
|
+
*/
|
|
16
|
+
export declare function logreturns(source: ArrayLike<number>): Float32Array;
|
|
17
|
+
/**
|
|
18
|
+
* Compute cumulative compound returns from a returns series, skipping NaNs.
|
|
19
|
+
* Cumulative return at i is prod_{j<=i, r_j finite} (1+r_j) - 1; NaN inputs leave an output NaN at that position.
|
|
20
|
+
* @param returns Simple returns series
|
|
21
|
+
* @returns Float64Array of cumulative returns
|
|
22
|
+
*/
|
|
23
|
+
export declare function cumreturns(returns: ArrayLike<number>): Float64Array;
|
|
24
|
+
/**
|
|
25
|
+
* Compute the compound annual growth rate (CAGR) from a returns series.
|
|
26
|
+
* Ignores NaNs. `freq` is the number of periods per year (default 252).
|
|
27
|
+
* @param returns Simple returns series
|
|
28
|
+
* @param freq Periods per year (default 252)
|
|
29
|
+
* @returns CAGR as a number, or NaN when insufficient data
|
|
30
|
+
*/
|
|
31
|
+
export declare function cagr(returns: ArrayLike<number>, freq?: number): number;
|
|
32
|
+
/**
|
|
33
|
+
* Aggregate irregular (event-aligned) returns into calendar-day returns.
|
|
34
|
+
*
|
|
35
|
+
* The function groups `returnsArr` by calendar day (optionally shifted by `tzOffsetMinutes`),
|
|
36
|
+
* compounds returns within each day (prod(1+r)-1) and returns a continuous range of days
|
|
37
|
+
* from the minimum to the maximum observed day. Missing days are filled with zero returns.
|
|
38
|
+
*
|
|
39
|
+
* @param tsMs Array of timestamps (ms since epoch) aligned to `returnsArr`
|
|
40
|
+
* @param returnsArr Array of simple returns aligned to `tsMs`
|
|
41
|
+
* @param tzOffsetMinutes Optional timezone offset in minutes (default 0, UTC)
|
|
42
|
+
* @returns Object { days: number[], dailyReturns: Float32Array }
|
|
43
|
+
*/
|
|
44
|
+
export declare function dailyReturns(tsMs: ArrayLike<number>, returnsArr: ArrayLike<number>, tzOffsetMinutes?: number): {
|
|
45
|
+
days: number[];
|
|
46
|
+
dailyReturns: Float32Array<ArrayBuffer>;
|
|
47
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compute the (annualized) Sharpe ratio for a returns series.
|
|
3
|
+
* Uses NaN-aware mean and sample standard deviation (ddof=1).
|
|
4
|
+
* Returns NaN for empty input, zero or NaN volatility, or invalid mean.
|
|
5
|
+
* @param returns Array-like returns series
|
|
6
|
+
* @param riskFree Annualized risk-free rate (default 0)
|
|
7
|
+
* @param freq Periods per year (default 252)
|
|
8
|
+
* @returns Sharpe ratio (annualized) or NaN
|
|
9
|
+
*/
|
|
10
|
+
export declare function sharpe(returns: ArrayLike<number>, riskFree?: number, freq?: number): number;
|
|
11
|
+
/**
|
|
12
|
+
* Compute the (annualized) Sortino ratio for a returns series.
|
|
13
|
+
* Uses downside deviation (sample corrected) computed over negative excess returns.
|
|
14
|
+
* Requires at least two downside observations; returns NaN otherwise.
|
|
15
|
+
* @param returns Array-like returns series
|
|
16
|
+
* @param requiredReturn Target return to define downside (default 0)
|
|
17
|
+
* @param freq Periods per year (default 252)
|
|
18
|
+
* @param minPeriod Minimum valid periods (unused for scalar Sortino)
|
|
19
|
+
* @returns Sortino ratio (annualized) or NaN
|
|
20
|
+
*/
|
|
21
|
+
export declare function sortino(returns: ArrayLike<number>, requiredReturn?: number, freq?: number, minPeriod?: number): number;
|
|
22
|
+
/**
|
|
23
|
+
* Rolling Sharpe ratio computed over a trailing window.
|
|
24
|
+
* Output is a Float64Array aligned with `returns`; positions before enough data are NaN.
|
|
25
|
+
* @param returns Array-like returns series
|
|
26
|
+
* @param window Rolling window length
|
|
27
|
+
* @param riskFree Annualized risk-free rate (default 0)
|
|
28
|
+
* @param freq Periods per year (default 252)
|
|
29
|
+
* @param minPeriod Minimum number of valid samples required per window (default 1)
|
|
30
|
+
* @returns Float64Array of rolling Sharpe ratios
|
|
31
|
+
*/
|
|
32
|
+
export declare function rollsharpe(returns: ArrayLike<number>, window: number, riskFree?: number, freq?: number, minPeriod?: number): Float64Array;
|
|
33
|
+
/**
|
|
34
|
+
* Rolling Sortino ratio computed over a trailing window using downside deviations.
|
|
35
|
+
* Outputs NaN where insufficient downside or invalid data exists.
|
|
36
|
+
* @param returns Array-like returns series
|
|
37
|
+
* @param window Rolling window length
|
|
38
|
+
* @param requiredReturn Target return to define downside (default 0)
|
|
39
|
+
* @param freq Periods per year (default 252)
|
|
40
|
+
* @param minPeriod Minimum number of valid samples required per window (default 1)
|
|
41
|
+
* @returns Float64Array of rolling Sortino ratios
|
|
42
|
+
*/
|
|
43
|
+
export declare function rollsortino(returns: ArrayLike<number>, window: number, requiredReturn?: number, freq?: number, minPeriod?: number): Float64Array;
|
|
44
|
+
/**
|
|
45
|
+
* Annualized volatility (sample standard deviation) of returns.
|
|
46
|
+
* Uses NaN-aware `stats.stdev` with ddof=1. Returns NaN for empty input or zero/NaN sigma.
|
|
47
|
+
* @param returns Array-like returns series
|
|
48
|
+
* @param freq Periods per year (default 252)
|
|
49
|
+
* @returns Annualized volatility or NaN
|
|
50
|
+
*/
|
|
51
|
+
export declare function vol(returns: ArrayLike<number>, freq?: number): number;
|
|
52
|
+
/**
|
|
53
|
+
* Rolling annualized volatility (sample stddev) over a trailing window.
|
|
54
|
+
* Outputs NaN for windows with insufficient valid samples or zero/NaN sigma.
|
|
55
|
+
* @param returns Array-like returns series
|
|
56
|
+
* @param window Rolling window length
|
|
57
|
+
* @param freq Periods per year (default 252)
|
|
58
|
+
* @param minPeriod Minimum number of valid samples required per window (default 1)
|
|
59
|
+
* @returns Float64Array of rolling volatilities
|
|
60
|
+
*/
|
|
61
|
+
export declare function rollvol(returns: ArrayLike<number>, window: number, freq?: number, minPeriod?: number): Float64Array;
|
package/dist/untyped/index.d.ts
CHANGED
|
@@ -31,6 +31,19 @@ export type IchimokuOptions = {
|
|
|
31
31
|
senkouB?: number;
|
|
32
32
|
};
|
|
33
33
|
|
|
34
|
+
export type DrawdownDurationResult = {
|
|
35
|
+
durations: Int32Array;
|
|
36
|
+
maxDuration: number;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export type MaxDrawdownInfo = {
|
|
40
|
+
maxDrawdown: number;
|
|
41
|
+
peakIndex: number;
|
|
42
|
+
troughIndex: number;
|
|
43
|
+
startIndex: number;
|
|
44
|
+
endIndex: number;
|
|
45
|
+
};
|
|
46
|
+
|
|
34
47
|
declare namespace math {
|
|
35
48
|
/**
|
|
36
49
|
* Element-wise absolute value.
|
|
@@ -1191,4 +1204,220 @@ declare namespace stats {
|
|
|
1191
1204
|
export function zscore(source: ArrayLike<number>, skipna?: boolean): number[];
|
|
1192
1205
|
}
|
|
1193
1206
|
|
|
1194
|
-
|
|
1207
|
+
declare namespace perf {
|
|
1208
|
+
/**
|
|
1209
|
+
* Compute the compound annual growth rate (CAGR) from a returns series.
|
|
1210
|
+
* Ignores NaNs. `freq` is the number of periods per year (default 252).
|
|
1211
|
+
* @param returns Simple returns series
|
|
1212
|
+
* @param freq Periods per year (default 252)
|
|
1213
|
+
* @returns CAGR as a number, or NaN when insufficient data
|
|
1214
|
+
*/
|
|
1215
|
+
export function cagr(returns: ArrayLike<number>, freq?: number): number;
|
|
1216
|
+
/**
|
|
1217
|
+
* Calmar ratio: CAGR over a lookback period divided by the max drawdown magnitude over the same period.
|
|
1218
|
+
* If `lookbackPeriodYears` is null uses the entire series. Returns NaN on invalid inputs or zero drawdown.
|
|
1219
|
+
* @param equity Array-like equity or price series
|
|
1220
|
+
* @param lookbackPeriodYears Lookback window in years (null = full span)
|
|
1221
|
+
* @param freq Periods per year (default 252)
|
|
1222
|
+
* @returns Calmar ratio or NaN
|
|
1223
|
+
*/
|
|
1224
|
+
export function calmarRatio(equity: ArrayLike<number>, lookbackPeriodYears?: number | null, freq?: number): number;
|
|
1225
|
+
/**
|
|
1226
|
+
* Compute cumulative compound returns from a returns series, skipping NaNs.
|
|
1227
|
+
* Cumulative return at i is prod_{j<=i, r_j finite} (1+r_j) - 1; NaN inputs leave an output NaN at that position.
|
|
1228
|
+
* @param returns Simple returns series
|
|
1229
|
+
* @returns Float64Array of cumulative returns
|
|
1230
|
+
*/
|
|
1231
|
+
export function cumreturns(returns: ArrayLike<number>): number[];
|
|
1232
|
+
/**
|
|
1233
|
+
* Aggregate irregular (event-aligned) returns into calendar-day returns.
|
|
1234
|
+
*
|
|
1235
|
+
* The function groups `returnsArr` by calendar day (optionally shifted by `tzOffsetMinutes`),
|
|
1236
|
+
* compounds returns within each day (prod(1+r)-1) and returns a continuous range of days
|
|
1237
|
+
* from the minimum to the maximum observed day. Missing days are filled with zero returns.
|
|
1238
|
+
*
|
|
1239
|
+
* @param tsMs Array of timestamps (ms since epoch) aligned to `returnsArr`
|
|
1240
|
+
* @param returnsArr Array of simple returns aligned to `tsMs`
|
|
1241
|
+
* @param tzOffsetMinutes Optional timezone offset in minutes (default 0, UTC)
|
|
1242
|
+
* @returns Object { days: number[], dailyReturns: Float32Array }
|
|
1243
|
+
*/
|
|
1244
|
+
export function dailyReturns(tsMs: ArrayLike<number>, returnsArr: ArrayLike<number>, tzOffsetMinutes?: number): {
|
|
1245
|
+
days: number[];
|
|
1246
|
+
dailyReturns: Float32Array<ArrayBuffer>;
|
|
1247
|
+
};
|
|
1248
|
+
/**
|
|
1249
|
+
* Compute the drawdown series from an equity/price series.
|
|
1250
|
+
* For valid points: out[i] = equity[i]/peak - 1 (<= 0). NaNs propagate and do not update the peak.
|
|
1251
|
+
* @param equity Array-like equity or price series
|
|
1252
|
+
* @returns Float64Array of drawdowns (same length)
|
|
1253
|
+
*/
|
|
1254
|
+
export function dd(equity: ArrayLike<number>): number[];
|
|
1255
|
+
/**
|
|
1256
|
+
* Compute drawdown durations (consecutive periods in current drawdown) and the maximum duration.
|
|
1257
|
+
* Positions where equity is NaN are marked with -1.
|
|
1258
|
+
* @param equity Array-like equity or price series
|
|
1259
|
+
* @returns DrawdownDurationResult { durations: Int32Array, maxDuration: number }
|
|
1260
|
+
*/
|
|
1261
|
+
export function dduration(equity: ArrayLike<number>): DrawdownDurationResult;
|
|
1262
|
+
/**
|
|
1263
|
+
* Expected shortfall (conditional tail expectation) estimator.
|
|
1264
|
+
* Supports `historical` (empirical mean of losses <= VaR) and `parametric` (normal) methods.
|
|
1265
|
+
* Returns NaN for empty inputs, invalid alpha, or invalid parametric stats.
|
|
1266
|
+
* @param returns Array-like returns series
|
|
1267
|
+
* @param alpha Tail probability (default 0.05)
|
|
1268
|
+
* @param method 'historical' | 'parametric' (default 'historical')
|
|
1269
|
+
* @returns Expected shortfall (left-tail) or NaN
|
|
1270
|
+
*/
|
|
1271
|
+
export function expectedShortfall(returns: ArrayLike<number>, alpha?: number, method?: 'historical' | 'parametric'): number;
|
|
1272
|
+
/**
|
|
1273
|
+
* Compute log returns from a level series.
|
|
1274
|
+
* For each i>0: logreturns[i] = log(source[i]/source[i-1]) when both values are finite and previous>0.
|
|
1275
|
+
* The first element is always NaN. Invalid or non-positive previous values yield NaN.
|
|
1276
|
+
* @param source Input level series (prices/equity)
|
|
1277
|
+
* @returns Float32Array of log returns (same length as `source`)
|
|
1278
|
+
*/
|
|
1279
|
+
export function logreturns(source: ArrayLike<number>): Float32Array;
|
|
1280
|
+
/**
|
|
1281
|
+
* Compute the maximum drawdown magnitude over the entire series.
|
|
1282
|
+
* Returns a positive number (0..+inf) or NaN when no valid points.
|
|
1283
|
+
* @param equity Array-like equity or price series
|
|
1284
|
+
* @returns Maximum drawdown magnitude (positive) or NaN
|
|
1285
|
+
*/
|
|
1286
|
+
export function maxdd(equity: ArrayLike<number>): number;
|
|
1287
|
+
/**
|
|
1288
|
+
* Compute detailed information about the maximum drawdown, including peak, trough, and recovery indices.
|
|
1289
|
+
* When no valid points exist returns NaN/placeholder indices (-1).
|
|
1290
|
+
* @param equity Array-like equity or price series
|
|
1291
|
+
* @returns MaxDrawdownInfo with `maxDrawdown`, `peakIndex`, `troughIndex`, `startIndex`, and `endIndex`
|
|
1292
|
+
*/
|
|
1293
|
+
export function maxddDetails(equity: ArrayLike<number>): MaxDrawdownInfo;
|
|
1294
|
+
/**
|
|
1295
|
+
* Omega ratio: sum of gains above `requiredReturn` divided by sum of losses below it.
|
|
1296
|
+
* Returns NaN for empty inputs or when there is no variation (all gains or all losses zero).
|
|
1297
|
+
* @param returns Array-like returns series
|
|
1298
|
+
* @param requiredReturn Threshold for gains/losses (default 0)
|
|
1299
|
+
* @returns Omega ratio number, Infinity if no losses, or NaN when no variation
|
|
1300
|
+
*/
|
|
1301
|
+
export function omegaRatio(returns: ArrayLike<number>, requiredReturn?: number): number;
|
|
1302
|
+
/**
|
|
1303
|
+
* Recovery factor: ratio of annualized return (CAGR) to maximum drawdown magnitude.
|
|
1304
|
+
* Returns NaN if insufficient data, invalid start value, or zero/NaN max drawdown.
|
|
1305
|
+
* @param equity Array-like equity or price series
|
|
1306
|
+
* @param freq Periods per year (default 252)
|
|
1307
|
+
* @returns Recovery factor or NaN
|
|
1308
|
+
*/
|
|
1309
|
+
export function recoveryFactor(equity: ArrayLike<number>, freq?: number): number;
|
|
1310
|
+
/**
|
|
1311
|
+
* Compute simple period returns from a level series.
|
|
1312
|
+
* For each i>0: returns[i] = source[i]/source[i-1] - 1 when both values are finite and previous != 0.
|
|
1313
|
+
* The first element is always NaN. Invalid or non-finite inputs produce NaN at that position.
|
|
1314
|
+
* @param source Input level series (prices/equity)
|
|
1315
|
+
* @returns Float32Array of simple returns (same length as `source`)
|
|
1316
|
+
*/
|
|
1317
|
+
export function returns(source: ArrayLike<number>): Float32Array;
|
|
1318
|
+
/**
|
|
1319
|
+
* Rolling Ulcer Index computed over a trailing window.
|
|
1320
|
+
* Returns NaN for windows with insufficient valid samples (< minPeriod) or invalid window.
|
|
1321
|
+
* @param equity Array-like equity or price series
|
|
1322
|
+
* @param window Rolling window length (positive integer)
|
|
1323
|
+
* @param minPeriod Minimum number of valid points required in window
|
|
1324
|
+
* @returns Float64Array of rolling ulcer index values
|
|
1325
|
+
*/
|
|
1326
|
+
export function rollUlcerIndex(equity: ArrayLike<number>, window: number, minPeriod?: number): number[];
|
|
1327
|
+
/**
|
|
1328
|
+
* Rolling maximum drawdown over a trailing window.
|
|
1329
|
+
* For each index i computes the max drawdown observed within the trailing window.
|
|
1330
|
+
* @param equity Array-like equity or price series
|
|
1331
|
+
* @param window Rolling window length (positive integer)
|
|
1332
|
+
* @returns Float64Array of rolling max drawdowns
|
|
1333
|
+
*/
|
|
1334
|
+
export function rollmaxdd(equity: ArrayLike<number>, window: number): number[];
|
|
1335
|
+
/**
|
|
1336
|
+
* Rolling Sharpe ratio computed over a trailing window.
|
|
1337
|
+
* Output is a Float64Array aligned with `returns`; positions before enough data are NaN.
|
|
1338
|
+
* @param returns Array-like returns series
|
|
1339
|
+
* @param window Rolling window length
|
|
1340
|
+
* @param riskFree Annualized risk-free rate (default 0)
|
|
1341
|
+
* @param freq Periods per year (default 252)
|
|
1342
|
+
* @param minPeriod Minimum number of valid samples required per window (default 1)
|
|
1343
|
+
* @returns Float64Array of rolling Sharpe ratios
|
|
1344
|
+
*/
|
|
1345
|
+
export function rollsharpe(returns: ArrayLike<number>, window: number, riskFree?: number, freq?: number, minPeriod?: number): number[];
|
|
1346
|
+
/**
|
|
1347
|
+
* Rolling Sortino ratio computed over a trailing window using downside deviations.
|
|
1348
|
+
* Outputs NaN where insufficient downside or invalid data exists.
|
|
1349
|
+
* @param returns Array-like returns series
|
|
1350
|
+
* @param window Rolling window length
|
|
1351
|
+
* @param requiredReturn Target return to define downside (default 0)
|
|
1352
|
+
* @param freq Periods per year (default 252)
|
|
1353
|
+
* @param minPeriod Minimum number of valid samples required per window (default 1)
|
|
1354
|
+
* @returns Float64Array of rolling Sortino ratios
|
|
1355
|
+
*/
|
|
1356
|
+
export function rollsortino(returns: ArrayLike<number>, window: number, requiredReturn?: number, freq?: number, minPeriod?: number): number[];
|
|
1357
|
+
/**
|
|
1358
|
+
* Rolling annualized volatility (sample stddev) over a trailing window.
|
|
1359
|
+
* Outputs NaN for windows with insufficient valid samples or zero/NaN sigma.
|
|
1360
|
+
* @param returns Array-like returns series
|
|
1361
|
+
* @param window Rolling window length
|
|
1362
|
+
* @param freq Periods per year (default 252)
|
|
1363
|
+
* @param minPeriod Minimum number of valid samples required per window (default 1)
|
|
1364
|
+
* @returns Float64Array of rolling volatilities
|
|
1365
|
+
*/
|
|
1366
|
+
export function rollvol(returns: ArrayLike<number>, window: number, freq?: number, minPeriod?: number): number[];
|
|
1367
|
+
/**
|
|
1368
|
+
* Compute the (annualized) Sharpe ratio for a returns series.
|
|
1369
|
+
* Uses NaN-aware mean and sample standard deviation (ddof=1).
|
|
1370
|
+
* Returns NaN for empty input, zero or NaN volatility, or invalid mean.
|
|
1371
|
+
* @param returns Array-like returns series
|
|
1372
|
+
* @param riskFree Annualized risk-free rate (default 0)
|
|
1373
|
+
* @param freq Periods per year (default 252)
|
|
1374
|
+
* @returns Sharpe ratio (annualized) or NaN
|
|
1375
|
+
*/
|
|
1376
|
+
export function sharpe(returns: ArrayLike<number>, riskFree?: number, freq?: number): number;
|
|
1377
|
+
/**
|
|
1378
|
+
* Compute the (annualized) Sortino ratio for a returns series.
|
|
1379
|
+
* Uses downside deviation (sample corrected) computed over negative excess returns.
|
|
1380
|
+
* Requires at least two downside observations; returns NaN otherwise.
|
|
1381
|
+
* @param returns Array-like returns series
|
|
1382
|
+
* @param requiredReturn Target return to define downside (default 0)
|
|
1383
|
+
* @param freq Periods per year (default 252)
|
|
1384
|
+
* @param minPeriod Minimum valid periods (unused for scalar Sortino)
|
|
1385
|
+
* @returns Sortino ratio (annualized) or NaN
|
|
1386
|
+
*/
|
|
1387
|
+
export function sortino(returns: ArrayLike<number>, requiredReturn?: number, freq?: number, minPeriod?: number): number;
|
|
1388
|
+
/**
|
|
1389
|
+
* Tail ratio: mean of upper tail divided by absolute mean of lower tail.
|
|
1390
|
+
* Returns NaN for empty inputs, invalid alpha, or when either tail has no observations or lower mean is zero.
|
|
1391
|
+
* @param returns Array-like returns series
|
|
1392
|
+
* @param alpha Tail probability (default 0.05)
|
|
1393
|
+
* @returns Tail ratio or NaN
|
|
1394
|
+
*/
|
|
1395
|
+
export function tailRatio(returns: ArrayLike<number>, alpha?: number): number;
|
|
1396
|
+
/**
|
|
1397
|
+
* Ulcer Index: measures depth and duration of drawdowns (root-mean-square of depths).
|
|
1398
|
+
* Returns NaN for empty input.
|
|
1399
|
+
* @param equity Array-like equity or price series
|
|
1400
|
+
* @returns Ulcer Index (>=0) or NaN
|
|
1401
|
+
*/
|
|
1402
|
+
export function ulcerIndex(equity: ArrayLike<number>): number;
|
|
1403
|
+
/**
|
|
1404
|
+
* Value-at-Risk (VaR) estimator.
|
|
1405
|
+
* Supports `historical` (empirical quantile) and `parametric` (normal) methods.
|
|
1406
|
+
* Returns NaN for empty inputs or invalid alpha or when parametric stats are invalid.
|
|
1407
|
+
* @param returns Array-like returns series
|
|
1408
|
+
* @param alpha Tail probability (default 0.05)
|
|
1409
|
+
* @param method 'historical' | 'parametric' (default 'historical')
|
|
1410
|
+
* @returns VaR as a number (left-tail) or NaN
|
|
1411
|
+
*/
|
|
1412
|
+
export function valueAtRisk(returns: ArrayLike<number>, alpha?: number, method?: 'historical' | 'parametric'): number;
|
|
1413
|
+
/**
|
|
1414
|
+
* Annualized volatility (sample standard deviation) of returns.
|
|
1415
|
+
* Uses NaN-aware `stats.stdev` with ddof=1. Returns NaN for empty input or zero/NaN sigma.
|
|
1416
|
+
* @param returns Array-like returns series
|
|
1417
|
+
* @param freq Periods per year (default 252)
|
|
1418
|
+
* @returns Annualized volatility or NaN
|
|
1419
|
+
*/
|
|
1420
|
+
export function vol(returns: ArrayLike<number>, freq?: number): number;
|
|
1421
|
+
}
|
|
1422
|
+
|
|
1423
|
+
export { math, ta, arr, stats, perf };
|
package/dist/untyped/index.js
CHANGED
|
@@ -24,6 +24,7 @@ export const math = wrapNamespace(core.math || {});
|
|
|
24
24
|
export const ta = wrapNamespace(core.ta || {});
|
|
25
25
|
export const arr = wrapNamespace(core.arr || {});
|
|
26
26
|
export const stats = wrapNamespace(core.stats || {});
|
|
27
|
+
export const perf = wrapNamespace(core.perf || {});
|
|
27
28
|
|
|
28
|
-
const _default = { math, ta, arr, stats };
|
|
29
|
+
const _default = { math, ta, arr, stats, perf };
|
|
29
30
|
export default _default;
|