A regular Scan as defined in RealTest only has access to bar data and values calculated in the Data Section.
For situations that require access to strategy context data, such as which positions are currently open, the TestOutput Scan option provides additional capabilities.
By default, at the end of a test, RealTest "exits" all positions that remain open. These appear in the Trade List with end of test as the Exit Reason.
When a test is run with the TestOutput: Scan enabled and the script includes a TestScan section, this special scan is run automatically before the end of test exits are simulated.
This makes it possible to access all of the same position-context formula elements that are used in your strategy formulas, such as Shares, BarsHeld, FillPrice, etc.
Another use case for TestScan is to generate data throughout a test. For example, you might want to create a CSV file listing each open position on each date of a backtest. To use TestScan in this way, add TestScanAllDates: True and SaveScanAs: <file path> to your Settings.
The following shows what was required before full support for order generation was added to RealTest.
If you were using a script like this for live trading, you would simply run it in Import mode and then run it in Test mode once per day.
The TestScan section in mr_sample_test_scan.rts looks like this:
.png)
The purple names are data or library items defined earlier in the script. Here is the Library section:
.png)
These same items are used in the long and short strategy definitions, which avoids formula repetition:
.png)
Running the script with 17-Nov-2020 as the end date and TestOutput: Scan specified in the Settings section produces this output:
.png)
As you can see from the TestScan definition above, the names and contents of these columns can be whatever you want to define them as.
See Tomorrow's Orders for a much simpler way to do this.
|