One of the most frustrating juggling acts for developers of trading models is the trade off between ease of use and performance when it comes to choosing a programming medium. At one end of the spectrum are compiled languages such as C++, which are challenging to learn and require such things as declaration of all variables and types, but are compiled as machine code - resulting in slow creation time but fast execution time. At the other end of the spectrum are interpreted languages such as Visual Basic, which are relatively easy to learn, do not require the declaration of variables and types in advance, but have to be interpreted at run time - resulting in fast creation time but slow execution time.
Sitting somewhere in between these two extremes are languages such as C#, which are semi-compiled1, but can - depending on the exact circumstances - produce run time performance not far behind fully compiled languages. While most would probably accept that C# has less of a learning curve than C++, it is still demanding - and especially if one is attempting to express complex mathematical algorithms and has limited experience.
This is particularly relevant right now due to a notable change in trader demographics currently underway. Especially over the last year, we have noticed a sharp uptick in the number of Automated Trader readers of a certain type. These are typically highly experienced manual traders who have found their existing trading methods are struggling to generate sufficient alpha in an environment where trading volumes in many major equity markets and their associated derivatives have declined substantially. As a result, they are looking for alternative opportunities in automated trading but lack the quantitative and programming skills to do this, which means they are looking for anything that flattens their learning curve.
This often results in them starting by using either a proprietary scripting language associated with a particular trading platform or something like MATLAB, R or Octave. But many of these traders are working in groups and are now considering implementing their ideas in applications with custom trading GUIs that can be shared across the group - a task for which C# is well suited. However, while there are plenty of maths libraries available for C#, the key question is how quickly existing trading models can be ported using these - therefore ease of use is paramount.
Although it has many other more general applications, this ease of use is one of the stated objectives of ILNumerics, which claims to be the only mathematical programming library to combine the simplicity of a high level numerical scripting language (such as MATLAB, R or Octave) with the speed of compiled code.
It has to be said that ILNumerics gets off to a decent start on the simplicity front when it comes to its syntax, especially for those users who have done their model prototyping in something like MATLAB or Octave. While certainly not 100 percent identical, much of the syntax used is very similar or the same as MATLAB/Octave. ILNumerics provides a handy PDF that provides syntax comparisons with MATLAB for array handling, subarrays, cells, operators and functions. A quick glance at this reveals a raft of identical syntax for trigonometric, accumulative, algebraic, state and Fourier transform functions. In addition, quite a bit of the array handling syntax is also identical, such as horizontal and vertical concatenation, reshaping and replication.
We installed ILNumerics using the quick start guide instructions on ilnumerics.net, which were very clear and worked well. However, it's worth noting that it is now also possible to install the library by using NuGet, which is a Visual Studio extension for installing and updating third party libraries in Visual Studio. This is well worthwhile, as it considerably simplifies the whole process of library management under Visual Studio, especially when updating existing libraries.