(Revised May 26, 2005)

One fundamental premise of the ** QuanTek** approach is that some
correlation exists in the stock data in the low-frequency modes. In other
words, if the stock returns data are separated into separate frequencies by means
of the

The original version of the ** QuanTek** program, which was called

Here is the TEST data file using the **Linear Prediction** for the **Price
Projection** (the blue part to the right):

As can be seen,, the **Linear Prediction** routine projects the smooth
sine wave quite well. This is not too surprising, since the sine wave
(with added noise) is very smooth and highly auto-correlated. It is the
main forte of the **Linear Prediction** filter that it performs well on very
smooth, but not necessarily exactly periodic, waveforms.

Here is the TEST data file using the **Fractional Difference** filter
with a **fractional exponent** of **+0.25** for the **Price Projection**
(the blue part to the right):

Note that this filter is set for a *positive* **fractional exponent**,
so it should capture the **trend persistence** of the smooth curve.
Nevertheless, for this smooth sine wave, the **Fractional Difference**
filter does not perform as well as the **Linear Prediction** filter.

Here is the TEST data file using the **Fractional Difference** filter
with a **fractional exponent** of **-0.25** for the **Price Projection**
(the blue part to the right):

Note that this filter is set for a *negative* **fractional exponent**,
so it should capture any **anti-persistence** of the data. Thus it can
be seen that this anti-persistent filter is completely wrong for projecting
this smooth sine wave. On the other hand, this filter works well for some
stocks in the present time era which seem to exhibit a strong *short-term
anti-persistence* of the returns, such as **MSFT** over the past four
year or so.

(Note in the above graphs that the dark yellow 320-day smoothing curve from
the **Savitzky-Golay** smoothing filter, seems to be out of phase with the
signal. However, this is merely a consequence of the fact that the
smoothing time period is something of the order of 3 half-wavelengths of the
sine wave.)

It appears that the appropriate projection filter to use depends on the *individual
stock* and also on the *time period* in question. At the current
time, some stocks are displaying a rather strong *anti-persistence* in the
short-term returns, so the **Fractional Difference** filter with *negative***
fractional exponent** gives the best results. At other times, such as
in the trending market of the '90s, perhaps the **Fractional Difference**
filter with *positive* **fractional exponent** gives the best results,
or perhaps the **Linear Prediction** filter works the best. The stock data,
of course, are very noisy and at times anti-persistent, unlike the smooth sine
wave, so it should not be inferred that the **Linear Prediction** filter
will work best for stock returns data, just because it leads to the best
projection of the smooth sine wave. It becomes evident at this point that
perhaps the appropriate solution would be a combination ARIMA (*Auto-Regressive
Integrated Moving Average*) filter, combining the *low-frequency
persistence* with the *high-frequency anti-persistence*, with only a few
parameters to estimate. It is the over-estimation with far too many
filter parameters that is the main weakness of the **Linear Prediction**
filter, along with its inability to simulate a *fractionally integrated*
(the "I" in ARIMA) process. In fact, the **Linear Prediction**
filter simulates **Auto-Regressive** processes only (the "AR" in
ARIMA).

One might also consider the possibility of some sort of **Adaptive**
filter, such as the **Kalman** filter. The problem here is that the
financial data are probably too sparse to be able to segment the data and
detect a changing correlation structure in each segment (except maybe for the
short-term correlation). So for the practical reason of not enough data
points, it is necessary to treat the data as if it were **stationary** and
compute correlation over the whole data set, or at least over only a few large
blocks of data. *Stationarity*, of course, is a key assumption of
the ARIMA class of processes.

We now confine our attention to the results using the **Linear Prediction**
filter, as shown above. We examine to begin with, the first group of ** QuanTek
technical indicators**, consisting of three indicators in the

The **Relative Price** and **Velocity** indicators show mainly the
pure sine wave only, while the **Acceleration** indicator is starting to
show the acceleration due to the superimposed S & P 500 data as well.
The green and red lines are the **buy/sell points** derived from the **Trading
Rules** indicator (discussed later). The yellow line is the *present
day* (day ZERO), and all data to the right of the ZERO line are due to the **Price
Projection**. Notice the relative phases of the three graphs. The
**buy/sell points** correspond to a **Relative Price** which is **minimum/maximum**
(**min/max**) (relative to the 320-day smoothing curve), to **positive/negative
zero crossings** (**Z+/Z-**) of the **Velocity **curve, and to the **maximum/minimum**
(**max/min**) of the **Acceleration** curve. Notice that these
points line up rather well, even though they are derived from the **Trading
Rules** indicator, which is derived somewhat differently. This is
crucially dependent, however, on all indicators using the same type of
smoothing, namely the **Savitzky-Golay** (acausal) smoothing filter with the
same time scale.

