SabrTrader.Pipeline.AddOns.Contracts
0.17.0
dotnet add package SabrTrader.Pipeline.AddOns.Contracts --version 0.17.0
NuGet\Install-Package SabrTrader.Pipeline.AddOns.Contracts -Version 0.17.0
<PackageReference Include="SabrTrader.Pipeline.AddOns.Contracts" Version="0.17.0" />
<PackageVersion Include="SabrTrader.Pipeline.AddOns.Contracts" Version="0.17.0" />
<PackageReference Include="SabrTrader.Pipeline.AddOns.Contracts" />
paket add SabrTrader.Pipeline.AddOns.Contracts --version 0.17.0
#r "nuget: SabrTrader.Pipeline.AddOns.Contracts, 0.17.0"
#:package SabrTrader.Pipeline.AddOns.Contracts@0.17.0
#addin nuget:?package=SabrTrader.Pipeline.AddOns.Contracts&version=0.17.0
#tool nuget:?package=SabrTrader.Pipeline.AddOns.Contracts&version=0.17.0
SabrTrader.Pipeline.AddOns.Contracts
The add-on seam for SabrTrader.
An add-on is a DLL that adds its own windows and Control Center menu entries to the
platform, the platform-level counterpart of an indicator, which lives on a chart. Drop the DLL
in Documents\SabrTrader\Plugins and the host discovers it, lists it and runs it. No host
changes, no recompile, no restart.
public sealed class VolumeScannerAddOn : IAddOn
{
public AddOnManifest Manifest { get; } =
new("acme.volume-scanner", "Volume Scanner", "Acme", "1.0.0");
public AddOnContributions Initialize(IAddOnHost host) => new(
windows: new[]
{
new AddOnWindowKind("main", () => new ScannerWindow(host))
{
MenuTitle = "Volume Scanner",
MenuSection = AddOnMenuSection.New,
},
});
}
What you get
IAddOn |
The one export. Discovered by reflection; Initialize hands you the host. |
AddOnWindowKind |
A window the host can open: from the menu, from your own code, or on workspace restore. |
IAddOnWindow |
One open window: a caption plus an AddOnView. |
AddOnView |
The window body, declared from the same panel elements a chart-trader tab uses. |
IAddOnWindowState<T> |
Opt in and the window comes back with the workspace, state and all. |
IAddOnHost |
Accounts and orders (ITradingService), historical bars (IHistoricalDataService), live ticks (ITickSource), instruments, a private settings store and the activity log. |
Why the view is declared, not drawn
An add-on never references WPF or Avalonia. It declares its window body from the panel-element
vocabulary (ChartPanelButton, ChartPanelLabel, ChartPanelNumber, ChartPanelRow and the rest) and
the host renders it in the user's theme on the platform's own window chrome.
That is what makes one add-on run unchanged in both of the platform's hosts, keeps your code off the UI thread, and means a slow add-on cannot wedge the Control Center's render loop. Element callbacks arrive on the window's thread; writes to elements are safe from any thread and are coalesced by the host, so a background worker updates a live readout with no dispatcher of its own.
Install SabrTrader.Sdk, which bundles this
package with the rest of the contract surface. Developer guide:
https://www.sabrtrader.com/pages/sdk-addons
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- SabrTrader.Pipeline.Contracts (>= 0.17.0)
- SabrTrader.Pipeline.Venues.Contracts (>= 0.17.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on SabrTrader.Pipeline.AddOns.Contracts:
| Package | Downloads |
|---|---|
|
SabrTrader.Sdk
The one package to install for building SabrTrader plugins: indicators, strategies, drawing tools, bar types, Market Analyzer columns, add-ons and venue plugins. It bundles the contract assemblies you compile against, and SabrTrader provides the implementations when it loads your plugin. |
GitHub repositories
This package is not used by any popular GitHub repositories.