This TSRefSigEval analysis technique evaluates one's own real-world surrogate trading signals against the backdrop of an entity's referential tradescape. It is assumed that one's signals are derived from a surrogate reference instead of taken directly from the traded entity. In general, one has first explored surrogate signaling using referential tradescapes, and having found a potential surrogate, is now interested in testing one’s real-world trading signals using this reference.
The real-world trading signals will be plotted atop the referential tradescape at their respective time horizon and lag fractions. A brief summary of the signal analysis for a trading system is shown when moving the mouse over the special point representing that particular trading signal. The full signal analysis, including the equity curve, is shown when clicking on the point representing that particular trading signal.
This analysis technique requires one to add his or her trading signals to the TSRefSigEval code. You must have some experience coding EasyLanguage analysis techniques and functions.
Unfortunately, TradeStation function architecture computes all series functions contained anywhere within a function regardless of whether the program logic actually calls those functions. That makes it impractical and computationally very expensive to store all signal functions in a single generic user-defined signal function. As such, it is necessary to have separate TSRefSigEval variants for each signal set.
For each signal specific version of TSRefSigEval, you must assign the signal count to Signal, and put the various signals in Signal, Signal, up to a maximum of Signal. The original TSRefSigEval contains sample signals. It is recommended that this original TSRefSigEval be kept unchanged, and that you use the Save As… option to create additional analysis techniques, each containing the set of signals you would typically test together. For example, you could create MyRefSigEval1 for evaluating signal set 1, MyRefSigEval2 for evaluating signal set 2, and so on.
Sample functions are included for MA crossover and breakout signals. You may wish to use these functions
as templates. Basically, the signal for a bar must be set as follows:
+1 for in market long
-1 for in market short
0 for out-of-market
Since a tradescape and signal analysis is either long or short, but not both, only one side of the signal is used:
For a long tradescape, the +1 signal is in a position (long), otherwise out of market
For a short tradescape, the -1 signal is in a position (short), otherwise out of market
Since the signals are encoded and stored with the data on each bar, only the current bar's signal is computed on each call.
String SignalTitle ("TSRefSigEval")
This is the signal title to be added to the Referential Tradescape plot that describes the signal set being evaluated.
int SignalEntity (1)
This input specifies the specific data stream to be used for generating both the tradescape and real world trading signals. The value 1 uses data1, 2 uses data2, and so on. This must be the surrogate that will be used for the signaling, in general an overall market or sector index or ETF. SignalEntity cannot be zero. The signal set is generated for the specified reference.
int TradedEntity (2)
This input specifies the one specific data stream to be traded and analyzed. The value 1 uses data1, 2 uses data 2, and so on. TradedEntity cannot be 0. Each of the signals in the signal set is generated using the surrogate specified in SignalEntity. The referential tradescape plot will include these signals. They will appear as points colored by the same z-variable of the referential tradescape, and they will be positioned at the time horizon and lag fraction measured for each. One can thus compare the real-world surrogate signal with its ideal counterpart, the state of the referential tradescape at this same information content and lag.
double Asymmetry (1.0)
The asymmetry is the ratio of the information content used for the upside transitions (turns to the upside) relative to the downside transitions (turns to the downside). A quick to enter but slow to exit long signaling system has an asymmetry less than 1. A slow to enter but fast to exit signaling system has an asymmetry greater than 1. Typical signal asymmetries are between 0.25 and 4. The turtle HH=55 LL=20 breakout system is an example of an asymmetric signaler, one that for long trades is slow to enter and fast to exit, a signal asymmetry of 55/20=2.75.
Asymmetry must be between 0.1 and 10.
In the tradescape plot, only a single EM length is used for the X axis position. The interpretation of an EM length of 20 would be as follows for an asymmetry of 0.5. The EM signal used to generate the upside transitions (the entries for a long system) will be 20*sqrt(0.5)=14.142. The EM signal used for the downside transitions (the exits for a long system) will be 20/sqrt(0.5)=28.284. The asymmetry is thus 14.142/28.284=0.5. While the point on the tradescape is plotted at an EM length of 20, the actual lengths used to generate the turns for the composite EM signal are 14.142 and 28.284. Note that the EM length assigned to an asymmetric signal is not the average of the two lengths.
Note also that an asymmetry of 1.0 generates the standard (symmetric) referential tradescape.
String FileName ("")
The data within the TradeStation chart is written to a disk file that is used in a separate procedure to generate the plots and analyses. If FileName is empty, “”, a temporary binary data file is used to store the data and this file is automatically deleted when the window is closed. If a full path filename is specified, a persistent ASCII CSV file is written. A full valid Windows path and filename must be specified. The directory path will be created if it does not currently exist. Since a comma separated value (CSV) file is written, a CSV file extension is recommended. For example, a FileName such as "c:\data\a1.csv" is valid, even if the folder c:\data doesn't yet exist.
int WalkFwd (2520)
This is the count of bars, from last non-reserved bar backward in time, to use for the analysis. In order to accommodate all of the time horizons in a tradescape, do not set this value below 250. If a value is specified that is greater than the amount of data available in the chart, all of the data that is present is used.
int Reserved (0)
This is the count of most recent bars to reserve for any walk-forward you may wish to independently carry out. These data are disregarded in the analysis. A value of 0 processes all data through the most recent bar.
int DoShort (0)
A tradescape is normally a long-side only analysis. This value can be set to 1 to perform short side tradescapes and signal analysis.
int Degap (0)
This option removes all overnight/weekend gaps in data for instances where positions are always closed prior to a trading session's closing bar.
If Degap is 1, a check is made to see if the same day fraction of data is greater than 80%. If this criterion is met, as with hourly or finer bar densities, the gap across days is mathematically removed. The price activity from the prior day's closing bar through the end of the first bar of the next day will be zeroed. This means the two bars will share the same closing values. The adjustment is based on the differential in closing prices and is applied to the open, high, and low values as well.
The adjustment is made backward in time so that the most recent bar's close will be the current price. The removal of gaps moving backward in time can result in negative prices. In such an instance, the lowest low in the de-gapped data will be set to 0.01 and all prices will be shifted accordingly.
int InactiveAtLastBar (1)
When this variable is non-zero, the last bar in the chart will automatically trigger the computation and deactivate the analysis. A progress bar is normally drawn, but if this proves a distraction, it will be omitted if this value is set to 2. If set to 0, the analysis will not take place until the Status is toggled Off in the Format Analysis Techniques option. If this variable is set to 0, the binary signals are also plotted in the TradeStation chart.