Traders' Tip text
In his article in August 2019 issue, Dr. Ehlers presents an indicator which could help signal cyclic turning points - the
Voss Predictor filter. Noticing that the indicator accurately tracks the market's peaks and valleys, author suggests that simple crossovers of the forward-looking Voss Predictor with the two-pole band pass filter may become the basis of a trading system.
Those who follow us might have figured out that our motto is "Avoid coding whenever possible". In contrast with the filter concept's complexity, this time we're lucky again to not have to bother our readers with code. Here's how:
Step 1. Install (or update) the
TASCIndicators library to its most-recent version from
our website or using the built-in
Extension Manager.
Step 2. Add an Entry and Exit blocks, then drag and drop "Indicator crosses above (below) Indicator" from "General Indicators" under the Conditions tab on top of each one (respectively).
Step 3. For each entry and exit, choose the "peeking"
VossPredictor as "Indicator1" and a "lagging"
BandPass as "Indicator2" where prompted.
Figure 1. Creating a Rule-based Strategy with the Voss Predictor in Wealth-Lab.
As far as the cycle signal starts to fail once a strong trend emerges, let's stay on the sidelines when the trend gains strength with this simple rule:
Step 4. Drag and drop the condition called "Indicator is below a value" (from "General Indicators") onto your entry, choose "ADX" as the indicator and set 25-30 as its threshold. This ensures our simple system from being caught on the wrong side as the market starts to trend in any direction.
Figure 2. The example trading system applied to a Daily chart of AAPL (data provided by Yahoo).
WealthScript Code (C#)
Whether you’ve prototyped the trading system code like shown above or downloaded it from Wealth-Lab (hit Ctrl-O and choose "Download..."), to peek into the code behind it simply click "Open code in new Strategy window". Here’s it for your convenience:
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators;
using TASCIndicators;
namespace WealthLab.Strategies
{
public class MyStrategy : WealthScript
{
protected override void Execute()
{
var voss = VossPredictor.Series( Close, 20,3 );
var bandpass = BandPass.Series( Close, 20 );
var adx = ADX.Series( Bars, 14 );
for(int bar = GetTradingLoopStartBar( 21 ); bar < Bars.Count; bar++)
{
if (IsLastPositionActive)
{
Position p = LastPosition;
if (CrossUnder(bar, voss, bandpass))
SellAtMarket( bar + 1, p);
}
else
{
if (CrossOver(bar, voss, bandpass))
if (adxbar < 30)
BuyAtMarket( bar + 1);
}
}
ChartPane pane1 = CreatePane( 25,true,true );
PlotSeries( pane1,voss,Color.BlueViolet,LineStyle.Solid,1);
PlotSeries( pane1,bandpass,Color.IndianRed,LineStyle.Solid,1);
ChartPane pane2 = CreatePane( 25,true,true );
PlotSeries( pane2,adx,Color.Purple,LineStyle.Solid,3);
}
}
}
Gene Geren (Eugene)
Wealth-Lab team