Candlestick Chart

A Candlestick chart is used to show stock price. Each candlestick shows the stock's high, low, opening and closing prices.

The Candlestick constructors create two child CandlestickItem nodes. One is for the up days and one is for the down days. A day is an up day if the closing price is greater than the opening price. The getUp and getDown accessor methods can be used to retrieve these nodes.

The line (“whisker”) part of a candlestick shows the stock's high and low prices. The whiskers can be formatted using the line attributes (see Line Attributes).

The body of a candlestick shows the stock's opening and closing prices. The body color is used to flag if the top of the body is the closing price (up day) or the opening price (down day). The fill area attributes determine how the body is drawn (see Fill Area Attributes). By default, up days are white and down days are black.

The width of a candlestick is controlled by the MarkerSize attribute (see Attribute MarkerSize).

Example

In this example, random security prices are computed in the createData method. The time axis is prepared by calling setDateAxis.

The up days are colored green and the down days are colored red.

(Download Code)

 

import com.imsl.chart.*;

import java.util.*;

 

public class SampleCandlestick extends JFrameChart {

 

    private double high[],  low[],  open[],  close[];

 

    public SampleCandlestick() {

        Chart chart = getChart();

        AxisXY axis = new AxisXY(chart);

 

        // Date is June 27, 1999

        Date date = new GregorianCalendar(1999,

                GregorianCalendar.JUNE, 27).getTime();

 

        int n = 30;

        createData(n);

 

        // Create an instance of a HighLowClose Chart

        Candlestick stick =

                new Candlestick(axis, date, high, low, close, open);

 

        // Show up days in green and down days in red

        stick.getUp().setFillColor(java.awt.Color.green);

        stick.getDown().setFillColor(java.awt.Color.red);

 

        // Set the HighLowClose Chart Title

        chart.getChartTitle().setTitle("Stock Prices");

 

        // Setup the x axis

        Axis1D axisX = axis.getAxisX();

 

        // Setup the time axis

        stick.setDateAxis("Date(SHORT)");

 

        // Turn on grid and make it light gray

        axisX.getGrid().setPaint(true);

        axisX.getGrid().setLineColor(java.awt.Color.lightGray);

        axis.getAxisY().getGrid().setPaint(true);

        axis.getAxisY().getGrid().setLineColor(java.awt.Color.lightGray);

    }

 

    private void createData(int n) {

        high = new double[n];

        low = new double[n];

        close = new double[n];

        open = new double[n];

        Random r = new Random(123457);

        for (int k = 0; k < n; k++) {

            double f = r.nextDouble();

            if (k == 0) {

                close[0] = 100;

            } else {

                close[k] = (0.95 + 0.10 * f) * close[k - 1];

            }

            high[k] = close[k] * (1. + 0.05 * r.nextDouble());

            low[k] = close[k] * (1. - 0.05 * r.nextDouble());

            open[k] = low[k] + r.nextDouble() * (high[k] - low[k]);

        }

    }

 

    public static void main(String argv[]) {

        new SampleCandlestick().setVisible(true);

    }

}



Visual Numerics - Developers of IMSL and PV-WAVE
http://www.vni.com/
PHONE: 713.784.3131
FAX:713.781.9260