To re-iterate, the **buy points** are when the price is minimum, the
velocity (returns) are going from negative to positive, and the acceleration
(curvature) is at a positive maximum. These points correspond to a trough
or minimum point of the prices. The **sell points** are when the price
is maximum, the velocity (returns) are going from positive to negative, and the
acceleration (curvature) is at a negative minimum. These points
correspond to a peak or maximum of the prices. Also notice that these **buy/sell
points** correspond to the green/red arrows in the price graph shown above
(using the **Linear Prediction** filter). These indicators in the **Harmonic
Oscillator** splitter window are independent of the custom **Momentum**
indicators and **Trading Rules**, except for the indicated **buy/sell
points**. They serve to confirm these latter indicators.

We begin by trying to design a custom **Technical Indicator** which is a
generic **Relative Price** indicator. We start with the following
settings on the *Technical Indicators* dialog:

This indicator has zero *Lead Time* and uses only the *Primary
Indicator*. Calculating the correlation with 1-day returns leads to
the following result:

This is the kind of result we expect. The correlation is very large at
the peaks, of course, because the signal is an almost perfectly deterministic
sine wave. But we expect that the *higher* the price in the *past*,
at a time in the past about a quarter of the cycle, the more *negative*
the future 1-day return. The *lower* the price a quarter cycle in
the past, the more *positive* the future 1-day return. In other
words, there should be a *negative* correlation between past prices and
the future 1-day return, which peaks at about a quarter cycle in the
past. This is indeed what we see in the graph. The correlation
between the *present* price, at the ZERO line, and the future 1-day
return, is nearly zero, because the *price* cycle is one quarter cycle out
of phase with the *returns* cycle. Likewise, the *return* 1-day
in the future is *positively* correlated with the *price* one quarter
cycle in the future, because the price in the future is a direct consequence of
the rate of change of prices at the present.

To turn this into a **Technical Indicator**, we must shift the
phase. Let us try an indicator consisting of a positive contribution of
the **Relative Price** at a future time, and a negative contribution of the **Relative
Price** at a past time. Thus we try the following settings:

The *Use Secondary Indicator* check box has been checked, and the *Lead
Time* for the *Primary Indicator* has been set to **+20 days**,
while the *Lead Time* for the *Secondary Indicator* has been set to **-20
days**. This leads to the following correlation with 1-day returns:

Now we see that the resulting **Technical Indicator** is nicely peaked
near the ZERO point in the graph. The actual value of the Correlation and
Estimated annual gain should be ignored, since, of course, we are working with
a nearly perfectly deterministic sine wave. But this illustrates the
ideal behavior that a good **Technical Indicator** should display.
This indicator is a function of **past prices** which exhibits a strong
positive **correlation** with **future 1-day returns**.

We now try to construct a **Technical Indicator** of the **Velocity**
type. In other words, this will be a function of the past *returns*,
or *first derivative* of the past prices. We start with the
following generic settings in the *Technical Indicators* dialog:

Upon computing the correlation of the smoothed past and future projected returns with the future 1-day returns, we find the following result:

This result is as we expect. The smoothed returns of the deterministic
sine wave signal are at maximum correlation with the future 1-day returns near
the ZERO point (actually one day in the future of it). Thus we have
another valid **Technical Indicator**, which this time is a smoothed
function of the **past returns** or

Now let us try to construct a generic **Technical Indicator** of the **Acceleration**
type. This will be a smoothed function of the *second derivative* of
past prices, which is the same thing as the *rate of change* of *returns*.
We start with the following generic settings in the *Technical Indicators*
dialog:

This leads to the following correlation of the smoothed *second difference
of past prices* with *future 1-day returns*:

This graph is also what we expect for the correlation of the past *acceleration*
with the *future 1-day returns*. When the past *acceleration*
is *positive*, indicating an upward curvature of the prices or increase in
returns, this will lead to a *positive* *future 1-day return*.
Likewise, when the past *acceleration* is *negative*, indicating a
downward curvature of the prices or decrease in returns, this will lead to a *negative*
*future 1-day return*. In the future, due to the cyclic nature of
the price graph, a positive *future 1-day return* will lead to a *negative
acceleration* or downward curvature in the future, and a negative *future
1-day return* will lead to a *positive acceleration* or upward
curvature in the future. So this is the kind of graph we expect of the **correlation**
of past **acceleration** with **future 1-day returns**, given that the
price "signal" has low-frequency **correlation**.

