The whole Rule grammar rests on one shape: the leaf. A leaf is a single comparison written as lhs (left-hand side), op (operator), and rhs (right-hand side). Everything bigger is just leaves combined.
The leaf: lhs / op / rhs
Each side of a leaf points at a number the engine can read on the current bar. That number comes from either a bar field or an indicator field:
{bar: close}— a raw OHLCV value of the current bar (Close, open, high, low, volume).{indicator: ema_fast, field: value}— a named indicator's output. The field picks which output: an EMA exposesvalue; a Donchian channel exposesupper,mid,lower.
The operator is the comparison: gt, lt, gte, lte, eq, and the cross operators crosses_up / crosses_down — which fire only on the bar where the two series actually cross, not on every bar one is above the other.
Combining: AND / OR / NOT
A rule node has a combine key (AND or OR) and a rules list. Nest them to build any boolean tree. A long entry might be: combine: AND over ema_fast crosses_up ema_slow and close gt ema_regime. NOT is available to negate a leaf when you need it, though AND/OR cover most cases.
Direction tags the trade
Each branch of the entry tree carries a direction — Long or Short. That is how one strategy holds both sides: an OR at the top, a direction: long AND-branch, and a direction: short AND-branch. When a branch's conditions all hold, the engine fires a Signal in that direction.
If terms like EMA, cross, or long/short are still fuzzy, the What an indicator is and Long, short, and leverage lessons cover them with no platform jargon.
Riflessione
Take a strategy idea you hold in plain English. Can you break it into leaves — each one a single lhs/op/rhs comparison? The pieces that resist breaking down are usually where your idea is still vague.