Where to Find Advanced Indicator Set 3

 Top Next

Once you have installed Advanced Indicator Set 3, you may add any of the new indicators to your chart by selecting the Indicator Wizard from the Insert menu in the NeuroShell Trader. The Advanced Indicator Set 3 will be displayed on the list of indicator categories. After you select the category and click on the next button, you may select the new indicators just as you would any of the original NeuroShell Trader indicators.


Overview

 Top Previous Next

Advanced Indicator Set 3 is an eclectic set of indicators that expand NeuroShell Trader's ability to find a value between two separate conditions or since the occurrence of a single condition. In addition, Set 3 adds the power to count, remember or toggle values off and on based on conditions. These functions complement the NeuroShell Trader's emphasis on building indicators with a wizard rather than requiring the user to be a programmer. The result is a significant speed increase in building and testing trading systems.

Advanced Indicator Set 3 also includes indicators specifically designed for pair trading , as well as two indicators that compute the correct sun time and distance to the moon.

Conditional Indicators

The task oriented indicators in Set 3 such as Find, Count, Remember, and Toggle require the use of conditional indicators. The NeuroShell Trader includes many conditional indicators such as rules, Boolean, relational, crossovers, candlesticks, etc. Advanced Indicator Set 3 expands those choices with the following indicators:

FollowedBy returns a 1 for true when a Condition1 is followed by a Condition2. Other times it returns a zero.

TimeIs specifies a time as a condition for another indicator.

DateIs specifies a date as a condition.

Peak specifies the highest value within a certain number of bars, while Valley looks for the lowest value.

BarNumber returns a 1 when the specified bar number appears in a chart. The first bar in the chart is numbered 1, the second bar is numbered 2, etc.

Task Indicators

Find and Count Indicators

The Find and Count Indicators answer questions such as Find the highest value of the close after it crosses above a 20 period moving average until it crosses below that same moving average or Count the number of times the RSI < 30 between the hours of 2:30 and 4:00 pm.

Remember

The Remember indicator outputs a time series value based on a condition you specify. For example, the Remember indicator would output the value of the high (the time series) when the 9 period moving average crosses above the 13 period moving average (the condition). The output value would remain the same until the condition is met once again, at which time the current high would become the output. The Remember2, Remember3, and Remember4 indicators output a different value depending upon which of several conditions is activated. The Remember indicators may be used as variable inputs to other indicators, Predictions or Trading Strategies. The conditions are true/false indicators or any indicator that produces a value of either 0 or a non-zero value.

Toggle

Toggle indicators can signify the presence or absence of conditions you specify. The Toggle indicators may also be used to remove certain data when training a neural net, e.g., only train a net on bars between 1 p.m. and 4 p.m. The Toggle indicators output 0, 1, or a missing value based on the settings for the What parameter.

Inclusive and Since Versions

The Find, Count, and Toggle indicators include variations such as FindInclusive and FindSince. The Inclusive versions incorporates the bars where the conditions are true in calculating the indicator's result. The Since versions begin calculating the result after the condition is found up until the current bar.

Pair Trading

The The Pair and Proxy indicators let you easily implement Pair Trading Strategies in NeuroShell Trader. Pair trading indicators generate simultaneous buy/sell signals for two different stocks or other instruments in the same chart, thus creating a market neutral trading system. You can create a pair trading system for stocks and other instruments that cross one another directly, or through a "proxy" created by a neural net. The nets allow you to produce cointegrated pairs using one stock to predict the price of another and using the spread between the actual and predicted prices to pair trade the predicted stock and the one used to make the prediction. Indicators include PairEntry and PairExit, as well as ProxyEntry and ProxyExit.

Sun and Moon

The Equation of Time indicator returns the difference between solar time (as measured by a sundial) and mean clock time. The MoonDistance indicator outputs the distance between the center of the Earth and the center of the Moon expressed in kilometers.

Special Note Regarding the Use of Close

Several of the indicators in this set, such as the Find and Count indicators, use close as a default parameter value when a condition is required. Close is a non-zero value so it is always a true condition. However, you should not pay attention to these indicator results until you change the close to a condition that may be either true or false.


List of Indicators

Conditions for Find and Count Indicators | Remember Indicators
FollowedBy | Remember
FollowedByWithin | Remember2
FollowedByWithinInc | Remember3
TimeIs | Remember4
DateIs |
Peak | Toggle Indicators
Valley | Toggle
BarNumber | ToggleInclusive
 | ToggleSince
Find Indicators | ToggleSinceInclusive
Find |
FindInclusive | Pair Indicators
FindSince | PairEntry
FindSinceInclusive | PairExit
 | ProxyEntry
Count Indicators | ProxyExit
Count |
CountInclusive | Sun and Moon
CountSince | Equation of Time
CountSinceInclusive | MoonDistance


Conditional Indicators

Chart for this topic: Conditional Indicators.cht

The task oriented indicators in Set 3 such as Find, Count, Remember, and Toggle require the use of conditional indicators. The NeuroShell Trader includes many conditional indicators such as rules, Boolean, relational, crossovers, candlesticks, etc. Advanced Indicator Set 3 expands those choices with the following indicators:

FollowedBy returns a 1 for true when a Condition1 is followed by a Condition2. Other times it returns a zero.

TimeIs specifies a time as a condition for another indicator.

DateIs specifies a date as a condition.

Peak specifies the highest value within a certain number of bars, while Valley looks for the lowest value.

BarNumber returns a 1 when the specified bar number appears in a chart. The first bar in the chart is numbered 1, the second bar is numbered 2, etc.

For example, you can use the FindInclusive indicator to calculate the standard deviation between the Peak and Valley conditions in Apple.


FollowedBy, FollowedByWithin, FollowedByWithinInc

Chart for this topic: Followed By Indicators.cht

The FollowedBy indicator returns a 1 for true when a Condition1 is followed by a Condition2. Other times it returns a zero. There are several versions of this indicator:

FollowedBy(condition1, condition2)

Parameters:

Condition 1 – a time series that must be a condition that defines the first condition of a series (use a True/False condition rather than the default value of Close)

Condition 2 – a time series that must be a condition that defines the second condition of a series (use a True/False condition rather than the default value of Close)

Returns a value of 1 (true) on the first, and only the first, occurrence of a true conditon2 after a true occurrence of condition1. At all other times it returns a value of 0 (false).

Note that FollowedBy(FollowedBy(condition1, condition2), condition3) is possible.

