Releases: silentsudo-io/sentinel-suite
Release list
Sentinel Deck v0.2.6 — testers' preview (DEV)
Sentinel Deck v0.2.6 (DEV) — testers' preview
This build makes the Deck record what a market fill actually cost you.
What changed
Until now, every fill row the Deck wrote carried execution-cost information for limit and stop orders only. A market order recorded none at all — the reference price was 0, so the slip field was simply omitted, and market order rows logged px:0. That was an honest absence rather than a wrong number, but it meant the most common way to enter a trade was also the one you could not measure.
v0.2.6 latches the live bid/ask and stamps the tradeable price on the side you are about to cross — the ASK when buying, the BID when selling — at the moment of submission. Every fill row now carries slip in ticks, adverse-signed: +1 is one tick worse than the price you were entitled to expect, −1 one tick better.
- limit / stop → measured against the limit or trigger price. Unchanged. This is stop slippage.
- market → measured against the quote you crossed. This is crossing cost — the spread you paid to get filled now.
Covers all five places the Deck sends a market order: deck Buy/Sell, Close, Reverse, Half, and half-at-breakeven.
⚠ Upgrading from v0.2.5 — you must re-add the Deck to your charts
A NinjaScript indicator's identity is its namespace + class name, so v0.2.6 is a different indicator to NinjaTrader. Your existing v0.2.5 instances keep running untouched and will not become v0.2.6, and v0.2.6 does not inherit their settings. Remove the old one, add the new one, re-set your options.
Both versions can sit in the tree together — they do not collide. Keep SentinelDeck_v0_2_5.cs installed as a fallback if you like, or delete it once v0.2.6 is behaving. See the tester's guide, §1.
⚠ What this does not do
It is realtime-only — the reference comes from live market data, so historical and replay fills have no quote to measure against and record nothing. And it is forward-measuring: it recovers nothing about fills you have already taken.
Runtime
Ships SentinelCore v1.45.0. ⚠ Every bundle carries its own runtime/, so if you install several, copy the newest last — an older bundle's runtime will otherwise downgrade Core and break the compile across your whole tree, not just Sentinel.
Assets
sentinel-deck-v0.2.6-import.zip— importable via Tools ▸ Import ▸ NinjaScript Add-Onsentinel-deck-preview-v0.2.6.zip— plain source, if you prefer to place files by hand
Still a DEV preview: it places real orders on whatever account Chart Trader has selected, and auto-fire remains deliberately unvalidated. Read §0 of the tester's guide before you click anything.
Sentinel Binds v0.3.2 — window snapping and window groups
Two things NinjaTrader does not do, in the spirit of Quantower's window binds.
- SNAP — drag or resize any NT window and it clicks into exact alignment with every other NT window and the monitor work area, on release. Windows abut with no seam. Hold SHIFT to place freely.
- BIND — name a set of windows, Link it, and dragging any member carries the whole group live, holding relative positions.
- LAYOUTS — capture an arrangement under a name, re-apply it in one click.
No market data. No orders. No SentinelCore seam beyond fault logging. No Council wiring. That isolation is deliberate: it makes this the safest component in the suite to read, fork and extend, and it is the recommended first issue for outside contributors.
Install
Easiest — download sentinel-binds-v0.3.2-import.zip and use Tools ▸ Import ▸ NinjaScript Add-On… in NinjaTrader. Then Control Center ▸ New ▸ Sentinel Binds.
Reading first — sentinel-binds-v0.3.2.zip is the same code foldered like the repo, with the docs and licence included. Copy runtime/ and binds/ into Documents\NinjaTrader 8\bin\Custom\ and press F5.
Both include the shared runtime (SentinelCore v1.45.0, SentinelSkin). If you already run another Sentinel bundle, importing this will overwrite those shared files with the same-or-newer version — that is intended.
⚠ Requires
SentinelCorev1.41.0 or newerBinds is the only bundle in the suite with a runtime floor — it records swallowed faults through
SentinelCore.Swallow, which arrived in v1.41.0. Every other bundle compiles against any version.Every bundle ships its own copy of the runtime, so copying an older bundle over this one downgrades
SentinelCore. NinjaTrader compiles all ofbin\Custominto one assembly, so Binds then fails withCS0117and takes your whole tree down — not just Sentinel.Install the oldest bundle first and the newest last, or re-copy the newest runtime after any install. Releases here always carry the current runtime; a zip from elsewhere may not.
How to use it
The spec now opens with a full How to use it section: every control, the tick → name → Save bind → Link sequence, and a table decoding the live trk · snap · grp · LINK · why diagnostic.
Read the why field first when something seems dead. A swallowed exception presents as "the feature does nothing", which fits a hundred design mistakes; the actual exception text fits one.
Honest limits
- Layouts arrange, they do not spawn. Apply moves windows that are already open. NT exposes no supported API to open "a chart on GC with this template". Unmatched windows are reported by name — a layout that half-applied silently would be worse than one that refused.
- A link does not survive an F5 or a restart. The file persists, the live link does not. Re-Link.
- A closed-and-reopened member needs a re-Link — the old window handle is dead even though the title matches.
- Duplicate titles are ambiguous. Two charts with identical captions may bind the wrong one.
- Maximized or minimized members sit out moves until restored (shown greyed).
- Delete has no confirmation and no undo. Known; it is issue #1 on the good-first-issues list.
- Not a Workspaces replacement. Workspaces persist across sessions; this is within-session alignment and instant re-arrangement.
If it throws a window off-screen
A bind can do this by design, so the antidote does not depend on the tool: Sentinel\tools\rescue-windows.ps1 is pure Win32, enumerates NinjaTrader's top-level windows, and works even when the Control Center is unreachable and no F5 is possible. In-app, Apply on a saved bind does the same job.
For contributors
NinjaTrader runs each window on its own dispatcher thread. Reading another window's .Left / .IsVisible / .WindowState throws every time, from any central loop — and WindowInteropHelper(w).Handle throws off-thread too. All geometry here is Win32 on the HWND. v0.1.x used WPF geometry, threw on every snap, had the exception swallowed, and presented as "nothing happens" through three wrong theories. The spec keeps that debugging record because the method is the lesson.
Sentinel Deck v0.2.5 — testers' preview (SUPERSEDED by v0.2.6)
⤴ SUPERSEDED by Sentinel Deck v0.2.6
This release is kept for reference and as a fallback — it is no longer the build to install.
v0.2.6 records what a market fill actually cost you. In this v0.2.5 build, market fills carry no
slipfield at all and market order rows logpx:0, so entry execution cost is simply absent from
the Ledger. If you are analysing Deck fills from this build, you are measuring exits only — it is not
that entries were free.The runtime here also ships SentinelCore v1.36.0, nine versions behind. ⚠ Installing this bundle
after a newer one will downgrade Core and break the compile across your whole NinjaTrader tree.
If you keep both, copy the newest bundle'sruntime/last.
⚠ This build places real orders, and it is not finished.
It is published for testing, not for trading. Auto-fire has never been validated live — that
is precisely what we are asking you to help us establish. Start on a SIM account.
The Sentinel Deck is a manual discretionary order deck for NinjaTrader 8: its own Buy/Sell surface with
full order types, bracket / breakeven / seven trailing modes, a chart-scoped flatten, an account-tracking
risk card, and a signal reader that can arm you — or fire for you.
It is the first bundle in this repo that can place an order. Everything published before it is read-only.
What ships with it — and why
Installing the Deck also installs SentinelCore.Safety.cs, the account-risk layer it gates automation
through: kill switch, governor, drawdown, session rules, sizing. That is deliberate ordering rather than a
bundling accident — safety ships before autopilot. The Deck cannot function without it, and a bundle
missing it would fail to compile the entire bin\Custom tree, not just the Deck.
The safety model — read this before you install
| path | behaviour |
|---|---|
| your click | the kill switch, governor, feed health and news are advisory — displayed, never blocking |
| auto-fire | fail-closed through the Gate — a hard reason aborts the submit and tells you why |
That asymmetry is the design: a human must always be able to act, especially to exit. It also means the
Deck is not a gated tool on the manual path. The band under its header names your account and classifies
it (SIM / REAL orders — prop eval or funded), turning red only when a real account is selected and
auto-fire is armed.
Install
Two ways. Either is fine — pick one, don't do both.
A. Import the NinjaScript archive (one click)
- Download
sentinel-deck-v0.2.5-import.zipbelow. - NinjaTrader → Tools ▸ Import ▸ NinjaScript Add-On… → select the zip.
B. Copy the source (sentinel-deck-preview-v0.2.5.zip, or clone the repo)
deck\Indicators\SentinelDeck_v0_2_5.cs→Documents\NinjaTrader 8\bin\Custom\Indicators\- all four files in
runtime\AddOns\→bin\Custom\AddOns\ - NinjaScript Editor → F5.
⚠
sentinel-deck-preview-v0.2.5.zipis source, not an importable archive. Feeding it to
Import gets you "made from an older, incompatible version of NinjaTrader or is not a NinjaScript
archive" — that is NinjaTrader saying it found noInfo.xml, not a version problem. Use the
-import.zip, or copy by hand. (Reported by a tester; the import archive was added afterwards.)
Then: open a chart, open Chart Trader (required — the Deck reads the account and instrument from
it), and pick Indicators → Sentinel → Sentinel Deck v0.2.5 (DEV).
Requires NinjaTrader 8. No binaries are shipped — both zips contain source only.
How to report anything
Click Export diagnostics for a bug report in the panel. Explorer opens with the file selected. Attach
it to a Deck preview report.
It captures your build, the account and its classification, every panel setting, the indicators on your
chart, the Deck's log trail and the day's order ledger — so a report needs four lines from you, not twenty.
It is plain text and contains account names and the day's fills; read it before posting.
What we most want to hear about
- Anything that moved money you did not intend — wrong size, side, or instrument; an exit that did not exit.
- Auto-fire firing when it shouldn't, not firing when it should, or twice on one bar.
- A stop that moved the wrong way under any trailing or breakeven mode.
FLATTEN THIS CHARTtouching anything beyond that chart's instrument.- The band naming the wrong account, or reading SIM on a real one.
auto-fire BLOCKED: <reason> is the safety system working — please still report it, with the reason, so
we can confirm the block was correct.
Known, no need to report
- Drag-to-attach snap — the grab works; snapping a line to an indicator plot can fail.
- Manual clicks are not gate-blocked — by design (see the safety model above).
Docs
- Tester's guide — every control, what to look for, how to report
- Spec — design, order ownership, telemetry, open questions
MPL-2.0. No warranty — see the disclaimer.
You are responsible for every order placed from your machine.