Solvers (in full, confidence solvers) are the building blocks of every BloodHound system. Each one detects a basic condition in price action or an indicator: a slope, a crossover, a threshold, a swing pattern, price against support or resistance.
Every solver evaluates both the Long and the Short side on each incoming tick or bar, and gives a result between 0 and 1. A system usually combines several solvers, each looking at a different aspect of the chart. Solvers can also run on other charts (timeframes) than the one BloodHound is on. For how solvers fit into the bigger picture, see How BloodHound Works.
Solver types
| Solver | Detects | Typical use |
|---|---|---|
| Bar Direction | Whether the current bar (or a past bar) closed in the desired direction. | Wait for a set number of bars in one direction before signaling. |
| Bar Length | The length of the current or past bars over a period. | Treat bar volatility as a favorable or unfavorable factor. |
| Change in Slope | An indicator’s past slope together with its current change of direction. | Spot early weakness or strength as an indicator rolls over or turns up. |
| Comparison | Two Inputs (indicators or prices) compared with each other. | Is an indicator above another? Is price above an indicator? |
| Crossover | An indicator or price crossing above or below another. | Catch a crossover event. |
| Dorschden Swing Trend | Higher highs and higher lows, or lower highs and lower lows. | Read the trend from swing points (price action). |
| Dorschden Swing Volatility | The distances between recent swing lows and swing highs. | Treat swing size as favorable or unfavorable volatility. |
| Expansion Contraction | Two Inputs moving apart, coming together, or moving in parallel. | Are indicator bands spreading out or squeezing together? |
| Inflection | An indicator reversing direction. | Early signs of a trend reversal from the slope of an indicator. |
| Regression Channel Position | Where the close is within a regression channel: bottom, middle or top. | Use the position as a favorable or unfavorable bias. |
| Regression Channel Width | The width of a regression channel. | Use channel width as a measure of volatility. |
| Slope | The angle and direction of an indicator. | Check that a trend or indicator direction agrees with the rest of your system. |
| Support Resistance | Price against a support or resistance level from an indicator, swing high/low or regression channel. | Headwind mode: price running into a level against your trade. Tailwind mode: price bouncing off a level in your favor. |
| Threshold | An Input above, below or between fixed levels, such as the CCI above 200 or below -200. | Overbought/oversold levels on indicators like Stochastics, MACD or RSI; signal plots (e.g. CandleStickPattern) firing. |
| Time Session | Whether a bar closed inside or outside blocks of time you set for each day of the week. | Limit signals to certain hours or days, or avoid extended trading hours. |
Establishing criteria
Before building anything in BloodHound, write down which aspects of your charts and indicators decide the result you want, whether that is trade signals, setups or filters. For a trading system, write out your signal rules in detail first; they tell you which aspects of which charts matter.
Be specific. If your system uses an EMA(50), what about it matters: its slope, its relationship to price, its use as support or resistance? The answer tells you which solvers you need.
Example
Say one criterion is “the slope of the Stochastics D is good”, where good means rising for longs and falling for shorts. A Slope solver with the Stochastics D as its Input does exactly that: it outputs 1 on the Long side when the slope is positive, and 1 on the Short side when it is negative. That is its default behavior.
Adding charts (timeframes)
BloodHound says Chart rather than timeframe, because a chart can also bring in data from another instrument. NinjaTrader calls it a Data Series. While writing your criteria, list the charts your system needs to look at.
The chart BloodHound is running on appears as Default Timeframe in the Solvers panel. It can’t be changed, because BloodHound can’t change the Data Series of the chart it’s on.
To add a chart, open the BloodHound window and go to the Logic tab (selected by default). Click Chart for each additional chart, then set the chart type in the Property Inspector on the right.
Adding solvers
Once the charts are in place, pick solvers by matching your criteria against the solver types. Sometimes one criterion needs several solvers; add them all and wire them together on the Logic Board, usually with an AND node.
Add a solver from the Solvers menu. The order doesn’t matter. To put a solver on a particular chart, select the chart in the Solvers panel first, or move the solver there afterwards with the up and down arrow buttons.
Common solver settings
Every solver has these, in the Property Inspector. Each solver page covers them in full.
| Setting | What it does |
|---|---|
| Name | The box at the top of the Property Inspector. A friendly name that identifies the solver on the Logic Board. |
| Enable, Invert, Swap | The Modifiers buttons on the Properties tab, set for each node on a Logic Board. Enable leaves the node out of the calculation when off. Invert gives the opposite result (1 − x, a fuzzy logic NOT). Swap swaps the Long and Short outputs. |
| Evaluate | Both (the default), Long only or Short only. Useful when your long and short criteria are very different and need to be built separately. |
| Weight | On the Options tab. Scales the node’s output, for fuzzy logic systems. |
| Description | On the Options tab. Your own note on what the solver is for. Use it freely: it keeps complex systems manageable. |
Data type selection
Most solvers let you choose what kind of data they analyze, in the Input section of the Property Inspector (Input A and Input B on solvers with two). The Type menu defaults to Indicator Value; the settings below it change to match the type.
Solvers with a Type menu: Change in Slope, Comparison, Crossover, Expansion Contraction, Inflection, Slope, Support Resistance, Threshold.
Indicator Value
The default and most used type. Select any installed indicator that has a Plot or a Series<T> output.
| Output | What it is |
|---|---|
| Plot | The line or bars you see on the chart (an SMA line, the RSI, volume bars). Always has a numeric value, shown at the edge of the chart. |
| Series<T> | Not visible on the chart, but holds data like a plot and BloodHound can read it: the indicator’s main value, extra values, or a signal. Signal values are usually +1, 0 or -1. |
Note
Some NinjaTrader indicators are not readable, by NinjaTrader’s design. For programmers: BloodHound reads Series<T> of type bool, int, double and long.
Select Indicator window
Click the ellipsis (…) button to the right of the indicator to open the Select Indicator window. Use it to:
- Select the indicator.
- Set the indicator’s properties.
- Select the plot or output for the solver to analyze.