FollowedByWithin(condition1, condition2, bars)

Parameters:

Condition 1 – a time series that must be a condition that defines the first condition of a series (use a True/False condition rather than the default value of Close)

Condition 2 – a time series that must be a condition that defines the second condition of a series (use a True/False condition rather than the default value of Close)

Bars - an integer greater than or equal to 1 or a calculated time series

Returns a value of 1 (true) on the first, and only the first, occurrence of a true conditon2 after a true occurrence of condition1 if the number of bars between conditions 1 and 2 is less than or equal to the value of the Bars parameter. (The FollowedByWithin indicator does not include the bars when Condition1 and Condition2 occur in the number of bars counted.) At all other times it returns a value of 0 (false).

FollowedByWithinInc(condition1, condition2, bars)

Same as FollowedByWithin except that it counts the bars on which Condition1 and Condition2 occur.

Note: These indicators use close as a default parameter value when a condition is required. Close is a non-zero value so it is always a true condition. However, you should not pay attention to these indicator results until you change the close to a condition that may be either true or false.


TimeIs

TimeIs(date, hour, minute, second, tolerance)

Parameters:

Date Variable = Date (cannot be changed)

Hour = hour of the day (integers from 0 - 23)

Minute = minute of the hour (integers from 0 - 59)

Second = second of the minute (integers from 0 - 59)

Tolerance = 0.25 second (default)

Returns true (1) on bar whose time is within the tolerance (in seconds) of the specified time. The tolerance is required because times on bars are designated by floating point fractions, so that a precise comparison of times is not always possible due to the number precision issues of floating point fractions between the data feed and NeuroShell Trader. If you have bars which occur every one second or less use a tolerance of less than half the distance between bars (for second bars 0.25 should be good).


DateIs

DateIs(date, year, month, day)

Parameters:

Date Variable = Date (cannot be changed)

Year = any reasonable year

Month = integers from 1 to 12

Day = integers from 1 to 31

Returns true on the bar with the specified date. On intraday charts, all bars on the specified date return true (1).

Warning: The date you specify must actually include data for that date. For example, the Find and Count Indicators won't work if the date falls on a weekend.

Note that AND2(DateIs(date, year, month, day),TimeIs(date, hour, minute, second, tolerance)) is possible.


Peak and Valley

Peak(neighborhood, series)

Parameters:

Neighborhood - the number of bars to the left and right of the peak, integer >= 1. This actually defines a peak.

Series - the time series where the peak occurs

True (1) on bars that are the highest in the neighborhood in the series. Returns 0 at other times, including when there are no neighborhood bars to the left and right.

Valley(neighborhood, series)

Parameters:

Neighborhood - the number of bars to the left and right of the valley, integer >= 1. This actually defines a valley.

Series - the time series where the peak occurs

True (1) on bars that are the lowest in the neighborhood in the series.

Note that Or2(Peak(neighborhood, series), Valley(neighborhood, series)) is possible to denote a turning point.

Recognizing Peaks and Valleys

The Peak and Valley indicators are based on the concept of recognizing local peaks and valleys where a time series changes its direction from up to down (peak) and from down to up (valley).

A peak is defined as the point where the high is higher than any other highs in the neighborhood of the point.

A valley is defined as the point where the low is lower than any other lows in the neighborhood of the point.

The neighborhood of a point (Nhood) ranges from the point -Nhood bars to the point + Nhood bars, inclusive of the endpoints. Therefore, the total number of bars included in a turning point analysis is 2*Nhood+1.

The above definitions are illustrated by the graph below.

Peak and Valley

On the graph the neighborhood parameter is Nhood=5. That means that it takes 5 bars to the left and 5 bars to the right of each bar to establish that the central bar is either a peak, a valley, or neither of them.

Due to the fact that Nhood bars are required to the right of a central bar, the most recent turning point on the chart is always located at least Nhood bars away from the most recent bar on the chart. In other words, no peaks or valleys can be established within Nhood bars of the most recent bar on the chart.

The peak and valley indicators are independent of one another, and in fact you can have two or more peaks in a row or two or more valleys in a row. Also note that it is possible for a peak and valley to occur on the same bar. This may occur because the peak uses a default value of high and the valley uses a default value of low. If you have three bars with roughly the same midpoint, and the middle bar has a large range and the surrounding bars have a smaller range, the peak and valley will occur on the middle bar.

Important note – Be careful when using Peak and Valley indicators in a trading system. The reason is that both Peak and Valley indicators require "neighborhood" bars before a peak or valley can occur. Therefore peaks and valleys may arrive in the past meaning that trading signals based on peaks and valleys can change in the past.


BarNumber

BarNumber(n)

Parameters:

N = the number of the bar

True on the bar numbered N, where the first bar in the chart is N=1. If N>= the number of bars in the chart, BarNumber returns true(1) for the last bar.


Find and Count Overview

The Find and Count indicators are designed to answer the questions traders ask about data such as what is the max value of the close in the time between a Bollinger Band High Breakout and a Bollinger Band Low Breakout or count the number of times the percent change in close was greater than x percent from February 1 to May 31.

The Find indicators can calculate values such as a min, max or point change, based on two conditions occurring in a data stream. (Both conditions must be true in order for a value to be calculated.) The Count indicators calculate a running total of the number of times a specified condition occurs in between a start condition and an end condition.

The FindSince and FindSinceInclusive indicators find similar values from the time Condition1 occurs until the end of the chart. The CountSince and CountSinceInclusive indicators begin their running total with the occurrence of Condition1, but Condition2 is replaced by the current bar.


Find and FindInclusive

Example chart for this topic: FindInclusive and FindSinceInclusive

Find(what, condition1, condition2, series, reset flag)

Parameters:
What - an integer number between 1 and 15 (default 1) The What values are codes for the type of calculation you want the Find indicator to perform. See the table below for the meaning of the codes. This value should not be optimized.
Condition 1 – a time series that must be a condition that defines when the search begins (default Close should not be used)
Condition 2 – a time series that must be a condition that defines when the search ends (default Close should not be used)
Series - a time series that is the basis for calculating the output (default Close)
Reset flag – an integer number 0 or 1 (default 1).

The bars on which Conditions 1 and 2 occur are not included in the results.

FindInclusive(what, condition1, condition2, series, reset flag)

The parameters are the same as the Find indicator except that the bars on which conditions 1 and 2 occur are included in the result.

