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.

The built-in FootprintImbalanceSignal, FootprintAbsoprtionSignal, BigTradeSignal, RelativeToProfileSignal, and DOMImbalanceSignal are included in the Strategies assembly and can be used directly in custom strategies. FootprintAbsoprtionSignal is the public class name; its existing spelling is retained for compatibility.

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​