forked from DeviaVir/zenbot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ta_ema.js
59 lines (53 loc) · 1.79 KB
/
ta_ema.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
var talib = require('talib')
module.exports = function ta_ema (s, length) {
return new Promise(function(resolve, reject) {
// create object for talib. only close is used for now but rest might come in handy
if (!s.marketData) {
s.marketData = { open: [], close: [], high: [], low: [], volume: [] }
}
if (s.lookback.length > s.marketData.close.length) {
for (var i = (s.lookback.length - s.marketData.close.length) - 1; i >= 0; i--) {
s.marketData.close.push(s.lookback[i].close)
}
//dont calculate until we have enough data
if (s.marketData.close.length >= length) {
//fillup marketData for talib.
//this might need improvment for performance.
//for (var i = 0; i < length; i++) {
// s.marketData.close.push(s.lookback[i].close);
//}
//fillup marketData for talib.
let tmpMarket = s.marketData.close.slice()
//add current period
tmpMarket.push(s.period.close)
//doublecheck length.
if (tmpMarket.length >= length) {
talib.execute({
name: 'EMA',
startIdx: 0,
endIdx: tmpMarket.length -1,
inReal: tmpMarket,
optInTimePeriod: length
}, function (err, result) {
if (err) {
console.log(err)
reject(err, result)
return
}
//Result format: (note: outReal can have multiple items in the array)
// {
// begIndex: 8,
// nbElement: 1,
// result: { outReal: [ 1820.8621111111108 ] }
// }
resolve({
'outReal': result.result.outReal[(result.nbElement - 1)],
})
})
}
} else {
resolve()
}
}
})
}