The Find indicators can perform one of 15 different calculations on a time series. The calculations begin at Condition1 and end at Condition2. The specific calculation is determined by the value of the What parameter, which is described below.

Definitions for the What Parameter

What Value | Performs the calculation described below on the series between conditions 1 and 2*
1 | Counts the number of bars between conditions
2 | Point change
3 | Percent point change
4 | Maximum value
5 | Minimum value
6 | Sum
7 | Average
8 | Standard Deviation
9 | Variance
10 | Median
11 | Regression slope
12 | Number of advancing bars (a bar that is higher than the preceding bar)
13 | Number of declining bars (a bar that is lower than the preceding bar)
14 | Max advance
15 | Max decline

*See notes at the end of this topic for calculation details

Warning: If you are including the Find indicator in a Prediction or Trading Strategy that will be optimized, be sure to lock the optimization range for the What parameter; otherwise your Find indicator will not produce the correct output.

Condition 1 and 2 are time series consisting of zeros and ones. Zero means the condition is not present, one (or any other non-zero value) means that the condition is present. In addition to the conditions included in Advanced Indicator Set 3, you can use conditional indicators such as Rules, Boolean, Relational, Crossovers, etc. that are included as standard indicators in NeuroShell Trader.

Warning: Both conditions must be present before an output value can be produced. For example, if you're trying to find the max value of the RSI (the series) between the close crossing above a 200-day moving average (condition1) and the close crossing below a 200-day moving average (condition2) and the close never crosses below the 200-day moving average, the output of the find indicator will be missing from the chart because the end condition is not present.

Reset Flag
The reset flag parameter controls how the indicator calculates when there are several repeating occurrences of condition2 after an occurrence of condition1.

Reset flag = 1 (default) The Find indicator calculates on the same bar when condition2 takes place after an occurrence of condition1. The Find indicator recalculates at all repeating occurrences of condition2.

The indicator output is a horizontal line that begins on the same bar where condition2 occurs (exclusive of that bar) and continues up until the next bar where condition2 occurs in the next condition1/condition2 pair (exclusive of that bar). If the reset flag is set to 1, it effectively tells the indicator to “forget” about the condition1 value before the occurrence of the first condition2, and so on.

Reset flag = 0 The Find indicator calculates once on the same bar when the first occurrence of condition2 is found after an occurrence of condition1. The Find indicator does not recalculate if condition2 repeats.

Note: The Find value does not change if conditions 1 and 2 occur on consecutive bars if you are using the Find indicator, but the indicator value will change if you are using FindInclusive.

Note2: The Find indicators use close as a default parameter value when a condition is required. Close is a non-zero value so it is always a true condition. However, you should not pay attention to these indicator results until you change the close to a condition that may be either true or false.

Calculations Details

Point Change = The value of the series at condition2 – the value of the series at condition1

Percent point change = 100 * (the value of the series at condition2 – the value of the series at condition1) / the value of the series at condition1. If the value of the series at condition1 = 0, then Percent point change = not calculated, i.e., a missing bar.

Standard deviation = the square root of the variance.

Variance = Variance is a statistical measure of Series volatility.

Variance = (Syy-Sy*Sy/cnt)/(cnt-1),

Where:

cnt = number of bars involved,

Sy = sum of Series values,

Syy = sum of squared Series values.

If cnt < 2, then Slope = not calculated, i.e., a missing bar.

Median = A value of the series at the middle bar between conditions. If there are an even number of bars between condition, then it’s an average of the two middle bars.

Regression slope = The slope of the linear time regression line drawn through Series data points between conditions.

Slope = (cnt*Sxy-Sx*Sy)/denominator,

Where:

Denominator = cnt*Sxx-Sx*Sx,

cnt = number of bars,

Sx = sum of bar numbers,

Sxx = sum of squared bar numbers,

Sy = sum of Series values,

Sxy = sum of bar number times Series value.

If denominator = 0, then Slope = not calculated, i.e., a missing bar.

Max Advance = An advance represents a series of several (at least two) advancing bars. The value of an advance = current high so far - previous low so far. Maximum advance is the highest advance found between conditions.

Max Decline = A decline is a series of several (at least two) declining bars. The value of a decline = current low so far - previous high. Maximum decline is the largest by absolute value decline found between conditions. Max decline displays as a negative number.


FindSince and FindSinceInclusive

Example chart for this topic: FindInclusive and FindSinceInclusive

FindSince(what, condition, series)
FindSinceInclusive(what, condition, series)

These indicators are the same as the Find and FindInclusive indicators, but Condition 2 is replaced by the current bar. For example, you can use these indicators to find the average value of the close when the RSI < 30, up until the current bar.

In addition to the conditions included in Advanced Indicator Set 3, you can use conditional indicators such as Rules, Boolean, Relational, Crossovers, etc. that are included as standard indicators in NeuroShell Trader.


Count and CountInclusive

Example chart for this topic: CountInclusive and CountSinceInclusive.cht

Count(condition1, condition2, condition series, reset flag)

Parameters:
Condition 1 – the beginning of the counting period that is defined by a time series that must be a condition (default Close should not be used)
Condition 2 – the ending of the counting period that is defined by a time series that must be a condition (default Close should not be used)
Condition series - the condition that is being counted, i.e., all bars on which the condition series is not zero are counted
Reset flag – an integer number 0 or 1 (default 1).

CountInclusive(condition1, condition2, condition series, reset flag)

Same as Count except that the bars on which conditions 1 and 2 occur are included in the count if they are true.

Counts how many times the condition series is a non-zero value (true) between the last occurrence of condition2 and the immediately preceding occurrence of condition1, exclusive of the bars on which conditions 1 and 2 occur.

Reset Flag
The reset flag parameter controls how the indicator calculates when there are several repeating occurrences of condition2 after an occurrence of condition 1.

Reset flag = 1 (default) The Count indicator calculates on the same bar when condition2 takes place after an occurrence of condition1. The Count indicator recalculates at all repeating occurrences of condition2.

The indicator output is a horizontal line that begins on the same bar where condition2 occurs (exclusive of that bar) and continues up until the next bar where condition2 occurs in the next condition1/condition2 pair (exclusive of that bar). If the reset flag is set to 1, it effectively tells the indicator to “forget” about the condition1 value before the occurrence of the first condition2, and so on.

Reset flag = 0 The Count indicator calculates once on the same bar when the first occurrence of condition2 is found after an occurrence of condition1. The Count indicator does not recalculate if condition2 repeats.

