data["expr_name"] — expression valuebar.close/open/high/lowbar.volume / bar.framebar.symbol / bar.timestamphistory[i] — past closes (max 500)
sma(history, period)stdev(history, period)highest(history, period)lowest(history, period)
std::abs, sqrt, pow, logstd::max, min, roundstd::vector, map, string
Write your signal logic in the editor. Your code becomes the body of evaluate() —
just return true (signal fires) or false (no signal).
Select expressions from the left panel. They become your inputs:
Latest bar from each selected timeframe:
In the helpers tab you can define:
Helpers are placed at file scope, before evaluate().
Use static for state that persists across evaluations.
static variables to track state across barshistory.size() before using lookbackssystem() fork() fopen() malloc()Your code compiles to a standalone binary. GTS spawns it as a subprocess and communicates via pipe:
Latency: ~0.01ms per evaluation (85K+ evals/sec)