UNPKG

xza

Version:
85 lines (82 loc) 2.28 kB
// Generated by CoffeeScript 2.3.1 const Big = require('big.js') const _ = require('lodash-core') const calc = { sum: function (arr) { var initialValue, reducer, res initialValue = Big(0) reducer = function (result, current, i, arr) { return result.plus(current) } res = arr.reduce(reducer, initialValue) return parseFloat(res) }, sumBy: function (arr, key) { var newArr newArr = _.map(arr, key) return calc.sum(newArr) }, mean: function (arr) { var res, sum sum = calc.sum(arr) res = Big(sum).div(arr.length) return parseFloat(res) }, meanBy: function (arr, key) { var newArr newArr = _.map(arr, key) return calc.mean(newArr) }, changeIn: function (base, target) { var res res = Big(target) .minus(base) .div(base) .times(100) .round(2) return parseFloat(res) }, addSma: function (range, items, roundNumber) { var d_key, key roundNumber = roundNumber || 0 key = `sma${range}` d_key = `smad${range}` items.forEach(function (item, i, arr) { var refItems, sma if (i < range - 1) { item[key] = null return (item[d_key] = null) } else { refItems = arr.slice(i - (range - 1), +i + 1 || 9e9) sma = calc.meanBy(refItems, 'Close') item[key] = parseFloat(Big(sma).round(roundNumber)) return (item[d_key] = calc.changeIn(sma, item.Close)) } }) return items }, addVwma: function (range, items, roundNumber) { var d_key, key roundNumber = roundNumber || 0 key = `vwma${range}` d_key = `vwmad${range}` items.forEach(function (item, i, arr) { var refItems, sumPrice, sumVolume, vwma if (i < range - 1) { item[key] = null return (item[d_key] = null) } else { refItems = arr.slice(i - (range - 1), +i + 1 || 9e9) sumPrice = calc.sumBy(refItems, function (o) { return o.Close * o.Volume }) sumVolume = calc.sumBy(refItems, 'Volume') vwma = Big(sumPrice).div(sumVolume) item[key] = parseFloat(vwma.round(roundNumber)) return (item[d_key] = calc.changeIn(parseFloat(vwma), item.Close)) } }) return items } } module.exports = calc