lib/calc.js
// 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