HTMLcopy
1
<div id="container"></div>
CSScopy
7
1
html, body, #container {
2
width: 100%;
3
height: 100%;
4
margin: 0;
5
padding: 0;
6
background: white;
7
}
JavaScriptcopy
x
1
anychart.onDocumentReady(function () {
2
anychart.format.locales.default.numberLocale.decimalsCount = 2;
3
anychart.format.locales.default.numberLocale.zeroFillDecimals = true;
4
5
// create data table on loaded data
6
var dataTable = anychart.data.table();
7
// the data used in this sample can be obtained from the CDN
8
// https://cdn.anychart.com/csv-data/csco-daily.js
9
dataTable.addData(get_csco_daily_data());
10
11
// map loaded data for the candlestick series
12
var mapping = dataTable.mapAs({'open': 1, 'high': 2, 'low': 3, 'close': 4});
13
14
// create stock chart
15
chart = anychart.stock();
16
17
var grouping = chart.grouping();
18
// set maximum visible points count.
19
grouping.maxVisiblePoints(250);
20
21
// create first plot on the chart
22
var plot = chart.plot(0);
23
24
plot.yScale().maximumGap(0);
25
plot.yScale().minimumGap(0);
26
27
// move Y axis to the right
28
plot.yAxis().orientation("right");
29
30
var candleSeries = plot.candlestick(mapping);
31
32
// create scroller series with mapped data
33
chart.scroller().line(dataTable.mapAs({'value': 4}));
34
35
// create computer
36
var computer = dataTable.createComputer(mapping);
37
// set computer output field
38
computer.addOutputField('pp', 'pivot');
39
computer.addOutputField('sup1', 'support1');
40
computer.addOutputField('sup2', 'support2');
41
computer.addOutputField('sup3', 'support3');
42
computer.addOutputField('res1', 'resistance1');
43
computer.addOutputField('res2', 'resistance2');
44
computer.addOutputField('res3', 'resistance3');
45
46
//initiate variables
47
var maxArr = [];
48
var minArr = [];
49
var max = 0;
50
var min = 0;
51
var closeValue = 0;
52
var pp = null;
53
var support1 = null;
54
var support2 = null;
55
var support3 = null;
56
var resistance1 = null;
57
var resistance2 = null;
58
var resistance3 = null;
59
var counter = 0;
60
61
computer.setStartFunction(function() {
62
closeValue = 0;
63
pp = null;
64
support1 = null;
65
support2 = null;
66
support3 = null;
67
resistance1 = null;
68
resistance2 = null;
69
resistance3 = null;
70
counter = 0;
71
//reset min and max arrays
72
maxArr = [];
73
minArr = [];
74
});
75
76
// set calculation function to produce custom indicator math
77
computer.setCalculationFunction(function (row) {
78
//collect high and low during the period
79
maxArr.push(row.get('high'));
80
minArr.push(row.get('low'));
81
//if the end of the period (period = 30 candlesticks here)
82
if (counter > 29) {
83
//get close value
84
closeValue = row.get('close');
85
//get highest high and lowest low
86
max = Math.max.apply(null, maxArr);
87
min = Math.min.apply(null, minArr);
88
//calculate pivot point
89
pp = (max + min + closeValue) / 3;
90
//calculate support1
91
support1 = pp * 2 - max;
92
//calculate resistance1
93
resistance1 = pp * 2 - min;
94
//calculate support2
95
support2 = pp - (max - min);
96
//calculate resistance2
97
resistance2 = pp + (max - min);
98
//calculate support3
99
support3 = min - 2 * (max - pp);
100
//calculate resistance3
101
resistance3 = max + 2 * (pp - min);
102
//reset candlesticks counter
103
counter = 0;
104
//reset min and max arrays
105
maxArr = [];
106
minArr = [];
107
}
108
//set calculated data
109
row.set('pp', pp);
110
row.set('sup1', support1);
111
row.set('sup2', support2);
112
row.set('sup3', support3);
113
row.set('res1', resistance1);
114
row.set('res2', resistance2);
115
row.set('res3', resistance3);
116
counter++;
117
});
118
119
// map computed column as value
120
var pivotMapping = dataTable.mapAs({'value': 'pivot'});
121
var support1Mapping = dataTable.mapAs({'value': 'support1'});
122
var support2Mapping = dataTable.mapAs({'value': 'support2'});
123
var support3Mapping = dataTable.mapAs({'value': 'support3'});
124
var resistance1Mapping = dataTable.mapAs({'value': 'resistance1'});
125
var resistance2Mapping = dataTable.mapAs({'value': 'resistance2'});
126
var resistance3Mapping = dataTable.mapAs({'value': 'resistance3'});
127
128
// create line series with mapping
129
var pivotLine = plot.line(pivotMapping);
130
pivotLine.name('Pivot');
131
pivotLine.stroke('#ffaaff 1');
132
133
var support1Line = plot.line(support1Mapping);
134
support1Line.name('Support1');
135
support1Line.stroke('#ffa000 1');
136
137
var support2Line = plot.line(support2Mapping);
138
support2Line.name('Support2');
139
support2Line.stroke('#DF8577 1');
140
141
var support3Line = plot.line(support3Mapping);
142
support3Line.name('Support3');
143
support3Line.stroke('#B75774 1');
144
145
var resistance1Line = plot.line(resistance1Mapping);
146
resistance1Line.name('Resistance1');
147
resistance1Line.stroke('#98ccdd 1');
148
149
var resistance2Line = plot.line(resistance2Mapping);
150
resistance2Line.name('Resistance2');
151
resistance2Line.stroke('#69A3C3 1');
152
153
var resistance3Line = plot.line(resistance3Mapping);
154
resistance3Line.name('Resistance3');
155
resistance3Line.stroke('#1F72B2 1');
156
157
// set title width for the chart
158
var title = chart.plot(0).legend().title();
159
title.width(100);
160
161
// set legend for the chart
162
var legend = plot.legend();
163
legend.enabled(true);
164
165
// set maximum height
166
legend.maxHeight("17%");
167
legend.itemsSpacing(2);
168
// legend mode and position
169
legend.itemsLayout("vertical-expandable");
170
legend.position("top");
171
// paginator position
172
legend.paginator().orientation("bottom");
173
174
// get chart margin.
175
var margin = chart.margin();
176
margin.right(30);
177
margin.left(-30);
178
179
chart.container('container').draw();
180
chart.selectRange("year", 4, "last-date", true);
181
});
182