Degree Of Complexity by Oscar G. Cagigas
Goodness, It Doesnít Fit
When designing trading systems, itís easy to keep adding
parameters or filters. But does the system perform better
when itís more complex? Hereís how you can keep your
system efficient and only add more when itís necessary.
Although complex trading systems deliver good insample
statistics, they inevitably fail when it comes
to out-of-sample or real-time trading. In this article, I
will present a simple theoretical model to show how important it is to keep complexity low when designing trading
systems. As an example, I will show you a Donchian-based
trading system that generates favorable in-sample statistics
when its complexity is increased but deteriorates in the outof-
sample tests as the complexity gradually increases.
I am going to use a simple model that simulates an uptrend
with some volatility. The model is as follows:
Price = C1*N + C2*sin(N) (1)
N is the number of bars (the time variable)
sin is the sine wave function
C1 and C2 are coefficients that affect the slope
of the rising price curve.
Basically, equation (1) is the sum of a
straight line plus a sinusoidal wave. I have
assigned the values of 10 and 40 to C1 and C2,
respectively. In Figure 1 you can see a graphical
representation of the price model.
After the price model is defined, I perform
a polynomial interpolation of the model
with the degree rising to three (from one).
Polynomial interpolation finds a polynomial
curve of the price variable that goes through
the data points. The higher the degree of the
polynomial, the more accurate.
The idea is to estimate the future behavior
of the price model using a fit with increasing
complexity. In Figure 2 you see the first,
second, and third degrees of polynomial
interpolations of the price model. As you can
see, the three approaches look similar.
The goodness of fit R2 can be seen in the
table in Figure 3. According to this table, the
more complex polynomial, the third degree,
has the best fit for the in-sample tests. It has
the highest R2 value of 0.799.