Note: The Count and CountInclusive indicators use close as a default parameter value when a condition is required. Close is a non-zero value so it is always a true condition. However, you should not pay attention to these indicator results until you change the close to a condition that may be either true or false.


CountSince and CountSinceInclusive

Example chart for this topic: CountInclusive and CountSinceInclusive.cht

CountSince(condition, condition series)
CountSinceInclusive(condition, condition series)

These indicators are the same as Count and CountInclusive indicators, but Condition2 is replaced by the current bar. For example, you can use these indicators to Count the number of times the RSI < 30, up until the current bar (the regular Count indicator would require that you specify a second condition).

In addition to the conditions included in Advanced Indicator Set 3, you can use conditional indicators such as Rules, Boolean, Relational, Crossovers, etc. that are included as standard indicators in NeuroShell Trader.


Remember Indicators

The Remember indicator outputs a time series value based on a condition you specify. For example, the Remember indicator would output the value of the high (the time series) when the 9 period moving average crosses above the 13 period moving average (the condition). The output value would remain the same until the condition is met once again, at which time the current high would become the output. The Remember2, Remember3, and Remember4 indicators output a different value depending upon which of several conditions is activated. Because the Remember indicators change value based on conditions, they may be used in the same way a programmer would use a variable as an argument to an indicator, Prediction or Trading Strategy. The conditions are true/false indicators or any indicator that produces a value of either 0 or a non-zero value.


Remember 1 Through 4

Chart for this topic: Remember 2 SPY.cht

Remember(series, condition)

Parameters:

Series - the time series value that is the result if the condition is met

Condition - the condition series that determines when the series value changes (default Close should not be used)

Returns the values of series from the last time that the condition was true (non-zero).

For example, you can use the Remember indicator to recall the value of the close (the series) when the RSI < 30 (the condition). Note that the indicator will continue to report the value of the close the last time RSI < 30, even when the RSI goes above 30.

You may select the conditional true/false indicators from any of the conditional indicators that came with the NeuroShell Trader such as the relational, Boolean, day and date flags, crossovers, etc., as well as the conditional indicators included in Advanced Indicator Set 3.

Multiple Series and Conditions

Remember indicators 2 through 4 return the value of the associated series every time a condition changes.

For example, if you have set up the following conditions for the Remember 2 indicator:

Remember2

Series 1 = Low

Condition 1 = RSI < 30

Series 2 = High

Condition 2 = RSI > 60

outputs the value of the low when the RSI is less than 30 or the high when the RSI is greater than 60. If either condition is met a second time, the output value changes according to which condition is met.

The Series/Condition pairs may occur in any order and the output value will be the series that is associated with the condition that is met. If more than one condition is met on the same bar, the output will be the one with the lowest Series number.

When using Remember 2 through Remember 4, the Series/Condition pairs can use different types of conditions. For example, one may be RSI < 30 and the other condition may be a time or a date. This flexibility allows the Remember indicators to be the equivalent of a programmer's use of a variable in NeuroShell Trader, and they may be used as arguments to other indicators, Trading Strategies, or Predictions.

Note: Several of the indicators in this set use close as a default parameter value when a condition is required. Close is a non-zero value so it is always a true condition. However, you should not pay attention to these indicator results until you change the close to a condition that may be either true or false.


Toggle Indicators

Toggle indicators can signify the presence or absence of conditions you specify. The Toggle indicators may also be used to remove certain data when training a neural net, e.g., only train a net on bars between 1 p.m. and 4 p.m. The Toggle indicators output 0, 1, or a missing value based on the settings for the What parameter.


Toggle and ToggleInclusive

Chart for this topic: Toggle.cht

Toggle(what, condition1, condition2)

ToggleInclusive(what, condition1, condition2)

What - an integer number between 1 and 4 (default 1).

Condition 1 – a time series that must be a condition that defines when the search begins (default Close should not be used)

Condition 2 – a time series that must be a condition that defines when the search ends (default Close should not be used)

What:

1 = between the conditions, it returns 1 and elsewhere it returns 0
2 = between the conditions, it returns 0 and elsewhere it returns 1
3 = between the conditions, it returns 1 and elsewhere it returns N/A
4 = between the conditions, it returns N/A and elsewhere it returns 1

Toggle excludes bars where conditions are true. ToggleInclusive includes bars where conditions are true. These indicators tell you whether or not you're in a condition.

The N/A output means that the value on the chart is actually missing, i.e., not computed. You may rightly wonder why we would produce an output which would be non-existent on some segments of the chart. The reason is that missing values cause indicators and neural network inputs and outputs to not be computed on such bars. For example, a moving average is obviously not computed on any bars where the time series being averaged is not there. The Prediction Wizard uses average values as the input when that input is not there. Most importantly, the Prediction Wizard actually ignores all bars during training when the output is not there. This means that you can exclude segments on the chart from the training set just by multiplying your original output by a Toggle containing a What=3 or a What=4 condition. The indicator created by this multiplication (call it the adjusted output) will be missing when the Toggle is missing, because "anything x missing = missing". The Prediction Wizard should then be set to use the adjusted output instead of the original output. This means that the neural network will not be trained on any bars between the two conditions of your Toggle Indicator.

You may select the conditional true/false indicators from any of the indicators that came with the NeuroShell Trader as well as the conditional indicators included in Advanced Indicator Set 3.

Note: This indicator uses close as a default parameter value when a condition is required. Close is a non-zero value so it is always a true condition. However, you should not pay attention to the indicator results until you change the close to a real condition such as the RSI < 30 or a crossover.

Toggle Moon Distance

In this example, the Toggle indicator turns on when the moon distance is in the middle range, and turns off when the moon distance is outside of the middle range.


ToggleSince and ToggleSinceInclusive

ToggleSince(what, condition)

ToggleSinceInclusive(what, condition)

Parameters:

What - an integer number between 1 and 4 (default 1).

Condition – a time series that must be a condition that defines when the search begins (default Close should not be used)

What:

1 = between the conditions, it returns 1 and elsewhere it returns 0
2 = between the conditions, it returns 0 and elsewhere it returns 1
3 = between the conditions, it returns 1 and elsewhere it returns N/A
4 = between the conditions, it returns N/A and elsewhere it returns 1

ToggleSince excludes the bar where condition is true.

ToggleInclusive includes the bar where condition is true.

