Log in to see Cloud of Tags

Wealth-Lab Wiki

TASC 2015-03 | Trading System Design: A Statistical Approach (Ehlers, Way)


Traders' Tip text

In March 2015 issue, authors John Ehlers and Ric Way outlined a statistically valid procedure for the successful development of trading systems, providing a testbed for assessing whether the price will increase or decrease over N bars after an event.

From our point of view, it might be optimal to prove the conclusion regarding robustness of the example system by using a different subset of data. It's not a secret that throughout the in-sample period of 10 years used to optimize the system on, almost 6 have been attributed to blowing the third biggest bubble in the U.S. stock market history. Consequently, it's hard to not come up with a trading system having a positive expectation when the market is again comparable to the Dot-com frenzy.


Figure 1. A Wealth-Lab 6 chart showing the U.S. market bubble of the 2010's through the monthly chart of S&P 500 index (^GSPC).

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators;

namespace WealthLab.Strategies { public class EhlersMar2015 : WealthScript { private StrategyParameter paramStoc; private StrategyParameter paramThresh; private StrategyParameter paramLength; private StrategyParameter paramLoss;

public EhlersMar2015() { paramStoc = CreateParameter("StocLength", 8, 1, 100, 1); paramThresh = CreateParameter("Threshold", 0.3, 0.1, 0.9, 0.1); paramLength = CreateParameter("TradeLength", 14, 1, 50, 1); paramLoss = CreateParameter("PctLoss", 3.8, 0.5, 15.0, 0.5); } protected override void Execute() { int StocLength = paramStoc.ValueInt, TradeLength = paramStoc.ValueInt; double Threshold = paramThresh.Value, PctLoss = paramLoss.Value;

Highest HiC = Highest.Series(Close, StocLength); Lowest LoC = Lowest.Series(Close, StocLength); DataSeries Stoc = (Close - LoC) / (HiC - LoC); for(int bar = GetTradingLoopStartBar(1); bar < Bars.Count; bar++) { if (IsLastPositionActive) { Position p = LastPosition; if ( bar+1 - p.EntryBar >= TradeLength ) SellAtMarket( bar+1, p, "Timed" ); else if( Low[bar] < p.EntryPrice*(1.0 - PctLoss /100d) ) SellAtMarket(bar+1, p, "Stop");

} else { if( CrossOver( bar, Stoc, Threshold ) ) BuyAtMarket( bar+1 ); } } } } }

Wealth-Lab team

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.