Skip to main content

Signal Probe

SignalProbe evaluates its own signal instances independently of a pattern's decision tree. It records signal events and first-touch price outcomes, but never validates a pattern or opens a position. Use it when a strategy needs to measure signals that are disabled for trading, or to collect statistics without allowing probe evaluation to affect the trading path.

Namespace: MZpack.NT8.Algo
Source: [INSTALL PATH]/API/SignalProbe.cs

Creating a Probe​

Pass signal factories to an Algo.Strategy.Initialize() overload. Factories are required because a probe must own fresh signal instances: tree signals have mutable evaluation state and cannot safely be evaluated by both paths.

strategy.Initialize(
entryPattern,
exitPattern,
new[] { entry },
attempts: 1,
entryProbeSignals: new Func<Signal>[]
{
() => new MySignal(strategy, footprint),
() => new AnotherSignal(strategy, footprint)
});

The resulting probes are available through strategy.SignalProbes. A probe marks each event with IsInTree, so the same journal can distinguish signals that trade from signals observed only for research.

Configuration​

Configure a new probe in MZpackStrategyBase.OnConfigureSignalProbe():

protected internal override void OnConfigureSignalProbe(SignalProbe probe)
{
probe.HorizonBars = 40;
probe.LadderTicks = 100;
}
PropertyDefaultDescription
HorizonBars40Number of bars for which an event's outcome remains open. Observation closes at the session boundary or end of data if it comes first
LadderTicks0First-touch reach on each side of the entry price. 0 lets the host choose a derived reach
BeforePassnullOptional callback immediately before all probe signals are evaluated
CanRecordnullOptional per-event gate. A rejected firing increments SkippedCount but does not create an event
VolumeRankOf / DeltaRankOfnullOptional host-provided percentile ranks written into each firing

Use OnBeforeSignalProbePass() rather than a signal to refresh shared state that probe signals would otherwise update first. SignalProbe does not know a host's calibration or other strategy-specific state.

Results​

MemberDescription
EventsCaptured ProbeEvent items in chronological order
OutcomesFirst-touch outcomes corresponding to the events
DiagnosticsHuman-readable capture summary
SkippedCountNumber of signal firings rejected by CanRecord
FirstRecordedSessionFirst session that produced a recorded event
ResolvedLadderTicks / ResolvedLadderStep / ResolvedLadderLevelsEffective first-touch ladder after the probe resolves the requested reach
CloseOpenOutcomes()Close all events still open at end of data or strategy lifetime

A ProbeEvent records signal name, direction, price, time, bar index, tree membership, market context, and optional VolumeRank / DeltaRank. Its ProbeOutcome records first-touch times and bars for favourable and adverse ladder levels, MFE, MAE, BarsToMFE, FirstTickPrice, and the price at the observation horizon.

Capabilities​

Probe signals participate in the same capability collection as tree signals. Their DeclareRequirements() calls are included when Algo.Strategy.Initialize() calls ApplyRequiredCapabilities(). This is important for observed-only signals: a signal disabled for trading can still request the indicator data it needs to be measured.

See Also​