Additional Resources for the Custom Column Feature
Overview of the Custom Column feature
Custom Columns allow Investor/RT users to harness the power of the RTL language to display and test calculated values in QuotePages. Any scan, trading signal, or custom indicator can be added to a QuotePage as a custom column. In addition, any built-in QuotePage column (including V# User Variables) can be used to define a custom column that color-codes and formats data according to user preferences. Any native technical indicator can also be used as a custom column without creating a dedicated custom indicator formula using RTL tokens.
There is no limit to the number of custom columns you can define. Once a custom column has been defined and named, it can be added to any number of QuotePages. Custom columns saved with a QuotePage retain their position and width when the QuotePage is reopened, just like built-in columns.
Each column has a user-specified heading (title), which may differ from the column name. Each column can be assigned a specific numeric display format. For custom indicators, scans, and signals, various options also allow you to control how frequently the underlying formula is calculated.
Each column can have a list of "rules" that control the foreground and background colors used to display its values. A rule can test for TRUE or FALSE, for example, when a signal is used as the data source. For custom indicators, rules can test ranges of numeric values. For each rule, users can specify colors and, optionally, a text message to display in the QuotePage cell when the rule evaluates to TRUE for that row (instrument). This message can include dynamic alert messages as a tokenised string, including %T#1-style text inputs. This means that the displayed text result in each cell of a custom column can be dependent upon the ticker symbol in that row.
The Four Tabs of the Custom Column User Interface
Custom column rules can also specify a sound, chart, schedule or signal action to be triggered whenever a rule evaluates to TRUE for a QuotePage row. For example, a custom column could display the state of a signal that detects when RSI crosses above 70 from below. The custom column can be configured with a rule that plays a specific sound and opens a chart named "RSI Chart" whenever the scan detects that RSI has crossed above 70. The rule could also specify a bright red background and yellow text displaying "RSI ALERT" in the QuotePage cell when the crossing occurs. If the condition is detected for TSLA, for example, you would hear the sound and see the bright red message in TSLA's QuotePage row. The chart named "RSI Chart" would then open, displaying the instrument that triggered the alert. The chart would typically be configured to display the same RSI indicator used in the custom column, along with any other technical indicators of interest.
The Custom Column Setup window can be accessed through the Object Manager. (click "New" to create a custom column or "Edit" to modify an existing one), or by right-clicking any column heading in a QuotePage and selecting "Add Custom Column". After modifying a custom column, click "OK" or "Apply" in the setup window to save your changes. All open QuotePages containing that column will immediately reflect the updated definition. Use "Apply" to keep the setup window open while you review the visual effects of your changes. If a QuotePage containing custom columns is open, you can access a custom column's setup by right-clicking any cell in that column. The menu at the top of the setup window lists all custom columns, allowing you to switch between them to review or modify their settings.
1) The "Type" tab lets you select the data source for the custom column from five options: a built-in QuotePage column, a native technical indicator, a custom indicator, a signal, or a scan.
When a technical indicator is selected (such as Session Statistics in the example above), click "Use Preset" to load predefined settings, or click "Setup" to adjust the indicator parameters.
When you select a scan, signal, or custom indicator, its full formula and any comments appear in the window. Buttons are available for creating or editing these signals and custom indicators. When you save changes to a scan, signal, or custom indicator, all custom columns that reference it automatically use the revised definition.
When a technical indicator or an RTL formula (stored in a signal, scan, or custom indicator) is selected as the data source, two additional settings sections appear on the right side of the Type tab:
- The Periodicity and Session Override inputs. Session Override is optional and is needed only when the indicator or RTL formula should not use the instrument's default full session.
- The second section specifies the Lookback period for the historical data used in the calculation. It appears when the recommended "Maintain Persistent Data" option is selected in the Calculation tab (see below for details).
These settings do not appear when a built-in QuotePage column is selected because its data is streamed directly from the live data feed and requires no historical data for calculation. For a given custom column, the Periodicity setting applies to all symbols in the QuotePage containing that column.
Note: Investor/RT also supports two automated methods for quickly adding existing signals, custom indicators and technical indicators as custom columns.
- When you right-click on a technical indicator in a chart, for example, choose "Send to QuotePage" and the indicator in question will appear instantly as a custom column in the front quotepage. You must have a quotepage open, of course. If several quotepages are open, the front most quotepage will receive the custom column. The custom column for the technical indicator will be computed using the same periodicity as the technical indicator in the chart. Investor/RT creates the custom column automatically. If the Investor/RT suggested name for the custom column is already in use, you will be prompted to enter a new name or replace for former custom column
- The Send To Quotepage command is also available in the RTL Object Editor Window. When setting up signals and custom indicators, click the "Send To..." button at the lower right of the window, choose "Send to Quotepage -Custom Column" from the ensuing pop up menu. The signal or custom indicator will be added as a custom column to the front quotepage. Since RTL Formula (in signal and custom indicator setups) do not have a periodicity (they are periodicity independent), Investor/RT uses the periodicity of the front chart window as the periodicity of the newly created custom column. Daily periodicity is the default in case no chart window is open.

