# Vortex

Use the [shared role, Reverse and timing rules](../05-signal-passports.md). Over p bars, VI+ relates the average `abs(current_high−previous_low)` to average true range; VI− uses `abs(current_low−previous_high)` with the same denominator. p is integer 2…50, default 14. A zero denominator is not a valid signal comparison.

## Entry — vortex.entry

VI+1<VI−1 and VI+0>=VI−0 gives L. VI+1>VI−1 and VI+0<=VI−0 gives S. Otherwise N. Merely retaining VI+ above VI− is not another crossing.

## Filter — vortex.filter

VI+0>VI−0 gives IS; VI+0<=VI−0 gives IL; otherwise N. **Equality permits Short and denies Long.** This differs from MACD's line-relationship filter, where equality permits both sides.

## Exit — vortex.exit

Use the VI crossing with shared cba and Reverse rules. The line-relationship filter is a state, not a substitute crossing event.

## Definition coverage and observed controls

The controls below identify this dated schema. Their exact labels, value types and context overrides are in the catalogue. Any omitted standard selector must not be added manually.

- `vortex.entry` — `MAIN` / `VORTEX`. Semantics: **Entry — vortex.entry**. Fields: `ss`, `Is`, `ct`, `at`, `rs`, `p`. timeframe: ID-specific list; default 1m; candles: DEFAULT/HEIKEN_ASHI; default DEFAULT; calculation: CL/CR; default CL; Reverse: available; default false.
- `vortex.exit` — `CLOSE_BY` / `VORTEX`. Semantics: **Exit — vortex.exit**. Fields: `ss`, `Is`, `ct`, `at`, `rs`, `cba`, `p`. timeframe: ID-specific list; default 1m; candles: DEFAULT/HEIKEN_ASHI; default DEFAULT; calculation: CL/CR; default CL; Reverse: available; default false.
- `vortex.filter` — `PRICE_LIMIT` / `VORTEX_PRICE_LIMIT`. Semantics: **Filter — vortex.filter**. Fields: `ss`, `Is`, `ct`, `at`, `rs`, `pla`, `p`. timeframe: ID-specific list; default 1m; candles: DEFAULT/HEIKEN_ASHI; default DEFAULT; calculation: CL/CR; default CR; Reverse: available; default false.
