0.0.125 • Published 7 months ago

vwap-fast v0.0.125

Weekly downloads
-
License
MIT
Repository
-
Last release
7 months ago

vwap-fast

Quickly calculate moving volume-weighted average prices aka VWAP or MVWAP from a stream of OHLCV candles. Uses prefix sums in static "rolling" arrays for efficiency.

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

Installation

npm i vwap-fast

Usage

//example candle -- can use {o h l c v} or {open high low close volume} 
// var candle = {
//     o: 1,
//     h: 1,
//     l: 1,
//     c: 1,
//     v: 1000
// };

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

//first we generate 1,000,000 candles
for(var i=0;i<1000000;i++){
    var candle = vwap.generateFakeCandle(); //generate random candle around price $150 {o h l c v}
    //submitCandle(candle, useTypicalPrice=true, doAutoShift=true) 
    // -- typical price is (l+h+c)/3 -- otherwise use closing price
    // -- doAutoShift resets the zero-th prefix sum to zero every 
    // time the array "rolls over" to increase numeric stability 
    // [for very large runs where the prefix sums may overflow or lose precision]
    vwap.submitCandle(candle);
}

//or submit bulk with vwap.submitCandles(candles)

//get mvwap for 1000 periods
var vwap1k = vwap.getVwap(1000) //getVwap(nPeriods >= 1)

//see also getVwapNPeriodsAgo(nPeriodsInVwap, nPeriodsAgo) 
//see also lastPriceIsBelowVwaps(listOfPeriods) ==> true if most recent price below all vwap periods in input 
//see also submitAndTestCandles = function(_candles, listOfPeriods, useTypicalPrice=true, doAutoShift=true){
// _this.submitCandles(_candles, useTypicalPrice, doAutoShift);
// return lastPriceIsBelowVwaps(listOfPeriods);
// }

console.log(vwap1k);
//150.01489792240628

//more fields:
//vwap.totalCandles //total number of candles ever submitted to this vwap [including any that have been purged etc]
//vwap.prefixSums_PriceTimesVolume //rolling array of prefix sums for price x volume
//vwap.prefixSums_Volume //rolling array of prefix sums for volume
//vwap.currentArrayIndex //current index for "rolling" arrays. loops from 0...maximumPeriods

//apply to candles arr as indicator
//vwap.applyVwapsToCandles(candles, [arrOfPeriods])
//candle each get new fields like
//     vwap20: 15261.205067920584,
//     vwap60: 15261.205067920584,
//     vwap180: 15261.205067920584,
//     vwap240: 15261.205067920584,
//     belowAllVwaps: false,
//     aboveAllVwaps: true

stonks

0.0.125

7 months ago

0.0.123

7 months ago

0.0.117

11 months ago

0.0.116

11 months ago

0.0.115

11 months ago

0.0.119

11 months ago

0.0.118

11 months ago

0.0.122

11 months ago

0.0.121

11 months ago

0.0.114

1 year ago

0.0.113

2 years ago

0.0.112

2 years ago

0.0.111

2 years ago

0.0.11

2 years ago

0.0.1

2 years ago