Vamos a crear un programa que muestre la evolución del precio de un instrumento durante un tiempo atrás. La información consta básicamente de estos parámetros: precio de apertura, precio más bajo, precio más alto, precio de cierre, volumen de transacciones y el día de trading. Todos los parámetros antes mencionados podemos definirlo en una clase llamada HistoricalQuote.
En la clase principal (donde arranca la aplicación), las clases que debemos importar son las siguientes:
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
Lo primero que tendrás que hacer es crear un frame en donde se colocaran los componentes de jfreechart.
En el frame se agregara una instancia de la clase ChartPanel. Esta clase viene a jugar la función de contenedor de objetos de tipo JFreeChart.
ChartPanel chartContainer = new ChartPanel(getTimeSeriesChart());
En este ejemplo se declara una variable chartContainer de tipo ChartPanel al cual se le envía a su constructor un objeto de tipo JFreeChart ,que se obtiene a través del método llamado getTimeSeriesChart().
public JFreeChart getTimeSeriesChart()
{
if (data != null)
jfreechart = ChartFactory.createTimeSeriesChart(“Price Chart – ” + Symbol, “Time”, “Value”, createDataset(), true, true, false);
else
jfreechart = ChartFactory.createTimeSeriesChart(“Price Chart”, “Time”, “Value”, null, true, true, false);
return jfreechart;
}
Aquí arriba se muestra el cuerpo del método getTimeSeriesChart(), en cual debo señalar que la variable data representa la información que se va a desplegar. En este caso data es una lista de objetos de tipo HistoricalQuote.
La variable jfreechart obtiene valor mediante la llamada al método createTimeSeriesChart() de la clase ChartFactory. Este metodo se le debe mandar:
El titulo del grafico: “Price Chart”
El titulo del y axis: “Time”
El titulo del x axis: “Value”
El objeto que representa la información del chart : createDataset().
El método createDataset() retornara un objeto de tipo XYDataset, que representa graficas de coordenadas x, y
private XYDataset createDataset()
{
timeseries = new TimeSeries(“Close Price”, org.jfree.data.time.Day.class);
for (int i = 0; i < data.size(); i++)
{
SimpleDate time = new SimpleDate(getData().get(i).getSampleDate());
timeseries.add(new org.jfree.data.time.Day(time.getDayNumber(), time.getMonthNumber(), time.getYearNumber()), getData().get(i).getClosePrice());
}
timeseriescollection = new TimeSeriesCollection();
timeseriescollection.addSeries(timeseries);
return timeseriescollection;
}
Para representar una serie de puntos de coordenadas x, y crearemos una instancia de la clase TimeSeries que recibirá el nombre de la serie y la unidad de tiempo a utilizar (Day, Time, etc).
Si pueden observar, dentro del ciclo he declarado una variable time de tipo SimpleDate que me permitirá obtener el día, mes y año de la fecha que tiene el objeto de tipo HistoricalQuote (pueden crear su versión personal de SimpleDate).
timeseries.add(new org.jfree.data.time.Day(time.getDayNumber(), time.getMonthNumber(), time.getYearNumber());
Se puede dar el caso que se quieran agregar más de una serie de tiempo, así que se debe crear una instancia de la clase TimeSeriesCollection para soportar múltiples series de tiempo.
Espero haber sido lo mas explicito posible y tratare de enviarles el código completo en caso de haber alguna duda.
Hay que señalar que antes de todo lo señalado, se debe obtener una fuente que nos provea HistoricalQuotes, así que el próximo post les hablare algo de base de datos!