JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 3
  • Score
    100M100P100Q40881F
  • License MIT

Quickly calculate moving volume-weighted average prices [aka VWAP or MVWAP] from a stream of OHLCV candles. Uses prefix sums for efficiency.

Package Exports

  • vwap-fast
  • vwap-fast/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (vwap-fast) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

vwap-fast

Quickly calculate moving volume-weighted average prices [aka VWAP or MVWAP] from a stream of OHLCV candles. Uses prefix sums for efficiency.

I haven't tested this much so use at your own risk.

Installation

npm i vwap-fast

Usage

/*
//default config, usually no reason to change it...
var config = {
    maximumRows: 15000, //maximum rows to store [will actually store up to maximumRows+purgeEvery -- then occasionally the extra gets purged/deleted]
    doAutoPurge: true, //enable occasional purging of old candles "beyond the horizon" of maximumRows
    purgeEvery: 15000, //how many extra candles beyond maximumRows are allowed to be stored before purge. set to a higher value to make the purges "rare" because memory re-allocations are slow.
    doShiftValuesDownAfterPurge: true, //during purge, prefix sums are reset to "start from zero" again [improves numerical stability, should not affect results]
}

//example candle
var candle = {
  o: 2.00,
  h: 2.50,
  l: 1.50,
  c: 1.75,
  v: 1000
};
*/

var Vwap = require('vwap-fast');
var vwap = new Vwap(/*config*/); //note - 'new' keyword is optional, works either way

//first we generate and submit 1,000,000 candles
for(var i=0;i<1000000;i++){
    var candle = vwap.generateFakeCandle(); //generate random candle around price $150
    vwap.submitCandle(candle); //submitCandle(candle, useTypicalPrice=true) //typical price is (l+h+c)/3 -- otherwise use closing price
}

//get mvwap for most recent 10,000 periods
var vwap10k = vwap.getVwap(10000) //getVwap(nPeriods >= 1)
console.log(vwap10k);
//150.01489792240628

//more params:
//vwap.totalCandles //total number of candles ever submitted to this vwap [including any that have been purged etc]
//vwap.prefixSums_PriceTimesVolume //array of prefix sums for price x volume
//vwap.prefixSums_Volume //array of prefix sums for volume

stonks