I believe that most of us will agree that being able to compute values is only part of our job, as we would also like to be able to display them nicely in order to better understand or help co-workers/clients understand some concepts or results.

We usually try to do this using charts, most of the time from MATLAB and R during development phase, but the charting libraries do not allow you easily to modify the chart after it has been created.

I have been occasionally using the Bloomberg Charting interface, and I must say I think it is particularly brilliant, as it allows you to:

Zoom and scroll

Add vertical/horizontal/... lines

Compute performances between points

Add technical indicators

Possibility to export the graph to the clipboard

And so on.

Most of the charting libraries I have been able to find so far for .Net only have a few of this features, but almost none allow the users to add/remove graphical elements from the cart easily.

I was wondering if somebody knew a good charting API which provides a control with which the user can interact extensively (like in Bloomberg) once the data is displayed?

5 Answers
5

I would recommend performing visualization intensive tasks and UIs on a separate front-end, given R and Matlab are not optimized to efficiently render charts and other visualizations.

If you are able to run WPF/Silverlight apps on your machine I can highly recommend SciChart (http://www.scichart.com/). It fulfills all your stated requirements. The library is targeting C#/WPF but I would imagine it to work well with Visual Basic or other .Net languages as well. Before proceeding I recommend to check out the Silverlight demo (no download or registration required) at SciChart Demo. I have extensively tested the library and now use it for a project and it fulfills all my requirements.

Regarding your requirements:

Zoom and scroll -> Is built in and works out of the box, you can either approach this issue through code-behind or set and customize properties and functionality within xaml (preferred).

Compute performances between points -> Not sure what you mean with that but if my assumption is correct then you can compute relative performance measures and generate a separate data series and render that because the axes are fully customizable. If you are referring to something different then please elaborate.

Add technical indicators -> You can add any data or time series that you desire. Technical indicators are not provided out-of-the-box but I recommend to always compute such metric on your own and simply use as data source to build a data series and render it on a chart.

Possibility to export the graph to the clipboard -> Not only that, but you can easily print or save charts in various formats as well. You can also easily store the specific template used for the chart as well as settings used so the next time you load the front-end your visualization settings will be restored.

I want to point out where this library shines in comparison to other libraries but also where I see room for improvement:

Maybe the strongest feature of SciChart is performance. Rendering millions of data points on a scatter plot, line chart, stock (OHLC) chart, and multiple other chart styles is not only high performant but also extremely simple to accomplish. I only know of one other library that plays in SciChart's performance league. I use this library to visualize tick-based bid/offer time-series data and I can render 5 million data points (I heard of guys who tried to render tens of millions of data points and accomplished such) and scroll, pan, and zoom at very satisfactory framerates. It lets me essentially zoom and magnify the time series to individual data points, the Date/Time axis can be customized to display millisecond or even higher resolution time stamps (something that could not be done with various other libraries when I tested them).

The library does not come free but the cost to acquire a license is reasonable in comparison with other libraries.

Through xaml and the ability to derive from certain base classes and very well designed bindability the styling and customization of annotations, axis types and labels, chart types, renderable series types, panes, synchronization of multiple charts, mouse/keyboard interactivity, among others can be accomplished without much effort.

I found the response time as well as quality of response of the support staff to be exquisite. I poked a lot of questions at staff and raised a number of support tickets at the beginning and I was generally attended to within 24 hours. That was even when I test trialed the product. Several questions only came up because I had very specific requirements about an issue regarding multiple chart panes.

While well tested, and apparently quite well received by developers at some financial institutions and apparently extensively used by scientists who require high performing visualization capabilities, the library is still a pretty recent venture. It may not offer the same quantity of content on its support forum as those who have been around for a decade or so longer, but again I found it pleasant to interact with support staff who was responsive and helped with certain details. So, immature is probably not the right term because it runs absolutely stable in production, but it is not the most mature library out there.

The library specializes in high performance charting for WPF/Silverlight and does its job excellently, however, it does not offer other controls such as diagrams, dashboard controls, list or textbox controls. I myself prefer to always work with the best that my budget can buy and use this library for charting, only. Other vendors shine in other categories and I can appreciate that.

In summary, I had very similar requirements as the ones you stated and this library did and still does a fantastic job at targeting my requirements. I use one chart implementation for high frequency data visualizations and another, which I styled very similarly to the Bloomberg chart library for overall low frequency price/volume time series visualization.

Disclosure: I at some point received non-monetary compensation in exchange for rendering a service to SciChart. But I believe this recommendation/review is biased only in that I truly believe in the quality of this library and the people supporting it because I myself extensively tested and now use it and found it to be meeting all my time series visualization requirements.

if you are dealing with FX data only; i have found MetaTrader to be the best.

my automated trading system is built in Java; and I output data files to MT4 folder; that get picked up automatically by a custom indicator that I have built; which simply reads the data file and plot it on the currency pair that I am viewing.

MT4 charts are extremely fast; zooming in and out; and you can literally plot anything.

Recent version of MT4 has new fancy features.

I trick MT4 to show charts for other symbols (that are not FX related) by drawing them in a separate window; on top of existing FX pair. simply minimize the FX pair chart; and view the other windows.

But you can't embed it in your applications.
–
SRKX♦Apr 2 '12 at 15:55

unfortunatley you can't. however from experience; i found that it is better to have it stand alone. using two monitors instead of one; especially when you are moniting a live trading app
–
alphaApr 2 '12 at 15:58

i thought meta trader was made specifically for bucket shops?
–
pyCthonApr 9 '12 at 17:48

Metatrader is most certainly not a charting API.
–
J. MorrisSep 8 '13 at 4:47

Following on from alpha's answer, you might be able to use some of the ideas and tools described on this blog to link R, and maybe also MATLAB/Octave, to the Metatrader platform to use the charting capabilities of Metatrader. Linked from this blog is this page where there is a dll tool available, with downloadable open code, to call R directly from Metatrader, so presumably anything that can be calculated in R can be plotted in Metatrader.

I've been using HighStock, which produces very slick interactive charts with a relatively small amount of JavaScript. Among other things, it can produce candlestick/OHLC charts with volume bars, take a look at the examples page.