To construct an actual **technical indicator**, we need to shift the
phase. Let us simply take the *acceleration* some time in the past
as our technical indicator. The settings in the *Technical Indicators*
dialog then become the following:

This then leads to the following correlation between this **technical
indicator** and the **future 1-day returns**:

For this indicator, in which the **Lead Time** is set to **-40 days**,
we arrive at a good positive **correlation** between this **technical
indicator** and the **future 1-day returns**. However, it can be
seen that the correlation would be even better if we had gone further back into
the past.

Now we can view the **Momentum Indicators** splitter window, which shows
all three of the above **technical indicators**, after they have been saved
as the respective three **momentum indicators**:

(Note that the normalization of these indicators seems to be a little off
due to the predominance of a single sine wave in the signal.) The
important point to note here is that the peaks, troughs, and zero crossings of
all three of the indicators line up pretty well. (Again, the Acceleration
indicator is a little non-regular due to the influence of the S & P 500
data on top of the sine wave.) The **buy/sell points** correspond to
the **positive/negative zero crossings** of the indicators. Therefore
it can be seen that the **momentum indicators** behave the same way as a **velocity**.
The **momentum indicators** are to be interpreted as a *surrogate* or *estimate*
for the (smoothed) *returns*, both past and future, and the **smoothed
returns** are the same thing as the **velocity**.

These three **momentum indicators** are to be added together to form the **Trading
Rules** indicator. You can set the relative weight of each of the three
indicators by means of the *Trading Rules Parameters* dialog box:

In the present case, all three **momentum indicators** are given equal
weight in the **Trading Rules** indicator.

Now we may see the result of combining these three **momentum indicators**
to form the **Trading Rules** indicator. This indicator is in the
bottom pane of the **Trading Rules** splitter window:

The positions of the **buy/sell points** are determined from the **positive/negative
zero crossings** of this indicator. As before, these are denoted by the
green/red vertical lines.

The middle pane of this splitter window is the output of the **Fractional
Difference** filter, which is used for the Day Trading rules. This
graph is the only one that is not smoothed. It is computed by going back
and computing the 1-day expected return from the **Fractional Difference**
filter for each day in the past, using only data before that day. In this
way it is actually a **causal** display, unlike all the other graphs which
are **acausal**, being the output of the *acausal* **Savitzky-Golay**
smoothing filter. But it can be seen that, for the given sine wave
signal, the output of the **Fractional Difference** filter corresponds
nicely with the past part of the smoothed **momentum indicator**, which is
calculated in a completely different way (using the **Linear Prediction**
filter as explained previously).

As a matter of fact, we can test the output of the **Fractional Difference**
filter itself in the present case. We use the following settings on the **Technical
Indicators** dialog to test the (unsmoothed) output of the **Fractional
Difference** filter as a **technical indicator** (with a Smoothing Time
Scale of 1 day corresponding to *no smoothing*). Note that the **Fractional
Dimension (exponent)** is set to a *positive* value of **+0.25**,
indicating **trend persistence**:

This then leads to the following correlation with the actual 1-day future
returns in the **Correlation Test** dialog:

Here we see that, due to the (extremely!) persistent trend of the sine wave,
the past returns are highly correlated with the **future 1-day return**, and
the output of the **Fractional Difference** filter is even more highly
correlated. This positive correlation is also very visible in the middle
pane of the **Trading Rules** splitter window.

Finally, the upper pane of this splitter window shows the **Volatility**
of the data. It can be seen that the **buy/sell points** tend to pass
through the areas where the **volatility** is at a minimum. The
natural explanation for this is that the **buy/sell points** occur at the
peaks and troughs of the price graph, where the **volatility** is minimized
due to the fact that the price trend is zero at these points.

Finally, we can take a look at the **Periodogram** or ** spectrum**
of this pure sine wave signal:

The pure sine wave is the extreme peak at the low-frequency end of the scale, which runs completely off the vertical scale. This kind of single-frequency signal would never occur in real financial data. Also notice that the two statistical tests indicate the presence of a non-random signal and a cyclic signal, with 100% confidence.

Peter J. Brockwell & Richard A. Davis, __Time Series:
Theory and Methods, 2 ^{nd} ed.__, Springer-Verlag, New
York (1991)

William H. Press, Saul A. Teukolsky, William T. Vetterling, & Brian P. Flannery (NR),

__Numerical Recipes in C, The Art of Scientific
Computing, 2 ^{nd} ed.__, Cambridge University Press, Cambridge, UK
(1992)

*return to ***
Demonstrations*** page*