These indicators are the same as the Toggle and ToggleInclusive indicators, but Condition 2 is replaced by the current bar. These indicators tell you when a condition began.

The N/A (missing value) is a largely undocumented feature that causes the indicator to be ignored (missing). You could use options 3 and 4 above to exclude rows for training a neural net.

Note: This indicator uses close as a default parameter value when a condition is required. Close is a non-zero value so it is always a true condition. However, you should not pay attention to the indicator results until you change the close to a real condition such as the RSI < 30 or a crossover.


Pair Indicators

Market neutral pair trading systems require that you buy one stock (or other instrument) and sell one stock on the same bar. The PairEntry and PairExit indicators enable you to build a pair trading system in NeuroShell Trader with stocks that follow one another in a stable fashion and cross prices.

If you have two stocks that follow one another but don't cross prices because the stocks are at different price levels, the ProxyEntry and ProxyExit indicators draw on the NeuroShell Trader's neural nets to create a cointegrated pair, which means that one stock is "computed" as a linear combination of the other. This technique uses one stock to predict the price of another and then uses the spread between the actual and predicted prices to pair trade the predicted stock and the one used to make the prediction. You may want to experiment with this proxy method even when the stock or other instrument prices are in the same range.


Pair Trading Implementation in NeuroShell Trader

Chart for this topic: Agilent and Analog Devices Pairs

Overview

There are many ways that pairs of instruments (usually equities) can be “pair traded” in a market neutral fashion. The purpose of this documentation is not to explain the various theories and their validity, but to demonstrate the use of the pair indicators in NeuroShell Trader.

How to build Trading Strategies with the pair indicators

The pair indicators will allow you to build a Trading Strategy (with a protective stop) that goes long on one stock at the same time it goes short on another stock in the same chart. Stocks will be used in this example, but other instruments may be pair traded.

You begin by picking two stocks with prices that closely follow one another over time, and in fact cross one another regularly. In most cases, the comparisons are based on daily data. Agilent (A) and Analog Devices (ADI) are a good illustration of a tradeable pair.

Once you’ve identified the stocks, the question becomes how to make these market neutral opposite trades simultaneously in NeuroShell Trader when both stocks are in the same chart. The key is to let NeuroShell Trader distinguish between the two chart pages, and know which one it is processing, so it can determine whether to go long or short. The pair indicators include several key parameters that keep track of which stock is being processed. The PairEntry and PairExit indicators along with their proxy versions are a unique class of indicators which generate signals that cause the NeuroShell Trader to go long on one stock and simultaneously short on another stock.

If you’re using the Pair indicators, your NeuroShell Trader chart should include a chart page for each stock in the pair. In addition, you need to insert the close of both stocks as other instrument data using the NeuroShell Trader’s Insert Menu. This technique allows both close values to be included in the calculations on each chart page.

Once the chart is set up, you begin building a market neutral system by inserting a Trading Strategy into the chart. By using the Pair indicators, this single Trading Strategy is sufficient to create the opposite buy/sell signals on both chart pages.

Long Entry condition:

Relational indicator A = B

A = PairEntry indicator from Advanced Indicator Set 3.

B = 1 A value of 1 should be used on a Long Entry and a value of -1 should be used on the Short Entry. These values are used to keep track of the two stocks in the pair trade and should not be optimized.

PairEntry

Close = Close (Keep the default value. It is used to keep track of the stocks)

Price1 = the close of the first stock in the pairs trade (use the other instrument data version of the close)

Price2 = the close of the second stock in the pairs trade (use the other instrument data version)

Spread = the amount of the spread between the two stock prices which must occur before a trade is entered (this may be optimized).

Note: It doesn’t matter which stock is designated as Price1 and which stock is designated as Price2, but it is important that the same stocks be listed in the same order on all of the Long Entry, Long Exit, Short Entry and Short Exit conditions. Listing the stocks in alphabetical order may help you remember the order.

The PairEntry indicator compares the value of the close, which is different for each chart page, to the value of Price1 and Price2 and determines which stock goes long and which stock goes short. The values of Price1 and Price2 are also used to compute the spread between stocks in order to determine an entry point for the trade.

Long Exit condition:

PairExit

Close = Close (keep the default value)

Price1 = the close of the first stock (other instrument data version, same order as pair entry)

Price2 = the close of the second stock (other instrument data version, same order as pair entry)

Spread = the value of the spread between the stock prices where you want to exit a trade (may be optimized)

StopSpread = the “emergency” exit for the trade, equivalent to a stop. This will be a wider spread than the entry spread in the PairEntry. If the spread widens, the stop will occur.

Both the PairEntry and PairExit conditions cannot be combined with other rules or trailing or protective stops. The PairExit indicator includes the StopSpread parameter that can be set as an emergency exit for both stocks. If the StopSpread exit occurs, the trade will not be entered again until the spread falls below the entry spread and then crosses above the entry spread.

Short Entry and Short Exit

Pair trading requires that you enter short entry and exit conditions in addition to the long entry and exits in order to keep the trades in balance. You can copy the PairEntry and PairExit conditions from the Long side and you only need to make one modification. On the Short Entry tab in the A = B rule, change the value of B to -1 (this value should not be optimized). The Short Exit tab uses the same PairExit indicator and values as the rule in the Long Exit tab.

Linking Entry and Exit Spreads

The NeuroShell Trader can optimize the spread values for you in order to find the best entry and exit points. However, in order for the long and short entries to work in tandem, the spreads need to be the same. The NeuroShell Trader makes it easy to link these values. First set up all of the trading rules as described above. Next go to Trading Strategy parameters, Rules tab, and select parameter search. Return to the Long Entry tab and click on the + sign in front of the rule.

Select the spread search space parameter, and then click on the Modify Parameter button.

Choose “Associate with the following parameter optimization link” button and click on the Add new link button. Enter a name such as “Entry Spread” and enter an appropriate range for the stock pair. (More on selecting an appropriate range later.)

Next, you need to make the same selection on the Short Entry tab. When it comes to choosing a name, you can select Entry Spread (click on the down arrow if this name is not visible).

On the Long Exit and Short Exit tabs, you need to add a new link for the Exit Spread and another for the Stop Spread (the emergency exit if the spread trade starts going against you) in the PairExit indicators.

Selecting Spread Ranges

The default values for the spread parameters should be changed based on the specific pairs being traded. Sometimes you can "eyeball" the spreads between the two instruments and set the ranges appropriately.

