
It will be necessary to consider connectivity to the vendor, structure of any APIs, timeliness of the data, storage requirements and resiliency in the face of a vendor going offline. Prior to the choice of language many data vendors must be evaluated that pertain to a the strategy at hand. The technology choices for a low-frequency US equities strategy will be vastly different from those of a high-frequency statistical arbitrage strategy trading on the futures market. It will be necessary to consider the markets being traded, the connectivity to external data vendors, the frequency and volume of the strategy, the trade-off between ease of development and performance optimisation, as well as any custom hardware, including co-located custom servers, GPUs or FPGAs that might be necessary. The type of algorithmic strategy employed will have a substantial impact on the design of the system. Thus the choice of languages for each component of your entire system may be quite different. I/O issues such as network bandwidth and latency are often the limiting factor in optimising execution systems. For certain strategies a high level of performance is required. Signal generation is concerned with generating a set of trading signals from an algorithm and sending such orders to the market, usually via a brokerage. CPU speed and concurrency are often the limiting factors in optimising research execution speed. The data size and algorithmic complexity will have a big impact on the computational intensity of the backtester. The process of evaluating a trading strategy over prior market data is known as backtesting. Research is concerned with evaluation of a strategy performance over historical data. Is the system going to be purely execution based? Will the system require a risk management or portfolio construction module? Will the system require a high-performance backtester? For most strategies the trading system can be partitioned into two categories: Research and signal generation. What Is The Trading System Trying To Do?īefore deciding on the "best" language with which to write an automated trading system it is necessary to define the requirements. While the architecture is being considered, due regard must be paid to performance - both to the research tools as well as the live execution environment. This includes choice of hardware, the operating system(s) and system resiliency against rare, potentially catastrophic events. Once the trading strategy has been selected, it is necessary to architect the entire system. In particular the frequency of trading and the likely trading volume will both be discussed. Subsequently, different trading strategies will be examined and how they affect the design of the system. This article will outline the necessary components of an algorithmic trading system architecture and how decisions regarding implementation affect the choice of language.įirstly, the major components of an algorithmic trading system will be considered, such as the research tools, portfolio optimiser, risk manager and execution engine. Strategy parameters, performance, modularity, development, resiliency and cost must all be considered. The short answer is that there is no "best" language. One of the most frequent questions I receive in the QS mailbag is "What is the best programming language for algorithmic trading?".
