androidplot

Charts and plots for Android

View the Project on GitHub halfhp/androidplot

Candlestick Charts

Candlestick charts are a special kind of XYPlot usually used for rendering financial information. Each “candlestick” is composed of 4 values: open, close, high and low.

image

Androidplot’s implementation of candlestick charts uses four separate XYSeries instances to represent the candlestick values; each series corresponds to one of the four values that composes each “candlestick”.

For example:

Number[] highVals = new Number[] {12, 10, 15, 8, 7};
Number[] lowVals = new Number[] {3, 1, 5, 0, 2};
Number[] openVals = new Number[] {5, 2, 7, 5, 3};
Number[] closeVals = new Number[] {7, 9, 6, 0, 4};

Using the values above, the first candlestick model would be {high=12, low=3, open=5, close=7}, the second would be {high=10, low=1, open=2, close=7} and so on.

There are a few constraints that must be satisfied before we can create XYSeries from the data above and add them to Androidplot:

While it’s possible to satisfy these constraints by creating each of the four XYSeries required by a candlestick chart, adding them in order using the same formatter, many projects will find it simpler to interact with the data as though it were a single series of candlestick values. To makr this easier, two convenience classes: CandlestickSeries and CandlestickMaker. Here’s how they are used together to add a candlestick chart to an XYPlot:

CandlestickSeries candlestickSeries = new CandlestickSeries(
    new CandlestickSeries.Item(1, 10, 2, 9),
    new CandlestickSeries.Item(4, 18, 6, 5),
    new CandlestickSeries.Item(3, 11, 5, 10),
    new CandlestickSeries.Item(2, 17, 2, 15),
    new CandlestickSeries.Item(6, 11, 11, 7),
    new CandlestickSeries.Item(8, 16, 10, 15));

CandlestickFormatter formatter = new CandlestickFormatter();

// add the candlestick series data to the plot:
CandlestickMaker.make(plot, formatter, candlestickSeries);

It’s necessary to use CandlestickMaker to add the CandlestickSeries (via “make”) to the XYPlot as CandlestickSeries does not and cannot implement the XYSeries interface.

A full source example is available here.