Log in to see Cloud of Tags

Wealth-Lab Wiki

TASC 2010-11 | Zero-Lag EC Filter (Ehlers, Way)

RSS

Traders' Tip text

We hope that the zero-lag EC filter becomes a good addition to the trader's arsenal. To be employed in a Wealth-Lab Strategy, all it takes is to install (or update if you haven't done that already) the TASCIndicators library from the wealth-lab.com site. Our tests of the always-in-market system mentioned in the article on several diversified portfolios showed that it has potential but may benefit from further optimization and refinement.


Image

Figure 1. A Wealth-Lab Developer 6.0 chart showing the EC filter applied to Crude Oil, October 2010 (60-minute).


It's pleasing to see how this responsive, leading indicator tracks trends, but traders should never underestimate the amount of time spent by markets in range-trading and consolidation phases. As can be noticed on the Crude Oil chart above (the green line in its upper half), the Least Error filter is doing a good job ruling out the low-probability signals, yet it misses some here and there. To improve performance, adding some other filter to detect non-trending conditions might be appropriate.

WealthScript Code (C#)

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators;
using TASCIndicators;	// The EC filter and Least Error

namespace WealthLab.Strategies { public class ZeroLag1011 : WealthScript { private StrategyParameter paramLength; private StrategyParameter paramGain; private StrategyParameter paramThresh; public ZeroLag1011() { paramLength = CreateParameter("Length", 32, 2, 100, 1); paramGain = CreateParameter("Gain Limit", 22, 2, 100, 1); paramThresh = CreateParameter("Threshold", 0.75, 0.5, 2, 0.25); } protected override void Execute() { int Length = paramLength.ValueInt; int GainLimit = paramGain.ValueInt; double Thresh = paramThresh.Value; // Data series EMA ema = EMA.Series( Close, Length, EMACalculation.Modern ); EC ec = EC.Series( Close, Length, GainLimit ); LeastError le = LeastError.Series( Close, Length, GainLimit ); SetBarColors( Color.LimeGreen, Color.OrangeRed ); // This EMA-based indicator is "unstable": allow it to stabilize for(int bar = Length * 3; bar < Bars.Count; bar++) { SetBackgroundColor( bar, Color.Black ); // Detect crossover/crossunder and LeastError above threshold bool maXo = CrossOver( bar, ec, ema ) & ( le[bar] > Thresh ); bool maXu = CrossUnder( bar, ec, ema ) & ( le[bar] > Thresh ); // The initial trade if (Positions.Count == 0){ if ( maXo ) BuyAtMarket( bar + 1 ); else if( maXu ) ShortAtMarket( bar + 1 ); } // All subsequent trades of the SAR system else { Position p = LastPosition; if ( p.PositionType == PositionType.Long ) { if ( maXu ) { SellAtMarket( bar + 1, p ); ShortAtMarket( bar + 1 ); } } else { if ( maXo ) { CoverAtMarket( bar + 1, p ); BuyAtMarket( bar + 1 ); } } } } // Plotting the EC, EMA, and Least Error WealthLab.LineStyle solid = LineStyle.Solid; PlotSeries( PricePane, ec, Color.Gold, solid, 1 ); PlotSeries( PricePane, ema, Color.Red, solid, 1 ); ChartPane lePane = CreatePane( 30,true,true ); PlotSeries( lePane, le, Color.LimeGreen, solid, 2 ); DrawHorzLine( lePane, Thresh, Color.Blue, LineStyle.Dashed, 2 ); HideVolume(); } } }

Important Disclaimer: The information provided by Wealth-Lab is strictly for informational purposes and is not to be construed as advice or solicitation to buy or sell any security.  The owner of Wealth-Lab.com assumes no liability resulting from the use of the material contained herein for investment purposes. By using this web site, you agree to the terms of this disclaimer and our Terms of Use.


ScrewTurn Wiki. Some of the icons created by FamFamFam.