|
|
RealTest can expose a local HTTP + JSON interface that lets scripts and AI tools drive a running RealTest window: run scripts, read results, send menu commands, capture screenshots, and more. The same interface is an MCP (Model Context Protocol) server, so MCP-capable AI assistants can use RealTest as a tool with a one-line configuration and no extra software.
This is an alternative to Command Line Mode. Both run the same scripts and write the same output files; they differ in how RealTest is controlled.
Batch Mode or the API?
•Use batch mode for a single unattended run: a scheduled morning order generation, a nightly import, a shard of a large optimization, or a one-off test. Each run is a fresh process with an exit code and a batchlog.txt, and there is nothing to connect to or shut down afterwards.
•Use the API when the same instance will be asked to do several things: iterating on a script (loaded data and calculated Data columns stay in memory, so repeated tests skip the load and calculation phases and typically run several times faster), reading results without parsing CSV files, or getting parse errors back as structured line and column numbers rather than log text.
•Use the API for anything only the interactive window can do: Trade Plots and Factor Scan, Charts, Graphs, any menu command, and screenshots of those windows.
•Use the API to make RealTest available to an MCP-based AI assistant.
The AI research materials in the Research folder (see Using RealTest with Agentic AI) describe both approaches to the assistant and let it choose.
Enabling the API
The listener is off by default. Turn it on for every session in realtest.ini, or for one launch on the command line:
|
Setting
|
Default
|
Meaning
|
|
Api
|
0
|
in the [Options] section of realtest.ini; 1 starts the listener whenever RealTest starts with that ini file
|
|
ApiPort
|
7827
|
the TCP port to listen on (127.0.0.1 only); 0 picks any free port
|
|
ApiToken
|
(empty)
|
an optional secret; when set, every request must include it in an X-RealTest-Token header
|
|
-api
|
|
command line argument: enable the API for this launch regardless of the ini setting
|
|
-port N
|
|
command line argument: enable the API on port N (0 = any free port) for this launch
|
Neither argument puts RealTest into batch mode; the window opens normally and the API simply becomes available once startup is complete. If the port is already in use, RealTest logs the failure to errorlog.txt and runs without the API.
An automation script that launches its own RealTest should also pass -hide (start minimized without taking keyboard focus) and -inifile with a copy of realtest.ini, so that the driven instance saves its settings to the copy rather than to your own configuration. In that copy, set AskSaveUntitled, AskUnloadData, AskDeleteTests and ConfirmStop to 0 so no Yes/No prompt can appear.
realtest.exe -api -hide -inifile C:\temp\drive.ini C:\Scripts\myscript.rts
Finding a Running Instance
Each listening instance writes a small JSON file named after its process id to %LOCALAPPDATA%\RealTest\api\ with its port, URL, executable, ini file and start time, and deletes the file when it exits. A program that launched RealTest reads the file for its process id; a program attaching to an already running session lists the folder. Until the instance has finished starting, connections are refused, so retry until a GET /status request succeeds and reports state "idle".
How Requests Work
Requests are ordinary HTTP GET and POST calls to http://127.0.0.1:port, with JSON bodies and JSON responses. Every JSON response is either {"ok":true,"result":...} or {"ok":false,"error":{"code":...,"message":...}}. Tabular data (results, trades, stats) is returned as CSV text.
Requests that change the program state are carried out on the RealTest window thread in the order received, and each response is sent only when RealTest is idle again: no run in progress and no calculation still working. Callers therefore never need to wait or retry between steps. A request that arrives while a run is in progress is refused with a "busy" error rather than queued. Read-only requests such as status and log are answered immediately, even during a run.
A run request creates a job. By default the response waits until the job has finished; a "wait" value in seconds caps the wait, after which the response reports the job as still running and it can be polled. The job object reports success, the batch-mode exit code, every error message RealTest would have shown, structured parse errors (file, line, column, message), the number of tests added, and the Results window that received them.
Requests
|
Request
|
Purpose
|
|
GET /status
|
run state, busy flag, active script, data file, status bar text, current job
|
|
GET /help
|
a machine-readable list of all requests
|
|
POST /open
|
open a file as File > Open would (script, results, CSV, trade list)
|
|
POST /run
|
run a script in a given mode (parse, test, optimize, import, scan, orders, apply)
|
|
GET /jobs, GET /jobs/{id}
|
remembered jobs, or one job (optionally waiting for it to finish)
|
|
POST /stop
|
request Stop for the running job
|
|
GET /log
|
the Log window contents as numbered lines, or as plain text
|
|
GET /results
|
the Results window as CSV, the same columns as SaveTestListAs
|
|
GET /results/{n}/trades
|
the trade list of test n as CSV, as SaveTradesAs writes it
|
|
GET /results/{n}/stats
|
the daily stats of test n as CSV, as SaveStatsAs writes it
|
|
GET /windows
|
the open child windows: id, class, title, active
|
|
POST /activate, POST /close
|
make a child window active, or close it
|
|
POST /select
|
select a row in a list window (a Results test by number, or any row by index) so that menu commands act on it
|
|
POST /command
|
send any menu command by its command id; returns when RealTest is idle again
|
|
POST /key
|
send a keystroke (arrow keys, Enter, F-keys, a character) or type text into a child window
|
|
POST /screenshot
|
capture a child window or the whole frame as a PNG file or image response
|
|
POST /exit
|
close RealTest gracefully
|
|
POST /mcp
|
the MCP endpoint (see below)
|
Menu commands act on the active child window and its selected row, exactly as they do when chosen from the menu, so activate the intended Results, Plot or Chart window (and select the intended row) before sending one. Commands that open file dialogs should be avoided; use /open and the script Save...As settings instead.
MCP
The same listener serves the Model Context Protocol over HTTP at /mcp, exposing the requests above as tools named rt_status, rt_run, rt_open, rt_stop, rt_job, rt_log, rt_results, rt_trades, rt_stats, rt_windows, rt_activate, rt_command, rt_select, rt_key and rt_screenshot. Any MCP-capable AI tool can be pointed at the URL; for Claude Code the configuration is a single command:
claude mcp add --transport http realtest http://127.0.0.1:7827/mcp
Set Api=1 in realtest.ini so that the instance is listening whenever the assistant needs it. Closing RealTest is deliberately not offered as a tool.
Security
The listener accepts connections only from the local machine (127.0.0.1). Programs running under your own Windows account already have the same access to your files as RealTest does, so the remaining concern is a web page in your browser making blind requests to localhost. Such requests are rejected: RealTest refuses any request carrying an Origin header, requires the Host header to name 127.0.0.1 or localhost, and requires POST bodies to be declared as JSON. If other user accounts share the computer, set ApiToken so that requests without the token are refused.
Error Messages and Prompts
While RealTest is carrying out an API request or job, and at all times in an instance launched with -api or -port, error message boxes are not shown. The text is returned in the job's messages and appended to batchlog.txt and errorlog.txt, so a driven instance never blocks on a message box. A session that merely has Api=1 in its ini keeps its normal message boxes for your own actions. Yes/No questions are always shown, which is why a driven instance should run with the Ask... and Confirm... options turned off in its ini copy.
Learn More
The complete request reference, with every parameter and response field and working PowerShell, curl and Python examples, is realtest_api.md in the Research folder inside your RealTest installation (see Using RealTest with Agentic AI). It is written so that an AI assistant can read it and drive RealTest without further help.
|
|