Skip to content
Black Friday: sale starts November 15th.

Solvers

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

SolverDetectsTypical use
Bar DirectionWhether 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 LengthThe length of the current or past bars over a period.Treat bar volatility as a favorable or unfavorable factor.
Change in SlopeAn indicator’s past slope together with its current change of direction.Spot early weakness or strength as an indicator rolls over or turns up.
ComparisonTwo Inputs (indicators or prices) compared with each other.Is an indicator above another? Is price above an indicator?
CrossoverAn indicator or price crossing above or below another.Catch a crossover event.
Dorschden Swing TrendHigher highs and higher lows, or lower highs and lower lows.Read the trend from swing points (price action).
Dorschden Swing VolatilityThe distances between recent swing lows and swing highs.Treat swing size as favorable or unfavorable volatility.
Expansion ContractionTwo Inputs moving apart, coming together, or moving in parallel.Are indicator bands spreading out or squeezing together?
InflectionAn indicator reversing direction.Early signs of a trend reversal from the slope of an indicator.
Regression Channel PositionWhere the close is within a regression channel: bottom, middle or top.Use the position as a favorable or unfavorable bias.
Regression Channel WidthThe width of a regression channel.Use channel width as a measure of volatility.
SlopeThe angle and direction of an indicator.Check that a trend or indicator direction agrees with the rest of your system.
Support ResistancePrice 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.
ThresholdAn 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 SessionWhether 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.

SettingWhat it does
NameThe box at the top of the Property Inspector. A friendly name that identifies the solver on the Logic Board.
Enable, Invert, SwapThe 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.
EvaluateBoth (the default), Long only or Short only. Useful when your long and short criteria are very different and need to be built separately.
WeightOn the Options tab. Scales the node’s output, for fuzzy logic systems.
DescriptionOn 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.

OutputWhat it is
PlotThe 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:

  1. Select the indicator.
  2. Set the indicator’s properties.
  3. Select the plot or output for the solver to analyze.
ControlWhat it does
Search boxType the first three letters of an indicator to filter the list.
Refresh Indicator ListUse once after installing a new indicator, to rebuild the list. Also in NinjaTrader under Control Center » Help » SharkIndicators. Still missing? See below.
Add NewAdds the selected indicator; the same as double-clicking it.
Nest InputFeeds 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.
RemoveRemoves 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).

SettingWhat it does
Price Type LongThe 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 ShortThe bar price used to calculate the Short output, chosen from the same list. It has no effect on the Long output.
Lookback PeriodHow many bars to look at. 1 is the current bar, 2 includes the previous bar, and so on.
Long Lookback ProcessingHow 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 ProcessingHow 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

PriceReturns
Body TopThe top of the candle body, whatever the bar direction: the close on an up bar, the open on a down bar.
Body MedianThe middle of the body: (Close + Open) ÷ 2.
Body BottomThe 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.

WidestTightest
TopsHighest highLowest high
BottomsLowest lowHighest 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.

UnitHow it works
ATRA 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 BricksA 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.

In this section

Still stuck? Contact support