2.0.1 • Published 4 years ago

finmath v2.0.1

Weekly downloads
38
License
MIT
Repository
github
Last release
4 years ago

Build Status Coverage

MAINTENANCE WARNING

This module is lack of maintenance.

If you are familiar with python programming maybe you could check stock-pandas which provides powerful statistic indicators support, and is backed by numpy and pandas.

The performance of stock-pandas is many times higher than JavaScript libraries, and can be directly used by machine learning programs.


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 finmath

usage

import {
  ma, dma, ema, sma, wma,
  macd,
  boll,
  sd,
  hhv, llv,
  add, sub, mul, div
} from '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] // OK ✅

[1, undefined, 2, 3] // NOT OK ❌

[1, null, 2, 3] // 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.

License

MIT