2) The "Format" tab provides a simple interface for specifying.
- the custom column's QuotePage title and display format. Choosing "Instrument" from the list of formats causes the resulting custom column to display its numeric value using the instrument's display format in each row of the custom column.
- the default cell colors. When checked, the "Use QuotePage Colors" option means that the default cell colors for the custom column cells will be derived from the host quotepage. The rules associated with the custom column may override these, but in the absence of any rule color effects, the custom column's cells will blend in with the other cells of the quotepage. When unchecked, the custom column cells will default to the explicit colors selected in the "Format Tab" regardless of the host quotepage color properties.
3) The "Rules" tab contains a spreadsheet with up to nine rules that can be applied to the custom column's value. The easiest way to explain the rules spreadsheet is with a step-by-step example. Below the rules spreadsheet is a menu of "operators". You can display the operators as English text or mathematical symbols. Switch between the two by checking or unchecking the box in the bottom-left corner of the operator menu.

Suppose the Session Statistics indicator is configured to return an instrument's cumulative relative volume (see image on the right) compared with its average over the past 20 sessions. We want to create rules that highlight unusually low or high relative volume, using, for example, values above 140% and below 60% as thresholds.
Choose "Is Greater than X" and click "Add Rule" to add a rule with that operator. Enter 100 as the value of X in the spreadsheet. Adjust the foreground and background colors by clicking the color cells to open the standard color picker. Next choose "Is Less or equal than X" and click "Add Rule" to add a second rule to the sheet. Set X to 100. These first two rules would highlight values above or below 100 using green and red backgrounds. Then add two similar rules to highlight values above 140% or below 60%.
Click a cell in the Sound / Chart / Schedule / Action column to select the sound, chart, schedule, or signal action to run when the rule becomes TRUE. To remove an assigned sound, chart, schedule, or signal action, simply Shift-click its cell to reset it to "none". The Log column offers a Yes/No option. When enabled, it adds a dedicated event entry to the alarmlog.txt file. For more information on custom column logging capabilities, scroll down to the next section.
Some tips about the Rules tab:
- To apply the same color to every cell in a color column (e.g., black for the foreground), Shift-click any cell and select the desired color. The color will then be applied to all rules.
- To remove a rule, select its row and click "Delete Rule". The "Move Rule" button moves the selected rule down one position in the list. If the rule is at the bottom, clicking "Move Rule" moves it back to the top.
- Every rule is evaluated separately, and the associated actions are performed for each rule that evaluates to TRUE.
- For colors and text messages, the last matching rule determines what appears in the QuotePage cell. Therefore, rule order matters. If no rule evaluates to TRUE, the default color defined in the Format tab is used.
- The "Text" column in the Rules setup can be a "tokenized string", ie a textual string, like those in a chart annotation indicator that contain RTL tokens that are filled in dynamically based on current market data. For example, you could have a "signal" custom column that displays the text "%TICKER %V#1" with a green background color when the signal is true, or the text "%TICKER" with some other background when the signal is false. The quotepage cell can hold at most 40 characters of text per cell (Longer tokenized strings will be truncated.)
- You can use V# variables as values for the X and Y columns, meaning such threshold value may be set to a different value for each instrument.
- The "Matches Text Pattern" rule was specifically designed to be used when the Custom Column source is a T# variable (available in the Built-In Quotepage menu). Find more in the T# variable support page (section 4.2)

