# Indicators and models

> Moving averages, oscillators, windows, sessions, market profile and models over the inputs your host supplies.

[Canonical documentation](https://flowscript.ftw.trade/docs/indicators)

Indicators calculate over series your host supplies. The language does not connect to a venue or choose a data provider; the host declares and records those inputs.

## Moving averages

`sma`, `ema`, `wma`, `rma`, `hma`, `dema`, `tema` take `(src, len)`; `vwma(src, vol, len)` and `vwap(price, vol, len)` weigh by volume.

## Momentum and oscillators

| Function | Gives |
|---|---|
| `rsi(src, len)` | 0 to 100 |
| `stoch(close, high, low, len)` | 0 to 100 |
| `cci(src, len)`, `mfi(src, vol, len)`, `obv(src, vol)` | The classic readings |
| `roc(src, len)`, `momentum(src, len)` | Rate of change (percent) and momentum |
| `macd(src, fast, slow)`, `macdSignal(…, sig)`, `macdHist(…, sig)` | One function per line |

## Volatility and bands

`bbUpper(src, len, mult)` and `bbLower(…)` (the middle is `sma(src, len)`), `stddev`, `zscore`, `wilderAtr(high, low, close, len)` (the ATR charts draw) and `trueRange`.

## Trend

`adx(high, low, close, diLen, adxLen)`, `diPlus`, `diMinus`, `supertrend(high, low, close, factor, len)` with `supertrendDir`, and `sar(high, low, close, start, inc, max)`.

## Windows and levels

`highest`, `lowest`, `rolling_sum`, `cum`, `linreg`, `corr(a, b, len)`, `median`, `percentile`, `barssince(cond)`, `valuewhen(cond, src)`, and `pivothigh` and `pivotlow` (known a few bars late, by design).

## Sessions and VWAP

- `periodVwap(price, volume, t, 86400)` is the day's VWAP from 00:00 UTC; `anchoredVwap` starts from any bar; both have σ bands.
- `inSession`, `inWeekdaySession`, `sessionOpen`, `sessionHigh` and `sessionLow` frame a trading session in any city's time.
- `import "std/vwap";` adds what a VWAP trader reads: where price sits in σ, the week's and month's anchors, whether the day is trending, and a failed push into a band.

## Market profile

`tpo.poc`, `tpo.vah`, `tpo.val`, `tpo.vpoc`, `tpo.poorHigh`, `tpo.singleAbove`, `tpo.nakedPocAbove` and more read the last whole day's (or week's, or the forming session's) time-price profile, the same in a backtest and live.

## Trained models

Models train on the market as the strategy runs, with no look-ahead, and refit on a schedule. The same model is fitted in a backtest and live.

| Model | Answers |
|---|---|
| `ml.linear`, `ml.ridge`, `ml.lasso`, `ml.elasticNet`, `ml.svr` | A forecast of `y` |
| `ml.boost` | Gradient-boosted trees forecasting `y` |
| `ml.logistic`, `ml.boostClassifier` | The chance `y` is above zero |
| `ml.svm` | A signed margin |
| `ml.knn` | The mean `y` of the nearest rows |

Each is written `ml.<kind>(y, [x1, x2, …], window: n, horizon: h, retrain: r)`: it learns `y` `h` bars after the predictors over the last `n` rows, refits every `r` rows, and answers `na` until its first fit.

```flowscript
uses { bars: "^1" }
const close = bars.close("BTC-USD", "1h");
const ret = close[0] / close[1] - 1;
const fwd = close[0] / close[3] - 1;
const f = ml.ridge(fwd, [ret, close / ema(close, 20) - 1, rsi(close, 14)], window: 300, horizon: 3, retrain: 20);
metric("forecast", f);
```

This publishes a forecast without sending an action. Your host can expose actions that use the result. The [ftw.trade strategy starters](https://docs.ftw.trade/strategies/starters) include a trading example with five features.

## Liquidations

Liquidation feeds are host-provided inputs. ftw.trade exposes `liq.*` for supported perp markets; its [source documentation](https://docs.ftw.trade/sources/flowscript-sources) describes coverage. These feeds are part of that platform's binding rather than built into the language.
