-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtalib.js
114 lines (96 loc) · 3.52 KB
/
talib.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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
const dotenv = require("dotenv").config();
const talib = require("talib-binding");
const _ = require("lodash");
const aboveMA = function (closePrices, period) {
let result = talib.MA(closePrices, period);
let value = _.last(result);
let lastPrice = _.last(closePrices);
return lastPrice > value;
};
const belowMA = function (closePrices, period) {
let result = talib.MA(closePrices, period);
let value = _.last(result);
let lastPrice = _.last(closePrices);
return lastPrice < value;
};
const aboveEMA = function (closePrices, period) {
let result = talib.EMA(closePrices, period, talib.MATypes.EMA);
let value = _.last(result);
let lastPrice = _.last(closePrices);
return lastPrice > value;
};
const belowEMA = function (closePrices, period) {
let result = talib.EMA(closePrices, period, talib.MATypes.EMA);
let value = _.last(result);
let lastPrice = _.last(closePrices);
return lastPrice < value;
};
const bullishSMACross = function (closePrices, shortPeriod, longPeriod) {
let result_short = talib.MA(closePrices, shortPeriod);
let result_long = talib.MA(closePrices, longPeriod);
let short_value = _.last(result_short);
let prev_short_value = result_short[result_short.length - 2];
let long_value = _.last(result_long);
let prev_long_value = result_long[result_long.length - 2];
return short_value > long_value && prev_short_value <= prev_long_value;
};
const bearishSMACross = function (closePrices, shortPeriod, longPeriod) {
let result_short = talib.MA(closePrices, shortPeriod);
let result_long = talib.MA(closePrices, longPeriod);
let short_value = _.last(result_short);
let prev_short_value = result_short[result_short.length - 2];
let long_value = _.last(result_long);
let prev_long_value = result_long[result_long.length - 2];
return short_value < long_value && prev_short_value >= prev_long_value;
};
const bullishEMACross = function (closePrices, shortPeriod, longPeriod) {
let result_short = talib.EMA(closePrices, shortPeriod, talib.MATypes.EMA);
let result_long = talib.EMA(closePrices, longPeriod, talib.MATypes.EMA);
let short_value = _.last(result_short);
let prev_short_value = result_short[result_short.length - 2];
let long_value = _.last(result_long);
let prev_long_value = result_long[result_long.length - 2];
return short_value > long_value && prev_short_value <= prev_long_value;
};
const bearishEMACross = function (closePrices, shortPeriod, longPeriod) {
let result_short = talib.EMA(closePrices, shortPeriod, talib.MATypes.EMA);
let result_long = talib.EMA(closePrices, longPeriod, talib.MATypes.EMA);
let short_value = _.last(result_short);
let prev_short_value = result_short[result_short.length - 2];
let long_value = _.last(result_long);
let prev_long_value = result_long[result_long.length - 2];
return short_value < long_value && prev_short_value >= prev_long_value;
};
/*
RSI DETECTION
*/
const isOversold = function (closePrices) {
let rsi = talib.RSI(closePrices, process.env.RSI_DEFAULT_PERIOD);
let value = _.last(rsi);
if (value <= process.env.OVERSOLD_TRESHOLD) {
return true;
}
return false;
};
const isOverbought = function (closePrices) {
let rsi = talib.RSI(closePrices, process.env.RSI_DEFAULT_PERIOD);
let value = _.last(rsi);
if (value <= process.env.OVERBOUGHT_TRESHOLD) {
return true;
}
return false;
};
module.exports = {
aboveMA,
aboveEMA,
belowMA,
belowEMA,
bullishSMACross,
bearishSMACross,
bullishSMACross,
bearishSMACross,
bullishEMACross,
bearishEMACross,
isOverbought,
isOversold,
};