4) The "Calculation" tab includes the following custom column settings:
The "Calculate column every" option is also found at the bottom of the setup window for any technical indicator, signal marker, or custom indicator added to a chart. Because these indicators and formulas can consume significant processing resources, several options are available to control how frequently they are calculated. Although "tick by tick" is available, we recommend calculating every one or two seconds instead, especially when a QuotePage contains very active instruments such as ES and NQ futures.
The "Calculate which rows" setting: for very large QuotePages, calculations can be restricted to visible rows only.
The "Data" section: the "Maintain Persistent Data" option allows custom columns to perform calculations efficiently with minimal processor load. This makes it possible to perform frequent, complex calculations across large lists of symbols. These calculations can efficiently use complex indicators such as Session Statistics, Volume Breakdown, and Profile. The legacy "Load Data as Needed" option is no longer recommended. However, ensure that the lookback period over which data is maintained remains reasonable for your needs. You can adjust it in the "Type" tab.
The "Trigger Rule Actions" settings determine when the Sound / Chart / Schedule / Action is triggered (For all options, the frequency of calculation is controlled by the "Calculate Column Every" setting)
- Whenever the Rule Becomes True. The action is triggered when a calculation first returns TRUE (ie it returned false on the previous calculation). As the rule continues to evaluate as true, actions will not be triggered until the rule returns to a false state (before again becoming true).
- Whenever the Rule Is True. A specific rule action will trigger each time the rule evaluates to true (regardless of the previous state of the rule). If a rule continues to evaluate to true, then its actions will continue to trigger each time it's recalculated.
- First Time Rule Is True. The action is triggered only once per session.
- Never (use this option to temporarily disable all rule-triggered actions while keeping the custom column in the QuotePage)
"Place Result into User Variable": each time a calculation takes place, its numeric result is stored in a predefined V# variable.
Custom Columns logging features
When you work with many symbols, many custom columns, and many rules, it can be hard to keep track of which rules triggered for which symbols. Custom Column gives you three ways to keep a log of these events:
1) Activating the native “Log” column (to record an alert in the alarmlog.txt file)
The “Log” column lets you turn logging on or off for each rule. Click the column to switch the value between “Yes” and “No”. Each log message is saved in the alarmlog.txt file in the Admin directory. It shows the time, the symbol, the rule, and the custom column name. If the rule is set up to show custom text (using the “Text” column in the Rules tab), that text is also included in the line, in this format:
hh:mm:ss Symbol {CustomText} Rule CustomColumnName
When you first open the Alarm Log, it automatically scrolls to the end of the file, where new message lines are added. As long as the view stays at the bottom of the file, it keeps scrolling down automatically as new messages arrive. This way, you can watch new messages as they are added without scrolling down each time. If you scroll up, automatic scrolling stops and the view stays where you put it. To turn automatic scrolling back on, scroll down to the bottom again.
2) Using a schedule with a “Show Message” action (and dedicated Custom Column tokens)
If you also want custom column rules to send their information to the main Message Log (msglog.txt in the Admin directory), or to show it in a popup window, use the “Show Message” action of a schedule. The text of the “Show Message” action can include %CCTICKER, %CCRULE, and %CCNAME. These are replaced by the ticker, the rule, and the custom column name that triggered the schedule. In the “Show Message” action window:
If the “Schedule requires an OK to continue” box is checked, the message appears in a popup window. If it is not checked, the message is sent to the Message Log window.
To set this up, create a schedule with a “Show Message” action and message text such as:
CC: %CCTICKER %CCRULE %CCNAME
Then select this schedule in the “Schedule” column of the custom column rule.
3) Use the logging features of the Signal Action
The Signal Action offers several custom logging options, which are discussed here. You can add a different Signal Action to each individual rule.
Testing Multiple Conditions at Once: Two Approaches
Option 1: Combining multiple Signals into a single Custom Indicator
Let's assume you have two sets of long and short trading signals (Signals A and B), and that long and short signals cannot occur on the same bar. You can create a custom indicator using the following formula:
(LONG_SIGNAL_A=TRUE)* (1)+(LONG_SIGNAL_B=TRUE)* (2)+(SHORT_SIGNAL_A=TRUE)* (-1)+(SHORT_SIGNAL_B=TRUE)* (-2)
This custom indicator returns +1 when Long Signal A is TRUE, +2 when Long Signal B is TRUE, and +3 when both long signals are TRUE. It returns -1, -2, or -3 for the corresponding short-signal conditions.
Option 2: Combining Multiple Custom Column Outputs
Each custom column, whether it references a built-in column, a scan or signal, a custom indicator, or a technical indicator, has a value for each instrument that can change over time. Scans and trading signals are TRUE/FALSE expressions with numeric values of 1.0 (TRUE) or 0.0 (FALSE). To make a custom column's calculated value available to other scans, signals, custom indicators, or custom columns, assign it a V# user variable in the "Calculation" tab of the Custom Column setup window. For example, suppose you have three custom columns, each displaying a moving average. You could assign V#10 to the first moving average, V#11 to the second, and V#12 to the third. The values of V#10, V#11, and V#12 update dynamically as the custom columns are recalculated. You can then use these values in a custom indicator such as:
(CL > V#10) + (CL > V#11) + (CL > V#12)
Create another custom column to display this custom indicator's value. The formula returns 3 if an instrument's last price is above all three moving averages, or 2 if it is above exactly two. A value of 0 indicates that the last price is not above any of the three moving averages. You can then create color-coding rules for values of 0, 1, 2, and 3. Evaluating this custom column requires very little processing because all the moving averages have already been calculated and are available through the V# user variables. This is a powerful mechanism. Any custom column can pass its result through a user variable to another column, which can then reference that V# variable in its own formula. Cells in each QuotePage row are calculated from left to right. Therefore, dependent columns should be placed to the right of the columns that produce the V# values they need. Custom indicators, scans, and signals can also include SET statements in their formulas. User variables assigned this way are also available to calculations in other custom columns across open QuotePages.
Adding / Modifying / Deleting Custom Columns & Incorporating Custom Columns into QuotePage Formats
Adding Custom Columns to a Quote Page
When you have finished configuring the custom column, click "OK". You will be prompted to name it. Once defined, custom columns can be added to any existing QuotePage by right-clicking its column-heading row. Select "Add Custom Column" from the pop-up menu. To remove a custom column from a QuotePage, drag its heading off the heading row and drop it into the body of the QuotePage. Custom columns are saved with their QuotePage when you click "Save" on the QuotePage toolbar or choose File: Save. Custom columns work with both system-defined and user-defined QuotePages. Because system-defined QuotePages can contain hundreds or thousands of ticker symbols, we recommend becoming familiar with this feature using user-defined QuotePages that contain only a few instruments. Create and test your custom columns on small QuotePages before adding them to larger ones.
Modifying Custom Columns
Once you have custom columns running in a QuotePage, you may want to adjust their behavior. If the QuotePage is open, right-click any cell in the custom column to open its setup window. (alternatively, you can access the setup window of any Custom Column by selecting it in the corresponding Object Manager menu and clicking "Edit").You can change the column title, rule colors, and other settings, then click "Apply" to save the changes and immediately view them in any open QuotePages containing the column. You can also change the custom column's configuration by selecting a different custom indicator, or edit the current indicator using the "Edit Custom Indicator" button in the "Type" tab. When editing a custom indicator associated with a custom column, you can revise its formula and the settings of any technical indicators referenced by that formula. After you click "Save" in the custom indicator setup, the changes appear immediately in all open QuotePages containing custom columns that reference the updated indicator.
Deleting Custom Columns
Like charts, QuotePages, scans, and other Investor/RT objects, custom columns can be deleted or renamed using the Object Manager's Delete/Rename feature. Investor/RT automatically removes a deleted column from all open QuotePages containing it.
Incorporating Custom Columns into Predefined QuotePage Formats
You can create quote page formats containing one or more custom columns. Create these formats using File > Preferences > QuotePage > QuotePage Formats. All custom columns appear under "Available Items" and can be added to any format. Each custom column is prefixed with $CC: followed by its name to distinguish it from built-in data columns. If you have already configured a QuotePage with custom columns and want to save its column layout as a format, right-click any column heading and choose "Save Format…" at the bottom of the menu. You will be prompted to name the format, which will then appear in the Preferences: QuotePage Format window. Right-clicking any QuotePage column heading opens a menu containing the "Change Format" command. A list of format names appears. Choose a format and click "Apply" or "OK" to use it. (You can also use the "Change Format" button on the QuotePage toolbar.) An additional benefit of including custom columns in a format is that you can use that format for any scan's output QuotePage. For example, a scan using RSI criteria could produce a QuotePage with a custom RSI column that color-codes the relevant RSI levels.
Note: Candlestick Pattern Custom Columns
You can create a custom column that reports whether specific candlestick patterns are detected for instruments in a QuotePage. Set up the custom column as a "technical indicator" column. Choose "CPR: Candlestick Pattern Recognition" as the indicator. Click "Setup" and select one or more patterns to test. In the "Rules" tab, configure an "Is True" rule to display TRUE or a custom text message when the indicator returns TRUE. For example, to detect Doji patterns, create a custom column that tests for this pattern and displays "DOJI" whenever it occurs for an instrument. Each custom column can have its own periodicity, allowing you to monitor candlestick patterns across different periodicities.