Suggested Settings:

Highest entry spread < the lowest stop spread

Highest exit spread < lowest entry spread

Another approach is to calculate the absolute value of the differences between the two instruments and use this value plus and minus a few price points to set the entry spread ranges, followed by setting the Exit Spread and Stop Spread ranges according to the rules above. (Both the absolute value and subtraction indicators are in the NeuroShell Trader’s Arithmetic category of indicators.) Experience has shown that setting spread values appropriately can greatly affect a model’s success.

Setting Trading Strategy Parameters

Successful pair trading requires specific settings for some of the Trading Strategy parameters. These settings are described below:

Rules tab: select Parameter search to allow the genetic algorithm to find the best spreads for the entry and exit rules.

Trading tab: select Buy a fixed amount of shares and enter the dollar (or other currency) amount for each one of the pair. For example, if you enter $5000, you must have $10,000 in your account in order to pay for both sides of the pair trade.

Fixed amount of shares

Dates and Costs tabs: set according to your preferences.

Optimization tab: it is very important that you select the button to optimize across all chart pages in order for your pair trading system to buy and sell both stocks in tandem. The optimization objective is a matter of preference, but you might want to try maximize net profit rather than maximize return on account * equity curve correlation. The balanced nature of pair trading should account for an overall profitable equity curve.

Optimize across all chart pages

When optimization is finished, click Finished to display the buy/sell signals on the chart. You'll note that when you see a buy signal on one chart page, you should see a corresponding sell signal on the other chart page.


PairEntry

PairEntry(close, price1, price2, spread)

Parameters

Close = Close (Keep the default value. It is used to keep track of the stocks)

Price1 = the close of the first stock in the pairs trade (use the other instrument data version of the close)

Price2 = the close of the second stock in the pairs trade (use the other instrument data version)

Spread = the amount of the spread between the two stock prices which must occur before a trade is entered (this may be optimized).

It doesn’t matter which stock is designated as Price1 and which stock is designated as Price2, but it is important that the same stocks be listed in the same order on all of the Long Entry, Long Exit, Short Entry and Short Exit conditions. Listing the stocks in alphabetical order may help you remember the order.

The PairEntry indicator compares the value of the close, which is different for each chart page, to the value of Price1 and Price2 and determines which stock goes long and which stock goes short. The values of Price1 and Price2 are also used to compute the spread between stocks in order to determine an entry point for the trade.

Both the PairEntry and PairExit conditions may not be combined with other rules or trailing or protective stops.

For more information on creating a Pair Trading System, refer to Pair Trading Implementation in NeuroShell Trader.


PairExit

PairExit(close, price1, price2, spread, stopspread)

Parameters

Close = Close (keep the default value)

Price1 = the close of the first stock (other instrument data version, same order as pair entry)

Price2 = the close of the second stock (other instrument data version, same order as pair entry)

Spread = the value of the spread between the stock prices where you want to exit a trade (may be optimized)

StopSpread = the “emergency” exit for the trade, equivalent to a stop. This will be a wider spread than the entry spread in the PairEntry. If the spread widens, the stop will occur.

Both the PairEntry and PairExit conditions may not be combined with other rules or trailing or protective stops. The PairExit indicator includes the StopSpread parameter that can be set as an emergency exit for both stocks. If the StopSpread exit occurs, the trade will not be entered again until the spread falls below the entry spread and then crosses above the entry spread.

For more information on creating a Pair Trading System, refer to Pair Trading Implementation in NeuroShell Trader.


Pair Proxy Trading Implementation in NeuroShell Trader

Chart for this topic: Cisco and Verizon Proxy.cht

The ProxyEntry and ProxyExit indicators allow you to expand the concept of pairs trading to instruments that are in different price range and therefore would not normally cross. The proxy indicators draw on the NeuroShell Trader's neural nets to create a cointegrated pair, which means that one stock is "computed" as a linear combination of the other, such that the stocks follow one another in a stable fashion and cross prices. You may want to experiment with this method even when the stock or other instrument prices are in the same range.

Stocks will be used in this example, but other instruments may be pair traded.

Like the PairEntry and PairExit indicators, the ProxyEntry and ProxyExit indicators generate simultaneous buy/sell signals for two different chart pages in the same chart. The nets create proxy pairs by using one stock to predict the price of another and using the spread between the actual and predicted prices to pair trade the predicted stock and the one used as an input to the net to make the prediction.

Create a Prediction

For example, if you have stock A with a historical price around $20 a share and stock B around $30 a share, their prices are not likely to cross. You can still trade these two stocks as a pair by using the price of Stock A to predict the price of Stock B. If there are other stocks that might be used to predict Stock B, you can even let the neural net figure out which single stock should be used to predict Stock B.

You begin by setting up a chart for the stock that you are trying to predict. In this example we'll predict CISCO. (It doesn't matter which stock is predicted and which one is the input, as long as they follow one another.) Then you insert as other instrument data the close of the stocks you want to use as inputs to the prediction: in our example, Agilent Tech, Juniper, and Verizon. Next you create a prediction with the close of these other stocks as inputs to the net. You set up the Training Criteria as follows:

1. Output tab - for the predicted value, select Other data/Indicators and then choose the close of the stock you're predicting. Set it to predict 0 trading days into the future.

2. Inputs tab - choose Input Selection. You can start with several stocks and let the net decide which is the best one to include in the pair, as long as the net has to choose only one input (see 5 below).

3. Positions tab - select No Trading Positions.

4. Training tab - for training objective, choose Minimize Mean squared Error, and 0 hidden neurons to create a linear model.

5. Optimization tab - set the maximum number of inputs to 1. This forces the net to select only one stock as an input to the net.

Once you've set up the Training Criteria, you can train the prediction until it has a low mean squared error. You can examine the prediction results and see which one of the inputs (stocks) the net used to make the prediction.

Prediction input selection

The neural network picked Verizon as the stock that best predicted the price of Cisco.

When training is complete, you can use the spread of the predicted price of Cisco with the actual price of Cisco to generate pair trading signals. The ProxyEntry and ProxyExit indicators will generate simultaneous buy/sell signals for Cisco and Verizon.

Caution - to assure a good hedge, make sure that the prediction is correlated (moves in the same direction) as the input (Verizon in this case). Sometimes the best fit prediction is an inverse of the input, which destroys the hedge.

Neural Net Proxy Pair

