The first part of this series can be found here: Algorithmic Trading- a novelty still inaccessible to the masses.

Prerequisites:

  • A basic understanding of market indicators and strategies
  • Basic Knowledge about Object-Oriented Programming (basic idea about classes and objects)

My work throughout my tenure as Software Development intern at Symphony Fintech was majorly focussed on developing a feature which can allow the user to get stock-specific recommendations for the ideal set of parameters for any given indicator-based signals, either pre-defined or user-designed, based on the performance of the strategy over the historical data of the concerned stock(Backtesting).

For any given indicator, all possible combinations of parameter values would mean dealing with a vast search space; hence brute-forcing through the procedure would imply a sluggish performance. The introduction of every parameter would result in another dimension being added to the search space causing the time required to run the program to increase exponentially with each such addition. Since the execution time is of significant importance, the option of training Neural Network-based models for the job doesn’t seem to fit with the problem requirements. Plus, in such a system where the definition of a gradient isn’t clearly defined, derivative-based methods prove out to be problematic. Genetic Algorithms provide an efficient and adaptive approach towards such a modifiable problem statement with a vast search space and discrete cost functions.

Image for post

Ex: Considering an indicator that uses three parameters in itself, thus giving a 3-dimensional grid. For each possible set of value for the parameter set, there is a small cube in this grid which represents those set of values. If we consider a small search space wherein each of the three parameters has a 100 value range, the total number of possibilities become ¹⁰⁶.

We’ll go over the concept of Genetic Algorithm below. In order to give you as much information about the workings of this feature, we’ll go through the implementation of the same in C#. In case you aren’t interested in the concept of GA and how this feature works internally, feel free to skip the following two sections and jump to the Deployment section, where I’ve explained how the user can get access to this feature and use it.

Genetic Algorithm (GA)

Genetic Algorithms are a subclass of Evolutionary algorithms widely used for optimization purposes. These are inspired by the biological phenomenon of evolution. These algorithms operate by mimicking the principles of reproduction and natural selection to constitute search and optimization procedures. Therefore, it becomes essential to know a little about Darwin’s Theory of Evolution. We won’t cover the biological correspondence of GA in deep since that is outside the scope of this blog, but we will go through the major concepts required for the understanding of this feature of our library.

Image for post

Unlike them, individuals in our algorithm do not evolve by lighting a CFL inside them.

Darwin’s Theory of Evolution

  • During reproduction, parents pass some of the traits to their offsprings.
  • In sexual reproduction, the chromosomes of the resultant offspring are a mix of their parents.
  • Characteristics, encoded in genes are transmitted to offspring and tend to propagate into new generations.
  • Variations (mutations) are present naturally in all species producing new traits.
  • An offspring’s characteristics are partially inherited from parents and partly the result of new genes created during the reproduction process.
  • Over long periods, variations can accumulate and produce new species.
  • Fitter individuals survive longer (Natural Selection).
  • The process of natural selection, ‘selects’ individuals best adapted to the environment.

Keeping these points in mind, we can now discuss how we arrive at the solution. While moving through the search space, there are two kinds of searches that we focus on

  • Local Search
  • Global Search

As the names suggest, the former is a more reserved searching procedure mostly confined to the surroundings of the current best solution. In the context of GA, this is achieved using the Crossover operator. The latter is a more comprehensive searching procedure spanning the complete domain. This is handled by the mutation operator. Before explaining the operators involved and how they come into use, we need to know about what a Fitness Function is.

#algorithmic-trading #programming #algorithms

Algorithmic Trading (Part- II)
2.00 GEEK