-
Notifications
You must be signed in to change notification settings - Fork 3
/
ohlc.js
99 lines (84 loc) · 3.49 KB
/
ohlc.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
(function(){
JenScript.OhlcGeometry = function(config) {
this.__init(config);
};
JenScript.Model.inheritPrototype(JenScript.OhlcGeometry, JenScript.StockItemGeometry);
JenScript.Model.addMethods(JenScript.OhlcGeometry, {
__init : function(config){
config = config || {};
this.deviceLowHighGap;
this.deviceOpenTick;
this.deviceCloseTick;
},
solveItemGeometry : function(){
var deviceLow = this.deviceLow;
var deviceHigh = this.deviceHigh;
var deviceOpen = this.deviceOpen;
var deviceClose = this.deviceClose;
var deviceFixingStart = this.deviceFixingStart;
var deviceFixingDuration = this.deviceFixingDuration;
this.deviceLowHighGap = new JenScript.SVGLine().from(deviceLow.x,deviceLow.y).to(deviceHigh.x,deviceHigh.y);
if (this.getStock().getOpen() > this.getStock().getClose()) {
this.deviceLowOpenCloseGap = new JenScript.SVGRect().origin(deviceFixingStart, deviceOpen.y).size(deviceFixingDuration, Math.abs(deviceOpen.y - deviceClose.y));
} else {
this.deviceLowOpenCloseGap = new JenScript.SVGRect().origin(deviceFixingStart, deviceClose.y).size(deviceFixingDuration, Math.abs(deviceOpen.y - deviceClose.y));
}
this.deviceLowHighGap = new JenScript.SVGLine().from(deviceLow.x,deviceLow.y).to(deviceHigh.x,deviceHigh.y);
this.deviceOpenTick = new JenScript.SVGLine().from(deviceOpen.x-deviceFixingDuration/2,deviceOpen.y).to(deviceOpen.x,deviceOpen.y);
this.deviceCloseTick = new JenScript.SVGLine().from(deviceClose.x,deviceClose.y).to(deviceClose.x+deviceFixingDuration/2,deviceClose.y);
},
});
JenScript.OhlcLayer = function(config) {
this._init(config);
};
JenScript.Model.inheritPrototype(JenScript.OhlcLayer, JenScript.StockLayer);
JenScript.Model.addMethods(JenScript.OhlcLayer, {
_init : function(config){
config = config || {};
this.markerColor=(config.markerColor !== undefined)? config.markerColor : 'black';
this.markerWidth=(config.markerWidth !== undefined)? config.markerWidth : 1.5;
JenScript.StockLayer.call(this,{ name : "OhlcLayer"});
},
setMarkerColor : function(mc) {
this.markerColor = mc;
},
setMarkerWidth : function(mw) {
this.markerWidth = mw;
},
solveLayer : function() {
this.geometries = [];
for (var i = 0; i < this.plugin.getBoundedStocks().length; i++) {
var stock = this.plugin.getBoundedStocks()[i];
var geom = new JenScript.OhlcGeometry();
geom.setLayer(this);
geom.setStock(stock);
geom.solveGeometry();
this.addGeometry(geom);
}
},
paintLayer : function(g2d,part) {
if (part === 'Device') {
var svgLayer = new JenScript.SVGGroup().Id(this.Id);
var count = this.plugin.getBoundedStocks().length;
if(count > 400){
var svgText = new JenScript.SVGText().Id(this.Id)
.location(200,40)
.fill('white')
.fontSize('8')
.textAnchor('start')
.textContent("BUSY OHLC, two much shapes");
svgLayer.child(svgText.toSVG());
}else{
for (var i = 0; i < this.getGeometries().length; i++) {
var geom = this.getGeometries()[i];
svgLayer.child(geom.deviceLowHighGap.fillNone().stroke(this.markerColor).strokeWidth(this.markerWidth).toSVG());
svgLayer.child(geom.deviceOpenTick.fillNone().stroke(this.markerColor).strokeWidth(this.markerWidth).toSVG());
svgLayer.child(geom.deviceCloseTick.fillNone().stroke(this.markerColor).strokeWidth(this.markerWidth).toSVG());
}
}
g2d.deleteGraphicsElement(this.Id);
g2d.insertSVG(svgLayer.toSVG());
}
},
});
})();