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
| Signal | Condition | Calculate |
|---|---|---|
| FootprintImbalanceSignal | Stacked buy/sell imbalances in footprint bar | OnEachTick |
| FootprintAbsorptionSignal | Passive absorption at price extremes | OnEachTick |
| FootprintSRZonesSignal | Active imbalance/absorption S/R zones | OnEachTick |
| ClusterZonesSignal | Consecutive cluster zones in footprint | OnBarClose |
Volume Profile Signals
| Signal | Condition | Calculate |
|---|---|---|
| RelativeToProfileSignal | Price position relative to VWAP, VAH/VAL, or StdDev | OnBarClose |
| VolumeProfileDeltaSignal | Profile delta direction with volume/range filters | OnBarClose |
| BarJoinedPOCsSignal | Consecutive joined POCs within a bar | OnEachTick |
Volume Delta Signals
| Signal | Condition | Calculate |
|---|---|---|
| BarDeltaSignal | Bar delta direction with minimum threshold | OnBarClose |
| CumulativeDeltaSignal | Session cumulative delta direction | OnBarClose |
| DeltaRateSignal | Delta rate of change with threshold | OnBarClose |
| BarIcebergsSignal | Iceberg detection by volume threshold | OnEachTick |
Big Trade Signals
| Signal | Condition | Calculate |
|---|---|---|
| BigTradeSignal | Large trade detection (opposite side = signal) | OnEachTick |
| TradesClusterSignal | Cluster of trades by volume, count, and range | OnEachTick |
Market Depth Signals (Level 2)
| Signal | Condition | Calculate |
|---|---|---|
| DOMImbalanceSignal | Bid/ask ratio imbalance in order book | NotApplicable |
| DOMBlockSignal | Persistent large order in DOM | NotApplicable |
Delta Divergence Signals
| Signal | Condition | Calculate |
|---|---|---|
| DeltaDivergenceSignal | Price/delta divergence at swing points | OnBarClose |
Bar-Based Signals
| Signal | Condition | Calculate |
|---|---|---|
| BarVolumeSignal | Bar volume exceeds threshold (filter) | OnBarClose |
| BarWickSignal | Wick size at bar extreme | OnBarClose |
| BarMetricsSignal | Bar body/size/wick metrics | OnBarClose |
| OrderflowBarMetricsSignal | Orderflow bar metrics (volume, delta, delta%) | OnBarClose |
| UpDownBarSignal | Bullish or bearish bar direction | OnBarClose |
| TradesClusterSignal | Cluster of trades matching criteria | OnEachTick |
Creating Custom Signals
Extend the Signal base class to create your own signal. See Custom Signal for a step-by-step guide.
See Also
- Signal Base Classes — Node, Signal, LogicalNode, RangeNode
- Decision Tree — how signals combine in patterns