DEVELOPER FRAMEWORK
The calculations, without the chart.

Obsidian Flow Developer API

The order flow engines behind the indicators are a NinjaTrader-UI-free service layer. Developer Early Access gives you the interfaces directly, so a strategy, a Market Analyzer column or your own SuperDOM column consumes exactly what the indicator draws — the same code path, not a reimplementation.

Specification
Available today
IAggressionOscillatorService, ITrueAggressionService and IClassificationService — the aggression, ROC and classification domains.
Not in this release
VWAP, footprint, imbalance, inventory and profile access through the API are on the roadmap and are not part of Early Access. We would rather say so than ship you a stub.
Scope
The framework does not own tick ingestion or session boundaries — those stay on your NinjaScript side.
Access
Invite only. Early Access means the surface can still change, and you get told before it does.
Built to be consumed

One engine, two consumers, identical numbers.

The failure mode this exists to prevent is your strategy and your chart disagreeing about the same bar. Classification state is caller-owned and threaded explicitly through each call rather than held in shared mutable state, so there are no locks and no cross-chart contamination. Snapshots are cached by data version, so several consumers reading the same bar share one computed result instead of each triggering a rebuild.

01

Aggression oscillator, True Aggression and ROC services, plus trade classification.

02

Lock-free by design — classification state is owned by the caller, not the engine.

03

Version-stamped snapshot contract, so you can tell when a read is stale.

Developer Early Access only — invite required
Positioning

Where it fits.

For traders who write their own code and need the numbers to match what they see on the chart.

Requires NinjaTrader 8. OF-DEV-API-001