| Control | What it does |
|---|---|
| Search box | Type the first three letters of an indicator to filter the list. |
| Refresh Indicator List | Use once after installing a new indicator, to rebuild the list. Also in NinjaTrader under Control Center » Help » SharkIndicators. Still missing? See below. |
| Add New | Adds the selected indicator; the same as double-clicking it. |
| Nest Input | Feeds one indicator’s output into another’s input, for example smoothing the CCI by nesting it in an SMA. Video: How to perform indicator nesting within a solver. |
| Remove | Removes a nested indicator from the list at the bottom. |
Indicators missing from the list
An indicator missing from the Select Indicator window has no readable output, threw an error while the list was being built, or only draws on the chart with custom graphics, which BloodHound can’t read.
To be readable, a third-party indicator has to follow NinjaTrader’s Best Practices for 3rd Party Developers (Expose Indicator States). This video shows how to check whether your indicator has a readable output: How to analyze custom indicators in BloodHound.
NinjaTrader Order Flow indicators: most are not readable, by NinjaTrader’s design. As of February 19, 2025, only O/F Cumulative Delta and VWAP are readable.
Showing indicator properties in NinjaTrader windows
Can a solver’s indicator settings appear in NinjaTrader’s Indicators window or the Strategy Analyzer, for optimization or quick changes? Not at the moment, because of how NinjaTrader’s windows work.
Why not

