October 2004 Letters To The Editor

The editors of S&C invite readers to submit their opinions and information on subjects relating to technical analysis and this magazine. This column is our means of communication with our readers. Is there something you would like to know more (or less) about? Tell us about it. Without a source of new ideas and subjects coming from our readers, this magazine would not exist.

Address your correspondence to: Editor, STOCKS & COMMODITIES, 4757 California Ave. SW, Seattle, WA 98116-4499, or E-mail to editor@traders.com. All letters become the property of Technical Analysis, Inc. Letter-writers must include their full name and address for verification. Letters may be edited for length or clarity. The opinions expressed in this column do not necessarily represent those of the magazine. -Editor

Editor,

I want to calculate a 13-day exponential moving average (EMA) of closing prices and apply a 21-day rate of change to it. I searched your website and found a reference to the Traders' Tips column from the October 1994 issue of S&C (Traders' Tips, Volume 12:10). Does this article give me the formula to do it?

v 12:10 (441-442)
This month's Traders' Tips all focus on the rate of change (ROC) indicator discussed in Bruce Faber's article. The rate of change is a function already available in both SuperCharts and TradeStation. From within the Quickeditors of either program, you can create a new indicator.

The performance of ROC can often be improved by smoothing. An example is given in CompuTrac Snap. Also, Behold! and MetaStock's System Tester can be used to measure the performance of the ROC indicator.

N. Siegel, via email

The October 1994 Traders' Tips article will only supply you with the formula for the rate of change (ROC). It sounds like what you are trying to do is embed one indicator into another. Although the syntax for the formula you want will of course vary depending on what software you are using, the general formula is:

`Today's (13-day EMA) ? (13-day EMA) 21 days ago`
or
`Today's (13-day EMA) / (13-day EMA) 21 days ago`

LOOKING FOR RECOMMENDATIONS

Editor,

Which issue of S&C contains articles discussing forex software platforms and/or chart recommendations for beginning to intermediate traders? Are any of the software that gives buy and sell recommendations worth purchasing?

Jerry Elliott, via email

Our September 2004 issue focused on forex and currency trading, with an article by Kenneth Agostino and Brian Dolan on forex trading, an interview with Christopher Neely of the St. Louis Federal Reserve, and our monthly Traders' Resource section offering a listing of forex brokerages.

We do not give purchase recommendations for products, but you can look for our monthly product reviews, or visit our Traders' Resource database at www.Traders.com to search for the particular features you are looking for. In the September 2004 issue, we reviewed FXstreet.com, WallStreetCity.com, and ProSticks charting service.-Editor

PHASE CHANGE INDEX

Editor,

I bought several articles from your Online Store, one of which was "The Phase Change Index" by MH Pee (May 2004). I found all the ready-to-use formulas for indicators (in the Traders' Tips area of your website), but I could not find the formula for the phase change index. Please help me to find it. In the article, only an Excel spreadsheet example is given, but I need the formula for use in MetaStock or TS2000i or eSignal. Thank you.

Oleg But, via email

Unfortunately, since the Excel calculation is the only example that was provided, that's the only one we have available. We don't have the in-house capability to program in the formulas for all the software. I suggest you contact Equis (for MetaStock), TradeStation (for TradeStation 2000), and eSignal for the individual program code you require.-Editor

KAGI DETAILS

Editor,

Kagi in MetaStock seems to be used only as a visual indicator. Is there a formula for kagi that can be used in, say, ExpertAdvisor/Exploration to show when the trend changes from buy to sell and vice versa? It would need to allow a selection of parameters, such as reversal amount, and ideally would choose between percentage or points for calculation method. Hoping that you can assist.

William Bald, via email

We haven't published any formulas on creating kagi charts, but the parameter selections and calculation methods you mention are options available in MetaStock in the charting properties menu.-Editor

ON BOOSTING PROFITABILITY

Editor,

I have been a longtime subscriber to STOCKS & COMMODITIES and I would like some explanation regarding apparent inconsistencies in the article "Boosting Profitability" by Lawrence Chan and Louis Lin in your August 2004 issue.

Whereas the chart (Figure 3 on page 31) shows an impressive equity curve with a fairly steady growth, the data on the performance report (page 32, Figure 4) shows some very contradictory numbers: 1) the number of positions taken (40) seems much smaller than those indicated on the chart by all the arrows. 2) The very substantial 93.14% max DD% in equity is certainly not reflected by the fairly smooth rise in the equity curve shown in Figure 3.

I also tried to replicate the results shown in the article, but did not even come close with my annualized return, although I used the Standard & Poor's 500 instead of the emini.

Is there something else going on here? Your comments would be highly appreciated. Thanks.

Andre Archambault
Research director and
Fair Value strategist
Standard & Poor's
Quantitative Services
via email

Lawrence Chan of TickQuest replies:

1) The total number of positions is 80 - that is, 40 long and 40 short.

2) In the chart in Figure 3, if you look at the period between July 1, 1998, and April 1, 1999, you can see the 93.14% max DD%.

3) Using the S&P 500 contract will show different results than using the eminis because the emini is \$50 per point and the S&P 500 is \$250 per point. Further, the margin requirements for the two differ significantly. Given that the margin requirements are a percentage of the position taken, the performance results between the two will differ.

ERRATA: JUNE 2004 TRADESTATION CODE FOR VFI

Editor,
[Markos Katsanos writes:] My article on the volume flow indicator in the June 2004 S&C, "Using Money Flow To Stay With The Trend," was the basis for your Traders' Tips column in that issue. That Traders' Tips column included EasyLanguage code for the Vfi technique submitted by staff at TradeStation.  However, a reader and fellow author of S&C, Spyros Raftopoulos, has brought to my attention that there are a number of errors in that June 2004 EasyLanguage code that was provided by TradeStation.

I couldn't check all the errors personally, but I noticed that the default period appears to have been changed arbitrarily from 130 to 5 days. This should be corrected, since it will make the indicator useless, even for daytraders. The rest of the corrections are typos or are for backward compatibility with older versions.

Spyros Raftopoulos suggests the following corrections:

1. Vfi Ipo
a. The published code contains a typo. The correct code should be:

VFI = Cum( Iff( MyTypicalPrice > MyTypicalPrice[1],
MyVolume, Iff( MyTypicalPrice < myTypicalPrice[1],
-MyVolume, 0) ) ) ;

VFI = Cum( Iff( MyTypicalPrice > MyTypicalPrice,
MyVolume, Iff( MyTypicalPrice < myTypicalPrice[1],
-MyVolume, 0) ) ) ;

since MyTypicalPrice > MyTypicalPrice is always false.

b. Users of older TradeStation versions who confront problems with the following line:

MyVolume = iff( BarType < 2, Ticks, Volume );

should be advised to change it to:

MyVolume = Volume;

The above line doesn't distinguish between intraday bars and longer time frames, but it should work with all versions.

2. Vfi function
a. In the Mfl code provided by Markos Katsanos in his June 2004 article, the Period parameter defaults to 130 and not to 5, as the TradeStation code suggests. I think it would be better if we respected the author's choice. For the same reason, the default smoothing periods should be set to 3 and not to 7.

b. The log function produces errors when it is fed with zero or negative values. Some TradeStation users have already complained about such errors, so I suggest using:

if TP > 0 and TP[1] > 0 then

Inter = Log(TP) - Log(TP[1])
else Inter = 0;
Inter = Log( MyTypicalPrice ) - Log( MyTypicalPrice[ 1 ] ) ;

c. The use of a multiple-output function for the Vfi seems to produce compatibility problems with earlier versions. Katsanos will not object to a function able to return both Vfi and the smoothed Vfi, although his formula returns the smoothed indicator only. But obtaining both values can also be achieved by a single-output function like the following:

Function: VFI

Inputs:

Period(numericsimple),
Coef(numericsimple),
VCoef(numericsimple),
SmoothingPeriods(numericsimple);

Vars:
TP(0), Inter(0), VInter(0), CutOff(0), VAve(0), VMax(0), VC(0), MF(0),
DirectionalVolume( 0 ), myVFI(0);
TP = TypicalPrice;

if TP > 0 and TP[1] > 0 then
Inter = Log(TP) - Log(TP[1])
else Inter = 0;
VInter = StdDev( Inter, 30 );
CutOff = Coef * VInter * Close;
VAve = Average(V,Period)[ 1 ];
VMax = VAve * VCoef;
VC = IFF( V < VMax , V, VMax );
MF = TP - TP[1];
DirectionalVolume = IFF( MF > CutOff, +VC, IFF( MF < -CutOff, -VC, 0 ));

if VAve <> 0 then
myVFI = Summation( DirectionalVolume, Period ) / Vave
else myVFI = 0;

If SmoothingPeriods > 0 then VFI = XAverage(myVFI, SmoothingPeriods)

else VFI = myVFI;

So, if SmoothingPeriods is a positive number, then the smoothed Vfi is returned, while zero or negative numbers result in Vfi without smoothing.

In this way, any compatibility issues due to the multiple-output function are avoided.
Markos Katsanos and
Spyros Raftopoulos, via email

We will respond point by point.

