AI

The model is cheap. Being right about the money is not.

A model can now be written in minutes, and it gets cheaper every month. What did not get cheaper is being right about the money: position accounting through a reversal, the average cost a realised profit is measured against, the exposure snapshot taken at the instant of the fill and not a tick later, the order that has to be refused before it is sent rather than explained after, two feeds whose timestamps must line up, a simulator that must not accidentally see the future. These are invariants, not code, and a generated implementation of any of them is plausible on sight and wrong in a way that surfaces only as a number you believed. A backtest that is wrong still prints a profit.

The boundary moved

It did not vanish. The scarce thing is now the verified machine underneath the strategy: the parts that have to be right, and have to behave identically in research and in production.

Cheap generation raises the value

When producing candidates costs nothing, the bottleneck becomes trusting them and comparing them. Every candidate is measured the same way here — the same statistics for a two-line crossover as for a deep learning model, and the per-period features a selection model ranks them with.

The engine never looks inside

Your data processor is a function pointer of a fixed signature and a pointer the engine does not interpret. Whether a person or a model wrote what is behind it changes nothing.

Any model, same object

A three-line moving average, a gradient-boosted model, a neural network scoring news sentiment and a call out to an external service are the same thing to the engine. Swapping one for another changes no wiring at all: the same builders, the same patterns, the same rules keep working.

Local or public, your choice

An AI running on your own hardware and a public API are interchangeable from the engine's side, so which one you use is yours to decide. The library reaches the network only where you point it — through the connectors you configure, and through a processor of yours that calls out.

Only the licence check leaves

The licence check is the only exchange the engine ever initiates on its own behalf. No market data, no contract, no strategy, no order, no trade and no statistic has a field to travel in it.

Start with this prompt

Replace the final line with a description of the robot you want, and replace /path/to/tse-sdk with the folder you unpacked the SDK into.

Read the strategy examples at https://solo76.trade/examples and the product documentation at https://solo76.trade/docs.
Read the full reference at https://solo76.trade/reference — it describes the engine and its C, C++ and Python surfaces completely.
Use the SDK I unpacked into /path/to/tse-sdk: the C headers under include/tse, the C++ wrapper tse.hpp with its translation unit tse.cpp, and the Python module tse.py.
The engine has five nodes and no others: an Input turns ticks into a number, a Pattern watches Inputs and fires, a Rule turns a firing into an order, a Robot owns a set of Rules, an Account owns the robots.
Assemble the graph bottom-up out of names: a Pattern names its Inputs, a Rule names its Pattern, a Robot names its Rules. Declaring is not running — nothing touches data until the robot is started.
The strategy itself lives in one callable, the data processor an Input is given. Put the decision there and nowhere else, and do not reimplement machinery the engine already provides.
Backtest it against the built-in Simulator and print the summary. Leave the graph, the risk checks and the statistics untouched, so that going live is a swap of the market data source and the execution.
>>> REPLACE THIS LINE with what the robot should do: what it trades, what data it reads, and the conditions on which it enters and exits.

Browse the examples it will read