2017-01-08 03:14:27 +01:00
|
|
|
/*
|
|
|
|
* To change this license header, choose License Headers in Project Properties.
|
|
|
|
* To change this template file, choose Tools | Templates
|
|
|
|
* and open the template in the editor.
|
|
|
|
*/
|
|
|
|
package chart;
|
|
|
|
|
|
|
|
import java.awt.*;
|
2017-01-08 13:16:00 +01:00
|
|
|
import sesim.Exchange.*;
|
|
|
|
import sesim.Quote;
|
|
|
|
import gui.MainWin;
|
2017-01-13 08:16:09 +01:00
|
|
|
import java.awt.geom.Rectangle2D;
|
2017-01-12 23:16:37 +01:00
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Iterator;
|
2017-01-08 03:14:27 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @author 7u83 <7u83@mail.ru>
|
|
|
|
*/
|
2017-01-09 08:25:29 +01:00
|
|
|
public class Chart extends javax.swing.JPanel implements QuoteReceiver {
|
2017-01-08 03:14:27 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates new form Chart
|
|
|
|
*/
|
|
|
|
public Chart() {
|
|
|
|
initComponents();
|
2017-01-09 08:25:29 +01:00
|
|
|
if (MainWin.se == null) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2017-01-08 13:16:00 +01:00
|
|
|
MainWin.se.addQuoteReceiver(this);
|
2017-01-08 03:14:27 +01:00
|
|
|
|
|
|
|
//Graphics g = this.getGraphics();
|
|
|
|
//g.drawString("Hello world", 0, 0);
|
|
|
|
}
|
2017-01-09 08:25:29 +01:00
|
|
|
|
|
|
|
int item_width = 10;
|
|
|
|
int items = 350;
|
2017-01-12 23:16:37 +01:00
|
|
|
long ntime = 0;
|
2017-01-09 08:25:29 +01:00
|
|
|
|
2017-01-12 23:16:37 +01:00
|
|
|
OHLCData data = new OHLCData();
|
2017-01-08 13:16:00 +01:00
|
|
|
|
2017-01-09 08:25:29 +01:00
|
|
|
OHLCDataItem current = null;
|
2017-01-13 21:49:09 +01:00
|
|
|
|
|
|
|
|
|
|
|
int getY(float Y){
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
2017-01-09 08:25:29 +01:00
|
|
|
|
2017-01-13 21:49:09 +01:00
|
|
|
|
|
|
|
void drawCandle(Graphics2D g, OHLCData d, int x, int y){
|
|
|
|
|
2017-01-13 08:16:09 +01:00
|
|
|
}
|
2017-01-13 21:49:09 +01:00
|
|
|
|
|
|
|
|
2017-01-13 08:16:09 +01:00
|
|
|
void drawXLegend(Graphics2D g) {
|
|
|
|
int xl_height = 30;
|
|
|
|
Dimension dim = this.getSize();
|
|
|
|
|
|
|
|
int sheight = g.getFontMetrics().getHeight();
|
|
|
|
|
|
|
|
int y = dim.height - sheight * 3;
|
|
|
|
|
|
|
|
g.drawLine(0, y, dim.width, y);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < items; i ++) {
|
|
|
|
int x = i * this.item_width;
|
|
|
|
|
|
|
|
if (i%5==0)
|
|
|
|
g.drawLine(x, y, x, y + 6);
|
|
|
|
else
|
|
|
|
g.drawLine(x, y, x, y + 3);
|
|
|
|
|
|
|
|
OHLCDataItem d;
|
|
|
|
try {
|
|
|
|
d = data.data.get(i);
|
|
|
|
} catch (Exception e) {
|
|
|
|
d = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
String text;
|
|
|
|
if (d != null) {
|
|
|
|
text = " ";
|
|
|
|
} else {
|
|
|
|
text = " ";
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int swidth = g.getFontMetrics().stringWidth(text);
|
|
|
|
|
|
|
|
g.drawString(text, x - swidth / 2, y + sheight * 2);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//for(int x=0; x)
|
2017-01-09 08:25:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
private void realTimeAdd(long time, float price, float volume) {
|
|
|
|
|
2017-01-13 01:55:43 +01:00
|
|
|
/*System.out.print("Diff:"
|
2017-01-09 08:25:29 +01:00
|
|
|
+(ntime-time)
|
|
|
|
+"\n"
|
2017-01-12 23:16:37 +01:00
|
|
|
);*/
|
2017-01-09 08:25:29 +01:00
|
|
|
if (time > ntime) {
|
|
|
|
|
2017-01-12 23:16:37 +01:00
|
|
|
// System.out.print("new raster ----------------------------------\n");
|
2017-01-09 08:25:29 +01:00
|
|
|
current = null;
|
2017-01-13 08:16:09 +01:00
|
|
|
// ntime = rasterTime(time) + 5000;
|
2017-01-09 08:25:29 +01:00
|
|
|
// System.out.print(ntime+"\n");
|
|
|
|
// System.out.print((time)+"\n");
|
|
|
|
// System.exit(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (current == null) {
|
|
|
|
current = new OHLCDataItem(price, price, price, price, volume);
|
2017-01-08 13:16:00 +01:00
|
|
|
return;
|
|
|
|
}
|
2017-01-09 08:25:29 +01:00
|
|
|
|
|
|
|
boolean rc = current.update(price, volume);
|
|
|
|
|
|
|
|
if (rc) {
|
2017-01-08 13:16:00 +01:00
|
|
|
System.out.print("Updated -"
|
2017-01-09 08:25:29 +01:00
|
|
|
+ " High:"
|
|
|
|
+ current.high
|
|
|
|
+ " Low:"
|
|
|
|
+ current.low
|
|
|
|
+ " Volume"
|
|
|
|
+ current.volume
|
|
|
|
+ "("
|
|
|
|
+ time
|
|
|
|
+ ")"
|
|
|
|
+ "\n"
|
2017-01-08 13:16:00 +01:00
|
|
|
);
|
|
|
|
}
|
2017-01-09 08:25:29 +01:00
|
|
|
|
2017-01-08 13:16:00 +01:00
|
|
|
}
|
2017-01-09 08:25:29 +01:00
|
|
|
|
|
|
|
private void getData() {
|
|
|
|
|
2017-01-08 13:16:00 +01:00
|
|
|
}
|
2017-01-09 08:25:29 +01:00
|
|
|
|
|
|
|
private void draw(Graphics2D g) {
|
2017-01-13 08:16:09 +01:00
|
|
|
|
|
|
|
this.drawXLegend(g);
|
|
|
|
|
2017-01-08 13:16:00 +01:00
|
|
|
this.getSize();
|
2017-01-09 08:25:29 +01:00
|
|
|
|
|
|
|
int pwidth = item_width * items;
|
2017-01-12 23:16:37 +01:00
|
|
|
int phight = 40;
|
2017-01-09 08:25:29 +01:00
|
|
|
|
2017-01-12 23:16:37 +01:00
|
|
|
this.setPreferredSize(new Dimension(pwidth, phight));
|
2017-01-09 08:25:29 +01:00
|
|
|
|
2017-01-13 01:55:43 +01:00
|
|
|
Dimension dim = this.getSize();
|
|
|
|
// System.out.print("Diemension "+dim.width+" "+dim.height+"\n");
|
|
|
|
|
|
|
|
g.setColor(Color.RED);
|
|
|
|
|
2017-01-13 08:16:09 +01:00
|
|
|
// g.drawLine(0, 0, 100, 100);
|
2017-01-13 01:55:43 +01:00
|
|
|
|
2017-01-13 08:16:09 +01:00
|
|
|
/* for (int i = 0; i < items; i++) {
|
2017-01-09 08:25:29 +01:00
|
|
|
int x = i * this.item_width;
|
|
|
|
g.drawLine(x, 0, x, 50);
|
|
|
|
|
|
|
|
}
|
2017-01-13 08:16:09 +01:00
|
|
|
*/
|
2017-01-13 01:55:43 +01:00
|
|
|
// if (this.current == null) {
|
|
|
|
// return;
|
|
|
|
// }
|
|
|
|
ArrayList<OHLCDataItem> od = data.data;
|
|
|
|
|
|
|
|
System.out.print("OD S: " + od.size() + "\n");
|
|
|
|
g.setColor(Color.BLUE);
|
|
|
|
g.setStroke(new BasicStroke(3));
|
|
|
|
|
|
|
|
Iterator<OHLCDataItem> it = od.iterator();
|
|
|
|
int myi = 0;
|
2017-01-13 08:16:09 +01:00
|
|
|
|
|
|
|
int lastx = 0;
|
|
|
|
int lasty = 0;
|
|
|
|
|
2017-01-13 01:55:43 +01:00
|
|
|
while (it.hasNext()) {
|
2017-01-12 23:16:37 +01:00
|
|
|
OHLCDataItem di = it.next();
|
|
|
|
|
2017-01-13 01:55:43 +01:00
|
|
|
float y = di.close;
|
|
|
|
float max = data.max;
|
|
|
|
float min = data.min;
|
2017-01-13 08:16:09 +01:00
|
|
|
|
|
|
|
max = max / 10.0f + max;
|
|
|
|
min = min - min / 10.0f;
|
2017-01-13 01:55:43 +01:00
|
|
|
|
|
|
|
if (min == max) {
|
|
|
|
min = y / 2;
|
|
|
|
max = y * 2;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2017-01-13 08:16:09 +01:00
|
|
|
// max = 5;
|
|
|
|
// min = 0;
|
2017-01-13 01:55:43 +01:00
|
|
|
System.out.print("Fval: " + y + " " + min + "\n");
|
|
|
|
y -= min;
|
|
|
|
System.out.print("VAL New" + y + "\n");
|
|
|
|
|
|
|
|
//val/ ((data.max-data.min)/dim.height);
|
|
|
|
System.out.print("MINMAX " + min + " " + max + " " + dim.height + "\n");
|
2017-01-12 23:16:37 +01:00
|
|
|
|
2017-01-13 08:16:09 +01:00
|
|
|
y = dim.height - (dim.height * y / (max - min));
|
2017-01-12 23:16:37 +01:00
|
|
|
|
2017-01-13 01:55:43 +01:00
|
|
|
int x = myi * this.item_width;
|
|
|
|
myi++;
|
2017-01-13 08:16:09 +01:00
|
|
|
|
2017-01-13 01:55:43 +01:00
|
|
|
g.drawLine(lastx, lasty, x, (int) y);
|
2017-01-13 08:16:09 +01:00
|
|
|
|
|
|
|
lastx = x;
|
|
|
|
lasty = (int) y;
|
2017-01-12 23:16:37 +01:00
|
|
|
|
2017-01-13 01:55:43 +01:00
|
|
|
System.out.print("Draw Line: " + x + " " + y + "\n");
|
2017-01-09 08:25:29 +01:00
|
|
|
|
2017-01-13 01:55:43 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// g.drawLine(0, 0, 100, (int) ((this.current.close-80.0)*80.0));
|
2017-01-08 13:16:00 +01:00
|
|
|
}
|
2017-01-08 03:14:27 +01:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public void paintComponent(Graphics go) {
|
|
|
|
super.paintComponent(go);
|
2017-01-09 08:25:29 +01:00
|
|
|
|
2017-01-08 08:48:31 +01:00
|
|
|
Graphics2D g = (Graphics2D) go;
|
|
|
|
|
2017-01-08 13:16:00 +01:00
|
|
|
g.setColor(Color.GRAY);
|
2017-01-08 08:48:31 +01:00
|
|
|
|
2017-01-08 03:14:27 +01:00
|
|
|
g.setBackground(Color.BLACK);
|
2017-01-08 08:48:31 +01:00
|
|
|
// g.get
|
|
|
|
|
2017-01-08 03:14:27 +01:00
|
|
|
Rectangle bounds = g.getDeviceConfiguration().getBounds();
|
2017-01-13 01:55:43 +01:00
|
|
|
// System.out.print(bounds.width + "\n");
|
2017-01-08 08:48:31 +01:00
|
|
|
|
2017-01-08 03:14:27 +01:00
|
|
|
//g.fillRect(0, 0, 100, 100);
|
2017-01-08 08:48:31 +01:00
|
|
|
Dimension d = this.getSize();
|
|
|
|
|
2017-01-08 13:16:00 +01:00
|
|
|
//g.drawString("Hello world", 810, 10);
|
|
|
|
//g.drawLine(0, 0, d.width, d.height);
|
|
|
|
//this.setPreferredSize(new Dimension(2000,4000));
|
|
|
|
draw(g);
|
2017-01-08 03:14:27 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This method is called from within the constructor to initialize the form.
|
|
|
|
* WARNING: Do NOT modify this code. The content of this method is always
|
|
|
|
* regenerated by the Form Editor.
|
|
|
|
*/
|
|
|
|
@SuppressWarnings("unchecked")
|
|
|
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
|
|
|
private void initComponents() {
|
|
|
|
|
2017-01-08 13:16:00 +01:00
|
|
|
setBackground(java.awt.Color.white);
|
|
|
|
setBorder(javax.swing.BorderFactory.createTitledBorder(""));
|
|
|
|
setPreferredSize(new java.awt.Dimension(300, 300));
|
2017-01-08 08:48:31 +01:00
|
|
|
setRequestFocusEnabled(false);
|
|
|
|
|
2017-01-08 03:14:27 +01:00
|
|
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
|
|
|
this.setLayout(layout);
|
|
|
|
layout.setHorizontalGroup(
|
|
|
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
2017-01-08 13:16:00 +01:00
|
|
|
.addGap(0, 316, Short.MAX_VALUE)
|
2017-01-08 03:14:27 +01:00
|
|
|
);
|
|
|
|
layout.setVerticalGroup(
|
|
|
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
2017-01-08 13:16:00 +01:00
|
|
|
.addGap(0, 280, Short.MAX_VALUE)
|
2017-01-08 03:14:27 +01:00
|
|
|
);
|
|
|
|
}// </editor-fold>//GEN-END:initComponents
|
|
|
|
|
2017-01-08 13:16:00 +01:00
|
|
|
@Override
|
|
|
|
public void UpdateQuote(Quote q) {
|
2017-01-13 01:55:43 +01:00
|
|
|
// System.out.print("Quote Received\n");
|
2017-01-12 23:16:37 +01:00
|
|
|
// this.realTimeAdd(q.time, (float) q.price, (float)q.volume);
|
2017-01-13 01:55:43 +01:00
|
|
|
|
|
|
|
data.realTimeAdd(q.time, (float) q.price, (float) q.volume);
|
|
|
|
// this.invalidate();
|
2017-01-09 08:25:29 +01:00
|
|
|
this.repaint();
|
2017-01-08 13:16:00 +01:00
|
|
|
}
|
|
|
|
|
2017-01-08 03:14:27 +01:00
|
|
|
|
|
|
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
|
|
|
// End of variables declaration//GEN-END:variables
|
|
|
|
}
|