# @winner-fed/finmath

0.0.2 • Public • Published

# @winner-fed/finmath

The complete collection of mathematical utility methods for FinTech , including:

And all finmath methods also handle empty values.

## install

`\$ npm i @winner-fed/finmath`

## usage

```import { ma, dma, ema, sma, wma, macd, boll, sd, hhv, llv, add, subtract, multiply, divide } from '@winner-fed/finmath';

ma([1, 2, 3, 4, 5], 2);
// [<1 empty item>, 1.5, 2.5, 3.5, 4.5]```

## Simple Moving Average: `ma(data, size)`

`type Data = EmptyableArray<number>;`
• data `Data` the collection of data inside which empty values are allowed. Empty values are useful if a stock is suspended.
• size `number` the size of the periods.

Returns `Data`

Type `Array<number|Empty>` represents an array of numbers or empty items. And every method of `finmath` does NOT accepts items that are not numbers.

`[1, , 2, 3][(1, undefined, 2, 3)][(1, null, 2, 3)]; // OK ✅ // NOT OK ❌ // NOT OK ❌`

#### Special Cases

```// If the size is less than `1`
ma([1, 2, 3], 0.5); // [1, 2, 3]

// If the size is larger than data length
ma([1, 2, 3], 5); // [<3 empty items>]

ma([, 1, , 3, 4, 5], 2);
// [<2 empty items>, 0.5, 1.5, 3.5, 4.5]```

And all of the other moving average methods have similar mechanism.

## Dynamic Weighted Moving Average: `dma(data, alpha, noHead)`

• data
• alpha `Data` the coefficient or list of coefficients `alpha` represents the degree of weighting decrease for each datum.
• If `alpha` is a number, then the weighting decrease for each datum is the same.
• If `alpha` larger than `1` is invalid, then the return value will be an empty array of the same length of the original data.
• If `alpha` is an array, then it could provide different decreasing degree for each datum.
• noHead `Boolean=` whether we should abandon the first DMA.

Returns `Data`

```dma([1, 2, 3], 2); // [<3 empty items>]

dma([1, 2, 3], 0.5); // [1, 1.5, 2.25]

dma([1, 2, 3, 4, 5], [0.1, 0.2, 0.1]);
// [1, 1.2, 1.38]```

## Exponential Moving Average: `ema(data, size)`

Calulates the most frequent used exponential average which covers about 86% of the total weight (when `alpha = 2 / (N + 1)`).

• data
• size `Number` the size of the periods.

Returns `Data`

## Smoothed Moving Average: `sma(data, size, times)`

Also known as the modified moving average or running moving average, with `alpha = times / size`.

• data
• size
• times? `Number=1`

Returns `Data`

## Weighted Moving Average: `wma(data, size)`

Calculates convolution of the datum points with a fixed weighting function.

Returns `Data`

## MACD: macd(data, slowPeriods?, fastPeriods?, signalPeriods?)

MACD, short for Moving Average Convergence / Divergence, is a trading indicator used in technical analysis of stock prices, created by Gerald Appel in the late 1970s.

• data `Data` the collection of prices
• slowPeriods? `number=26` the size of slow periods. Defaults to `26`
• fastPeriods? `number=12` the size of fast periods. Defaults to `12`
• signalPeriods? `number=9` the size of periods to calculate the MACD signal line.

Returns `MACDGraph`

```macd(data);

// which returns:
// {
//   MACD: <Array>,
//   signal: <Array>,
//   histogram: <Array>
// }```

### struct `MACDGraph`

• MACD `Data` the difference between EMAs of the fast periods and EMAs of the slow periods.
• signal `Data` the EMAs of the `MACD`
• histogram `Data` `MACD` minus `signal`

In some countries, such as China, the three series above are commonly known as:

```MACD       -> DIF
signal     -> DEA
histogram  -> MACD```

## Bollinger Bands: boll(data, size?, times?, options?)

```boll([1, 2, 4, 8], 2, 2);
// {
//   upper: [, 2.5, 5, 10],
//   mid  : [, 1.5, 3, 6],
//   lower: [, 0.5, 1, 2]
// }```
• data `Data` the collection of data
• size? `Number=20` the period size, defaults to `20`
• times? `Number=2` the times of standard deviation between the upper band and the moving average.
• options? `Object=` optional options
• ma? `Data=` the moving averages of the provided `datum` and period `size`. This option is used to prevent duplicate calculation of moving average.
• sd? `Data=` the standard average of the provided `datum` and period `size`

Returns `Array<Band>` the array of the `Band` object.

```interface Band {
// the value of the upper band
upper: number;
// the value middle band (simple moving average)
mid: number;
// the value of the lower band
lower: number;
}```

## Standard deviations: sd(data, size)

• data `Data` the collection of data
• size `number` the sample size of

Returns `Data` the array of standard deviations.

```sd([1, 2, 4, 8], 2); // [<1 empty item>, 0.5, 1, 2]

sd([1, 2, 3, 4, 5, 6], 4);
// [
//   <3 empty items>,
//   1.118033988749895,
//   1.118033988749895,
//   1.118033988749895
// ]```

## Highest High Values: hhv(data, periods)

• data `Data` the array of closing prices.
• periods `number` the size of periods

Returns `Data` the highest high values of closing prices over the preceding `periods` periods (periods includes the current time).

```const array = [1, 2, 4, 1];

hhv(array, 2); // [, 2, 4, 4]
hhv(array); // 4
hhv(array, 5); // [<4 empty items>]
hhv(array, 1); // [1, 2, 4, 1]

hhv(array, 2); // [, 1, 2, 2]```

## Lowest Low Values: llv(data, periods)

Instead, returns `Data` the lowest low values.

## Package Sidebar

### Install

`npm i @winner-fed/finmath`

6

0.0.2

MIT

181 kB

6