TASC 2008-06 | Profit with ETFs (Gardner)

Modified on 2010/09/12 11:19 by Eugene — Categorized as: TASC Traders Tips

Traders' Tip text

Since the WealthScript code was presented in the article, let’s focus on an important aspect of the Portfolio Simulation leading to the good results – Position Sizing. Messrs. Gardner used 33% of Equity sizing so that only three Positions could be held at any one time regardless of the number of trade candidates on any given bar. Since the strategy uses a limit order entry, a logical question is, “how would the results have been affected had the trades occurred in a different order or had different candidates been selected?”

We can answer these questions and get a better feel for the robustness of the Strategy using the Monte Carlo-Lab add-on to run hundreds or thousands of Portfolio Simulations using all of the trade candidates’ raw data from Wealth-Lab’s single $imulation. We performed 1000 such simulations using MC-Lab options to scramble the trades while maintaining “date clustering”. Our results from a 5-year simulation (ending 11 April 2008 with 200 lead bars) are shown in the distributions of Figures 1 and 2, which tend to indicate that Wealth-Lab’s [single] Portfolio Simulation results represent typical performance.

Image

Figure 1. (top) From the Net Profit % distribution of 1000 simulations, we can see that we had 50% chance of achieving an avg. net profit of at least 63.75% and 100% chance at a net profit of at least 16%.

Figure 2. (bottom) The Max Drawdown distribution of the 1000 simulations shows an average drawdown of just under -6%.

ETF DataSet

AGG DIA EEM EFA EPP EWA EWC EWD EWG EWH EWI EWJ EWK EWL EWM EWN EWO EWP EWQ EWS EWT EWU EWW EWY EWZ EZA EZU IAU IBB ICF IDU IEF IEV IGE IGM IGN IGV IGW ILF ISI ITF IVE IVV IVW IWB IWD IWF IWM IWN IWO IWP IWR IWS IWV IWW IWZ IXC IXG IXJ IXN IXP IYC IYE IYF IYG IYH IYJ IYK IYM IYR IYT IYW IYY IYZ LQD OEF PBE PBJ PBS PBW PEJ PEY PGJ PJP PSI PSJ PWB PWC PWJ PWO PWP PWT PWV PWY PXQ SHY TLT

Version 5 Code

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

namespace WealthLab.Strategies { public class MyStrategy : WealthScript { protected override void Execute() { DataSeries rsi = RSI.Series(High, 2); DataSeries sma = SMA.Series(Close, 200); DataSeries roc = ROC.Series(Close, 5); ChartPane rsiPane = CreatePane(40, true, true); PlotSeries(PricePane, sma, Color.Blue, LineStyle.Solid, 1); PlotSeries(rsiPane, rsi, Color.Green, LineStyle.Solid, 2); for(int bar = Bars.FirstActualBar + 200; bar < Bars.Count; bar++) { if (IsLastPositionActive) { Position p = LastPosition; if( bar + 1 - p.EntryBar >= 6 ) SellAtMarket(bar + 1, p, "Time-based"); else if( Close[bar] > High[bar -2] ) SellAtMarket(bar + 1, p, "H2"); else SellAtLimit(bar + 1, p, 1.075 * High[bar - 2], "Target"); } else if( (Close[bar] > sma[bar]) && (rsi[bar-1] > 1) && (rsi[bar] < 2) ) if( BuyAtLimit(bar + 1, 1.025 * Low[bar]) != null ) LastActivePosition.Priority = -roc[bar]; } } } }