This chart shows that the Cisco and Verizon do not normally cross prices. However, using Verizon to predict the price of Cisco produces a graph that crosses the actual Cisco close with the predicted Cisco close.

Create a Trading Strategy

To begin building the Trading Strategy, you need to add a chart page for Verizon, the winning input to the neural net.

The question then becomes how to make market neutral opposite trades in NeuroShell when both stocks are in the same chart. Usually NeuroShell creates models for each stock that trade independently from one another. The key is to let NeuroShell distinguish between the two chart pages, and know which one it is processing, so it can determine whether to go long or short. The proxy pair indicators keep track of which stock is being processed. The ProxyEntry and ProxyExit indicators are several of a unique class of indicators that produce trading signals that cause the NeuroShell Trader to go long on one stock and simultaneously short on another stock within the same chart. You insert the proxy indicators into a Trading Strategy as follows:

Long Entry conditions:

Relational indicator A = B

A = ProxyEntry indicator from Advanced Indicator Set 3.

B = 1 A value of 1 should be used on a Long Entry and a value of -1 should be used on the Short Entry. These values are used to keep track of the two stocks in the pair trade and should not be optimized.

ProxyEntry conditions for the example

ProxyEntry

Close = Close (Keep the default value. It is used to keep track of the stocks)

Price1 = the close of the first stock in the pairs trade (use the other instrument data version of the close)

Price2 = the close of the second stock in the pairs trade (use the other instrument data version)

Proxy1 = the actual value of the close of the predicted stock (Note: this is not really a proxy in this case)

