public class ChartCommander {
LineEURUSD lineEURUSD;
List<Date> datesArrayList = new ArrayList<Date>();
ArrayList pricesArrayList;
DefaultHighLowDataset dhld;
String title;
Comparable s1;
RegularTimePeriod period;
java.util.Date[] avg_ts;
java.util.Date startDate;
long interval;
double open;
double high;
double low;
double close;
double[] prices;
java.util.Date dates;
// TimeSeries s1;
private static ChartCommander instance = new ChartCommander();
public static ChartCommander getInstance() {
return instance;
}
public ChartCommander() {
lineEURUSD = new LineEURUSD(title);
datesArrayList = new ArrayList();
pricesArrayList = new ArrayList();
interval = 10000L;
}
public void chartEURUSD(double[] avg, java.util.Date[] avg_ts,
double[] outY) {
if (avg[0] != 0) {
System.out.println("CC avg[0] = " + avg[0]);
System.out.println("CC avg_ts[0] = " + avg_ts[0]);
datesArrayList.add(avg_ts[0]);
pricesArrayList.add(new Double(avg[0]));
java.util.Date[] myDates =
new java.util.Date[datesArrayList.size()];
for (int j = 0; j < myDates.length; j++) {
myDates[j] = (java.util.Date)datesArrayList.get(j);
}
double[] myPrices = new double[pricesArrayList.size()];
for (int j = 0; j < myPrices.length; j++) {
myPrices[j] = ((Double)pricesArrayList.get(j)).doubleValue();
}
System.out.println("Dates: ");
for (int j = 0; j < myDates.length; j++) {
System.out.println(myDates[j].toString());
}
System.out.println("Prices: ");
for (int j = 0; j < myPrices.length; j++) {
System.out.println(myPrices[j]);
}
System.out.println("interval: " + interval);
DefaultHighLowDataset dataset =
OHLCData(myDates, myPrices, myDates[0], interval);
lineEURUSD.doEvent_avg(avg);
}
if (outY[0] != 0) {
System.out.println("CC outY[0] = " + outY[0]);
lineEURUSD.doEvent_outY(outY);
}
}
package charts;
import java.awt.Color;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.time.FixedMillisecond;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.RectangleInsets;
public class LineEURUSD extends JFrame {
public LineEURUSD(final String title) {
super(title);
setContentPane(chartPanel);
setSize(800, 600);
setVisible(true);
}
TimeSeries s1 = new TimeSeries("s1");
TimeSeries s2 = new TimeSeries("s2");
int sc = 0;
public void doEvent_avg(double[] avg) {
sc++;
s1.addOrUpdate(new FixedMillisecond(new Date().getTime()),
new Float(avg[0]));
if (sc > 100) {
s1.delete(0, 0);
}
}
public void doEvent_outY(double[] outX) {
sc++;
s2.addOrUpdate(new FixedMillisecond(new Date().getTime() + 5000),
new Float(outX[0]));
if (sc > 100) {
s2.delete(0, 0);
}
}
private JFreeChart createChart(XYDataset dataset) {
JFreeChart chart =
ChartFactory.createTimeSeriesChart("EUR/USD - 3", // title
"Time", // x-axis label
"inX[0]", // y-axis label
dataset, // data
true, // create legend?
true, // generate tooltips?
false) // generate URLs?
;
XYPlot plot = (XYPlot)chart.getPlot();
XYDataset dataset2 = createDataset2();
plot.setDataset(0, dataset);
plot.setDataset(1, dataset2);
DateAxis axis = (DateAxis)plot.getDomainAxis();
axis.setDateFormatOverride(new SimpleDateFormat("hh:mm:ss"));
XYItemRenderer r = plot.getRenderer();
XYItemRenderer renderer2 = new XYLineAndShapeRenderer();
r.setSeriesPaint(0, Color.blue);
r.setSeriesPaint(1, Color.red);
renderer2.setSeriesPaint(0, Color.red);
plot.setRenderer(1, renderer2);
plot.setBackgroundPaint(Color.lightGray);
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
plot.setAxisOffset(new RectangleInsets(1.0, 1.0, 1.0, 1.0));
NumberAxis axis2 = new NumberAxis("outX[0]");
axis2.setAutoRangeIncludesZero(false);
axis2.setLabelPaint(Color.red);
axis2.setTickLabelPaint(Color.green);
plot.setRangeAxis(1, axis2);
plot.setRangeAxisLocation(1, AxisLocation.BOTTOM_OR_RIGHT);
plot.mapDatasetToRangeAxis(1, 1);
return chart;
}
private XYDataset createDataset() {
TimeSeriesCollection dataset = new TimeSeriesCollection();
dataset.addSeries(s1);
return dataset;
}
private XYDataset createDataset2() {
TimeSeriesCollection dataset2 = new TimeSeriesCollection();
dataset2.addSeries(s2);
return dataset2;
}
public JPanel createDemoPanel() {
JFreeChart chart = createChart(createDataset());
ChartPanel panel = new ChartPanel(chart);
panel.setFillZoomRectangle(true);
panel.setMouseWheelEnabled(true);
return panel;
}
ChartPanel chartPanel = (ChartPanel)createDemoPanel();
}
java -jar dynachart-cand-fat.jar
DefaultHighLowDataset dataset =
OHLCData(myDates, myPrices, myDates[0], interval);
package charts;
import java.util.Calendar;
import java.util.Date;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickMarkPosition;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import org.jfree.data.time.RegularTimePeriod;
import org.jfree.data.xy.DefaultHighLowDataset;
import org.jfree.ui.ApplicationFrame;
public class CandleStickEURUSD extends ApplicationFrame {
transient RegularTimePeriod period;
java.util.Date[] dates;
java.util.Date startDate;
long interval;
double[] avg; // = new double[10];
java.util.Date[] avg_ts; // = new java.util.Date[10];
double[] outY; // = new double[10];
java.util.Date[] myDates;
double[] myPrices;
public CandleStickEURUSD() {
ChartCommander.getInstance().chartEURUSD(avg, avg_ts, outY);
final DefaultHighLowDataset dataset = createDataset();
final JFreeChart chart = createChart(dataset);
final ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
setContentPane(chartPanel);
chartPanel.setVisible(true);
}
private DefaultHighLowDataset createDataset() {
DefaultHighLowDataset dataset = OHLCData(myDates, myPrices, myDates[0], interval);
return dataset;
}
private JFreeChart createChart(final DefaultHighLowDataset dataset) {
final JFreeChart chart =
ChartFactory.createHighLowChart("OHLC EURUSD bot", "Time", "Value",
dataset, true);
final DateAxis axis = (DateAxis)chart.getXYPlot().getDomainAxis();
axis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);
final XYPlot plot = (XYPlot)chart.getPlot();
plot.setRenderer(1, new StandardXYItemRenderer());
return chart;
}
}
interval: 10000
CC outY[0] = -0.1877336
CC outY[0] = -0.1877336
CC outY[0] = -0.18773669
CC avg[0] = 1.3904550000000002
CC avg_ts[0] = Wed Mar 09 22:57:17 EET 2011
Dates:
Wed Mar 09 22:56:55 EET 2011
Wed Mar 09 22:56:55 EET 2011
Wed Mar 09 22:57:03 EET 2011
Wed Mar 09 22:57:06 EET 2011
Wed Mar 09 22:57:06 EET 2011
Wed Mar 09 22:57:08 EET 2011
Wed Mar 09 22:57:15 EET 2011
Wed Mar 09 22:57:17 EET 2011
Prices:
1.390475
1.390475
1.3904550000000002
1.3904649999999998
1.390485
1.3904550000000002
1.390475
1.3904550000000002
interval: 10000
CC outY[0] = -0.18773669
CC outY[0] = -0.18773669
CC outY[0] = -0.18773669
CC outY[0] = -0.18773669
CC outY[0] = -0.18773669
CC outY[0] = -0.18773682
private DefaultHighLowDataset createDataset() {
DefaultHighLowDataset dataset = ??????????
return dataset;
}
private DefaultHighLowDataset createDataset() {
DefaultHighLowDataset dataset = ??????????OHLCData(myDates, myPrices, myDates[0], interval);
return dataset;
}
public void doEvent_outY(double[] outX) {
sc++;
s2.addOrUpdate(new FixedMillisecond(new Date().getTime() + 5000),
new Float(outX[0]));
if (sc > 100) {
s2.delete(0, 0);
}
But in candle maybe another way?
private double width;
private JFreeChart createChart(final DefaultHighLowDataset dataset) {
final JFreeChart chart =
ChartFactory.createCandlestickChart("Candlestick Demo", "Time",
"Price", dataset, false);
width = 10;
NumberAxis yaxis = (NumberAxis)chart.getXYPlot().getRangeAxis();
yaxis.setAutoRangeIncludesZero(false);
CandlestickRenderer csr = new CandlestickRenderer();
csr.setCandleWidth(width);
chart.getXYPlot().setRenderer(csr);
return chart;
}
public void eurusd_CandleStick_Market(double[] avg,
java.util.Date[] avg_ts) {
if (avg[0] != 0 && mds == true) {
System.out.println("EUR/USD Market avg[0] = " + avg[0]);
System.out.println("EUR/USD Market avg_ts[0] = " + avg_ts[0]);
System.out.println("EUR/USD Market mds = " + mds);
System.out.println("EUR/USD Market mflag0c = " + mflag0c);
datesArrayList.add(avg_ts[0]);
pricesArrayList.add(new Double(avg[0]));
ArrayList datesArrayList1 = new ArrayList();
ArrayList pricesArrayList1 = new ArrayList();
for (int j = 0; j < datesArrayList1.size(); j++) {
java.util.Date dd = (java.util.Date)datesArrayList1.get(j);
Double dpr = (Double)pricesArrayList1.get(j);
if ((dd.getTime() - avg_ts[0].getTime()) < -1000L)
continue;
datesArrayList1.add(dd);
pricesArrayList1.add(dpr);
}
java.util.Date[] myDates =
new java.util.Date[datesArrayList.size()];
for (int j = 0; j < myDates.length; j++) {
myDates[j] = (java.util.Date)datesArrayList.get(j);
}
double[] myPrices = new double[pricesArrayList.size()];
for (int j = 0; j < myPrices.length; j++) {
myPrices[j] = ((Double)pricesArrayList.get(j)).doubleValue();
}
// System.out.println("Dates: ");
for (int j = 0; j < myDates.length; j++) {
// System.out.println(myDates[j].toString());
}
// System.out.println("Prices: ");
for (int j = 0; j < myPrices.length; j++) {
// System.out.println(myPrices[j]);
}
System.out.println("interval: " + interval);
DefaultHighLowDataset dataset =
OHLCData(myDates, myPrices, myDates[0], interval);
JFreeChart chart = createChart(dataset);
ChartPanel chartPanel = new ChartPanel(chart);
af.setContentPane(chartPanel);
af.setSize(800, 500);
af.setLocation(1600, 800);
if (mflag0c == true) {
af.setVisible(true);
chartPanel.repaint();
} else {
af.setVisible(false);
}
}
}
public void doEvent_avg(double[] avg) {
sc++;
s1.addOrUpdate(new FixedMillisecond(new Date().getTime()),
new Float(avg[0]));
if (sc > 100) {
s1.delete(0, 0);
}
}
Why we can't do like this, it has to be simpler that this interception which I still can't understand.