@winner-fed/finmath
TypeScript icon, indicating that this package has built-in type declarations

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.

Table of Contents

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.

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 0.0.2
    1
    • latest

Version History

  • Version
    Downloads (Last 7 Days)
    • Published
  • 0.0.2
    1
  • 0.0.1
    0

Package Sidebar

Install

npm i @winner-fed/finmath

Weekly Downloads

1

Version

0.0.2

License

MIT

Unpacked Size

181 kB

Total Files

6

Last publish

Collaborators

  • winner-fed