Proxy2 = the predicted value of the close. (Note: since we are predicting 0 bars ahead, it doesn't really matter whether you use the prediction or the prediction signal.)

Spread = the amount of spread between proxy1 and proxy2 at which must occur before a trade is entered (this may be optimized)

Note: It doesn’t matter which stock is designated as Price1 and which stock is designated as Price2, but it is important that the same stocks be listed in the same order on all of the Long Entry, Long Exit, Short Entry and Short Exit conditions. The same applies to Proxy1 and Proxy2. Listing the stocks in alphabetical order may help you remember the order.

When building the Trading Strategy, the ProxyEntry indicator compares the value of the close, which is different for each chart page, to the value of Price1 and Price2 and determines which stock goes long and which stock goes short. The values of Proxy1 and Proxy2 are used to compute the spread between actual and predicted values from the neural net in order to determine an entry point for the trade.

Long Exit conditions:

ProxyExit conditions for the example

ProxyExit

Close = Close (keep the default value)

Proxy1 = the actual close of the predicted stock

Proxy2 = the predicted value of the stock

Spread = the amount of the spread between the actual and predicted value of the stock where you want to exit a trade (may be optimized)

StopSpread = the “emergency” exit for the trade, equivalent to a stop. This will be a wider spread than the entry spread in the ProxyEntry. If the spread widens, the stop will occur.

Both the ProxyrEntry and ProxyExit conditions cannot be combined with other rules or trailing or protective stops. The ProxyExit indicator includes the StopSpread parameter that can be set as an emergency exit for both stocks. If the StopSpread exit occurs, the trade will not be entered again until the spread falls below the entry spread and then crosses above the entry spread.

Short Entry and Short Exit

Pair trading requires that you enter short entry and exit conditions in addition to the long entry and exits in order to keep the trades in balance. You can copy the ProxyEntry and ProxyExit conditions from the Long side and you only need to make one modification. On the Short Entry tab in the A = B rule, change the value of B to -1 (this value should not be optimized). The Short Exit tab uses the same ProxyExit indicator and settings as the rule in the Long Exit tab.

Linking Entry and Exit Spreads

The NeuroShell Trader can optimize the spread values for you in order to find the best entry and exit points. However, in order for the long and short entries to work in tandem, the spreads need to be the same. The NeuroShell Trader makes it easy to link these values. First set up all of the trading rules as described above. Next go to Trading Strategy parameters, Rules tab, and select parameter search.

Return to the Long Entry tab and click on the + sign in front of the rule.

Proxy Long Entry Rule Plus Sign

Select the spread search space parameter, and then click on the Modify Parameter button.

Choose “Associate with the following parameter optimization link” button and click on the Add new link button. Enter a name such as “Entry Spread” and enter an appropriate range for the stock pair. (More on selecting an appropriate range later.)

Proxy Entry Spread

Next, you need to make the same association on the Short Entry tab. When it comes to choosing a name, select Entry Spread (click on the down arrow if this name is not visible).

On the Long Exit and Short Exit tabs, you need to add a new link for the Exit Spread and another for the Stop Spread (the emergency exit if the spread trade starts going against you) in the ProxyExit indicators.

Proxy Exit Spread

Selecting Spread Ranges

The default values for the spread parameters should be changed based on the specific pairs being traded. Sometimes you can "eyeball" the spreads between the predicted and actual values of the close and set the ranges appropriately.

Suggested Settings:

Highest entry spread < the lowest stop spread

Highest exit spread < lowest entry spread

Another approach is to calculate the absolute value of the differences between the predicted value and actual value of the close and use this value plus and minus a few price points to set the entry spread ranges, followed by setting the Exit Spread and Stop Spread ranges according to the rules above. (Both the absolute value and subtraction indicators are in the NeuroShell Trader’s Arithmetic category of indicators.) Experience has shown that setting spread values appropriately can greatly effect a model’s success.

Setting Trading Strategy Parameters

Successful trading with proxy pairs requires specific settings for some of the Trading Strategy parameters. These settings are described below:

Rules tab: select Parameter search to allow the genetic algorithm to find the best spreads for the entry and exit rules.

Trading tab: select Buy a fixed amount of shares and enter the dollar (or other currency) amount for each one of the pair. For example, if you enter $5000, you must have $10,000 in your account in order to pay for both sides of a pair trade.

Fixed amount of shares

Dates and Costs tabs: set according to your preferences.

Optimization tab: it is very important that you select the button to optimize across all chart pages in order for your pair trading system to buy and sell both stocks in tandem. The optimization objective is a matter of preference, but you might want to try maximize net profit rather than maximize return on account * equity curve correlation. The balanced nature of pair trading should account for an overall profitable equity curve.

Optimize across all chart pages

When optimization is finished, click Finished to display the buy/sell signals on the chart. You'll note that when you see a buy signal on one chart page, you should see a corresponding sell signal on the other chart page.


ProxyEntry

ProxyEntry(close, price1, price2, proxy1, proxy2, spread)

Parameters:

close - closing price

price1 - closing price of the first instrument in the pair, entered as other instrument data

price2 - closing price of the second instrument in the pair, entered as other instrument data

proxy1 - actual closing price of the instrument that is being predicted

proxy2 - predicted closing price

spread - the amount of spread between proxy1 and proxy2 at which must occur before a trade is entered (this may be optimized)

It doesn’t matter which stock is designated as Price1 and which stock is designated as Price2, but it is important that the same stocks be listed in the same order on all of the Long Entry, Long Exit, Short Entry and Short Exit conditions. The same applies to Proxy1 and Proxy2. Listing the stocks in alphabetical order may help you remember the order.

Both the ProxyEntry and ProxyExit conditions may not be combined with other rules or trailing or protective stops.

For more information on creating a proxy trading system, refer to Pair Proxy Trading Implementation in NeuroShell Trader.


ProxyExit

ProxyExit(close, proxy1, proxy2, spread, stopspread)

Parameters

Close = Close (keep the default value)

Proxy1 = the actual close of the predicted stock

Proxy2 = the predicted value of the stock

Spread = the amount of the spread between the actual and predicted value of the stock where you want to exit a trade (may be optimized)

StopSpread = the “emergency” exit for the trade, equivalent to a stop. This will be a wider spread than the entry spread in the ProxyEntry. If the spread widens, the stop will occur.

It doesn’t matter which stock is designated as Proxy1 and which stock is designated as Proxy2, but it is important that the same stocks be listed in the same order on all of the Long Entry, Long Exit, Short Entry and Short Exit conditions. Listing the stocks in alphabetical order may help you remember the order.

Both the ProxyEntry and ProxyExit conditions may not be combined with other rules or trailing or protective stops. The ProxyExit indicator includes the StopSpread parameter that can be set as an emergency exit for both stocks. If the StopSpread exit occurs, the trade will not be entered again until the spread falls below the entry spread and then crosses above the entry spread.

For more information on creating a proxy trading system, refer to Pair Proxy Trading Implementation in NeuroShell Trader.


Sun and Moon Indicators

The Equation of Time indicator returns the difference between solar time (as measured by a sundial) and mean clock time. The MoonDistance indicator returns the distance between the centers of Earth and Moon expressed in kilometers.


EquationOfTime

Chart for this topic: Equation of Time and Moon Distance.cht

EquationOfTime (Date)

Parameters:

Date Variable = Date (cannot be changed)

The Equation of Time indicator returns the difference between solar time (as measured by a sundial) and mean clock time. It assumes that measurements are taken in the middle of a time zone and that there is no daylight savings time in effect. The solar and clock times are different due to combination of two factors:

(a) Obliquity of the ecliptic - Earth’s axis of rotation is tilted at about 23 degrees to the perpendicular to the plane of the Earth’s orbit around the Sun, and
(b) Eccentricity of Earth’s orbit - Earth’s orbit around the Sun is not a circle but rather an ellipse.

Maximum disparity between solar and clock time happens in early November when apparent solar time is ahead of the mean clock time by more than 16 minutes. In mid-February solar time is actually behind clock time by about 14 minutes.

The indicator output is in minutes.

See References for more information.


MoonDistance

Chart for this topic: Equation of Time and Moon Distance.cht

MoonDist(Date)

Parameters:

Date Variable = Date (cannot be changed)

The Moon Distance indicator returns the distance between the centers of Earth and Moon expressed in kilometers. Many people believe that the moon has an influence on the earth.

You might also consult the Moon's First Quarter, Last Quarter, and Illuminated Fraction indicators that are included in Advanced Indicator Set 1. For more information, see the References.


Example Charts

The example charts are installed in the default directory of c:\\NeuroShell Trader 5\AIS3 Examples.

The Agilent and Analog Devices Pairs chart uses the PairEntry and PairExit indicators to build a hedging Trading Strategy based on the crossover of the Agilent and Analog Devices close values, which are in the same range and follow one another.

The Cisco and Verizon Proxy chart creates a pairs Trading Strategy for two stocks not in the same price range by use of a neural network prediction.

The Conditional Indicators chart uses the FindInclusive indicator to calculate the standard deviation between the Peak and Valley conditions in Apple.

The CountInclusive and CountSinceInclusive chart uses a CountInclusive indicator to find the number of times the RSI was greater than 50 between a pair of Peak and Valley indicators (the two conditions). The indicator uses a reset value of 0, which means that it recalculates every time a new valley (condition 2) is found. The CountSinceInclusive indicator counts the number of times the RSI was greater than 50 every time after a new peak is found.

The FindInclusive and Find SinceInclusive chart finds the Max value of the high between Monday (condition 1) and Friday (condition 2). The inclusive version of the Find indicator is used to allow the Max value to take into consideration the highs from the Monday and Friday bars (the condition boundaries). The two instances of the FindSinceInclusive indicator find the Max value of the high for both Monday and Friday. Comparing these indicators to the FindInclusive indicator allows you to determine whether the Max value occurs during the middle of the week.

The Remember 2 Spy chart shows how the value of the indicator changes based on two different conditions. The Remember value recalculates any time either condition is found, without regard to order of occurrence. The Remember indicators may be used as variables whey they are included in indicators, Predictions or Trading Strategies.

The Toggle chart shows how the ToggleInclusive indicator is turned off and on based on changes in the Moon Distance indicator. The ToggleSince indicator turns on the first time the condition is met (Moon Distance > 450000 kilometers) and stays on.

The FollowedBy chart shows how these indicators may be used for pair trading by marking when one stock crosses above another one followed by a cross below for the same pair. The FollowedByWithin versions let you specify a max number of bars for the conditions to follow one another. The FollowedByWithin indicator says the conditions must follow one another within 10 bars while the inclusive version only allows 5 bars.

The Equation of Time and Moon Distance Energy chart shows how those indicators may be used as inputs to a neural network. They are particularly useful for predicting cyclic stocks, such as the energy stocks included in the chart.


References

 Top Previous

Equation of Time:

For more information, visit http://en.wikipedia.org/wiki/Equation_of_time

Moon Distance

Book: "Astronomical Algorithms" by Jean Meeus, Second Edition, Chapter 47, pp.337-343.

Other moon indicators are included in NeuroShell Trader Advanced Indicator Set 1 at www.neuroshell.com, Ward Systems Group Add-ons.