Sigma-L

Share this post
The Moving Average - High Pass Filter
www.sigma-l.net
Hurst Cycles Toolset (Basic)

The Moving Average - High Pass Filter

Learn how a correctly plotted moving average can be inverted to reveal high frequency components of a signal.

Feb 4, 2022
5
Share this post
The Moving Average - High Pass Filter
www.sigma-l.net
A high pass filter sweep on a signal cleanly extracts the higher frequency component present.

Inversion Excursion

We saw in previous articles of this series how only a correctly plotted moving average can be used as a low pass filter for time series extraction of periodic components. Now, let’s take it to the next level by inverting that moving average - throwing away the low passed data and retaining only components shorter in period than the cutoff of the moving average (period). Since in our work we have both the low pass filtered time series (via the application of the centred moving average) and the original signal time series (be that a test signal as above or financial time series) we can perform the operation easily.

Below is how it is done, via the help of some pseudo code. Note carefully that the subtraction performed to reveal the higher frequency components not present in the low pass filter can only be done if the original signal and low pass filtered signal are correctly aligned. The low passed signal must be shifted, as demonstrated in the previous article, by the (moving average period - 1)/2. This is essential and dictates that the moving average period chosen must really be an odd number!

// Our original signal
signal = [4,5,6,7,8,9,8,7,8] 

// MA period (lp filter cutoff)
ma_period = 3  

// Filtered signal (apply moving average)              
lp_signal = [NaN,NaN,5,6,7,8,8.3,8,7.6] 

// Filter lag correction by: (ma_period-1)/2 = 1 in this case
lp_shift = [NaN,5,6,7,8,8.3,8,7.6,NaN] 

// Subtract the filtered signal from the original signal
hp_signal = signal - lp_shift

High Pass Output, Visualised

Now, let’s build a very simple signal with only two sinusoidal components to demonstrate a clean extraction of the higher frequency component. Below, a 1000 point time series containing components at wavelengths of 500 and 100 respectively. The higher frequency component has an amplitude of 0.5, this will be an important number to remember as we progress. The whole plot is vertically offset for visual clarity.

Our time series, a simple composite of two sinusoids across 1000 data points.

We now apply a moving average of period 101 (must be odd!) to effectively remove the component of period 100 wavelength. This is shown below via the white dashed line, a clean sinusoid of period 500, the only component left in the low passed signal. The plot is correctly centred with lags of 50 points each side using the equation (ma_period-1)/2.

A moving average of period 101 is applied to the signal, removing completely the component at a period of 100. The component at 500 is retained in this low pass filter.

We now have the ingredients to perform our high pass filter extraction. We subtract the lagged low pass filter from the corresponding points in time of the original signal to reveal only what is left, namely components of wavelength equal to and less than 100. This is shown in green at the foot of the chart and approaches the correct amplitude of 0.5.

The high pass filter reveals only the component of 100 wavelength, correctly aligned with the inherent filter lag present.

With the unavoidable digital filter lag we are still left with gaps at nowtime (and the tail) that are problematic for any trading purposes when we switch to real signals. We can solve this to some extent by using the previously discussed technique of signal reflection:

The signal is reflected and the moving average extrapolated through nowtime at 1000. The same can then be done for the high pass filter output.

Drawbacks of a Moving Average LPF

Although the moving average is a useful tool and available to many traders across common platforms there is a subtle drawback readers should be aware of. The frequency response of a moving average is tainted by it’s sidelobes. This means, in practice, that extraction of periodic components is minimally spectrally leaky compared to more sophisticated filtering techniques. It is not that bad for our purposes and certainly the ubiquity and ease of use of the moving average outweighs this disadvantage. It is something to be aware of, regardless. Hurst outlined the frequency response of the moving average as a low pass filter in the appendix of ‘Profit Magic for Stock Transaction Timing’, shown below:

The frequency response of a moving average. There is notable response at the frequencies outside the main pass band lobe, resulting in minimal amplification of the signal at these frequencies. There is also a phase shift introduced. It is negligible but should be noted.

Below, the effect of the leaky spectral profile of the moving average is seen by the slight oscillation of the high pass filter output when the exact frequency is approached by the low pass filter operation on the original signal. In order to correctly return the accurate amplitude of the component (in this case 0.5) one has to accept a slight leaking through of lower frequency components. In the below case the component with a wavelength of 500 is very slightly affecting the high pass output (in green). Note how the oscillation is more pronounced as the filter cutoff approaches the wavelength of the target component at 101.

More Extractions!

Let’s now add a third sinusoid to our signal, of even higher frequency, amplitude 0.25 and some small amount of white noise to taste:

Our composite signal now contains noise and components of wavelength 50, 100 and 500. The new high frequency component has an amplitude of 0.25.

Now we will attempt to extract the very highest frequency component at a wavelength of 50 via our high pass filter technique. But first let’s see if we can isolate just the noise, for demonstration:

Noise extraction is easily achieved with a very high pass filter applied to price. This will be more useful when we come to apply bandpass filtering and will be explored in due course.

For the high frequency component we sweep across a range of filter cutoffs from 11 to 51, odd numbers only. The result is interesting:

A filter sweep to extract the component of wavelength 50 shows spectral leakage.

What we see here is as we approach the low pass filter cutoff of 51, which would remove the component of that wavelength in the low pass filter (and therefore return it in the high pass) is once again, spectral leakage. The component of 100 wavelength is corrupting the signal. However this is marginally only the case if we wish to return the original amplitude of 0.25. It turns out that the leakage from larger components will begin to affect the high pass signal after around halfway to the wavelength of the component we are trying to target. If we are only really interested in the frequency of a component we can compromise in this high pass filter approach by only filtering up to around half of the target component wavelength. This is shown below:

The signal is high passed filtered up to around 25, the halfway point of the component target at 50. Some leakage is still present but it is negligible.

Next, Bandpass

The final installment of this moving average series will take the next natural step and detail construction of a bandpass filter. This is possible by computing two low pass filters at different cutoffs (periods), the frequencies between those two filters acting as the ‘band’ to ‘pass’. A bandpass filter is possibly the most powerful of the techniques and allows us to construct ‘comb filters’ that can sweep through signals, isolating specific bands for further examination. It requires careful thought about the cutoff frequencies to employ and how to correctly align signals when we account for filter lag. It is also an easy way to remove noise from a noisy high pass signal, as is the case above.

After that we will take these techniques and apply them to real markets. That is where the fun really begins!


Sigma-L is a reader-supported publication. To receive new posts, consider becoming a free or paid subscriber.


DISCLAIMER: This website/newsletter and the charts/projections contained within it are intended for educational purposes only. Results and projections are hypothetical. We accept no liability for any losses incurred as a result of assertions made due to the information contained within Sigma-L. This report is not intended to instruct investment or purchase of any financial instrument, derivative or asset connected to the information conveyed in the report. Trade and invest at your own risk.

Share this post
The Moving Average - High Pass Filter
www.sigma-l.net
Previous
Next
Comments
TopNewCommunity

No posts

Ready for more?

© 2023 Sigma-L
Privacy ∙ Terms ∙ Collection notice
Start WritingGet the app
Substack is the home for great writing