1.0.16 • Published 5 years ago

ohlc-aggregator v1.0.16

Weekly downloads
5
License
ISC
Repository
github
Last release
5 years ago

ohlc-aggregator

NPM NPM Downloads

Aggregates ohlcv candle values into predictable coarse-grained intervals. The intervals should be either minutes, hours, or days.

The difference between this package and other packages is that rather than simply aggregating each n candles into a group, we create predictable interval where the start time of each interval is divisible by n. If some candles from an interval are missing, we still create those interval.

Example 1

In converting 1m to 5m candles, a naive implementation creates only one group for the following 5 candles:

  1. time: 8:59am
  2. time: 9:00am
  3. time: 9:01am
  4. time: 9:02am
  5. time: 9:03am

However, this package creates two groups based on predictable timing intervals, i.e., the start of each timing interval is divisible by 5m:

  • Group 1: 8:55 to 8:59
  • Group 2: 9:00 to 9:05

We create two groups although some candles are missing from each group.

Example 2

Consider these candles:

  1. time: 8:59am
  2. time: 9:00am
  3. time: 9:01am
  4. time: 9:02am
  5. time: 9:03am
  6. time: 9:04am
  7. time: 9:05am
  8. time: 9:06am

A naive implementation will create these groups:

  • Group 1: 8:59 to 9:03, (complete candle)
  • Group 2: 9:04 to 9:06, (incomplete candle)

However, a predictable grouping would be:

  • Group 1: 8:55 to 9:00, (incomplete candle)
  • Group 1: 9:00 to 9:04, (complete candle)
  • Group 2: 9:05 to 9:09, (incomplete candle)

Again, the start of each timing interval is divisible by 5m.

Install

npm i -s ohlc-aggregator

Usage

// Converting 1m to 5m candles
let ohlc_aggregate = require("ohlc-aggregator");
var moment = require("moment");

// Converting 1m candles to 5min candles:
let result = ohlc_aggregate(
  [
    {
      time: moment("10/15/2017 8:59", "M/D/YYYY H:mm").valueOf(), // timestamp in milliseconds
      open: 1,
      high: 5,
      low: 1,
      close: 2,
      volume: 100
    },
    {
      time: moment("10/15/2017 9:00", "M/D/YYYY H:mm").valueOf(), // timestamp in milliseconds
      open: 1,
      high: 5,
      low: 1,
      close: 2,
      volume: 100
    },
    {
      time: moment("10/15/2017 9:01", "M/D/YYYY H:mm").valueOf(), // timestamp in milliseconds
      open: 3,
      high: 10,
      low: 0,
      close: 6,
      volume: 200
    }
  ],
  /*intervalRatio=*/ 5,   // ration between original interval and the desired interval
  /*intervalInSeconds=*/, 5 * 60 // Interval duration in seconds
  /*arrayTimeCoefficient=*/ 1 // Set this to 1000 if the time values are in second
);

console.log("result: ", JSON.stringify(result, null, 1));

See test/test.js for more examples.

1.0.16

5 years ago

1.0.15

5 years ago

1.0.14

5 years ago

1.0.13

5 years ago

1.0.12

5 years ago

1.0.11

5 years ago

1.0.10

5 years ago

1.0.9

5 years ago

1.0.8

5 years ago

1.0.7

5 years ago

1.0.6

5 years ago

1.0.5

5 years ago

1.0.4

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago