August 2002
TRADERS' TIPS
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.
You 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:
TRADESTATION: ZIGZAG VALIDITY
eSIGNAL: CENTER OF GRAVITY OSCILLATOR
WEALTH-LAB: CENTER OF GRAVITY OSCILLATOR
WEALTH-LAB: ZIGZAG VALIDITY
WEALTH-LAB: RSI SYSTEM
NEUROSHELL TRADER: CENTER OF GRAVITY OSCILLATOR
NEUROSHELL TRADER: ZIGZAG VALIDITY
NEUROSHELL TRADER: RSI SYSTEM
NEOTICKER: CENTER OF GRAVITY OSCILLATOR
NEOTICKER: ZIGZAG VALIDITY
NEOTICKER: RSI SYSTEM
AIQ: CENTER OF GRAVITY OSCILLATOR
INVESTOR/RT: ZIGZAG VALIDITY
INVESTOR/RT: RSI SYSTEM
TRADINGSOLUTIONS: RSI SYSTEM
TECHNIFILTER PLUS: CENTER OF GRAVITY OSCILLATOR
SMARTRADER: CENTER OF GRAVITY OSCILLATOR
WAVE WI$E MARKET SPREADSHEET: CENTER OF GRAVITY OSCILLATOR
WAVE WI$E MARKET SPREADSHEET: ZIGZAG VALIDITY
WAVE WI$E MARKET SPREADSHEET: RSI SYSTEM
or return to August 2002 Contents
TRADESTATION:
ZIGZAG VALIDITY
In "Zigzag Validity" in this issue, author Spyros Raftopoulos
has based his discussion on a particular implementation of the zigzag indicator.
The weakness of the implementation discussed is that at any time, the most
recent two legs of the indicator may be dynamic legs. The most recent reversal
may appear and disappear as new bars are formed, and the reversal is not
locked in until it exceeds the indicator sensitivity. Once the reversal
is locked in, the slope and extent of this leg can still change as new
swings appear. The slope of this leg gets locked in when the next reversal
gets locked in.
So in general, the most recent leg is completely dynamic -- that
is, its slope can change, or it can simply disappear (if its direction
changes); the second most recent leg has its direction fixed to either
up or down, but its slope can change; and all legs preceding that are completely
fixed. The validation indicator proposed by the author is designed to indicate
when the most recent reversal has been locked in.
The zigzag % indicator in TradeStation 6 has been implemented in a way
that obviates the need for a companion validation indicator. The TS6 implementation
does not draw the most recent reversal leg at all until it has been locked
in. All the legs that are drawn already have their up/down directions locked
in, though the slope and extent of the most recent leg can change as new
swings appear that extend the trend.
The algorithm used for the zigzag % indicator in TradeStation 6 is as
follows (if you have TS6, you can view the actual code via the PowerEditor):
If just confirmed new SwingHigh then
Begin
If downtrend then check if reversal confirmed
If uptrend than check if trend extended
End
Else if just confirmed new SwingLow then
Begin
If uptrend then check if reversal confirmed
If downtrend then check if trend extended
End
If reversal confirmed than add reversal trendline
If trend extended then update most recent trendline
Note: Since this code is available as a built-in indicator in TradeStation
6, it won't be posted at www.tradestation2000i.com.
--Ramesh Dhingra
Director, EasyLanguage Consulting
TradeStation Technologies, Inc. (formerly Omega Research, Inc.)
a wholly owned subsidiary of TradeStation Group, Inc.
www.TradeStation.com
GO BACK
eSIGNAL:
CENTER OF GRAVITY OSCILLATOR
This eSignal formula plots the center of gravity oscillator, which was
presented by John Ehlers in the May 2002 S&C. A sample chart can be
seen in Figure 1.
Figure 1: eSIGNAL, CENTER OF GRAVITY OSCILLATOR. This plots the
center of gravity oscillator for the June contract of the US bond on a
historical chart. It's an example of a custom eSignal Formula Script (EFS)
that can be written and modified in any text editor or within the eSignal
formula editor.
/********************************************************************************
Description: This formula plots the Center of Gravity Oscillator
Provided By: This formula was created in the eSignal Formula Editor
Copyright 2002 eSignal, A division of Interactive Data Corporation
*********************************************************************************/
function preMain() {
setStudyTitle("CG Oscillator");
setCursorLabelName("CG-Osc", 0);
setCursorLabelName("CG-Osc1", 1);
setDefaultBarFgColor(Color.red, 0);
setDefaultBarFgColor(Color.blue, 1);
//setDefaultBarThickness(2, 0);
//setDefaultBarThickness(2, 1);
} >
function main(nInputLength) {
if(nInputLength == null)
nInputLength = 10; >
var vRef;
var nCount;
var dDenom = 0; >
var dNum = 0; >
var dCG = 0; >
var vH, vL;
var vPrice;
vH = high(0, -nInputLength); >
vL = low(0, -nInputLength); >
if(vH == null || vL == null)
return;
for(nCount = 0; nCount < nInputLength; nCount++) {
vPrice = (vH[nCount] + vL[nCount]) / 2 >
dNum += (1 + nCount) * vPrice; >
dDenom += vPrice; >
}
if(dDenom != 0) >
dCG = -dNum / dDenom; >
vRef = ref(-1); >
if(vRef == null) { return new Array(dCG, null);
} else {
return new Array(dCG, vRef[0]);
}
} >
--eSignal, a division of Interactive Data Corp.
800 815-8256, www.esignal.com
GO BACK
WEALTH-LAB:
CENTER OF GRAVITY OSCILLATOR
The center of gravity (CG) indicator, which John Ehlers described in
his article in the May 2002 S&C, can be an excellent short-term timing
tool. We created a trading system that utilizes CG to trigger buys after
a sufficient amount of downward price pressure is detected. A sample chart
can be seen in Figure 2.

