Skip to main content

Signals Overview

Signals are the building blocks of MZpack strategy patterns. Each signal evaluates a market condition and returns a direction (Long, Short, or None). Signals are organized into decision trees where AND, OR, and CONJUNCTION logic combines them into pattern validation rules.

Node Hierarchy

Node (abstract)
├── Signal ← market condition evaluator
│ ├── Action ← simplified signal (no range constraints)
│ │ └── RollingProfileAction ← rolling volume profile generation
│ └── [21 built-in signals]
├── LogicalNode ← AND / OR / CONJUNCTION logic
└── RangeNode ← bar/tick range constraint
└── Range ← concrete range implementation

Two Ways to Use Signals

1. In a Decision Tree (Pattern Condition)

Signals are added to a pattern's SignalsTree or FiltersTree. The tree evaluates all signals on each market event and validates the pattern when the tree resolves to a determined direction.

var pattern = new Pattern(strategy, Logic.And, new Range(), true);
pattern.Signals.Root.Add(new FootprintImbalanceSignal(strategy,
MarketDataSource.Level1, SignalCalculate.OnEachTick));
pattern.Signals.Root.Add(new BarDeltaSignal(strategy,
MarketDataSource.Level1, SignalCalculate.OnBarClose));

2. As an Action

Action is a simplified Signal subclass used for preparatory operations (like generating a rolling volume profile) before other signals evaluate. Actions have no range constraints and don't expire.

Built-in Signals by Data Source

Footprint Signals

SignalConditionCalculate
FootprintImbalanceSignalStacked buy/sell imbalances in footprint barOnEachTick
FootprintAbsorptionSignalPassive absorption at price extremesOnEachTick
FootprintSRZonesSignalActive imbalance/absorption S/R zonesOnEachTick
ClusterZonesSignalConsecutive cluster zones in footprintOnBarClose

Volume Profile Signals

SignalConditionCalculate
RelativeToProfileSignalPrice position relative to VWAP, VAH/VAL, or StdDevOnBarClose
VolumeProfileDeltaSignalProfile delta direction with volume/range filtersOnBarClose
BarJoinedPOCsSignalConsecutive joined POCs within a barOnEachTick

Volume Delta Signals

SignalConditionCalculate
BarDeltaSignalBar delta direction with minimum thresholdOnBarClose
CumulativeDeltaSignalSession cumulative delta directionOnBarClose
DeltaRateSignalDelta rate of change with thresholdOnBarClose
BarIcebergsSignalIceberg detection by volume thresholdOnEachTick

Big Trade Signals

SignalConditionCalculate
BigTradeSignalLarge trade detection (opposite side = signal)OnEachTick
TradesClusterSignalCluster of trades by volume, count, and rangeOnEachTick

Market Depth Signals (Level 2)

SignalConditionCalculate
DOMImbalanceSignalBid/ask ratio imbalance in order bookNotApplicable
DOMBlockSignalPersistent large order in DOMNotApplicable

Delta Divergence Signals

SignalConditionCalculate
DeltaDivergenceSignalPrice/delta divergence at swing pointsOnBarClose

Bar-Based Signals

SignalConditionCalculate
BarVolumeSignalBar volume exceeds threshold (filter)OnBarClose
BarWickSignalWick size at bar extremeOnBarClose
BarMetricsSignalBar body/size/wick metricsOnBarClose
OrderflowBarMetricsSignalOrderflow bar metrics (volume, delta, delta%)OnBarClose
UpDownBarSignalBullish or bearish bar directionOnBarClose
TradesClusterSignalCluster of trades matching criteriaOnEachTick

Creating Custom Signals

Extend the Signal base class to create your own signal. See Custom Signal for a step-by-step guide.

See Also