Here is this month's selection of Traders' Tips, contributed by various developers of technical analysis software to help readers more easily implement some of the strategies presented in this and other issues. May 2008
TRADERS' TIPSYou can copy these formulas and programs for easy use in your spreadsheet or analysis software. Simply "select" the desired text by highlighting as you would in any word processing program, then use your standard key command for copy or choose "copy" from the browser menu. The copied text can then be "pasted" into any open spreadsheet or other software by selecting an insertion point and executing a paste command. By toggling back and forth between an application window and the open Web page, data can be transferred with ease.
This month's tips include formulas and programs for:
METASTOCK: THE QUEST FOR RELIABLE CROSSOVERS
TRADESTATION: THE QUEST FOR RELIABLE CROSSOVERS
eSIGNAL: THE QUEST FOR RELIABLE CROSSOVERS
AMIBROKER: THE QUEST FOR RELIABLE CROSSOVERS
CQG: THE QUEST FOR RELIABLE CROSSOVERS
WEALTH-LAB: THE QUEST FOR RELIABLE CROSSOVERS
NEUROSHELL TRADER: THE QUEST FOR RELIABLE CROSSOVERS
WORDEN BROTHERS BLOCKS: THE QUEST FOR RELIABLE CROSSOVERS
ASPEN GRAPHICS: THE QUEST FOR RELIABLE CROSSOVERS
STRATASEARCH: THE QUEST FOR RELIABLE CROSSOVERS
AIQ: THE QUEST FOR RELIABLE CROSSOVERS
NINJATRADER: THE QUEST FOR RELIABLE CROSSOVERS
STRATEGYDESK: THE QUEST FOR RELIABLE CROSSOVERS
NEOTICKER: THE QUEST FOR RELIABLE CROSSOVERS
TRADE NAVIGATOR: THE QUEST FOR RELIABLE CROSSOVERS
TRADINGSOLUTIOSN: THE QUEST FOR RELIABLE CROSSOVERS
SWINGTRACKER: TEMA OVERLAY
VT TRADER: CROSSOVER TRADING SYSTEMor return to May 2008 Contents
Editor's note: This month's Traders' Tips are based on Sylvain Vervoort's article in this issue, "The Quest For Reliable Crossovers." Code written for MetaStock is already provided by the author in the article's sidebars. Additional code is presented here.
Readers will find our Traders' Tips section in its entirety at the STOCKS & COMMODITIES website at www.Traders.com in the Traders' Tips area, from where the code can be copied and pasted into the appropriate program. In addition, the code for each program is usually available at the respective software company's website. Thus, no retyping of code is required for Internet users.
For subscribers, code found in Vervoort's article can be copied and pasted into MetaStock from the Subscriber Area at www.Traders.com. Login is required.
METASTOCK: THE QUEST FOR RELIABLE CROSSOVERS
Editor's note: Code for MetaStock can be found in the sidebars to Sylvain Vervoort's article in this issue, "The Quest For Reliable Crossovers." The code is reprinted here:
GO BACKTEMA Tema(Close, 10, Exponential) Or a more general method: 3*Mov(C,10,E)-3*Mov(Mov(C,10,E),10,E)+Mov(Mov(Mov(C,10,E),10,E),10,E) where Mov = moving average, C = Closing price, E = Exponential average HEIKIN-ASHI haOpen:=(Ref((O+H+L+C)/4,-1) + PREV)/2; haC:=((O+H+L+C)/4+haOpen+Max(H,haOpen)+Min(L,haOpen))/4; ZERO-LAGGING EMA AND TEMA EMA Period:= Input("What Period",1,250,10); EMA1:= Mov(CLOSE,Period,E); EMA2:= Mov(EMA1,Period,E); Difference:= EMA1 - EMA2; ZeroLagEMA:= EMA1 + Difference; ZeroLagEMA TEMA Period := Input("What TEMA period? ",1,250,10); TMA1:= Tema(CLOSE,period); TMA2:= Tema(TMA1,period); Difference:= TMA1 - TMA2; ZeroLagTMA:= TMA1 + Difference; ZeroLagTMA moving averages used Typical price zero-lagging TEMA MetaStock formula: period := Input("Average TEMA period? ",1,100,55); TMA1:= Tema(Typ(),period); TMA2:= Tema(TMA1,period); Difference:= TMA1 - TMA2; ZeroLagTMA:= TMA1 + Difference; ZeroLagTMA Heikin-ashi zero-lagging TEMA MetaStock formula: avg := Input("Average TEMA period? ",1,100,55); haOpen:=(Ref((O+H+L+C)/4,-1) + PREV)/2; haC:=((O+H+L+C)/4+haOpen+Max(H,haOpen)+ Min(L,haOpen))/4; TMA1:= Tema(haC,avg); TMA2:= Tema(TMA1,avg); Diff:= TMA1 - TMA2; ZeroLagHA:= TMA1 + Diff; ZeroLagHA Buying formula (MetaStock) Avg:=55; {a 55 fixed day average} haOpen:=(Ref((O+H+L+C)/4,-1) + PREV)/2; haC:=((O+H+L+C)/4+haOpen+Max(H,haOpen)+Min (L,haOpen))/4; TMA1:= Tema(haC,avg); TMA2:= Tema(TMA1,avg); Diff:= TMA1 - TMA2; ZlHa:= TMA1 + Diff; TMA1:= Tema(typ(),avg); TMA2:= Tema(TMA1,avg); Diff:= TMA1 - TMA2; ZlCl:= TMA1 + Diff; cross(ZlCl,ZlHa) {crossover of the zero-lagging TEMA on the typical price and the zero-lagging TEMA of the heikin-ashi closing price} Selling formula (MetaStock) Similar to the buying formula except the last line, which makes the crossover the other way around -- that is, cross(ZlHa,ZlCl)
TRADESTATION: THE QUEST FOR RELIABLE CROSSOVERS
Sylvain Vervoort's article in this issue, "The Quest For Reliable Crossovers," describes a trading system based on three functions: the triple exponential moving average (TMA), the heikin-ashi close (haC), and the "typical price" (TypicalPrice). Vervoort's strategy trades the crossover of the typical price and heikin-ashi TMAs (Figure 1). FIGURE 1: TRADESTATION, CROSSOVER STRATEGY. Here is a demonstration of Vervoort's crossover strategy applied to a daily chart of S&P Depository Receipts (SPY). The zero-lagging TMAs of both the typical price (red line) and the heikin-ashi close (yellow line) are shown. The crossover of these two averages produces the displayed trades.TypicalPrice is a built-in function in TradeStation. The code for the triple exponential moving average was published in the February 2008 issue of S&C. The heikin-ashi code is provided here. The ELD file posted at TradeStation.com (see link) contains all of the necessary code.Vervoort reports doing a backtest of his system on more than 200 stocks. Code for performing such a test can be found by searching the TradeStation and EasyLanguage support forum for the topic "Batch Process for a series of charts" (https://www.tradestation.com/Discussions/Forum.aspx?Forum_ID=213).
The TMA, like all exponential moving average calculations, is "starting-point dependent." This means the value of an exponential moving average on any bar depends on which bar the calculations began. To minimize the starting-point dependency of Vervoort's calculations, the strategy does not trade until four times the number of bars specified by the "Period" input have passed. The zero-lagging TMA indicator includes a similar delay before plotting. If you input the code into your PowerEditor, you can set both the TMA indicator and strategy to have a MaxBarsBack setting of "1" (one bar).
To download the EasyLanguage code for these studies, go to the TradeStation and EasyLanguage support forum and search for the file "VervoortCrossover.ELD."
Function: haOpen haOpen = 0.5 * ( AvgPrice + haOpen[1] ) ; Function: haC haC = 0.25 * ( AvgPrice + haOpen + MaxList( High, haOpen )+ Minlist( Low, haOpen ) ) ; Indicator: Zero-Lagging TMA inputs: Price( TypicalPrice ), Period( 55 ) ; variables: TMA1( 0 ), TMA2( 0 ), Difference( 0 ), ZeroLagTMA( 0 ) ; TMA1 = TEMA( Price, Period ) ; TMA2 = TEMA( TMA1, Period ) ; Difference = TMA1 - TMA2 ; ZeroLagTMA = TMA1 + Difference ; if CurrentBar > 4 * Period then Plot1( ZeroLagTMA, "ZeroLagTMA" ) ; Strategy: Vervoort Crossover inputs: Investment( 1000 ), Period( 55 ); variables: TMA1( 0 ), TMA2( 0 ), Difference( 0 ), ZeroLagTMA( 0 ), TMA3( 0 ), TMA4( 0 ), Difference2( 0 ), ZeroLagHeikinAshi( 0 ), NumShares( 0 ) ; TMA1 = TEMA( TypicalPrice, Period ) ; TMA2 = TEMA( TMA1, Period ) ; Difference = TMA1 - TMA2 ; ZeroLagTMA = TMA1 + Difference ; TMA3 = TEMA( haC, Period ) ; TMA4 = TEMA( TMA3, Period ) ; Difference2 = TMA3 - TMA4 ; ZeroLagHeikinAshi = TMA3 + Difference2 ; NumShares = IntPortion( Investment / Close ) ; if CurrentBar > 4 * Period then begin if ZeroLagTMA crosses over ZeroLagHeikinAshi then Buy NumShares shares next bar market else if ZeroLagTMA crosses under ZeroLagHeikinAshi then Sell next bar market ; end ;
TradeStation does not endorse or recommend any particular strategy.--Mark Mills
TradeStation Securities, Inc.
A subsidiary of TradeStation Group, Inc.
www.TradeStation.com
GO BACK
eSIGNAL: THE QUEST FOR RELIABLE CROSSOVERS
For this month's Traders' Tip, we've provided the formulas Tema.efs, ZeroLag_Tema.efs, HA_ZeroLag_Tema.efs, and ZeroLag_HA_Tema_Cross.efs, based on the formula code from Sylvain Vervoort's article in this issue, "The Quest For Reliable Crossovers."The studies contain formula parameters that may be configured through the Edit Studies option in the Advanced Chart to change the number of periods and price source for the averages. In addition, the ZeroLag_HA_Tema_Cross.efs contains a formula parameter to force the strategy to allow only long trades, which is also configured for backtesting with the Strategy Analyzer.
Sample charts can be seen in Figures 2 and 3.
FIGURE 2: eSIGNAL, TEMA. This eSignal Advanced Chart displays the TEMA, zero-lag TEMA, and HA zero-lag TEMA studies.
FIGURE 3: eSIGNAL, TEMA CROSSOVER. This eSignal Advanced Chart displays the HA Zero Lag TEMA study.
eSignal code for the zero-lag EMA study discussed in the article can be found in the February 2008 Traders' Tips section in the S&C back-issue archive (https://www.traders.com/Documentation/FEEDbk_docs/Archive/022008/TradersTips/TradersTips.html) or the eSignal EFS Library. Meanwhile, the original heikin-ashi study mentioned in the article was covered in the February 2004 Traders' Tips, also found at the S&C back-issue archive.To discuss these studies or download complete copies of the formula code, please visit the EFS Library Discussion Board forum under the Forums link at www.esignalcentral.com or visit our Efs KnowledgeBase at www.esignalcentral.com/support/kb/efs/. The eSignal formula scripts (EFS) are also available for copying and pasting from the Stocks & Commodities website at Traders.com.
--Jason Keck
eSignal, a division of Interactive Data Corp.
800 815-8256, www.esignalcentral.com
GO BACK
AMIBROKER: THE QUEST FOR RELIABLE CROSSOVERS
In "The Quest For Reliable Crossovers" in this issue, Sylvain Vervoort presents a basic trading system that uses a combination of techniques presented in earlier issues of STOCKS & COMMODITIES, namely the zero-lag exponential moving averages and heikin-ashi charts. The system is based on crossovers between averages calculated using a typical price and heikin-ashi transformation. For an example, see Figure 4. FIGURE 4: AMIBROKER, CROSSOVER SYSTEM. Here is a daily QQQQ chart showing heikin-ashi candlesticks with 55-day zero-lag moving averages and arrows marking entry and exit points.Listing 1 shows a full-featured all-in-one formula that implements a heikin-ashi chart with zero-lag moving averages, together with basic trading system rules and entry/exit arrows.Using the Parameters window, you can adjust the average period as well as switch between regular candlestick charts and heikin-ashi charts. The same formula can also be used in the Automatic Analysis window to perform backtesting.
LISTING 1 function ZeroLagTEMA( array, period ) { TMA1 = TEMA( array, period ); TMA2 = TEMA( TMA1, period ); Diff = TMA1 - TMA2; return TMA1 + Diff ; } ///////////////////// // Heikin-Ashi code HaClose = (O+H+L+C)/4; HaOpen = AMA( Ref( HaClose, -1 ), 0.5 ); HaHigh = Max( H, Max( HaClose, HaOpen ) ); HaLow = Min( L, Min( HaClose, HaOpen ) ); // Velvoort is using not original, but modified Heikin-Ashi close HaClose = ( HaClose + HaOpen + HaHigh + HaLow )/4; // you can switch between Heikin-Ashi chart and regular candlestick chart if( ParamToggle("Plot Heikin-Ashi", "No,Yes", 1 ) ) PlotOHLC( HaOpen, HaHigh, HaLow, HaClose, "Heikin Ashi " + Name(), colorBlack, styleCandle ); else Plot( C, "Regular candles " + Name(), colorBlack, styleCandle ); period = Param("Avg. TEMA period", 55, 1, 100 ); ZLHa = ZeroLagTEMA( HaClose, period ); ZLTyp = ZeroLagTEMA( Avg, period ); Plot( ZLHa, "ZLTema(Ha,"+period+")", colorRed ); Plot( ZLTyp, "ZLTema(Typ,"+period+")", colorGreen ); Buy = Cross( ZLTyp, ZLHa ); Sell = Cross( ZLHa, ZLTyp ); PlotShapes( shapeUpArrow * Buy, colorGreen, 0, HaLow ); PlotShapes( shapeDownArrow * Sell, colorRed, 0, HaHigh );
--Tomasz Janeczko, AmiBroker.com
www.amibroker.com
GO BACK
CQG: THE QUEST FOR RELIABLE CROSSOVERS
Here is the CQG code for recreating the custom studies detailed in the "Crossovers" sidebar in Sylvain Vervoort's article in this issue, "The Quest For Reliable Crossovers."Each study uses a parameters setup named Period. You can easily modify the lookback period from the study. Click on the "Parms" button to create the parameter "Period." The default period in the CQG component pac for the Tema study is 10 bars and 55 bars for the ZLHA and the ZLCLstudies.
Code for Tema: (3* MA(@,Exp,Period))-(3* MA( MA(@,Exp,Period),Exp,Period)) + MA( MA( MA(@,Exp,Period),Exp,Period),Exp,Period) Code for Zlha: HAOpen:=((((( Open(@)+ High(@)+ Low(@)+ Close(@))/4))[-1])+HAOpen[-1])/2; HACLose:=(( Open(@)+ High(@)+ Low(@)+ Close(@))/4+HAOpen + Maximum( High(@),HAOpen)+ Minimum( Low(@),HAOpen))/4; TEMA1:= TEMA.c1^(HACLose,Period); TEMA2:= TEMA.c1^(TEMA1,Period); Diff:=TEMA1-TEMA2; TEMA1+Diff Code for Zlcl: TEMA1:= TEMA.c1^(@,Period); TEMA2:= TEMA.c1^(TEMA1,Period); Diff:=TEMA1-TEMA2; TEMA1+Diff
A CQG component pac is available at the CQG website for installing the studies on CQG (https://www.cqg.com/Support/Downloads.aspx). The pac is also available at Thom Hartle's personal blog, www.hartleandflow.com.--Thom Hartle
CQG, Inc.
www.cqg.com
GO BACK
WEALTH-LAB: THE QUEST FOR RELIABLE CROSSOVERS
The code for Wealth-Lab version 5.0 to use the zero-lag triple EMA crossover system presented in Sylvain Vervoort's article in this issue, "The Quest For Reliable Crossovers," is given here.We interpreted the "power of analyzing" logic to exit for a profit when the averages cross, but exit for a loss at the lesser price of a 10% stop-loss or a close lower than the lowest low of the 21 bars prior to entry. Running that strategy in Portfolio Simulation mode using 5% of equity per trade on the NASDAQ 100 over the five years ending 12/31/2007 resulted in gains of approximately 21% annualized. The actual result varies from simulation to simulation since the portfolio can hold only 20 positions simultaneously using the 5% of equity sizing method. The buy & hold strategy, however, returned nearly 38% Apr over the same period (Figure 5).
FIGURE 5: WEALTH-LAB, CROSSOVER TRADING SYSTEM. Note that one of the crossovers did not result in a simulated trade. This is not an error but rather due to the results of a Portfolio Simulation in which insufficient equity existed at the time of the trading alert. The WealthScript code also creates the heikin-ashi chart style.WealthScript strategy code: /* Code for the derived WealthScript Class using TASCIndicators; */ private StrategyParameter emaPeriod; // Slider parameter public ReliableCrossovers() { emaPeriod = CreateParameter("EMA Period", 55, 10, 120, 5); } public DataSeries ZLTEMASeries(DataSeries Source, int Period, EMACalculation calcType) { DataSeries tma1 = TEMA.Series(Source, Period, calcType); DataSeries tma2 = TEMA.Series(tma1, Period, calcType); return tma1 + (tma1 - tma2); } protected override void Execute() { /* Create a Heikin-Ashi chart above the main PricePane */ DataSeries HO = Open + 0; // intializations DataSeries HH = High + 0; DataSeries HL = Low + 0; DataSeries HC = (Open + High + Low + Close) / 4; DataSeries haC = HC + 0; haC.Description = "Heikin-Ashi Close"; for (int bar = 1; bar < Bars.Count; bar++) { double o1 = HO[ bar - 1 ]; double c1 = HC[ bar - 1 ]; HO[bar] = ( o1 + c1 ) / 2; HH[bar] = Math.Max( HO[bar], High[bar] ); HL[bar] = Math.Min( HO[bar], Low[bar] ); haC[bar] = ( HC[bar] + HO[bar] + HH[bar] + HL[bar] ) / 4; } ChartPane haPane = CreatePane(40, true, true); PlotSyntheticSymbol(haPane, "Heikin-Ashi", HO, HH, HL, HC, Volume, Color.DodgerBlue, Color.Red); //Obtain SMA period from parameter int period = emaPeriod.ValueInt; double stop = 0d; double LL = 0d; DataSeries typPrice = ( High + Low + Close ) / 3; DataSeries zlTyp = ZLTEMASeries(typPrice, period, EMACalculation.Modern); zlTyp.Description = "ZeroLagTEMA(typPrice, " + period + ")"; PlotSeries(PricePane, zlTyp, Color.Blue, LineStyle.Solid, 2); DataSeries zlHa = ZLTEMASeries(haC, period, EMACalculation.Modern); zlHa.Description = "ZeroLagTEMA(HeikinAshiClose, " + period + ")"; PlotSeries(PricePane, zlHa, Color.Red, WealthLab.LineStyle.Dashed, 2); for(int bar = period; bar < Bars.Count; bar++) { if (IsLastPositionActive) { Position p = LastPosition; stop = Math.Min(LL, p.EntryPrice * 0.9); if( CrossUnder(bar, zlTyp, zlHa) && Close[bar] > p.EntryPrice ) SellAtMarket(bar + 1, p, "Profit"); else if( Close[bar] < stop ) SellAtMarket(bar + 1, p, "Stop Loss"); } else if( CrossOver(bar, zlTyp, zlHa) ) { LL = Lowest.Series(Low, 21)[bar]; BuyAtMarket(bar + 1); } } }
--Robert Sucher
www.wealth-lab.com
GO BACK
NEUROSHELL TRADER: THE QUEST FOR RELIABLE CROSSOVERS
The zero-lag indicators described by Sylvain Vervoort in his article in this issue, "The Quest For Reliable Crossovers," can be easily implemented in NeuroShell Trader by combining a few of NeuroShell Trader's 800+ indicators. Select "New Indicator ..." from the Insert menu and use the Indicator Wizard to create the following indicators:
ZeroLag EMA: Add2( ExpAvg( Close, period ), Subtract( ExpAvg( Close, period ), ExpAvg( ExpAvg( Close, period )) ) ) ZeroLag TEMA: Add2( TEMA( Close, period ), Subtract( TEMA( Close, period ), TEMA(TEMA( Close, period )) ) ) ZeroLag Heikin-ashi TEMA: Add2( TEMA( HeikinAshiClose(), Period ), Subtract( TEMA(HeikinAshiClose(), period ), TEMA( TEMA(HeikinAshiClose(), period )) ) ) ZeroLag MedianPrice TEMA: Add2( TEMA( Avg2(High,Low), Period ), Subtract( TEMA(Avg2(High,Low), period ), TEMA( TEMA(Avg2(High,Low), period )) ) )
Note: The zero-lagging TEMA and heikin-ashi zero-lagging TEMA are based on the HeikinAshiClose and TEMA custom indicators, which NeuroShell Trader users can download for free at www.ward.net.To recreate the crossover trading strategy as described in Vervoort's article (Figure 6), select "New Trading Strategy ..." from the Insert menu and enter the following in the appropriate locations of the Trading Strategy Wizard:
FIGURE 6: NEUROSHELL, CROSSOVER SYSTEM. Here is a NeuroShell Trader chart that shows the TEMA crossover based on Sylvain Vervoort's technique.If you have NeuroShell Trader Professional, you can also choose whether the system parameters should be optimized. After backtesting the trading strategy, use the "Detailed Analysis ..." button to view the backtest and trade-by-trade statistics for the crossover strategy.Buy Long Condition: CrossAbove (ZeroLag MedianPrice TEMA, ZeroLag Heikin-ashi TEMA ) Sell Long Condition: CrossBelow (ZeroLag MedianPrice TEMA, ZeroLag Heikin-ashi TEMA )Users of NeuroShell Trader can go to the STOCKS & COMMODITIES section of the NeuroShell Trader free technical support website to download a copy of this or any previously published Traders' Tips.
For more information on NeuroShell Trader, visit www.NeuroShell.com.
--Marge Sherald, Ward Systems Group, Inc.
301 662-7950, sales@wardsystems.com
www.neuroshell.com
GO BACK
WORDEN BROTHERS BLOCKS: THE QUEST FOR RELIABLE CROSSOVERS
In his article in this issue, "The Quest For Reliable Crossovers," Sylvain Vervoort discusses several ways to smooth closing prices with as little lag as possible. Charts with triple exponential moving averages (TEMA), averages based on heikin-ashi closing prices, and zero-lag averages can be found in the Share library of Blocks 3.0.(Note: To use the indicators and charts in this Traders' Tip, you will need the free Blocks software. Go to www.Blocks.com to download the software and get detailed information on the available data packs.)
Click the Share button, then type in part of the name of a chart listed below on the Chart tab, then click the Search button.
In Figure 7, the sample chart shows a typical price zero-lag TEMA (green) vs. a heikin-ashi zero-lag TEMA (red) to time entry and exit conditions.EMA - TEMA - TEMA of heikin-ashi TEMA zero-lagging average Zero-lag heikin-ashi TEMA - Median price zero lag TEMA Reliable crossovers
FIGURE 7: WORDEN BLOCKS, CROSSOVERS USING A PERIOD OF 55 BARS. You can experiment with different periods to find the optimum period for a specific stock.
For more information and to view Blocks tutorial videos, go to www.Blocks.com.--Bruce Loebrich and Patrick Argo
Worden Brothers, Inc
www.blocks.com.
GO BACK
ASPEN GRAPHICS: THE QUEST FOR RELIABLE CROSSOVERSAspen Graphics offers several styles of visual cues for displaying the crossovers discussed in Sylvain Vervoort's article in this issue, "The Quest For Reliable Crossovers."
By creating small formula files for the various averages used in Vervoort's article, Aspen provides a platform where formulas become modular and reusable. Due to space concerns, only those used directly in the crossover are displayed here. The full list of formulas can be found on our forums at https://www.aspenres.com/forums/viewtopic.php?f=3&t=13.
We start by creating the heikin-ashi candle, TEMA, and zero-lag TEMA formulas and call those formulas in our crossover formula. We implement the crossover using a formula that returns integer values. We can then take this formula and apply it to text-on-chart formulas as well as color rules and email alerts.
Figure 8 illustrates text-on-chart visual cues as well as color rules on both time-based and tick-based charts.
FIGURE 8: ASPEN GRAPHICS, CROSSOVERS. This screenshot illustrates text-on-chart visual cues as well as color rules on both time-based and tick-based charts.--Jeremiah Adams, Aspen Research GrouphaOpen(input) = ( ( ( $1.open[1] + $1.high[1] + $1.low[1] + $1.close[1] ) / 4 )+ $1.prev) / 2 haClose(input) = begin val1 = ($1.open + $1.high + $1.low + $1.close) / 4 val2 = 0 val3 = 0 hopen = haOpen($1) retval = 0 if($1.high > hopen) then val2 = $1.high if($1.high <= hopen) then val2 = hopen if($1.low < hopen) then val3 = $1.low if($1.low >= hopen) then val3 = hopen retval =( val1+ hopen + val2 + val3 ) / 4 retval end TEMA(input, periods = 10) = 3 * eavg($1, periods) - 3 * eavg(eavg($1, periods), periods) + eavg(eavg(eavg($1, periods), periods), periods) HAZLTema(input, periods = 55) = begin retval = 0 TMA1 = TEMA(haClose(input), periods) TMA2 = TEMA(TEMA(haClose(input), periods), periods) difference = TMA1 - TMA2 retval = TMA1 + difference retval end ZeroLagTEMA(input, periods = 55) = begin retval = nonum avg1 = TEMA($1.avg, periods) avg2 = TEMA(TEMA($1.avg, periods), periods) difference = avg1 - avg2 retval = avg1 + difference retval end crossTest(series, periods=55) = begin retval = 0 ZLTema1 = ZeroLagTema($1, periods) ZLTema2 = ZeroLagTema($1, periods)[-1] HAZLTema1 = HAZLTema($1, periods) HAZLTema2 = HAZLTema($1, periods)[-1] if( (ZLTema1 > HAZLTema1) and (ZLTema2 < HAZLTema2) ) then retval = -1 if( (HAZLTema1 > ZLTema1) and (HAZLTema2 < ZLTema2) ) then retval = 1 retval end crossover(input, periods = 55) = begin retval = nonum if( crossTest($1, periods) == 1 ) then begin retval = 'buy'|clr_white|below|ftiny|arrow|vertical end if( crossTest($1, periods) == -1 ) then begin retval = 'sell'|clr_yellow|above|ftiny|arrow|vertical end retval end
Sales: 1-800-359-1121, Support: (970) 945-2921
sales@aspenres.com, support@aspenres.com
Aspenres.com
GO BACK
STRATASEARCH: THE QUEST FOR RELIABLE CROSSOVERS
Once in a while, we come across a new indicator that works perfectly right out of the box. The zero-lag crossover presented by Sylvain Vervoort in his article in this issue, "The Quest For Reliable Crossovers," seems to be one of those indicators.During initial testing on five years of NASDAQ 100 stocks, the zero-lag crossover seemed to perform best at about a 58-day period, which is close to the 55-day period suggested by the author. Holding periods of winning trades was four times longer than those of losing trades, and the average gain was twice the percentage of the average loss. The percentage of profitable trades, however, was only about 35% (Figure 9).
FIGURE 9: STRATASEARCH, CROSSOVERS. While there will always be some lag in a crossover, Vervoort's crossover technique can decrease the lag considerably.In a second test, we ran this indicator in an automated search to test its benefit alongside other indicators. In a few hours, we ran the zero-lag crossover more than 50,000 times, each time testing it with supporting indicators such as price rate-of-change, stochastics, and forecast oscillator. Interestingly, the greatest benefits came when the supporting indicators focused on the sector as a whole, rather than the individual stock. But these supporting indicators greatly increased the annual return in addition to improving the percentage profitability.As with all other Traders' Tips, additional information, including plug-ins, can be found in the Shared Area of the StrataSearch user forum. This month's plug-in contains a number of prebuilt trading rules that will allow you to include this indicator in your automated searches. Simply install the plug-in and let StrataSearch identify which supporting indicators might be the most helpful.
--Pete Rast//*************************************** // Zero Lag Buy Signal //*************************************** avg = parameter("Period"); TMA1 = tema(haClose(), avg); TMA2 = tema(TMA1, avg); Diff = TMA1 - TMA2; ZlHa = TMA1 + Diff; TMA1 = tema(tp(), avg); TMA2 = tema(TMA1, avg); Diff = TMA1 - TMA2; ZlCl = TMA1 + Diff; ZeroLagBuy = CrossAbove(ZlCl, ZlHa); //**************************************** // Zero Lag Sell Signal //**************************************** avg = parameter("Period"); TMA1 = tema(haClose(), avg); TMA2 = tema(TMA1, avg); Diff = TMA1 - TMA2; ZlHa = TMA1 + Diff; TMA1 = tema(tp(), avg); TMA2 = tema(TMA1, avg); Diff = TMA1 - TMA2; ZlCl = TMA1 + Diff; ZeroLagSell = CrossBelow(ZlCl, ZlHa);
Avarin Systems Inc
www.StrataSearch.com
GO BACK
AIQ: THE QUEST FOR RELIABLE CROSSOVERSThe AIQ code for constructing the two moving averages described by Sylvain Vervoort in his article in this issue, "The Quest For Reliable Crossovers," is shown below.
Due to time constraints, I was not able to provide test results using my standard test list, the NASDAQ 100 list of stocks. The tests will be available at my website, www.tradersedgesystems.com/traderstips.htm.
This code can be downloaded from the AIQ website at www.aiqsystems.com and also from www.tradersedgesystems.com/traderstips.htm.
--Richard Denning, AIQ Systems!! QUEST FOR RELIABLE CROSSOVERS ! Author: Sylvain Vervoort, TASC May 2008 ! Coded by: Richard Denning 3/12/08 ! CODING ABBREVIATIONS: H is [high]. L is [low]. C is [close]. C1 is valresult(C,1). O is [open]. V is [volume]. ! INPUTS: emaLen is 55. !--------TEMA---------------------------- ! Formula: ! TEMA=3xEMA(input)-3 x EMA(EMA(input)+EMA(EMA(EMA(input))) EMA1 is expavg(C,emaLen). EMA2 is expavg(EMA1,emaLen). EMA3 is expavg(EMA2,emalen). TEMA is 3*EMA1-3*EMA2+EMA3. !--------end TEMA---- !--------HEIKIN-ASHI-------- haC is (O + H +L + C) / 4. DaysInto is ReportDate() - RuleDate(). end if DaysInto > 10. endHAO is iff(end,O, haO). haO is (valresult(endHAO,1) + valresult(haC,1)) / 2. haH is Max(H,max(haO,haC)). haL is Min(L,min(haO,haC)). haCL is (haC + haO + haH + haL) / 4. !--------end HEIKIN-ASHI-------- !--------ZERO-LAGGING EMA-------- Diff is EMA1 - EMA2. zeroLagEMA is EMA1 + Diff. !--------end ZERO LAG EMA-------- !--------TYPICAL PRICE ZERO-LAG TEMA-------- TP is (H+L+C)/3. TMA1 is expavg(TP,emaLen). TMA2 is expavg(TMA1,emaLen). TMA3 is expavg(TMA2,emalen). tpTEMA1 is 3*TMA1-3*TMA2+TMA3. TMA4 is expavg(tpTEMA1,emaLen). TMA5 is expavg(TMA4,emaLen). TMA6 is expavg(TMA5,emalen). tpTEMA2 is 3*TMA4-3*TMA5+TMA6. Diff2 is tpTEMA1 - tpTEMA2. zeroLAGtpTEMA is tpTEMA1 + Diff2. !--------end TYPICAL PRICE ZERO-LAG TEMA-------- !--------HEIKIN-ASHI ZERO-LAG TEMA-------- haTMA1 is expavg(haCL,emaLen). haTMA2 is expavg(haTMA1,emaLen). haTMA3 is expavg(haTMA2,emalen). haTEMA1 is 3*haTMA1-3*haTMA2+haTMA3. haTMA4 is expavg(haTEMA1,emaLen). haTMA5 is expavg(haTMA4,emaLen). haTMA6 is expavg(haTMA5,emalen). haTEMA2 is 3*haTMA4-3*haTMA5+haTMA6. Diff3 is haTEMA1 - haTEMA2. zeroLAGhaTEMA is haTEMA1 + Diff3. !--------end HEIKIN-ASHI ZERO-LAG TEMA-------- !--------BUYING FORMULA (Xup)-------- Xup if zeroLAGtpTEMA > zeroLAGhaTEMA and valrule(zeroLAGtpTEMA < zeroLAGhaTEMA ,1). !--------SELLING FORMULA (Xdn)-------- Xdn if zeroLAGtpTEMA < zeroLAGhaTEMA and valrule(zeroLAGtpTEMA > zeroLAGhaTEMA ,1).
richard.denning@earthlink.net
GO BACK
NINJATRADER: THE QUEST FOR RELIABLE CROSSOVERSThe various indicators and strategy discussed in this issue by Sylvain Vervoort in "The Quest For Reliable Crossovers" is available for download at www.ninjatrader.com/SC/May2008SC.zip.
Once downloaded, from within the NinjaTrader Control Center window, select the menu File > Utilities > Import NinjaScript and select the downloaded file. This indicator is for NinjaTrader Version 6.5 or greater.
You can review the indicator's source code by selecting the menu Tools > Edit NinjaScript > Indicator from within the NinjaTrader Control Center window and selecting either ZeroLagEMA, ZeroLagHATEM, ZeroLoagTEMA.
You can review the strategy source code by selecting the menu Tools > Edit NinjaScript > Strategy from within the NinjaTrader Control Center window and selecting VervoortMACrossOver. See Figure 10.
FIGURE 10: NINJATRADER, CROSSOVERS. The screenshot shows the VervoortMACrossOver strategy backtested on a five-minute chart of the March 2008 S&P emini contract.
NinjaScript indicators are compiled DLLs that run native, not interpreted, which provides you with the highest performance possible.-- Raymond Deux and Josh Peng
NinjaTrader, Llc
www.ninjatrader.com
GO BACK
STRATEGYDESK: THE QUEST FOR RELIABLE CROSSOVERSIn his article in this issue, "The Quest For Reliable Crossovers," Sylvain Vervoort discusses the use of moving average crossovers for entry and exit points. Here, we'll present one interpretation using TD Ameritrade's StrategyDesk.
In the article, Vervoort shows the benefits of using a zero-lag moving average. Here is the StrategyDesk formula for a five-day zero-lag exponential moving average (Figure 11):
FIGURE 11: TD AMERITRADE, CROSSOVERS. Buy signals are produced when the five-day zero-lag exponential moving average (red line) crosses above the five-day exponential moving average (blue line); sell signals are shown when the zero-lag average crosses below the normal average.2 * ExpMovingAverage[EMA,Close,5,0,D] - (.3333*ExpMovingAverage[EMA,Close,5,0,D] + .2222*ExpMovingAverage[EMA,Close,5,0,D,1] + .1481*ExpMovingAverage[EMA,Close,5,0,D,2] + .0988*ExpMovingAverage[EMA,Close,5,0,D,3] + .0659*ExpMovingAverage[EMA,Close,5,0,D,4] + .0439*ExpMovingAverage[EMA,Close,5,0,D,5] + .0293*ExpMovingAverage[EMA,Close,5,0,D,6] + .0195*ExpMovingAverage[EMA,Close,5,0,D,7] + .013*ExpMovingAverage[EMA,Close,5,0,D,8] + .0087*ExpMovingAverage[EMA,Close,5,0,D,9] + .0058*ExpMovingAverage[EMA,Close,5,0,D,10] + .0039*ExpMovingAverage[EMA,Close,5,0,D,11] + .0026*ExpMovingAverage[EMA,Close,5,0,D,12] + .0017*ExpMovingAverage[EMA,Close,5,0,D,13] + .0011*ExpMovingAverage[EMA,Close,5,0,D,14])This formula can be used in comparison with price or other moving averages for the purpose of running a backtest or for program trading. It can also be used to create a custom indicator on a chart.Here is an example using the formula in comparison with a five-day exponential moving average. This can be used for backtesting or program trading.
Entry (Buy):
2 * ExpMovingAverage[EMA,Close,5,0,D] - (.3333*ExpMovingAverage[EMA,Close,5,0,D] + .2222*ExpMovingAverage[EMA,Close,5,0,D,1] + .1481*ExpMovingAverage[EMA,Close,5,0,D,2] + .0988*ExpMovingAverage[EMA,Close,5,0,D,3] + .0659*ExpMovingAverage[EMA,Close,5,0,D,4] + .0439*ExpMovingAverage[EMA,Close,5,0,D,5] + .0293*ExpMovingAverage[EMA,Close,5,0,D,6] + .0195*ExpMovingAverage[EMA,Close,5,0,D,7] + .013*ExpMovingAverage[EMA,Close,5,0,D,8] + .0087*ExpMovingAverage[EMA,Close,5,0,D,9] + .0058*ExpMovingAverage[EMA,Close,5,0,D,10] + .0039*ExpMovingAverage[EMA,Close,5,0,D,11] + .0026*ExpMovingAverage[EMA,Close,5,0,D,12] + .0017*ExpMovingAverage[EMA,Close,5,0,D,13] + .0011*ExpMovingAverage[EMA,Close,5,0,D,14]) > ExpMovingAverage[EMA,Close,5,0,D] AND 2 * ExpMovingAverage[EMA,Close,5,0,D,1] - (.3333*ExpMovingAverage[EMA,Close,5,0,D,1] + .2222*ExpMovingAverage[EMA,Close,5,0,D,2] + .1481*ExpMovingAverage[EMA,Close,5,0,D,3] + .0988*ExpMovingAverage[EMA,Close,5,0,D,4] + .0659*ExpMovingAverage[EMA,Close,5,0,D,5] + .0439*ExpMovingAverage[EMA,Close,5,0,D,6] + .0293*ExpMovingAverage[EMA,Close,5,0,D,7]+ .0195*ExpMovingAverage[EMA,Close,5,0,D,8] + .013*ExpMovingAverage[EMA,Close,5,0,D,9] + .0087*ExpMovingAverage[EMA,Close,5,0,D,10] + .0058*ExpMovingAverage[EMA,Close,5,0,D,11] + .0039*ExpMovingAverage[EMA,Close,5,0,D,12] + .0026*ExpMovingAverage[EMA,Close,5,0,D,13] + .0017*ExpMovingAverage[EMA,Close,5,0,D,14] + .0011*ExpMovingAverage[EMA,Close,5,0,D,15]) <= ExpMovingAverage[EMA,Close,5,0,D,1]Exit (Sell):
2 * ExpMovingAverage[EMA,Close,5,0,D] - (.3333*ExpMovingAverage[EMA,Close,5,0,D] + 0.2222*ExpMovingAverage[EMA,Close,5,0,D,1] + .1481*ExpMovingAverage[EMA,Close,5,0,D,2] + 0.0988*ExpMovingAverage[EMA,Close,5,0,D,3] + .0659*ExpMovingAverage[EMA,Close,5,0,D,4] + .0439*ExpMovingAverage[EMA,Close,5,0,D,5] + .0293*ExpMovingAverage[EMA,Close,5,0,D,6] + .0195*ExpMovingAverage[EMA,Close,5,0,D,7] + .013*ExpMovingAverage[EMA,Close,5,0,D,8] + .0087*ExpMovingAverage[EMA,Close,5,0,D,9] + .0058*ExpMovingAverage[EMA,Close,5,0,D,10] + .0039*ExpMovingAverage[EMA,Close,5,0,D,11] + .0026*ExpMovingAverage[EMA,Close,5,0,D,12] + .0017*ExpMovingAverage[EMA,Close,5,0,D,13] + .0011*ExpMovingAverage[EMA,Close,5,0,D,14]) < ExpMovingAverage[EMA,Close,5,0,D] AND 2 * ExpMovingAverage[EMA,Close,5,0,D,1] - (.3333*ExpMovingAverage[EMA,Close,5,0,D,1] + 0.2222*ExpMovingAverage[EMA,Close,5,0,D,2] + .1481*ExpMovingAverage[EMA,Close,5,0,D,3] + 0.0988*ExpMovingAverage[EMA,Close,5,0,D,4] + .0659*ExpMovingAverage[EMA,Close,5,0,D,5] + .0439*ExpMovingAverage[EMA,Close,5,0,D,6] + .0293*ExpMovingAverage[EMA,Close,5,0,D,7]+ .0195*ExpMovingAverage[EMA,Close,5,0,D,8] + .013*ExpMovingAverage[EMA,Close,5,0,D,9] + .0087 * ExpMovingAverage[EMA,Close,5,0,D,10] + .0058*ExpMovingAverage[EMA,Close,5,0,D,11] + .0039*ExpMovingAverage[EMA,Close,5,0,D,12] + .0026*ExpMovingAverage[EMA,Close,5,0,D,13] + .0017*ExpMovingAverage[EMA,Close,5,0,D,14] + .0011*ExpMovingAverage[EMA,Close,5,0,D,15]) >= ExpMovingAverage[EMA,Close,5,0,D,1]If you have questions about this formula or functionality, please call TD Ameritrade's StrategyDesk help line at 800 228-8056, free of charge, or access the Help Center via the StrategyDesk application. StrategyDesk is a downloadable application free for all TD Ameritrade clients. Regular commission rates apply.TD Ameritrade and StrategyDesk do not endorse or recommend any particular trading strategy.
--Jeff Anderson
TD AMERITRADE Holding Corp.
www.tdameritrade.com
GO BACK
NEOTICKER: THE QUEST FOR RELIABLE CROSSOVERS
We can use the NeoTicker formula language to implement moving average calculations along with a simple trading system as presented in "The Quest For Reliable Crossovers" by Sylvain Vervoort in this issue.The indicator (Listing 1) has two parameters. The first is an integer parameter for the period of the moving average calculation, with the default set to 55. The second parameter is a string that can turn on the short side of the system, since in the article, the author mentions this system should trade the long side only. The following system code includes the short side and uses the switch parameter to enable or disable the short side. The default short side is disabled.
The stop loss is set to 10% of the entry bar range. The system uses trial stops to take profit, and is set at 10% of the current bar range.
The indicator has three plot values. The first is current equity of trading system, while the other two are the two moving averages (Figure 12).
FIGURE 12: NEOTICKER, TEMA CROSSOVER. The indicator has three plot values. The first is current equity of trading system, while the other two are the two moving averages.This system code will be available at the NeoTicker blog site (blog.neoticker.com).
--Kenneth YuenLISTING 1 $avg := param1; 'moving average period 'optional parameter to switch short signals for this system $NoShortSide := paramis(2, "Yes"); 'Moving average generation code haOpen := ((O(1)+h(1)+l(1)+c(1))/4 + haOpen(1))/2; haC := ((o(1)+h(1)+l(1)+c(1))/4 + haOpen + maxlist(h, haOpen) + minlist(l, haOpen))/4; TMA1 := tema(haC, $avg); TMA2 := tema(TMA1, $avg); ZlHa := TMA1+(TMA1-TMA2); tyTMA1 := tema(typicalprice(data1), $avg); tyTMA2 := tema(tyTMA1, $avg); ZlCl := tyTMA1+(tyTMA1-tyTMA2); 'Corss over signals $tradesignal := xcross(ZlCl, ZlHa); 'Rest of these code are NeoTicker trading system code longatmarket ((openpositionflat > 0) and ($tradesignal > 0), DefaultOrderSize, "Entry long at long signal"); 'stop lost longexitstop (openpositionpl <= 0, '10% bar range at entry bar is used as stop openpositionentryprice - (0.1*range((barsnum(0)-openpositionentrybar), data1)), openpositionabssize, "long stop lost"); 'trial stop longexitstop (openpositionpl > 0, c-(0.1*range(data1)), openpositionabssize, "long trial stop"); 'Check to see if short side has been disable before entering a short shortatmarket ((openpositionflat > 0) and ($tradesignal < 0) and ($DisableShort = 1), DefaultOrderSize, "Entry short at short sgianl"); shortexitstop (openpositionpl <= 0, openpositionentryprice + (0.1*range((barsnum(0)-openpositionentrybar), data1)), openpositionabssize, "short stop lost"); shortexitstop (openpositionpl > 0, c+(0.1*range(data1)), openpositionabssize, "short trial stop"); plot1 := currentequity; plot2 := ZlHa; plot3 := ZlCl;
TickQuest Inc.
www.TickQuest.com
GO BACK
TRADE NAVIGATOR: THE QUEST FOR RELIABLE CROSSOVERSMany of the functions given in Sylvain Vervoort's article in this issue, "The Quest For Reliable Crossovers," already exist in Trade Navigator. We will point these out and also indicate the code used for the new indicators.
As per usual, you can download special file "SC0508.gzp" to get access to all these functions.
All the functions are set up by going to the Edit menu and clicking Functions. From the function list, click "New" to create a new one. After the code has been pasted into the new function window, click "Save" and then give the same name listed here.
The components are:
- 10-day exponential moving average (Ema)
- Triple exponential moving average (Tema)
- Tema based on heikin-ashi closing prices
- Highlight bars representing buy and sell signals based on the crossing.
The exponential moving average is already built into Trade Navigator software and is represented as MovingAvgX. The triple exponential moving average is represented as TEMA.Heikin-ashi bars can be applied to your chart as a study. To reference the values in functions, use:
Use the TradeSense syntax listed below for the remaining functions:
- HeikinAshi Open
- HeikinAshi High
- HeikinAshi Low
- HeikinAshi Close
ZeroLagEMA:
MovingAvgX (expression , bars) + (MovingAvgX (expression , bars)
- MovingAvgX (MovingAvgX (expression , bars) , bars , False))On the input tab, set the following as the default values:
Expression: Close Bars: 7 ZeroLagTMA: TEMA (expression , bars , False) + (TEMA (expression , bars , False) - TEMA (TEMA (expression , bars , False) , bars , False)) On the input tab, set the following as the default values: Expression: Close Bars: 7 ZLCL: TEMA (MovingAvg (Close , bars) , bars , False) + (TEMA (MovingAvg (Close , bars) , bars , False) - TEMA (TEMA (MovingAvg (Close , bars) , bars , False) , bars , False)) On the input tab, set the following as the default values: Bars: 7 ZLHA: TEMA (HeikinAshi Close , bars , False) + (TEMA (HeikinAshi Close , bars , False) - TEMA (TEMA (HeikinAshi Close , bars , False) , bars , False)) On the input tab, set the following as the default values: Bars: 7 We'll then use all the functions above to produce our buy and sell signals, represented as ZeroLagBuy and ZeroLagSell. ZeroLagBuy: Crosses Above (ZLCL (bars) , ZLHa (bars)) On the input tab, set the following as the default values: Bars: 55 ZeroLagSell: Crosses Above (ZLHa (bars) , ZLCL (bars)) On the input tab, set the following as the default values: Bars: 55
Figure 13 shows the indicators on the ES-067 continuous contract. The same template can be applied by clicking on the templates menu and clicking "SC0508" after downloading the library. FIGURE 13: TRADE NAVIGATOR. This chart demonstrates the zero-lag buy and sell.
To download the special file, click on File and then Update Data. Click Download Special File and type "SC0508." Click Start and then follow through the upgrade prompts.--Dave Kilman
Genesis Financial Technologies
https://www.GenesisFT.com
GO BACK
TRADINGSOLUTIOSN: THE QUEST FOR RELIABLE CROSSOVERSIn "The Quest For Reliable Crossovers" in this issue, Sylvain Vervoort discusses trading crossovers between the zero-lag TEMA of the typical price and the zero-lag TEMA of his version of the heikin-ashi close. These functions and the system are described below. They are also available as a function file that can be downloaded from the TradingSolutions website (www.tradingsolutions.com) in the Free Systems section. As with many indicators, these functions could make good inputs to neural network predictions.
--Gary GeniesseFunction Name: Triple Exponential Moving Average Short Name: TEMA Inputs: Data, Period Sub (Mult (EMA (Data, Period), 3), Add (Mult (EMA (EMA (Data, Period), Period), 3), EMA (EMA (EMA (Data, Period), Period), Period))) Function Name: Heikin-Ashi Open (Vervoort) Short Name: haOpenV Inputs: Open, High, Low, Close, Period Div (Add (Lag (Div (Add (Add (Open, High), Add (Low, Close)), 4), 1), Prev (1)),2) Function Name: Heikin-Ashi Close (Vervoort) Short Name: haCloseV Inputs: Open, High, Low, Close, Period Div (Add (Add (Div (Add (Add (Open, High), Add (Low, Close)), 4), haOpenV (Open, High, Low, Close)), Add (Max (High, haOpenV (Open, High, Low, Close)), Min (Low, haOpenV (Open, High, Low, Close)))), 4) Function Name: Zero-Lag EMA Short Name: ZeroLagEMA Inputs: Data, Period Add (EMA (Data, Period), Sub (EMA (Data, Period), EMA (EMA (Data, Period), Period)) Function Name: Zero-Lag TEMA Short Name: ZeroLagTEMA Inputs: Data, Period Add (TEMA (Data, Period), Sub (TEMA (Data, Period), TEMA (TEMA (Data, Period), Period)) Function Name: Zero-Lag Typical Price TEMA Short Name: ZeroLagTPTEMA Inputs: Close, High, Low, Period Add (TEMA (Typical (Close, High, Low), Period), Sub (TEMA (Typical (Close, High, Low), Period), TEMA (TEMA (Typical (Close, High, Low), Period), Period))) Function Name: Zero-Lag Heikin-Ashi TEMA Short Name: ZeroLagHATEMA Inputs: Open, High, Low, Close, Period Add (TEMA (haCloseV (Open, High, Low, Close), Period), Sub (TEMA (haCloseV (Open, High, Low, Close), Period), TEMA (TEMA (haCloseV (Open, High, Low, Close), Period), Period))) System Name: Zero-Lag TEMA Crossovers Inputs: Open, High, Low, Close, Period Enter Long: CrossAbove (ZeroLagTPTEMA(Close, High, Low, Period), ZeroLagHATEMA(Open, High, Low, Close, Period)) Enter Short: CrossAbove (ZeroLagHATEMA(Open, High, Low, Close, Period), ZeroLagTPTEMA(Close, High, Low, Period))
NeuroDimension, Inc.
800 634-3327, 352 377-5144
https://www.tradingsolutions.com
GO BACK
SWINGTRACKER: TEMA OVERLAYThe zero-lagging TEMA overlay has been introduced in SwingTracker 5.13.088 based on Sylvain Vervoort's article in this issue, "The Quest For Reliable Crossovers."
The indicator can be calculated on either the closing price, typical price, or heikin-ashi price. Several instances of the overlay can be added to the chart with different parameters in order to see the buy/sell signals generated by the crossovers.
A sample chart is shown in Figure 14. A sample chart parameters window is shown in Figure 15.
FIGURE 14: SWINGTRACKER, TRIPLE EXPONENTIAL MOVING AVERAGE. Here is a sample chart of the zero-lagging TEMA overlay.
FIGURE 15: SWINGTRACKER, CHART PARAMETERS
To discuss these tools, please visit our user forum at forum.mrswing.com. If you need assistance, our development staff can help at support.mrswing.com.For more information on our free trial, visit www.swingtracker.com.
--Larry Swing
+1 (281) 968-2718
theboss@mrswing.com
www.mrswing.com
GO BACK
VT TRADER: CROSSOVER TRADING SYSTEMSylvain Vervoort's article in this issue, "The Quest For Reliable Crossovers," discusses the use of two "zero-lag" triple exponential moving averages and volatility-based stops to create a simple moving average-style crossover trading system.
For added flexibility, we've expanded on Vervoort's idea of volatility-based stops by allowing the user to choose between pip-based stops or volatility- (that is, ATR) based stops.
The VT Trader code and instructions for recreating Vervoort's TEMA crossover trading system are as follows:
Zero-lag Tema crossover trading system 1. Navigator Window>Tools>Trading Systems Builder>[New] button 2. In the Indicator Bookmark, input the following text for each field: Name: TASC - 05/2008 - "The Quest for Reliable Crossovers" Short Name: vt_TQFRC Label Mask: TASC - 05/2008 - "The Quest for Reliable Crossovers" (ShortTEMA: %pr1%, %tp1% | LongTEMA: %pr2%, %tp2% | Initial Stoploss: %InitialStoplossMode:ls%, %InitialStoplossType:ls% | Trailing Stoploss: %TrailingStoplossMode:ls%, %TrailingStoplossType:ls%) 3. In the Input Bookmark, set up the following variables: [New] button... Name: pr1 , Display Name: Short TEMA Price , Type: price , Default: Typical Price [New] button... Name: tp1 , Display Name: Short TEMA Periods , Type: integer , Default: 55 [New] button... Name: pr2 , Display Name: Long TEMA Price , Type: price , Default: haClose [New] button... Name: tp2 , Display Name: Long TEMA Periods , Type: integer , Default: 55 [New] button... Name: InitialStoplossMode , Display Name: Enable Initial Stoploss? , Type: Enumeration , Default: Click [...] button -> Click [New] button -> Type "Yes" -> Click [New] button -> Type "No" -> Click [OK] button; Default: Yes [New] button... Name: InitialStoplossType , Display Name: Initial Stoploss Type? , Type: Enumeration , Default: Click [...] button -> Click [New] button -> Type "ATR_Based" -> Click [New] button -> Type "Pip_Based" -> Click [OK] button; Default: ATR_Based [New] button... Name: InitialStoploss , Display Name: Initial Stoploss (in Pips) , Type: integer , Default: 20 [New] button... Name: ATRper1 , Display Name: ATR Periods (if ATR Initial Stoploss) , Type: integer , Default: 10 [New] button... Name: atrmultiplier1 , Display Name: ATR Multiplier (if ATR Initial Stoploss) , Type: float , Default: 3.0000 [New] button... Name: TrailingStoplossMode , Display Name: Enable Trailing Stoploss? , Type: Enumeration , Default: Click [...] button -> Click [New] button -> Type "Yes" -> Click [New] button -> Type "No" -> Click [OK] button; Default: Yes [New] button... Name: TrailingStoplossType , Display Name: Trailing Stoploss Type? , Type: Enumeration , Default: Click [...] button -> Click [New] button -> Type "ATR_Based" -> Click [New] button -> Type "Pip_Based" -> Click [OK] button; Default: ATR_Based [New] button... Name: TrailingStoploss , Display Name: Trailing Stoploss (in Pips) , Type: integer , Default: 20 [New] button... Name: ATRper , Display Name: ATR Periods (if ATR Trailing Stoploss) , Type: integer , Default: 10 [New] button... Name: atrmultiplier , Display Name: ATR Multiplier (if ATR Trailing Stoploss) , Type: float , Default: 3.0000 4. In the Output Bookmark, create the following variables: [New] button... Var Name: ShortTEMA Name: Short TEMA * Checkmark: Indicator Output Select Indicator Output Bookmark Color: green Line Width: thin Line Style: solid Placement: Price Frame [OK] button... [New] button... Var Name: LongTEMA Name: Long MA * Checkmark: Indicator Output Select Indicator Output Bookmark Color: red Line Width: thin Line Style: solid Placement: Price Frame [OK] button... [New] button... Var Name: DisplayLongEntryInitialStop Name: Long Entry Initial Stoploss * Checkmark: Indicator Output Select Indicator Output Bookmark Color: blue Line Width: slightly thicker Line Style: solid Placement: Price Frame [OK] button... [New] button... Var Name: DisplayLongEntryTrailingStop Name: Long Entry Trailing Stoploss * Checkmark: Indicator Output Select Indicator Output Bookmark Color: blue Line Width: thin Line Style: dashed Placement: Price Frame [OK] button... [New] button... Var Name: DisplayShortEntryInitialStop Name: Short Entry Initial Stoploss * Checkmark: Indicator Output Select Indicator Output Bookmark Color: red Line Width: slightly thicker Line Style: solid Placement: Price Frame [OK] button... [New] button... Var Name: DisplayShortEntryTrailingStop Name: Short Entry Trailing Stoploss * Checkmark: Indicator Output Select Indicator Output Bookmark Color: red Line Width: thin Line Style: dashed Placement: Price Frame [OK] button... [New] button... Var Name: LongEntrySignal Name: LongEntrySignal Description: Long Entry Signal Alert * Checkmark: Graphic Enabled * Checkmark: Alerts Enabled Select Graphic Bookmark Font [...]: Up Arrow Size: Medium Color: Blue Symbol Position: Below price plot Select Alerts Bookmark Alerts Message: Long Entry Signal! Choose sound for audible alert [OK] button... [New] button... Var Name: LongExitSignal Name: LongExitSignal Description: Long Exit Signal Alert * Checkmark: Graphic Enabled * Checkmark: Alerts Enabled Select Graphic Bookmark Font [...]: Exit Sign Size: Medium Color: Blue Symbol Position: Above price plot Select Alerts Bookmark Alerts Message: Long Exit Signal! Choose sound for audible alert [OK] button... [New] button... Var Name: ShortEntrySignal Name: ShortEntrySignal Description: Short Entry Signal Alert * Checkmark: Graphic Enabled * Checkmark: Alerts Enabled Select Graphic Bookmark Font [...]: Down Arrow Size: Medium Color: Red Symbol Position: Above price plot Select Alerts Bookmark Alerts Message: Short Entry Signal! Choose sound for audible alert [OK] button... [New] button... Var Name: ShortExitSignal Name: ShortExitSignal Description: Short Exit Signal Alert * Checkmark: Graphic Enabled * Checkmark: Alerts Enabled Select Graphic Bookmark Font [...]: Exit Sign Size: Medium Color: Red Symbol Position: Below price plot Select Alerts Bookmark Alerts Message: Short Exit Signal! Choose sound for audible alert [OK] button... [New] button... Var Name: OpenBuy Name: OpenBuy Description: Automated Open Buy Trade Command * Checkmark: Trading Enabled Select Trading Bookmark Trade Action: Buy Traders Range: 5 Hedge: no checkmark EachTick Count: 1 [OK] button... [New] button... Var Name: CloseBuy Name: CloseBuy Description: Automated Close Buy Trade Command * Checkmark: Trading Enabled Select Trading Bookmark Trade Action: Sell Traders Range: 5 Hedge: no checkmark EachTick Count: 1 [OK] button... [New] button... Var Name: OpenSell Name: OpenSell Description: Automated Open Sell Trade Command * Checkmark: Trading Enabled Select Trading Bookmark Trade Action: Sell Traders Range: 5 Hedge: no checkmark EachTick Count: 1 [OK] button... [New] button... Var Name: CloseSell Name: CloseSell Description: Automated Close Sell Trade Command * Checkmark: Trading Enabled Select Trading Bookmark Trade Action: Buy Traders Range: 5 Hedge: no checkmark EachTick Count: 1 [OK] button... 5. In the Formula Bookmark, copy and paste the following formula: {Provided By: Capital Market Services, LLC & Visual Trading Systems, LLC (c) Copyright 2008} {Description: May 2008 Issue - The Quest For Reliable Crossovers by Sylvain Vervoort} {vt_TQFRC Version 1.0} {Control Error} Barnum:= BarCount(); Err:= (tp1=0) or (tp2=0); {Zero-Lag TEMA's} ShortTEMA1:= vt_TEMA(pr1,tp1,E); ShortTEMA2:= vt_TEMA(ShortTEMA1,tp1,E); ShortTEMADiff:= ShortTEMA1 - ShortTEMA2; ShortTEMA:= ShortTEMA1 + ShortTEMADiff; LongTEMA1:= vt_TEMA(pr2,tp2,E); LongTEMA2:= vt_TEMA(LongTEMA1,tp2,E); LongTEMADiff:= LongTEMA1 - LongTEMA2; LongTEMA:= LongTEMA1 + LongTEMADiff; {Define Final Trade Entry/Exit Criteria} LongEntrySetup:= Cross(ShortTEMA,LongTEMA); LongExitSetup:= Cross(LongTEMA,ShortTEMA); ShortEntrySetup:= Cross(LongTEMA,ShortTEMA); ShortExitSetup:= Cross(ShortTEMA,LongTEMA); {Determine the Pip Value for the currency chart being used} _SymbolPoint:= SymbolPoint(); _InitialStoploss:= InitialStoploss * _SymbolPoint; _TrailingStoploss:= TrailingStoploss * _SymbolPoint; {Define Final Entry and Exit Criteria} LongEntrySignal:= (NOT Err AND LongTradeAlert=0 AND ShortTradeAlert=0 AND LongEntrySetup) OR (NOT Err AND LongTradeAlert=0 AND Cross(0.5,ShortTradeAlert) AND LongEntrySetup) OR (NOT Err AND LongTradeAlert=0 AND ShortExitSetup); LongEntryPrice:= valuewhen(1,LongEntrySignal,C); BarsSinceLongEntry:= BarsSince(LongEntrySignal); LongEntryPipInitialStop:= if(LongTradeAlert=1 OR LongEntrySignal OR LongExitSignal, LongEntryPrice - _InitialStoploss, null); LongEntryATRInitialStop:= if(LongTradeAlert=1 OR LongEntrySignal OR LongExitSignal, valuewhen(1,LongEntrySignal,H) - valuewhen(1,LongEntrySignal,(ATR(ATRper1) * atrmultiplier1)), null); DisplayLongEntryInitialStop:= if(InitialStoplossMode=0 AND InitialStoplossType=1, LongEntryPipInitialStop, if(InitialStoplossMode=0 AND InitialStoplossType=0, LongEntryATRInitialStop, null)); LongEntryPipTrailingStop:= if(LongTradeAlert=1 OR LongEntrySignal OR LongExitSignal, max((C - _TrailingStoploss), PREV(LongEntryPrice - _TrailingStoploss)), null); LongEntryATRTrailingStop:= if((LongTradeAlert=1 OR LongEntrySignal OR LongExitSignal), max(HHV(H,BarsSinceLongEntry) - (ATR(ATRper) * atrmultiplier), PREV(valuewhen(1,LongEntrySignal,H) - valuewhen(1,LongEntrySignal,(ATR(ATRper) * atrmultiplier)))), null); DisplayLongEntryTrailingStop:= if(TrailingStoplossMode=0 AND TrailingStoplossType=1, LongEntryPipTrailingStop, if(TrailingStoplossMode=0 AND TrailingStoplossType=0, LongEntryATRTrailingStop, null)); LongExitSignal:= (LongTradeAlert=1 AND InitialStoplossMode=0 AND InitialStoplossType=1 AND Cross(LongEntryPipInitialStop,C)) OR (LongTradeAlert=1 AND InitialStoplossMode=0 AND InitialStoplossType=0 AND Cross(LongEntryATRInitialStop,C)) OR (LongTradeAlert=1 AND TrailingStoplossMode=0 AND TrailingStoplossType=1 AND Cross(LongEntryPipTrailingStop,C)) OR (LongTradeAlert=1 AND TrailingStoplossMode=0 AND TrailingStoplossType=0 AND Cross(LongEntryATRTrailingStop,C)) OR (LongTradeAlert=1 AND LongExitSetup); LongExitPrice:= valuewhen(1,LongExitSignal,C); ShortEntrySignal:= (NOT Err AND ShortTradeAlert=0 AND LongTradeAlert=0 AND ShortEntrySetup) OR (NOT Err AND ShortTradeAlert=0 AND Cross(0.5,LongTradeAlert) AND ShortEntrySetup) OR (NOT Err AND ShortTradeAlert=0 AND LongExitSetup); ShortEntryPrice:= valuewhen(1,ShortEntrySignal,C); BarsSinceShortEntry:= BarsSince(ShortEntrySignal); ShortEntryPipInitialStop:= if(ShortTradeAlert=1 OR ShortEntrySignal OR ShortExitSignal, ShortEntryPrice + _InitialStoploss, null); ShortEntryATRInitialStop:= if(ShortTradeAlert=1 OR ShortEntrySignal OR ShortExitSignal, valuewhen(1,ShortEntrySignal,L) + valuewhen(1,ShortEntrySignal,(ATR(ATRper1) * atrmultiplier1)), null); DisplayShortEntryInitialStop:= if(InitialStoplossMode=0 AND InitialStoplossType=1, ShortEntryPipInitialStop, if(InitialStoplossMode=0 AND InitialStoplossType=0, ShortEntryATRInitialStop, null)); ShortEntryPipTrailingStop:= if(ShortTradeAlert=1 OR ShortEntrySignal OR ShortExitSignal, min((C + _TrailingStoploss), PREV(ShortEntryPrice + _TrailingStoploss)), null); ShortEntryATRTrailingStop:= if(ShortTradeAlert=1 OR ShortEntrySignal OR ShortExitSignal, min(LLV(L,BarsSinceShortEntry) + (ATR(ATRper) * atrmultiplier), PREV(valuewhen(1,ShortEntrySignal,L) + valuewhen(1,ShortEntrySignal,(ATR(ATRper) * atrmultiplier)))), null); DisplayShortEntryTrailingStop:= if(TrailingStoplossMode=0 AND TrailingStoplossType=1, ShortEntryPipTrailingStop, if(TrailingStoplossMode=0 AND TrailingStoplossType=0, ShortEntryATRTrailingStop, null)); ShortExitSignal:= (ShortTradeAlert=1 AND InitialStoplossMode=0 AND InitialStoplossType=1 AND Cross(C,ShortEntryPipInitialStop)) OR (ShortTradeAlert=1 AND InitialStoplossMode=0 AND InitialStoplossType=0 AND Cross(C,ShortEntryATRInitialStop)) OR (ShortTradeAlert=1 AND TrailingStoplossMode=0 AND TrailingStoplossType=1 AND Cross(C,ShortEntryPipTrailingStop)) OR (ShortTradeAlert=1 AND TrailingStoplossMode=0 AND TrailingStoplossType=0 AND Cross(C,ShortEntryATRTrailingStop)) OR (ShortTradeAlert=1 AND ShortExitSetup); ShortExitPrice:= valuewhen(1,ShortExitSignal,C); {Simulated Open Trade Determination and Trade Direction} LongTradeAlert:= SignalFlag(LongEntrySignal,LongExitSignal); ShortTradeAlert:= SignalFlag(ShortEntrySignal,ShortExitSignal); {Create Auto-Trading Functionality} OpenBuy:= LongEntrySignal and (eventCount('OpenBuy')=eventCount('CloseBuy')); CloseBuy:= LongExitSignal and (eventCount('OpenBuy')>eventCount('CloseBuy')); OpenSell:= ShortEntrySignal and (eventCount('OpenSell')=eventCount('CloseSell')); CloseSell:= ShortExitSignal and (eventCount('OpenSell')>eventCount('CloseSell')); 6. Click the "Save" icon to finish building Vervoort's Tema crossover trading system. (See Figure 16.)
FIGURE 16: VT TRADER, VERVOORT'S TEMA CROSSOVER SYSTEM. Here is the trading system attached to a EUR/USD one-hour candle chart.
To attach the trading system to a chart, select the "Add trading system" option from the chart's contextual menu, select "TASC - 05/2008 - 'The Quest for Reliable Crossovers'" from the trading systems list, and click the [Add] button.To learn more about VT Trader, please visit www.cmsfx.com.
--Chris Skidmore
CMS Forex
(866) 51-CMSFX, trading@cmsfx.com
www.cmsfx.com
GO BACK
Return to May 2008 Contents
Originally published in the May 2008 issue of Technical Analysis of STOCKS & COMMODITIES magazine. All rights reserved. © Copyright 2008, Technical Analysis, Inc.