Alarm when the price crosses.
Every mark is an exact decimal, so the level you set is the level your rule compares.
One call, every level.
One request carries a mark for every instrument your levels watch, in one quote.
price < level→ firingprice >= level→ clearlevel unset→ unarmed2of 6
rows where the mark is past the level
6of 6
round numbers off each published mark, set either side so both verdicts show — yours to overwrite
+0.036%BTC
the clear row closest to its level, as a share of it
Each instrument is drawn against its own level, one percent either side. The same figures are printed in the table below.
The dashed line is your level, on all six tracks at once. Each mark sits at its real distance from it, as a share of the level — one scale, three magnitudes.
| Instrument | Mark | Your level | Gap | Verdict |
|---|---|---|---|---|
| 84,230.00USD | +30.00+0.036% | clear | ||
| 2,681.24USD | -8.76-0.33% | Firingunder your level | ||
| 336.77USD | +0.77+0.23% | clear | ||
| 379.70USD | +0.70+0.18% | clear | ||
| 1.1387USD | +0.0087+0.77% | clear | ||
| 1.3238USD | -0.0062-0.47% | Firingunder your level |
GET /v1/prices/latest?assets=BTC,ETH,AAPL,TSLA,EUR,GBPOne number, four comparisons.
The desk above runs the first two. All four are the same subtraction over the same field — not one is a parameter you add or a plan you upgrade.
price < floorbelowthe mark under your floor
The stop: true for as long as the mark sits under the number you wrote.
one levelon the desk aboveprice > ceilingabovethe mark over your ceiling
The same subtraction the other way up: a target rather than a stop.
one levelon the desk aboveprice < low || price > highoutsidethe mark out of your band
Two levels and an or, for a range you want to hear about leaving either way.
two levelsabs(price - opening) > movechangethe mark away from a reference
Keep a mark from an earlier read and the subtraction becomes a move, not a level.
a mark you kept
Every one of them reads the field this call already answers with:
GET /v1/prices/latest?assets=ETHOne rule, every instrument.
const { data } = await latest('BTC,ETH') for (const mark of data) { const level = levels[mark.asset] if (!level) continue if (lessThan(mark.price, level)) page(mark.asset) }
One comparison, however many instruments you watch. Not a feature you switch on — your own if, over a field the mark already carried.
The rule polls.
Ask on your own timer, and keep the last mark you acted on so one crossing pages once.
The price is a string.
Compare it as a decimal, not a float, or the rule fires on the rounding.
The paging stays yours.
No webhook, no channel, no rule engine — LIAW publishes the mark, and the contract ends there.
Set the level.
Read the price reference, or start on the live board.