function drawdown
drawdown(
x: array,
mode?: string,
dim?: 0 | 1,
): DrawdownResult

Drawdown.

Calculates drawdown from peak, which represents any continuous losing return period. Returns drawdown array, recovery index, maximum drawdown, and maximum drawdown recovery period.

Returns an object with:

  • dd (drawdown array)
  • ddrecov (drawdown recovery index)
  • maxdd (max drawdown)
  • maxddrecov (max drawdown recovery period): [start period, end period]

Examples

Calculate drawdown metrics for a return series

import { assertEquals } from "jsr:@std/assert";
import { drawdown } from "../../index.ts";

const x = [0.003, 0.026, 0.015, -0.009, 0.014, 0.024, 0.015, 0.066, -0.014, 0.039];
const result = drawdown(x);
assertEquals(result.dd, [0, 0, 0, 0.00900000000000004, 0, 0, 0, 0, 0.013999999999999995, 0]);
assertEquals(result.ddrecov, [0, 0, 0, 4, 0, 0, 0, 0, 9, 0]);
assertEquals(result.maxdd, 0.013999999999999995);
assertEquals(result.maxddrecov, [8, 9]);

Drawdown with geometric mode

import { assertEquals } from "jsr:@std/assert";
import { drawdown } from "../../index.ts";

const x = [0.003, 0.026, 0.015, -0.009, 0.014, 0.024, 0.015, 0.066, -0.014, 0.039];

assertEquals(drawdown(x, "geometric").maxdd, 0.014098924379501637);

Drawdown for multiple assets

import { assertEquals } from "jsr:@std/assert";
import { drawdown } from "../../index.ts";

const x = [0.003, 0.026, 0.015, -0.009, 0.014, 0.024, 0.015, 0.066, -0.014, 0.039];

const y = [-0.005, 0.081, 0.04, -0.037, -0.061, 0.058, -0.049, -0.021, 0.062, 0.058];
assertEquals((drawdown([x, y]) as any).length, 2);

Parameters

Asset/portfolio returns

optional
mode: string

Drawdown calculation mode: 'return' or 'geometric' (defaults to 'return')

optional
dim: 0 | 1

Dimension to operate on (0: row-wise, 1: column-wise) (defaults to 0)

Return Type

Drawdown information object

Throws

If input must be an array or matrix

drawdown(
x: matrix,
mode?: string,
dim?: 0 | 1,
): DrawdownResult[]

Drawdown.

Calculates drawdown from peak, which represents any continuous losing return period. Returns drawdown array, recovery index, maximum drawdown, and maximum drawdown recovery period.

Returns an object with:

  • dd (drawdown array)
  • ddrecov (drawdown recovery index)
  • maxdd (max drawdown)
  • maxddrecov (max drawdown recovery period): [start period, end period]

Examples

Calculate drawdown metrics for a return series

import { assertEquals } from "jsr:@std/assert";
import { drawdown } from "../../index.ts";

const x = [0.003, 0.026, 0.015, -0.009, 0.014, 0.024, 0.015, 0.066, -0.014, 0.039];
const result = drawdown(x);
assertEquals(result.dd, [0, 0, 0, 0.00900000000000004, 0, 0, 0, 0, 0.013999999999999995, 0]);
assertEquals(result.ddrecov, [0, 0, 0, 4, 0, 0, 0, 0, 9, 0]);
assertEquals(result.maxdd, 0.013999999999999995);
assertEquals(result.maxddrecov, [8, 9]);

Drawdown with geometric mode

import { assertEquals } from "jsr:@std/assert";
import { drawdown } from "../../index.ts";

const x = [0.003, 0.026, 0.015, -0.009, 0.014, 0.024, 0.015, 0.066, -0.014, 0.039];

assertEquals(drawdown(x, "geometric").maxdd, 0.014098924379501637);

Drawdown for multiple assets

import { assertEquals } from "jsr:@std/assert";
import { drawdown } from "../../index.ts";

const x = [0.003, 0.026, 0.015, -0.009, 0.014, 0.024, 0.015, 0.066, -0.014, 0.039];

const y = [-0.005, 0.081, 0.04, -0.037, -0.061, 0.058, -0.049, -0.021, 0.062, 0.058];
assertEquals((drawdown([x, y]) as any).length, 2);

Parameters

Asset/portfolio returns

optional
mode: string

Drawdown calculation mode: 'return' or 'geometric' (defaults to 'return')

optional
dim: 0 | 1

Dimension to operate on (0: row-wise, 1: column-wise) (defaults to 0)

Return Type

Drawdown information object

Throws

If input must be an array or matrix