OPEN-SOURCE SCRIPT

STD/C-Filtered, N-Order Power-of-Cosine FIR Filter [Loxx]

STD/C-Filtered, N-Order Power-of-Cosine FIR Filter [Loxx] is a Discrete-Time, FIR Digital Filter that uses Power-of-Cosine Family of FIR filters. This is an N-order algorithm that turns the following indicator from a static max 16 orders to a N orders, but limited to 50 in code. You can change the top end value if you with to higher orders than 50, but the signal is likely too noisy at that level. This indicator also includes a clutter and standard deviation filter.

See the static order version of this indicator here:

STD/C-Filtered, Power-of-Cosine FIR Filter [Loxx]
STD/C-Filtered, Power-of-Cosine FIR Filter [Loxx]


Amplitudes for STD/C-Filtered, N-Order Power-of-Cosine FIR Filter:
snapshot

What are FIR Filters?
In discrete-time signal processing, windowing is a preliminary signal shaping technique, usually applied to improve the appearance and usefulness of a subsequent Discrete Fourier Transform. Several window functions can be defined, based on a constant (rectangular window), B-splines, other polynomials, sinusoids, cosine-sums, adjustable, hybrid, and other types. The windowing operation consists of multipying the given sampled signal by the window function. For trading purposes, these FIR filters act as advanced weighted moving averages.

What is Power-of-Sine Digital FIR Filter?

Also called Cos^alpha Window Family. In this family of windows, changing the value of the parameter alpha generates different windows.

f(n) = math.cos(alpha) * (math.pi * n / N) , 0 ≤ |n| ≤ N/2

where alpha takes on integer values and N is a even number

General expanded form:

alpha0 - alpha1 * math.cos(2 * math.pi * n / N)
+ alpha2 * math.cos(4 * math.pi * n / N)
- alpha3 * math.cos(4 * math.pi * n / N)
+ alpha4 * math.cos(6 * math.pi * n / N)
- ...

Special Cases for alpha:

alpha = 0: Rectangular window, this is also just the SMA (not included here)
alpha = 1: MLT sine window (not included here)
alpha = 2: Hann window (raised cosine = cos^2)
alpha = 4: Alternative Blackman (maximized roll-off rate)

This indicator contains a binomial expansion algorithm to handle N orders of a cosine power series. You can read about how this is done here: The Binomial Theorem

What is Pascal's Triangle and how was it used here?

In mathematics, Pascal's triangle is a triangular array of the binomial coefficients that arises in probability theory, combinatorics, and algebra. In much of the Western world, it is named after the French mathematician Blaise Pascal, although other mathematicians studied it centuries before him in India, Persia, China, Germany, and Italy.

The rows of Pascal's triangle are conventionally enumerated starting with row n = 0 at the top (the 0th row). The entries in each row are numbered from the left beginning with k=0 and are usually staggered relative to the numbers in the adjacent rows. The triangle may be constructed in the following manner: In row 0 (the topmost row), there is a unique nonzero entry 1. Each entry of each subsequent row is constructed by adding the number above and to the left with the number above and to the right, treating blank entries as 0. For example, the initial number in the first (or any other) row is 1 (the sum of 0 and 1), whereas the numbers 1 and 3 in the third row are added to produce the number 4 in the fourth row.

Rows of Pascal's Triangle
0 Order: 1
1 Order: 1 1
2 Order: 1 2 1
3 Order: 1 3 3 1
4 Order: 1 4 6 4 1
5 Order: 1 5 10 10 5 1
6 Order: 1 6 15 20 15 6 1
7 Order: 1 7 21 35 35 21 7 1
8 Order: 1 8 28 56 70 56 28 8 1
9 Order: 1 9 36 34 84 126 126 84 36 9 1
10 Order: 1 10 45 120 210 252 210 120 45 10 1
11 Order: 1 11 55 165 330 462 462 330 165 55 11 1
12 Order: 1 12 66 220 495 792 924 792 495 220 66 12 1
13 Order: 1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1

For a 12th order Power-of-Cosine FIR Filter

1. We take the coefficients from the Left side of the 12th row

1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1

2. We slice those in half to

1 13 78 286 715 1287 1716

3. We reverse the array

1716 1287 715 286 78 13 1

This is our array of alphas: alpha1, alpha2, ... alphaN

4. We then pull alpha one from the previous order, order 11, the middle value

11 Order: 1 11 55 165 330 462 462 330 165 55 11 1

The middle value is 462, this value becomes our alpha0 in the calculation

5. We apply these alphas to the cosine calculations

example: + alpha4 * math.cos(6 * math.pi * n / N)

6. We then divide by the sum of the alphas to derive our final coefficient weighting kernel

**This is only useful for orders that are EVEN, if you use odd ordering, the following are the coefficient outputs and these aren't useful since they cancel each other out and result in a value of zero. See below for an odd numbered oder and compare with the amplitude of the graphic posted above of the even order amplitude:

snapshot

What is a Standard Deviation Filter?
If price or output or both don't move more than the (standard deviation) * multiplier then the trend stays the previous bar trend. This will appear on the chart as "stepping" of the moving average line. This works similar to Super Trend or Parabolic SAR but is a more naive technique of filtering.

What is a Clutter Filter?
For our purposes here, this is a filter that compares the slope of the trading filter output to a threshold to determine whether to shift trends. If the slope is up but the slope doesn't exceed the threshold, then the color is gray and this indicates a chop zone. If the slope is down but the slope doesn't exceed the threshold, then the color is gray and this indicates a chop zone. Alternatively if either up or down slope exceeds the threshold then the trend turns green for up and red for down. Fro demonstration purposes, an EMA is used as the moving average. This acts to reduce the noise in the signal.

Included
  • Bar coloring
  • Loxx's Expanded Source Types
  • Signals
  • Alerts
binomialtheoremclutterfilterclutterfilteredcosineFIRfirfilterMoving AveragespascalstrianglepowerofcosineStandard Deviation

Open-source script

In true TradingView spirit, the author of this script has published it open-source, so traders can understand and verify it. Cheers to the author! You may use it for free, but reuse of this code in publication is governed by House rules. You can favorite it to use it on a chart.

Want to use this script on a chart?


Public Telegram Group, t.me/algxtrading_public

VIP Membership Info: patreon.com/algxtrading/membership
Also on:

Disclaimer