FIGURE 2: Wealth-Lab, CENTER OF GRAVITY. Here is a sample
chart of the center of gravity oscillator in Wealth-Lab.
To measure downward pressure, we use the CumDown function to count
the number of consecutive bars for which the close is lower than the close
four bars ago (a technique adapted from Tom DeMark's Sequential
and Combo setups).
The script that follows colors the bars based on the downward pressure.
The higher the pressure, the greater the intensity of blue is used to color
the bar.
When downward pressure is 5 or higher, we look to the CG indicator crossing
its one-bar offset to pull the trigger. Since this system is intended to
capitalize on short-term moves, we employ a 3% profit target exit. We also
exit the position if the CG crosses back below its one-bar offset.
{$I 'CG'}
var Bar, CGSer, CGOffset, CGPane: integer;
var Pressure: float;
{ Plot Center of Gravity and it's 1 Bar Offset }
CGPane := CreatePane( 100, true, true );
CGSer := CGSeries( #Average, 10 );
PlotSeries( CGSer, CGPane, #Maroon, #Thick );
DrawLabel( 'CG(Average,10)', CGPane );
CGOffset := OffsetSeries( CGSer, -1 );
PlotSeries( CGOffset, CGPane, #Teal, #Thick );
{ Install a 3% Profit Target }
InstallProfitTarget( 3 );
{ Begin Trading System Rules }
for Bar := 20 to BarCount - 1 do
begin
ApplyAutoStops( Bar );
{ Close Long Position when CG Crosses its Offset }
if LastPositionActive then
begin
if CrossUnder( Bar, CGSer, CGOffset ) then
SellAtMarket( Bar + 1, LastPosition, '' );
end
else
begin
{ Calculate market pressure }
Pressure := CumDown( Bar, #Close, 4 );
if Pressure > 9 then
Pressure := 9;
SetBarColor( Bar, Round( Pressure ) );
{ Sufficient downward pressure to look for entry signal? }
if Pressure > 5 then
{ Yes, enter long on CG crossover }
if CrossOver( Bar, CGSer, CGOffset ) then
BuyAtMarket( Bar + 1, '' );
end;
end;
--Dion Kurczek, Wealth-Lab, Inc.
www.wealth-lab.com
GO BACK
WEALTH-LAB: ZIGZAG VALIDITY
In his article "ZigZag Validity" in this issue, Spyros
Raftopoulos relates some very important considerations to keep in mind
when using the zigzag indicator. Zigzag makes it easy to visualize swing
highs and lows, but it works in hindsight. Each swing high and low is detected
only after a lag that can extend for several bars.
In Wealth-Lab, you access the zigzag by utilizing a set of functions
that return peaks and troughs on the chart. You can access the most recent
peak and trough (or previous ones), as well as the bar at which the peak/trough
was established. But more important, the functions work in a walk-forward
manner. They return the peak/trough as it was known at the bar being queried,
instead of using hindsight. This feature makes it possible to write trading
systems that are based on peaks and troughs, as long as you realize the
impact introduced by the lag.
The following script gives you an idea of how much lag you can expect
when working with peaks and troughs. It uses Wealth-Lab's zigzag
study to draw a zigzag based on 5% reversal on a closing price basis. This
zigzag is drawn as a solid red and blue line. The script also shows you
the most recent peak and trough levels, as they were known as of each bar.
These levels are drawn as dots on the chart. Finally, the script calculates
the lag between the actual peak/trough bar and the bar at which it was
detected. The script prints these lag values on the chart. A sample chart
is in Figure 3.

FIGURE 3: Wealth-Lab, ZIGZAG INDICATOR. Here is a sample chart
of the zigzag validity in Wealth-Lab.
{$I 'ZigZag Study'}
var Bar, Lag: integer;
ZigZag( 5 );
PlotSeries( PeakSeries( #Close, 5 ), 0, #Red, #Dots );
PlotSeries( TroughSeries( #Close, 5 ), 0, #Blue, #Dots );
for Bar := 1 to BarCount - 1 do
begin
if Peak( Bar, #Close, 5 ) <> Peak( Bar - 1, #Close, 5 ) then
begin
Lag := Bar - PeakBar( Bar, #Close, 5 );
AnnotateBar( 'Lag = ' + IntToStr( Lag ), PeakBar( Bar, #Close, 5 ),
true, #Red, 8 );
end;
if Trough( Bar, #Close, 5 ) <> Trough( Bar - 1, #Close, 5 ) then
begin
Lag := Bar - TroughBar( Bar, #Close, 5 );
AnnotateBar( 'Lag = ' + IntToStr( Lag ), TroughBar( Bar, #Close, 5 ),
false, #Blue, 8 );
end;
end;
--Dion Kurczek, Wealth-Lab, Inc.
www.wealth-lab.com
GO BACK
WEALTH-LAB: RSI SYSTEM
The Wealth-Lab code for Dennis Peterson's article in this issue,
"Developing a Trading System," was already included in the
article, but we wanted to explain one interesting aspect of the script.
The trading system presented in the article is fairly complex, and consists
of multiple entry and exit rules. In fact, the entry rule specifies that
four different entry conditions must be true before a long position is
established.
To help visualize the system rules, we utilized the advanced chart annotation
capabilities of Wealth-Lab's scripting language. We assigned a number
to each of the entry rules and the exit rules. We then used the AnnotateChart
function to print on the chart the rule conditions that are met on a bar-by-bar
basis. The individual buy rule numbers are printed below the bar. Once
a position is established, the sell rule numbers are printed above the
bar. A sample chart can be seen in Figure 4.

FIGURE 4: Wealth-Lab, TRADING SYSTEM DEVELOPMENT. In Wealth-Lab,
you can examine the chart and quickly see the combination of rule conditions
that are true at any bar.
In this way, you can examine the chart and quickly see the combination
of rule conditions that are true at any bar. This capability makes it far
easier to finetune the rules and be sure that they are expressing the market
dynamics you intend them to.
--Dion Kurczek, Wealth-Lab, Inc.
www.wealth-lab.com
GO BACK
NEUROSHELL TRADER: CENTER OF GRAVITY OSCILLATOR
John Ehlers's center of gravity oscillator from the May 2002
S&C can be easily implemented in NeuroShell Trader by using NeuroShell
Trader's ability to call external program code, which can be written
in C, C++, Power Basic, or Delphi. We've recreated the center of
gravity oscillator in this way, and you can download it from NeuroShell
Trader's free technical support website.
After downloading the custom indicator, you can insert it in a chart
by doing the following (Figure 5):
1. Select "New Indicator ..." from the Insert
menu.
2. Select the Custom Indicator category.
3. Select the Center of Gravity indicator.
4. Select the parameters as you desire.
5. Select the Finished button.

Figure 5: NEUROSHELL TRADER, center of GRAVITY. Here's
how to add the center of gravity oscillator using NeuroShell Trader's Indicator
Wizard.
A sample NeuroShell Trader chart of the center of gravity oscillator can
be seen in Figure 6.

Figure 6: NEUROSHELL TRADER, center of GRAVITY CHART. Here's
a sample NeuroShell Trader chart displaying the center of gravity oscillator.
You can also combine the custom indicator with any of our 800+ built-in
indicators into a chart, prediction, or trading strategy. In addition,
if you decide to use this indicator in a prediction or a trading strategy,
the coefficients can be optimized by the Genetic Algorithm built into NeuroShell
Trader Professional. This can provide you with your own custom version
of Ehlers's center of gravity oscillator that fits your data best.
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 past Traders' Tips.
--Marge Sherald, Ward Systems Group, Inc.
301 662-7950, sales@wardsystems.com
www.neuroshell.com
GO BACK
NEUROSHELL
TRADER: ZIGZAG VALIDITY
In "Zigzag Validity" in this issue, Spyros Raftopoulos
describes a technique to help confirm a trend in progress using the zigzag
indicator. This can be easily implemented in NeuroShell Trader by combining
a few of the 800+ built-in indicators plus the zigzag indicator found in
the Advanced Indicator Set (an extra-cost add-on).
To recreate the indicators, select "New Indicator ..."
from the Insert menu and use the Indicator Wizard to create each of the
following:
Z
ZigZag(High, Low, percent)
last
SelectiveMovingAverage (Lag(Z,1), OR2(AND2( A>B(Z,Lag(Z,1)),
A<B(Lag(Z,1),Lag(Z,2) ), AND2( A<B(Z,Lag(Z,1)),
A>B(Lag(Z,1),Lag(Z,2) ) ), 1 )
pc
AbsoluteValue ( Divide ( Mutiply ( Subtract ( Close, last ), 100 ), last ) )
SD
OR2 ( AND2 ( A>B(Z,Lag(Z,1), A>B(Lag(Z,1),Lag(Z,2)) ),
AND2 ( A<B(Z,Lag(Z,1)),A<B(Lag(Z,1),Lag(Z,2)) ) )
res:
A>=B(pc,percent)
ZigZagValidity
IfThenElse( And2(Max(res,2),SD), 1, res )
ZigZagInvalid
CrossBelow( ZigZagValidity, 0.5)
ZigZagUpTrendConfirmed
CrossAbove ( AND2 ( A>B(Z, Lag(Z,1)), ZigZagValidity ), 0.5 )
ZigZagDownTrendConfirmed
CrossAbove ( AND2 ( A<B(Z, Lag(Z,1)), ZigZagValidity ), 0.5 )
A sample chart can be seen in Figure 7.

Figure 7: NEUROSHELL TRADER, ZigZag VALIDITY INDICATOR.
Here's
a sample NeuroShell Trader chart showing the ZigZagValidity indicators.
Users of NeuroShell Trader can go to the STOCKS & COMMODITIES
section of the NeuroShell Trader free technical support website to download
a sample zigzag validity chart, which includes the custom indicators ZigZagValidity,
ZigZagInvalid, ZigZagUpTrendConfirmed, and ZigZagDownTrendConfirmed.
--Marge Sherald, Ward Systems Group, Inc.
301 662-7950, sales@wardsystems.com
www.neuroshell.com
GO BACK
NEUROSHELL
TRADER: RSI SYSTEM
To implement Dennis Peterson's stochastic RSI and Bollinger Band
trading system in NeuroShell Trader, as described in his article "Developing
A Trading System" elsewhere in this issue, you should first create
the weighted price, Bollinger Bands, and stochastic RSI indicators in a
chart and then create a NeuroShell Trading Strategy based on those indicators.
To create the weighted price, Bollinger Bands, and stochastic RSI, select
"New Indicator ..." from the Insert menu and use the
Indicator Wizard to create each of the following:
wprice:
Avg4( Close, Close, High, Low)
bbtop:
BollingerBandHigh( wprice, 14, 1.625 )
bbbottom:
BollingerBandLow( wprice, 14, 1.625)
StochRSI:
SimpleStochastic%K( RSI( Close, 14), 14)
To recreate the stochastic RSI and Bollinger Band trading system,
select "New Trading Strategy ..." from the Insert menu
and enter the following long and short entry conditions in the appropriate
locations of the Trading Strategy Wizard:
Generate a buy long MARKET order if ALL of the following are true:
A<B( Subtract( AbsoluteValue ( Divide( Sub ( wprice, bbbottom), Sub ( bbtop, bbbottom))), 0.9), 0.3)
A>B( Mult2 ( Close, 1.05 ), bbtop )
A>B( Volume, SelectiveLag( Volume, A>B( Close, Lag(Close,1)), 1 ))
A>B( StochRSI, 0.3 )
A>B( Divide( Subtract( Close, Open), Subtract( High, Low)), 0.2 )
Generate a trailing stop order at the following price:
Trailing Price Percent ( Trading Strategy, 5 )
Generate a sell short MARKET order if ALL of the following are true:
A<B( StochRSI, 0.7 )
A<B( AbsoluteValue ( Divide ( Subtract (wprice, bbtop), Subtract( bbtop , bbbottom))), 0.8 )
A>B( Close, Multiply ( 0.95, bbtop ))
A sample chart can be seen in Figure 8.

Figure 8: NEUROSHELL TRADER, STOCHASTIC RSI AND BOLLINGER
BANDS. Here's a sample NeuroShell Trader chart for the stochastic RSI
and Bollinger Band trading system.
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 trading system.
Users of NeuroShell Trader can go to the STOCKS & COMMODITIES section
of the NeuroShell Trader free technical support website to download a sample
chart with the stochastic RSI and Bollinger Band trading system already
built.
--Marge Sherald, Ward Systems Group, Inc.
301 662-7950, sales@wardsystems.com
www.neuroshell.com
GO BACK
NEOTICKER: CENTER OF GRAVITY OSCILLATOR
To implement in NeoTicker the concept presented by John Ehlers in his
article in the May 2002 S&C, "The Center Of Gravity Oscillator,"
we can start by creating an indicator called COG with two parameters (Listing
1).
The first parameter, Price, is a formula parameter, which accepts
NeoTicker formulas in text format. The advantage of using formula type
is that when users need to change the definition of Price, they
will have to access the formula wizard to assist them. The second parameter
Period
is
an integer. After setting up the indicator, enter the following code:
LISTING 1
function cog()
dim i, j, Num, Denom
dim price
if not data1.valid (0) then
itself.success = false
exit function
end if
itself.makeindicator "price", "fml", Array("1"), Array(param1.str)
price = itself.indicator ("price")
Num = 0
Denom = 0
i = 0
j = 0
while (i < param2.int) and (itself.currentbar (j) > param2.int)
if price.valid (j) then
Num = Num + price.value (j) * (i +1)
Denom = Denom + price.value (j)
i = i + 1
end if
j = j +1
wend
if Denom <> 0 then
cog = -1 * Num/Denom
else
itself.success = false
end if
end function
On page 24 of the May 2002 S&C in Figure 1 of John Ehlers's
article, there is an additional signal line on the chart. There are two
ways to add this signal line to the chart: as an indicator on indicator,
or as a formula indicator.
To use the indicator-on-indicator method to add the signal line, start
by adding the center of gravity indicator to a chart, then click on the
legend at the upper left-hand corner to highlight the COG indicator. Right-click
on the legend and select "Add indicator" in the popup menu.
When the "Add indicator" window comes up, select simple moving
average and change the period value to 5. The resulting chart will have
two indicators: the COG indicator and a signal line, which is a smoothed
version of COG.

FIGURE 9: NEOTICKER, CENTER OF GRAVITY. Here's a sample
NeoTicker chart of the center of gravity indicator with a signal line.
Alternatively, we can create a formula indicator called COGF (Listing
2) to plot both the COG and signal line. Start by setting up a new formula
indicator with three parameters. Parameters 1 and 2 are the same as the
ones in the center of gravity indicator. The third one is an integer parameter,
which is the smoothing period of the signal line. Figure 9 above shows
you the resulting indicator.
LISTING 2
plot1 := cog(data1, param1, param2);
plot2 := average(plot1, param3);
A downloadable version of these indicators will be available to
the public from the NeoTicker Yahoo user group website at http://groups.yahoo.com/group/neoticker/.
--Kenneth Yuen, TickQuest Inc.
www.tickquest.com
GO BACK
NEOTICKER: ZIGZAG VALIDITY
Spyros Raftopoulos presents the zigzag indicator in his article titled
"Zigzag Validity" in this issue. An indicator script named
"zigzag.pas" is available at the NeoTicker Yahoo user group
in the file area under the folder "sample_indicators." This
indicator can plot the zigzag lines in two distinct colors for up and down
moves, while for the nonconfirmed move at the latest data, it can paint
the tentative line using a separate color. In Figure 10, you can see that
the up moves are drawn in cyan and the down moves are drawn in magenta.
At the right edge, the nonconfirmed move that is just occurring is painted
in yellow.

FIGURE 10: NEOTICKER, zigzag indicator. Here's a sample NeoTicker
chart of the zigzag indicator.
--Lawrence Chan
www.tickquest.com
GO BACK
NEOTICKER: RSI SYSTEM
You can recreate the trading system presented in Dennis Peterson's
article in this issue, "Developing a Trading System," in
NeoTicker.
The system signal is based on two indicators. StochRsi is not a standard
indicator in NeoTicker, so we have to create this indicator using formula
language (Listing 1). To do so, first open a blank indicator; set the language
as "formula"; and add two parameters, the first one being
the number of periods to base the RSI on, and the second one being the
stochastic period of the RSI.
We can develop the system using VBScript. Since NeoTicker is a state
machine and is therefore unlike the code snip in the sidebar, no looping
is needed. Also, for the last up bar volume, NeoTicker provides an object
called "Heap," in which you can save the last up bar volume.
See the code in Listing 2.
The stochrsi_sys added the ability to highlight the possible entry and
exit points, as well as the ability to display the weighted prices and
the Bollinger Bands. These plots can be optionally turned on/off by the
user.

FIGURE 11: NEOTICKER, STOCHASTIC RSI TRADING SYSTEM.
Here's a sample NeoTicker chart demonstrating Dennis Peterson's stochastic
RSI trading system.
If you are interested in system-testing results, you can use the
built-in reporting facilities. You can also make changes to the system's
initial values, such as initial capital and commission calculation, to
adjust for different instruments on which the system is applied.
LISTING 1
plot1 := (RSIndex (data1, param1) - LLV(RSIndex(data1, param1), param2))/
(HHV(RSIndex(data1, param1), param2) -
LLV(RSIndex(data1,param1), param2));
LISTING 2
sub no_plot ()
dim i
for i = 1 to itself.plotcount
itself.successex (i) = false
next
end sub
function GetLastUpVol ()
dim i
for i = 1 to data1.barsnum (0)
if data1.close (i) > data1.close (i+1) then
GetLastUpVol = data1.volume (i)
exit for
end if
next
end function
function LastEntryBar ()
dim c, i, j
c = Trade.TransactionCount
if c <= 0 then
LastEntryBar = 0
exit function
end if
j = -1
for i = c-1 to 0 step -1
if Trade.Transactions (i).TransType = ttLong then
j = i
exit for
end if
next
if j >= 0 then
LastEntryBar = Trade.Transactions (j).BarsNum
end if
end function
function stochrsi_sys()
Const StoreSize = 2
Const LastUpVol = 0 'Last up bar volume location
Const ExitBar123 = 1
'adjustment calculation
dim rdp1, rdp2, rdv1
dim mystddev, mystddevvol
dim adjust1, adjust2
'Entry position calculation variables
dim deviations, periods, BBpds
dim howclosetoBBbot, longthresholdentry
dim wprice, wbband3, srsi2
'Exit position calculation variables
dim howclosetoBBtop, longthresholdexit
if not data1.valid (0) then
no_plot
exit function
end if
if Heap.size = 0 then
Heap.allocate (StoreSize)
Heap.fill 0, StoreSize-1, 0
end if
if Heap.Value(LastUpVol) = 0 then
Heap.Value(LastUpVol) = GetLastUpVol
end if
itself.makeindicator "srsi1", "stochrsi", Array("1"), _
Array (param2.str, param2.str)
itself.makeindicator "mystddev", "stddev", Array("srsi1"), _
Array (param1.str)
mystddev = itself.indicator ("mystddev")
itself.makeindicator "stddevvol", "fml", Array("1"), _
Array("stddev(average(0, data1.v, " + param2.str + _
")/1000000," + param1.str + ")")
mystddevvol = itself.indicator ("stddevvol")
rdp1 = tq_round (mystddev.value (0)/0.053)
rdp2 = tq_round (mystddev.value (0)/0.035)
rdv1 = tq_round (mystddevvol.value (0))
'adjustment calculation
adjust1 = rdv1-rdp1+11
if adjust1 < 8 then
adjust1 = 8
elseif adjust1 > 12 then
adjust1 = 12
end if
adjust2 = rdv1-rdp2+14
if adjust2 < 12 then
adjust2 = 12
elseif adjust2 > 20 then
adjust2 = 20
end if
periods = tq_double2integer(adjust1)
BBpds = tq_double2integer(adjust2)
howclosetoBBbot = 0.9
longthresholdentry = 0.3
itself.makeindicator "wprice", "fml", Array("1"), Array("(2*c+h+l)/4")
wprice = itself.indicator ("wprice")
deviations = tq_double2integer(tq_round(0.0625*BBpds+0.75))
itself.makeindicator "srsi2", "stochrsi", Array("1"), _
Array (tq_integer2str(periods), tq_integer2str(periods))
srsi2 = itself.indicator ("srsi2")
itself.makeindicator "wbband3", "bbands3", Array("wprice"), _
Array(tq_integer2str(BBpds), tq_integer2str(deviations))
wbband3 = itself.indicator ("wbband3")
'Entry Condition
EntryCondition1 = 0
EntryCondition2 = 0
EntryCondition3 = 0
EntryCondition4 = 0
if (wbband3.ValueEx(1,0)-wbband3.ValueEx(3,0)) = 0 then
EntryCondition1 = 0
else
botpercentage = tq_abs((wprice.value (0) - wbband3.ValueEx(3, 0))/ _
(wbband3.ValueEx(1, 0) - wbband3.ValueEx(3,0)))
EntryCondition1 = (tq_abs(botpercentage-howclosetoBBbot)<0.3)
end if
EntryCondition2 = ((data1.close(0)*1.05 > wbband3.valueex(3, 0)) and _
(srsi2.value(0) > longthresholdentry))
EntryCondition3 = ((data1.close(0) > data1.close(1)) and _
(Heap.Value(LastUpVol) > 0) and _
(data1.volume(0) > Heap.Value(LastUpVol)))
if data1.close (0) > data1.close (1) then
Heap.Value(LastUpVol) = data1.volume(0)
end if
if (data1.High(0)-data1.low(0)) = 0 then
EntryCondition4 = 0
else
EntryCondition4 = tq_abs((data1.close(0)-data1.Open(0))/ _
(data1.High(0)-data1.Low(0)))>0.2
end if
'plot weighted price
if wprice.valid (0) then
itself.plot(6) = wprice.value (0)
else
itself.successex (6) = false
end if
'plot bband for weighted price
if wbband3.validex (1, 0) and wbband3.validex (2,0) and _
wbband3.validex (3,0) then
itself.plot (7) = wbband3.valueex (1, 0)
itself.plot (8) = wbband3.valueex (2, 0)
itself.plot (9) = wbband3.valueex (3, 0)
else
itself.successex (7) = false
itself.successex (8) = false
itself.successex (9) = false
end if
if (EntryCondition1<>0) then
itself.plot(2) = data1.close (0)
else
itself.successex (2) = false
end if
if (EntryCondition2<>0) then
itself.plot(3) = data1.close (0)
else
itself.successex (3) = false
end if
if (EntryCondition3<>0) then
itself.plot(4) = data1.close (0)
else
itself.successex (4) = false
end if
if (EntryCondition4<>0) then
itself.plot(5) = data1.close (0)
else
itself.successex (5) = false
end if
if (EntryCondition1<>0) and (EntryCondition2<>0) and _
(EntryCondition3<>0) and (EntryCondition4<>0) then
itself.plot(10) = data1.close (0)
else
itself.successex (10) = false
end if
'Exit Conditions
longthresholdexit = 0.7
howclosetoBBtop = 0.8
ExitCondition1 = 0
ExitCondition2 = 0
ExitCondition3 = 0
ExitCondition4 = 0
ExitCondition5 = 0
ExitCondition6 = 0
ExitCondition7 = 0
ExitCondition1 = srsi2.value(0) < longthresholdexit
if (wbband3.ValueEx(1,0)-wbband3.ValueEx(3,0)) = 0 then
ExitCondition2 = 0
else
toppercentage = tq_abs((wprice.value(0) - wbband3.ValueEx(1, 0))/ _
(wbband3.ValueEx(1, 0) - wbband3.ValueEx(3,0)))
ExitCondition2 = (toppercentage < howclosetoBBtop)
end if
ExitCondition3 = data1.close(0)>(0.95*wbband3.Value(1, 0))
ExitCondition4 = data1.close(0)<wbband3.value(3, 0)
if (ExitCondition1<>0) and (ExitCondition2<>0) and _
(ExitCondition3<>0) then
Heap.Value (ExitBar123) = data1.BarsNum (0)
end if
ExitCondition5 = (Heap.Value(ExitBar123) > 0) and _
(data1.BarsNum(0) - Heap.Value(ExitBar123)) < 4
ExitCondition6 = (data1.close(1)-data1.Open(1)) < 0
ExitCondition7 = (LastEntryBar > 0) and _
(data1.BarsNum(0) - LastEntryBar) < 2
if (ExitCondition1<>0) then
itself.plot (11) = data1.close (0)
else
itself.successex (11) = false
end if
if (ExitCondition2<>0) then
itself.plot (12) = data1.close (0)
else
itself.successex (12) = false
end if
if (ExitCondition3<>0) then
itself.plot (13) = data1.close (0)
else
itself.successex (13) = false
end if
if (ExitCondition4<>0) then
itself.plot (14) = data1.close (0)
else
itself.successex (14) = false
end if
if (ExitCondition5<>0) then
itself.plot (15) = data1.close (0)
else
itself.successex (15) = false
end if
if (ExitCondition6<>0) then
itself.plot (16) = data1.close (0)
else
itself.successex (16) = false
end if
if (ExitCondition7<>0) then
itself.plot (17) = data1.close (0)
else
itself.successex (17) = false
end if
if (ExitCondition4<>0) and (ExitCondition5<>0) then
itself.plot (18) = data1.close (0)
else
itself.successex (18) = false
end if
if (ExitCondition6<>0) and (ExitCondition7<>0) then
itself.plot (19) = data1.close (0)
else
itself.successex (19) = false
end if
if (Trade.OpenPositionSize=0) and (EntryCondition1<>0) and _
(EntryCondition2<>0) and (EntryCondition3<>0) and _
(EntryCondition4<>0) then
Trade.BuyAtMarket param3.int, "buy at market"
heap.Value (ExitBar123) = 0
end if
if Trade.OpenPositionSize > 0 then
if (ExitCondition5<>0) and (ExitCondition4<>0) then
Trade.SellAtMarket param3.int, "Sell 4and5"
elseif (ExitCondition6<>0) and (ExitCondition7<>0) then
Trade.SellAtMarket param3.int, "Sell 6and7"
end if
end if
itself.plot (1) = Trade.CurrentEquity
end function
A downloadable version of these indicators will be available from
the TickQuest website as well as from the NeoTicker Yahoo user group.
--Kenneth Yuen, TickQuest Inc.
www.tickquest.com
GO BACK
AIQ: CENTER OF GRAVITY OSCILLATOR
Here is the EDS code for implementing the center of gravity oscillator,
which John Ehlers introduced in the May 2002 issue of STOCKS & COMMODITIES.
This code is intended for educational purposes only, and is provided as-is.
define Length 10.
price is ([high] + [low]) / 2.
count is OffsetToDate(Month(),Day(),Year()).
! Non-delayed Ehlers CG Formula
num is Sum(price * (count+1),Length).
denom is Sum(price,Length).
Ehlers is -num/denom.
!Since EDS does not store values in arrays the way EasyLanguage
does, you must create a separate formula
! for the "Delay" used as the signal line. Since the
Count UDF will always return the number of days in
!the sum from the report date, we simple fake it out by not adding
the "1" to count as we did above.
!This just zeroes out one day of the formula so we can get the "yesterday"
value of the real formula.
num1 is Sum(price * count,Length).
denom1 is Sum(price,Length).
Ehlers1 is -num1/denom1.
CG is Ehlers.
CG1 is ValResult(Ehlers1,1).
--AIQSystems
www.aiqsystems.com
GO BACK
INVESTOR/RT: ZIGZAG VALIDITY
The zigzag indicator (ZIG) discussed by Spyros Raftopoulos in his article
in this issue is a built-in indicator in Investor/RT. The chart in Figure
12 depicts a 10% zigzag on a daily candlestick chart of Microsoft.

Figure 12: Investor/RT. ZIGZAG. This sample Investor/RT candlestick
chart of Microsoft is overlaid with a 10% zigzag indicator.
The preferences for the zigzag indicator are shown in Figure 13.
The user has the option of choosing a specific price (open, close, high,
low, Ohlc/4, and so on) on which the zigzag will be constructed, or choosing
to "Use High/Low." If the "Use High/Low" option
is selected, Investor/RT will consider the extreme prices of each bar when
deciding whether the bar has reached the percent change validation threshold.
The user may also specify the percent change level and the color, style,
and thickness of the zigzag lines.

Figure 13: Investor/RT, ZIGZAG. Here are the suggested preference
settings for the zigzag indicator.
The Investor/RT Rtl language has access to the zigzag indicator
using the token "Zig." In the language, Zig represents the
percent change level that the current level has achieved. By qualifying
the Zig token, the user can access the percent change level that was achieved
by previous legs of the zigzag indicator. For instance, Zig.1 would represent
the percent change level reached by the next-to-last leg, while Zig.2 would
represent the percent change level reached by the leg prior to that. Zig.1
and Zig.2 could never have a smaller magnitude than the "minimum
price change (%)" specified in the preferences, since these legs
have already been validated to the percent change level.
Zig, however, may not yet have reached its required threshold. The following
scan would test the current leg for validation on a 10 % change zigzag:
ZIG >= 10 OR ZIG <= -10
The following scan will find those instruments that have just
recently been validated:
(ZIG > 10 AND ZIG < 10.5) OR (ZIG.1 > 10 AND ZIG.1 < 10.5 AND ZIG > 0.5)
The first part of this scan, ZIG > 10 AND ZIG < 10.5, finds any
instruments whose current leg is between the 10 and 10.5% levels. The second
part of the scan, ZIG.1 > 10 AND ZIG.1 < 10.5 AND ZIG > 0.5, finds instruments
whose current leg is actually a very small negative value, but whose recently
validated leg is between 10% and 10.5%.
--Chad Payne, Linn Software
800 546-6842, info@linnsoft.com
www.linnsoft.com
GO BACK
INVESTOR/RT: RSI SYSTEM
The entry and exit rules discussed in "Developing A Trading System"
can be replicated in Investor/RT using scans or trading signals. The RTL
syntax required for each rule is shown under the appropriate rule below.
Entry rules
Look for prices tagging the lower Bollinger Band.
Assuming this rule requires that the Bollinger Band value remain between
the high and low of the bar for the two previous bars, the syntax follows:
BOLD.1 >= LO.1 AND BOLD.1 <= HI.1 AND BOLD.2 >= LO.2 AND BOLD.2 <= HI.2
Look for a closing price of an up day (close > open) that is above
the lower band.
CL > OP AND CL > BOLD
Volume of this up day should be greater than the volume of the previous
up day.
This expression will require the use of the Signal Statistics Indicator
(Sstat). Sstat should be set up as "Price At Last Signal"
with price being "Volume" and the signal being a scan with
the syntax CL > OP. The syntax for this rule follows:
VO > SSTAT.1
StochRsi should be above a threshold to ensure some momentum is associated
with the pushup.
Assuming that our threshold level is 70, the syntax for this rule follows:
RAWK(RSI) > 70
Use (close-open)/(high-low)>0.2 to avoid days that have short candlestick
bodies.
(CL ? OP)/(HI ? LO) > 0.2
We can combine all these entry rules into one scan/signal with the
following syntax by ANDing them all together:
BOLD.1 >= LO.1 AND BOLD.1 <= HI.1 AND BOLD.2 >= LO.2 AND BOLD.2 <= HI.2
AND CL > OP AND CL > BOLD AND VO > SSTAT.1 AND RAWK(RSI) > 70
AND (CL ? OP)/(HI ? LO) > 0.2
Exit Rules
StochRsi should be less than a threshold to assure loss of momentum.
Assuming that our threshold level is 30, the syntax for this rule follows:
RAWK(RSI) < 30
Look for prices to reach the upper band.
To look at all of the past three bars to see if any of them have exceeded
the Bollinger Band, use the following syntax:
HI >= BOLU OR HI.1 >= BOLU.1 OR HI.2 >= BOLU.3
Closing price should be near the top Bollinger Band.
Assuming that being near equates to being within 1%, use the following
syntax:
ABS(CL ? BOLU) / BOLU <= 0.01
We can combine all these exit rules into one scan/signal with the following
syntax by ANDing them all together:
RAWK(RSI) < 30 AND (HI >= BOLU OR HI.1 >= BOLU.1 OR HI.2 >= BOLU.3)
AND ABS(CL ? BOLU) / BOLU <= 0.01
Figure 14 shows an Investor/RT chart depicting all the components
used in the signals, along with the entry and exit signals themselves.
In the upper pane, the daily candlesticks of MSFT are overlaid with Bollinger
Bands as well as the entry (blue) and exit (red) signals. In the middle
pane, the StochRsi is charted in blue. In the lower pane, the daily volume
is shown.

Figure 14: Investor/RT, STOCHASTIC RSI and BOLLINGER BAND
TRADING SYSTEM. Here's a sample Investor/RT daily candlestick chart
of Microsoft showing the entry and exit signals historically, along with
the components on which the signals are based.
--Chad Payne, Linn Software
800 546-6842, info@linnsoft.com
www.linnsoft.com
GO BACK
TRADINGSOLUTIONS:
RSI SYSTEM
In his article "Developing A Trading System" in this issue,
Dennis Peterson presents a trading system based on the stochastic RSI and
Bollinger Bands. In addition to combining these two different approaches,
the system also dynamically adjusts the width of the Bollinger Bands and
the periods of the calculations as market conditions change. TradingSolutions
can do this through the use of variable-length functions.
This complete system is available in a function file that can be downloaded
from the TradingSolutions website (www.tradingsolutions.com) in the Solution
Library section. Due to its length, only the key concepts will be covered
here.

Figure 15: TradingSolutions, STOCHASTIC RSI AND BOLLINGER
BAND TRADING SYSTEM. Here's a sample chart displaying stochastic RSI
and Bollinger Band system entries and exits along with the adjusted Bollinger
Bands and weighted close.
The stochastic RSI function is a stochastic oscillator of the RSI.
Two versions of this function are used: a static version and a variable-length
version. The static version is used to calculate the period used in the
variable-length version. The variable-length stochastic Rsi requires variable-length
stochastic and Rsi functions to be written. The difference between the
static versions and the variable-length versions is the same as it is here
-- the underlying functions are simply replaced with their variable-length
counterparts.
Stochastic RSI
Name: StochRSI
Inputs: Close, Period
Stoch (RSI (Close, Period), RSI (Close, Period), RSI (Close, Period), Period, 1)
Stochastic RSI (Variable Length)
Name: StochRSIVL
Inputs: Close, Period, Maximum Period
StochVL (RSIVL (Close, Period, Maximum Period), RSIVL (Close, Period, Maximum Period),
RSIVL (Close, Period, Maximum Period), Period, Maximum Period, 1)
To ease the writing of the period calculation functions, a Restrict
function can be written to clip a value to a specified range.
Restrict Value Range
Name: Restrict
Inputs: Value, Lowest Value, Highest Value
If (LT (Value, Lowest Value), Lowest Value, If (GT (Value, Highest Value), Highest Value, Value))
The period for the variable-length stochastic RSI can then be calculated
from the variability of the static stochastic RSI as follows:
Stochastic RSI Period
Name: StochRSIPeriod
Inputs: Close, Volume, Initial Period, StDev Period
Restrict (Add (Sub (Round (StDev (Div (MA (Volume, Initial Period), 1000000),
StDev Period)), Round (Div (StDev (StochRSI (Close, Initial Period), StDev Period),
0.053))), 11), 8, 12)
This system also requires variable-length versions of the Bollinger
Band functions. Again, these are created by replacing the underlying functions
with their variable-length counterparts. For example:
Bollinger Band (Bottom, Variable Length)
Name: BBBotVL
Inputs: Data, Period, Maximum Period, Deviations
Sub (MAVL (Data, Period, Maximum Period), Mult (StDevVL (Data,
Period, Maximum Period), Deviations))
One other supporting function of note is the calculation of the volume
of the most recent up day. This is done in TradingSolutions by having a
function get the current volume if it is an up day, or take the previous
value of the function if it is not an up day.
Volume Most Recent Up Day
Name: VolumeUp
Inputs: Close, Volume
If (Inc (Close), Volume, Prev (1))
By breaking down the system into its supporting calculations, each of the
entry and exit rules for this function can be written. TradingSolutions
users entering the functions by hand should note that the way the exit
functions are combined is different for the Wealth-Lab code sample in the
article than for the MetaStock code sample. The function file available
online contains both versions.
It is also worth noting that functions such as the stochastic RSI and
Bollinger Band percentages may make good inputs to neural network predictions,
especially in data where strong trends are present. When using them as
an input to a prediction, you will typically want to set the preprocessing
to "None," since they are already normalized to specific
ranges.
--Gary Geniesse, NeuroDimension, Inc.
800 634-3327, 352 377-5144
www.tradingsolutions.com
GO BACK
TECHNIFILTER
PLUS: CENTER OF GRAVITY OSCILLATOR
Here is a TechniFilter Plus formula for the center of gravity oscillator
(CG), which was discussed by John Ehlers in his article in the May 2002
S&C.
This multiline formula charts both the CG formula and the lagged CG
formula that Ehlers used to generate his oscillator charts in the article.
The {f} directive in line 2 caused TechniFilter Plus to compute the line
day by day. This makes the quantity (CU13Y000 ? CU13 + 1) calculate properly
to compute Ehlers's formula.
Formula for the Center of Gravity Oscillator
NAME: CG
SWITCHES: multiline
PARAMETERS: 10
FORMULA:
[1]: (H + L) / 2
[2]: ([1] * (CU13Y000 - CU13 + 1) )F&1 / [1]F&1 {f}
[3]: [2] {NC}{C}{nCG} {rgb#255}
[4]: [2]Y1 {C}{nCGY1} {rgb#32768}
Visit RTR's website to download this formula as well as program
updates.
--Clay Burch, Rtr Software
919 510-0608, rtrsoft@aol.com
www.rtrsoftware.com
GO BACK
SMARTRADER:
CENTER OF GRAVITY OSCILLATOR
Recreating the center of gravity oscillator presented by John Ehlers
in the May 2002 S&C requires building four formulas in SmarTrader.
Although two of them are lengthy, they are all simple and straightforward.
The SmarTrader specsheet for the center of gravity oscillator is given
in Figure 16. First, in row 9, we compute the midpoint of the daily High/Low
price range. We shortened the name in the article to Pr for brevity
in subsequent formulas.
Next, in row 10, we compute Num, the numerator in the CG formula. This
is a numerically weighted sum of the last 10 Close prices. Row 11, Denom,
is the unweighted sum of the same 10 prices.

Figure 16: SMARTRADER SPECSHEET, CENTER OF GRAVITY. Here is
the specsheet for implementing John Ehlers's center of gravity oscillator.
Row 12 computes the CG by dividing Num by Denom and multiplying
by -1 to invert the plot. Row 13, CG1, is the value of CG shifted by one
period (bar).
Figure 17 shows a sample SmarTrader chart of the center of gravity oscillator.

Figure 17: SMARTRADER, CENTER OF GRAVITY. Here is a
sample chart of John Ehlers's center of gravity oscillator.
For this article, it is important to note that since SmarTrader
can make references both backward and forward, all references to previous
(earlier) bars must include a minus sign. For CompuTrac Snap users, omit
the minus sign.
--Jim Ritter, Stratagem Software
504 885-7353, Stratagem1@aol.com
GO BACK
WAVE
WI$E MARKET SPREADSHEET: CENTER OF GRAVITY OSCILLATOR
The following Wave Wi$e formulas calculate and chart John Ehlers's
center of gravity. A sample chart is shown in Figure 18.

Figure 18: Wave Wi$e, CENTER OF GRAVITY. Here's a sample
Wave Wi$e chart demonstrating John Ehlers's center of gravity oscillator.
A: DATE @TC2000(C:\TC2000V3\Data,DIA,Diamonds Trust,DB)
B: HIGH
C: LOW
D: CLOSE
E: OPEN
F: VOL
G: Price (HIGH+LOW)/2
H: Gravity PROCEDURE(GRAVITY)
I: chart @CHART(1)
J: ' ==========End Formulas
' PROCEDURE GRAVITY
'COMPUTE CENTER OF GRAVITY
#NAME PERIOD 10
X$1=0 : X$2=0
@FOR Y$1 = 0 TO PERIOD-1
X$1=X$1 + PRICE[-Y$1]*(Y$1+1) 'NUMERATOR
X$2=X$2 + PRICE[-Y$1] 'DENOMINATOR
NEXT
@IF X$2 <> 0 THEN
X$3=-X$1/X$2
ELSE X$3=0
ENDIF
@RETURN(X$3)
' END PROCEDURE GRAVITY
--Peter Di Girolamo, Jerome Technology
908 369-7503, jtiware@aol.com
http://members.aol.com/jtiware
GO BACK
WAVE
WI$E MARKET SPREADSHEET: ZIGZAG VALIDITY
The following Wave Wi$e formulas calculate zigzag or pivot points. As
noted by author Spyros Raftopoulos in his article in this issue, these
calculations show historical trends and may not be used in systems, since
the ongoing pivot is modified as new data is added.
A: DATE @TC2000(C:\TC2000V3\Data,DJ-30,Dow Jones Industrials,DB)
B: HIGH
C: LOW
D: CLOSE
E: OPEN
F: VOL
G: proc PROCEDURE(PIVCALC)
H: Pivots
I: PivotID
J: chart @CHART(1)
K: ' ==========End Formulas
' PROCEDURE PIVCALC
'DETERMINE HIGH AND LOW PIVOTS
'========================================
#NAME PERIOD X$5
#NAME ROWLO X$1
#NAME ROWHI X$2
#NAME PVLOW X$3
#NAME PVHIGH X$4
PERIOD=@INPUT(ENTER THE PERIOD OF PIVOT,7,1)
@IF @ROW() = 1 THEN 'INITIALIZE
ROWLO=1 'ROW OF LAST LOW
ROWHI=1 'ROW OF LAST HIGH
ENDIF
@CELLPUT(@COLUMN()+1,@ROW(),@BLANK()) 'CLEAR PREVIOUS VALUES
@CELLPUT(@COLUMN()+2,@ROW(),0) 'CLEAR PREVIOUS VALUES
@IF LOW < @MIN(LOW[-1],PERIOD) THEN 'TEST FOR NEW HIGH
PVHIGH=@MAX(HIGH,@ROW()-ROWLO)
ROWHI=@ROWOF(@MAX(HIGH,@ROW()-ROWLO))
@CELLPUT(@COLUMN()+1,ROWHI,PVHIGH)
@CELLPUT(@COLUMN()+2,ROWHI,1) 'SAVE HIGH ID
@RETURN(1) 'SHOW WE FOUND HIGH
ENDIF
@IF HIGH > @MAX(HIGH[-1],PERIOD) THEN 'TEST FOR NEW LOW
PVLOW=@MIN(LOW,@ROW()-ROWHI)
ROWLO=@ROWOF(@MIN(LOW,@ROW()-ROWHI))
@CELLPUT(@COLUMN()+1,ROWLO,PVLOW)
@CELLPUT(@COLUMN()+2,ROWLO,-1) 'SAVE IOW ID
@RETURN(-1) 'SHOW WE FOUND LOW
ENDIF
RETURN(0) 'SHOW WE FOUND NEITHER
' END PROCEDURE PIVCALC
--Peter Di Girolamo, Jerome Technology
908 369-7503, jtiware@aol.com
http://members.aol.com/jtiware
GO BACK
WAVE WI$E MARKET SPREADSHEET: RSI SYSTEM
The following Wave Wi$e formulas and chart (Figure 20) demonstrate how
to calculate RSI and stochastic RSI. We have added Bollinger Bands to both
the price and RSI charts.

Figure 20: Wave Wi$e, rsi and bollinger band. Here's
a sample Wave Wi$e chart demonstrating the stochastic RSI and Bollinger
Bands indicators.
A: DATE @TC2000(C:\TC2000V3\Data,DJ-30,Dow Jones Industrials,DB)
B: HIGH
C: LOW
D: CLOSE
E: OPEN
F: VOL
G: Avg21 @MAVG(CLOSE,21)
H: UpBand AVG21 + 2 * @STD(B, 21)
I: LoBand AVG21 - 2 * @STD(B, 21)
J: Rsi @RSI(CLOSE,14)
K: Rsi_Hi @MAVG(RSI,21) + 2 * @STD(RSI, 21)
L: Rsi_lo @MAVG(RSI,21) - 2 * @STD(RSI, 21)
M: StochRsi @STOCH(RSI, RSI, RSI, 14)
N: 'End Formulas
--Peter Di Girolamo, Jerome Technology
908 369-7503, jtiware@aol.com
http://members.aol.com/jtiware
GO BACK
All rights reserved. © Copyright 2002, Technical
Analysis, Inc.
Return to August 2002 Contents