return function sorter (a, b) { var result var x = objectGet(a, property) var y = objectGet(b, property) if (!t.isDefined(x) && t.isDefined(y)) { result = -1 } else if (t.isDefined(x) && !t.isDefined(y)) { result = 1 } else if (!t.isDefined(x) && !t.isDefined(y)) { result = 0 } else if (customOrder && customOrder[property]) { result = customOrder[property].indexOf(x) - customOrder[property].indexOf(y) } else { result = x < y ? -1 : x > y ? 1 : 0 } if (result === 0) { if (props.length) { property = props.shift() return sorter(a, b) } else { props = properties.slice(0) property = props.shift() return 0 } } else { props = properties.slice(0) property = props.shift() return result } }
Object.keys(d[e]).forEach(function (pair) { var de = d[e][pair] de['sma'] || (de['sma'] = {}) var r = de['sma'] r.ansi = '' var close_lookback = lookback.filter(function (tick) { return !!o(tick, 'data.trades.' + e + '.' + pair) }).map(function (tick) { return o(tick, 'data.trades.' + e + '.' + pair + '.close') }) if (close_lookback.length > c.sma_periods - 1) { close_lookback = close_lookback.slice(close_lookback.length - c.sma_periods + 1) } r.samples = close_lookback.length r.last_close = o(tick, 'data.trades.' + e + '.' + pair + '.close') if (!r.last_close) return r.sum = close_lookback.reduce(function (prev, curr) { return prev + curr }, r.last_close) r.value = n(r.sum).divide(close_lookback.length + 1).value() r.samples++ r.close_lookback = close_lookback })
}).map(function (tick) { return o(tick, 'data.trades.' + e + '.' + pair + '.close') })
var close_lookback = lookback.filter(function (tick) { return !!o(tick, 'data.trades.' + e + '.' + pair) }).map(function (tick) {