1a. The missing square brackets are a typo, which has been corrected in the attached version of the TradeStation code. [Editor's note: Readers will find the corrected code posted in the Traders' Tips area at the Stocks & Commodities website, Traders.com, at http://www.traders.com/Documentation/FEEDbk_docs/Archive/062004/TradersTips/TradersTips.html.]

1b. A more appropriate modification of the volume selection code for TradeStation 2000i would be:

MyVolume = iff( DataCompression < 2, UpTicks + DownTicks, Volume );

2a. The default values of the parameters 130 and 3 were changed to 5 and 7 for testing purposes. The original defaults have been restored in the attached version of the code. All parameter values, of course, can be edited by the user at the time an analysis technique is applied to a chart.

2b. Adding a validity check prior to calling the log function is a good idea. My revised version of the code includes this enhancement.

2c. As usual, all code we submit for publication in STOCKS & COMMODITIES is developed on the currently shipping TradeStation platform (TradeStation 8, in this instance). Registered users needing help converting the code to run on TradeStation 2000i should contact us via the 2000i EasyLanguage Questions forum.

As a final note, this revised version of the code will replace the code originally posted at the TradeStation websites. Thus, readers can get this code at either our website or the STOCKS & COMMODITIES website.
Function:  VFISmooth

inputs:
Coef( NumericSimple ),
VCoef( NumericSimple ),
Period( NumericSimple ),
SmoothedPeriod( NumericSimple ),
MyVolume( NumericRef ),
CutOff( NumericRef ),
VC( NumericRef ),
MF( NumericRef ),
VFI( NumericRef ) ;

variables:
MyTypicalPrice( 0 ),
Inter( 0 ),
VInter( 0 ),
VAve( 0 ),
MyVolAvg( 0 ),
VMax( 0 ),
DirectionalVolume( 0 ) ;

MyTypicalPrice = TypicalPrice ;
MyVolAvg = Average( MyVolume, Period ) ;
MF = MyTypicalPrice - MyTypicalPrice[1] ;

if MyTypicalPrice > 0 and MyTypicalPrice[1] > 0 then
begin
if MyTypicalPrice > 0 and MyTypicalPrice[1] > 0 then
Inter = Log( MyTypicalPrice ) -
Log( MyTypicalPrice[1] )
else
Inter = 0 ;
VInter = StdDev( Inter, 30 ) ;
CutOff = Coef * VInter * Close ;
VAve = MyVolAvg[1] ;
VMax = VAve * VCoef ;
VC = Iff( MyVolume < VMax , MyVolume, VMax ) ;
DirectionalVolume = Iff( MF > CutOff, VC, Iff( MF <
-CutOff, -VC, 0 ) ) ;
VFI = Summation( DirectionalVolume, Period ) /
VAve ;
VFISmooth = XAverage( VFI, SmoothedPeriod ) ;
end
else
VFISmooth = 0 ;

Indicator:  VFI

inputs:
Coef( 0.2 ),
VCoef( 2.5 ),
Period( 130 ),
SmoothedPeriod( 3 ) ;

variables:
oCutOff( 0 ),
oVC( 0 ),
oMF( 0 ),
oVFI( 0 ),
MyVFI( 0 ),
MyVolume( 0 ) ;

MyVolume = Iff( BarType < 2, Ticks, Volume ) ;
MyVFI = VFISmooth( Coef, VCoef, Period, SmoothedPeriod,
MyVolume, oCutOff, oVC, oMF, oVFI ) ;

if MyVFI > 0 then
SetPlotColor( 2, Green )
else
SetPlotColor( 2, Red ) ;

Plot1( oVFI, "VFI" ) ;
Plot2( MyVFI, "SmoothVFI" ) ;
Plot3( 0, "0" ) ;

Indicator:  VFI Volume

inputs:
Coef( 0.2 ),
VCoef( 2.5 ),

Indicator:  VFI

inputs:
Coef( 0.2 ),
VCoef( 2.5 ),
Period( 130 ),
SmoothedPeriod( 3 ) ;

variables:
oCutOff( 0 ),
oVC( 0 ),
oMF( 0 ),
oVFI( 0 ),
MyVFI( 0 ),
MyVolume( 0 ) ;

MyVolume = Iff( BarType < 2, Ticks, Volume ) ;
MyVFI = VFISmooth( Coef, VCoef, Period, SmoothedPeriod,
MyVolume, oCutOff, oVC, oMF, oVFI ) ;

if MyVFI > 0 then
SetPlotColor( 2, Green )
else
SetPlotColor( 2, Red ) ;

Plot1( oVFI, "VFI" ) ;
Plot2( MyVFI, "SmoothVFI" ) ;
Plot3( 0, "0" ) ;

Indicator:  VFI Volume

inputs:
Coef( 0.2 ),
VCoef( 2.5 ),
Period( 130 ),
SmoothedPeriod( 3 ) ;

variables:
oCutOff( 0 ),
oVC( 0 ),
oMF( 0 ),
oVFI( 0 ),
MyVFI( 0 ),
MyVolume( 0 ) ;

MyVolume = Iff( BarType < 2, Ticks, Volume ) ;
MyVFI = VFISmooth( Coef, VCoef, Period, SmoothedPeriod,
MyVolume, oCutOff, oVC, oMF, oVFI ) ;

if oMF > oCutOff then
SetPlotColor( 1, Green )
else if oMF < oCutOff then
SetPlotColor( 1, Red )
else
SetPlotColor( 1, DarkGray ) ;

Plot1( oVC, "VFIVol" ) ;
Plot2( MyVolume, "FullVol" ) ;

Indicator:  VFI IPO

variables:
MyTypicalPrice( 0 ),
MyVolume( 0 ),
VFIIPO( 0 ) ;

MyTypicalPrice = TypicalPrice ;
MyVolume = Iff( BarType < 2, Ticks, Volume ) ;
VFIIPO = Cum( Iff( MyTypicalPrice > MyTypicalPrice[ 1 ],
MyVolume, Iff( MyTypicalPrice < MyTypicalPrice[1],
-MyVolume, 0 ) ) ) ;

Back to October 2004 Contents