NinjaTrader’s Indicators window, the Strategy Analyzer and its other windows use a fixed property grid. Settings can’t be added or removed on the fly; NinjaTrader needs a new version of the indicator to change the list. BloodHound lets you add and remove indicators on the fly, so it can’t expose their properties there.
For example, if your system uses the MACD, its Fast, Slow and Smooth settings would need to be in the grid. Swap the MACD for Momentum and Period has to be added while the MACD’s settings are removed, which NinjaTrader doesn’t allow. We hope a solution can be found in the future.
Displacement
Works like NinjaTrader’s Displacement: the solver uses the indicator’s value from that many bars back, on the chart the solver is set to. Displacement 5 uses the value from 5 bars ago, in effect shifting the plot forward 5 bars.
Price
Uses bar prices, optionally processed over a number of bars first. BloodHound doesn’t do custom math on prices; for that you need a custom indicator.
The Long and Short outputs are calculated independently
Each output has its own price setting and its own lookback processing, and one never affects the other. The solver works out its Long output from the Long settings alone, and its Short output from the Short settings alone. That lets each side look at the price that suits it: for example, the Low for the Long output and the High for the Short output, to check that a whole bar is above or below a moving average (Comparison solver, Example 1A).
| Setting | What it does |
|---|---|
| Price Type Long | The bar price used to calculate the Long output: Open, High, Low, Close, or one of the body prices below. It has no effect on the Short output. |
| Price Type Short | The bar price used to calculate the Short output, chosen from the same list. It has no effect on the Long output. |
| Lookback Period | How many bars to look at. 1 is the current bar, 2 includes the previous bar, and so on. |
| Long Lookback Processing | How the prices in the Lookback Period are processed for the Long output only (the Short output has its own setting). Single Value: the price from the bar the Lookback Period points to, unprocessed (the Lookback Period then works like Displacement). Average Values: the average price over the Lookback Period. Max Values: the highest price in the Lookback Period. For example, the highest High of the last 10 bars: Price Type Long = High, Lookback Period = 10. Min Values: the lowest price in the Lookback Period. |
| Short Lookback Processing | How the prices in the Lookback Period are processed for the Short output only (the Long output has its own setting). Single Value: the price from the bar the Lookback Period points to, unprocessed (the Lookback Period then works like Displacement). Average Values: the average price over the Lookback Period. Max Values: the highest price in the Lookback Period. For example, the highest Low of the last 10 bars: Price Type Short = Low, Lookback Period = 10. Min Values: the lowest price in the Lookback Period. |
Body prices
| Price | Returns |
|---|---|
| Body Top | The top of the candle body, whatever the bar direction: the close on an up bar, the open on a down bar. |
| Body Median | The middle of the body: (Close + Open) ÷ 2. |
| Body Bottom | The bottom of the candle body: the open on an up bar, the close on a down bar. |
Volume
The bar’s volume. A shortcut for selecting NinjaTrader’s VOL indicator.
Swing Point Prices
The prices of past swing highs and lows, for example the highest high or lowest low of the last few swings. To see the swing points BloodHound finds, add the bundled Swing Highs & Lows indicator to your chart.
How the swing settings work
Number of Swings sets how many past swings to look at. Then, for each side, choose Bottoms or Tops and Widest or Tightest. Widest gives the most extreme top or bottom in those swings; Tightest gives the least extreme.
| Widest | Tightest | |
|---|---|---|
| Tops | Highest high | Lowest high |
| Bottoms | Lowest low | Highest low |
For example, for the highest high of the last 5 swings on the Long side and the lowest low on the Short side: Number of Swings = 5, Long: Tops and Widest, Short: Bottoms and Widest.
Swing points don’t make sense as the Input of slope solvers such as Slope or Change in Slope: not every data type suits every solver.
Linear Regression Channel
The channel’s Upper, Middle or Lower line, chosen separately for the Long and Short sides. Useful for comparing an indicator or price with a channel line.
Slope solvers (Slope, Change in Slope, Inflection) have no line choice, because all three lines have the same slope. They evaluate the slope of the channel, the same as using the Lin. reg. slope indicator as the Input.
Fixed Value
A single value that never changes, for when you need a fixed level in a solver with two Inputs. For example, to detect low volume with the Comparison solver, compare the Volume indicator with a Fixed Value of 100.
Fixed Value doesn’t make sense with slope solvers such as Slope, Inflection or Change in Slope.
Measuring distance
Wherever a solver takes a distance, you can measure it in Points, Ticks, ATRs or Renko bricks.
Points
The instrument’s own price unit, and the unit of indicators that plot in their own sub-panel (ADX, CCI, MACD, Stochastics and so on). For example, $0.50 on CL futures is 0.50 points.
Indicators in a sub-panel
In the Rules window of the Comparison, Expansion Contraction, Slope or Threshold solvers, an indicator that plots in its own sub-panel (ADX, CCI, MACD, Stochastics and so on) needs the unit set to Points. Don’t use Ticks: those indicators don’t move in tick increments.
Ticks
The smallest price increment the instrument trades in. Only for the price panel and indicators that plot on it. For example, CL futures have a tick size of 0.01, so $0.50 is 50 ticks.
Forex: in NinjaTrader a tick is a tenth of a pip by default. You can change it to one pip in NinjaTrader’s Options.
ATR and Renko bricks
Both express a distance as a number of bars. For example, to find when two indicators are 5 “bars” apart, measure in ATR, or in Renko bricks on a Renko chart.
| Unit | How it works |
|---|---|
| ATR | A multiple of the average bar size from the Average True Range. Every chart type except Renko has varying bar sizes, so ATR is a good way to gauge a typical bar. You also set the ATR Period: too long a period includes bars that aren’t typical of current conditions, too short a period gives too small a sample. |
| Renko Bricks | A number of bricks on a classic Renko chart. For example, with a brick size of 5 ticks, $0.50 on CL (50 ticks) is 10 bricks, so set the value to 10. Results are unpredictable on non-Renko and hybrid Renko charts. |