/
keltnerChannels.src.js
72 lines (65 loc) · 2.17 KB
/
keltnerChannels.src.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
var label,
emaLabel;
function getRunUpCount (emaPeriods, atrPeriods, atrMultiplier) {
return Math.max(emaPeriods, atrPeriods) * 2;
}
function getBufferSize (emaPeriods, atrPeriods, atrMultiplier) {
return emaPeriods;
}
function validate (emaPeriods, atrPeriods, atrMultiplier) {
if (typeof emaPeriods !== "number") {
error("Keltner Channels EMA periods must be a number");
}
if (emaPeriods % 1 !== 0) {
error("Keltner Channels EMA periods must be an integer");
}
if (emaPeriods > 100) {
error("Keltner Channels EMA maximum periods is 100");
}
if (emaPeriods <= 0) {
error("Keltner Channels EMA periods must be greater than 0");
}
if (typeof atrPeriods !== "number") {
error("Keltner Channels Average True Range periods must be a number");
}
if (atrPeriods % 1 !== 0) {
error("Keltner Channels Average True Range periods must be an integer");
}
if (atrPeriods > 100) {
error("Keltner Channels Average True Range maximum periods is 100");
}
if (atrPeriods <= 0) {
error("Keltner Channels Average True Range periods must be greater than zero");
}
if (typeof atrMultiplier !== "number") {
error("Keltner Channels Average True Range multiplier must be a number");
}
if (atrMultiplier <= 0) {
error("Keltner Channels Average True Range multiplier must be greater than zero");
}
}
function onStart (emaPeriods, atrPeriods, atrMultiplier) {
label = "Keltner Channels (" + emaPeriods + "," + atrPeriods + "," + atrMultiplier + ")";
emaLabel = "EMA (" + emaPeriods + ")";
}
function onIntervalClose (emaPeriods, atrPeriods, atrMultiplier) {
var ema = ema(emaPeriods),
atr = atr(atrPeriods);
if (ema !== null && atr !== null) {
// Will be converted to envelope
return [{
name: label,
value: ema - (atr * atrMultiplier),
color: "#7cb5ec"
}, {
value: ema + (atr * atrMultiplier)
}, {
name: emaLabel,
value: ema,
color: "#7cb5ec",
dashStyle: "Dash"
}];
} else {
return null;
}
}