Confidence solvers are necessary building blocks for arriving at BloodHound’s final output. They detect fundamental conditions in price action and indicators. There are many different solvers included with BloodHound, some of which analyze indicator behavior (such as slope or cross-over events between indicators), price bar characteristics, closing price against support and resistance, or price swing patterns. All solvers perform an evaluation for both the long and short side for each incoming tick and price bar. These evaluations result in a number between 0 and 1.0.
Solvers provide the source data for your logic. Typically you would employ multiple solvers, each examining various aspects of your charts. Solvers can also be assigned to different time-frames other than the one that BloodHound is actually running on, allowing you to include factors from charts outside the current time-frame. For more information on how solvers fit in the big picture, review the article on How BloodHound Works, or review our Quick Start Guide video.
Before implementing anything in BloodHound, it is often best to first articulate which aspects of your chart and indicators influence your desired output; be it trade signals, setups, filters or whatever your main goal may be. For example, when designing a trading system, start by writing out in detail your signal rules on paper. From that set of rules you will then be able to determine which aspects of your chart, or charts are pertinent to your signals.
It is important to be specific, for example if your system requires the use of a EMA(50), you need to articulate what aspects of the EMA(50) are of interest to you. Is it the change in slope? Is it the relationship to the current price? Is it used as some form of support or resistance? Articulating its specific use will help you determine which solvers are actually required for your analysis.
For the purposes of constructing an example, let us consider the statement “slope of the Stochastic D Indicator is good” as one of your criteria. Suppose that “good”, for the purposes of your system means a positive slope for the long side, and negative slope for the short side. Recall that solvers make evaluations on both the long and short side. To accomplish this, we can configure an Indicator Slope Solver to give us a favorable output value (that is a high number) when the “slope of the Stochastic D Indicator is good” for a particular side. This can be done by configuring an Indicator Slope Solver (with the Stochastic D indicator selected) to produce an output of 1.0 when the slope is positive when evaluating the long side, and produce an output of 1.0 when the slope is negative when evaluating the short side. Indeed the default behavior of the Indicator Slope Solver is already configured to do this.
While you were articulating your criteria, you should also list the various time-frames you need to examine, if applicable. Additional time-frames are charts that you need to examine other than the chart you will actually be running BloodHound on. To add time-frames to your analysis, open up the BHT dialog by first adding or selecting the SiBloodHound indicator under the NinjaTrader Indicator selection dialog (right click on your Chart and select Indicators). Note: additional time-frames can only be added to your BHT in this setup mode (i.e. before BloodHound is actually activated by NinjaTrader). Navigate to the solvers tab which should already be open by default. For every additional chart needed (other than the current chart you are adding BloodHound to), click the button and specify the chart type in the right hand pane (much like you would when opening up a new chart in NinjaTrader).
Once you have finished adding charts, you will need to add the appropriate solver(s) by comparing your requirements to the list below. Note, sometimes a single criteria may require an aggregation of solvers to represent it. If that is the case, simply add all the solver’s needed, and you can “wire” them together in the logic template appropriately.
Click the dropdown menu and select a solver, then click Add to add it to your BHT. Add as many as you like and move them under the appropriate time-frame, if applicable by using the up and down arrow buttons. The order that you add the solvers is otherwise unimportant. You can also add a solver directly to a specific time-frame by selecting the time-frame first in the left hand list before adding the solver.
Common Solver Settings
The name allows you to specify a friendly identification or purpose of a solver. This name will be used to help you identify the solver in the logic template and when you add the node to the work-space.
You can use the description to create a custom comment for your solver. Descriptions are used to remind you what your chosen solver’s intended purpose is. Liberal use of descriptions is recommended to help keep a complex configuration manageable.
Solvers can be enabled or disabled only when used on the Solver tab. When disabled, the solver will not affect the output. BloodHound will behave as if the node does not exist. You can use the disable feature if you need to remove solvers from the output to analyze how BloodHound is producing an unexpected result. When a Logic template (Logic tab) is created this setting no longer has any effect and permanently behaves as set to True. In this case, to disable a solver on a Logic template, delete the leader. A less preferred way to enable/disable a solver is use the Weight Slider Controls.
Solvers can be configured to evaluate only one side (the long side or short side), instead of evaluating both sides simultaneously for every bar (the default behavior). This is useful if you have criteria for the long and short side which are very different or you need to implement the long and short logic separately. This may be necessary if your long and short logic is very different from each other.
The inversion setting allows you to invert the output of the Solver to give you the opposite effect of its regular behavior. The inversion option performs a fuzzy logic inversion taking the original output and apply the formula (1 – x, where x is the original output) to it. It is the equivalent of applying a NOT fuzzy logic hedge to the solver node.
The symbol defines a short-hand abbreviation for the solver for easier identification. It is used in other products that integrate with BloodHound (to be released in the future), and currently does not have a purpose.
Data Type Selection
Most solvers allow you to select the type of data that the solver will analyze. indicator to perform its calculation. These solvers include:
Each of these solvers has at least one section labeled Input A followed by a selectable drop down labelled Type. By default, this is set to Indicator Value allowing you to use an indicator’s plot as the input data to analyze. However, by clicking the drop down you will see there are actually 6 choices in total: Fixed Value, Price, Volume, Indicator, Swing Point Prices, & Linear Regression Channel.
Fixed Value allows you to specify a single value that never changes. This may be useful for instances when you require a fixed threshold, particularly with the Indicator Comparison, for detecting low volume. Say for instance, 100 shares per bar. 100 would be the fixed value to compare against the Volume indicator. Note: using Fixed Value setting does not make sense with slope based solvers such as Indicator Inflection, Indicator Slope or Indicator Change In Slope.
This option allows price data to be used by the solver. The price data can be manipulated by the various settings before it is used by the solver.
Bid & Ask Price Data
The GetCurrentAsk() and GetCurrentBid() methods are used to acquire this data. Those methods only work with realtime data. See NinjaTrader's documentation for more info. BloodHound will incorporate the methods to access historical B/A data in the future.
Volume will feed the current bar volume (and total volume for historical bars) into the solver.
This is the default setting and most commonly used. This allows the selection of any installed indicator that has one or more of the following data types; the standard Plot method, a DataSeries, or a BoolSeries. A Plot method is the plotted line values seen on the chart. A DataSeries and BoolSeries can not be seen on the chart, but can be read by BloodHound. A DataSeries can contain the indicator’s main value, extra sub-data, or sometimes a signal which typically is a value of 1 or the instrument’s Close price.
In order for BloodHound to read 3rd party indicators the developer must follow NinjaTrader’s Best Practices for 3rd Party Developers > Expose Indicator States. This video will help you determine if your favorite 3rd party indicator is readable by BloodHound… How to analyze custom indicators in BloodHound.
The Displacement parameter works the same way as the NinjaTrader Displacement parameter. It is used to analyze indicator plot values from previous bars back. Setting Displacement to 5 will set the solver to use the indicator’s value from the 5th bar back. In effect, this shifts the indicator plot from 5 bars back to the current bar. For instance, suppose you want to analyze an indicator’s value 5 bars ago. Set the Displacement value to 5 and the solver will always use indicator data that is 5 bars in the past. The Displacement operates on the chart/time-frame the solver is set to.
Swing Point Prices
Selecting swings allow you to harness price swing points as input. Using Swings will feed the price at which a top or bottom occurred in the past to the solver. This is useful for when you need to factor in the lowest low, or highest high from past swing point prices.
You can use the bundled indicator called SiSwings to help you visualize how BloodHound is identifying swing prices on your chart. To do this, add the SiSwing indicator to your chart directly (using the NinjaTrader Indicator dialog).
Start by specifying how many price swings you would like to analyze in the past. When utilizing the Swings setting, you can specify the type of swing data you are after by selecting Tops or Bottoms, and Widest or Tightest Swing for both the long and short side evaluations.
For example, suppose you need to identify the price point of Highest High of the past 5 price swings when doing the long evaluation, and the Lowest Low of the past 5 price swings when doing the short evaluation. First you would set Number of Swings to 5, restricting the solver to only look at the past 5 price swings. You would then set Long: Bottoms or Tops to Tops, and Long: Widest or Tightest toWidest. Similarly, you would set Short: Bottoms or Tops to Bottoms and Short: Widest or Tightest toWidest. The Widest setting will produce the furthest bottom or top found in the last number of price swings set by: Number of Swings. In contrast, using Tightest, will cause the solver to produce the price at which the Lowest High occurred (for a setting of Tops) and the Highest Low (for a setting of Bottoms), again within the past number of swings specified by Number of Swings. The table below summarizes the possible combinations:
Note: using the Swing Point Prices setting as input for a solver does not make sense for slope related solvers such as Indicator Slope, and Indicator Change in Slope.Regression ChannelSelecting Regression Channel allows you to use the Regression Channel’s Upper, Middle or Lower line as input to the solver. This may be useful if you need to compare an indicator or the current price to one of the Regression Channel’s lines. You can imagine that the the NinjaTrader Regression Channel is overlaid on your chart with the Period set as Regression Period and Width set as Width in Deviations. You can select which channel line to use as input for the long and short evaluations separately, with a choice of the Upper Channel Line, Middle Channel Line and Lower Channel Line.Note: selecting Regression Channel for slope related solvers such as Indicator Slope, Indicator Change in Slope andIndicator Inflection will not provide a channel selection since the slope of Upper, Middle and Lower channel line is always the same. As you may expect, the slope of the Regression Channel will be considered as the input instead.
BloodHound provides various units for measuring distance or height. When you specify a distance, you can elect to measure in points, ticks, ATR’s or Renko bricks.
Points are the base unit of the underlying instrument, and for indicators that run in their own sub-panel such as the MACD, CCI, Stochastics, and Momentum etc. This is the fundamental unit of charting.
E.G. If you wanted to express a measurement of $0.50 in the crude oil futures (CL), you would simply use a value of 0.5 and set Measured In to Points.
Please Note: When identifying a Difference in the Comparison solver and using an indicator that plots in its own sub-panel you will need to change the Measurement Unit from Ticks to Points.
The tick unit only applies when working on the price panel, and with indicators that are designed to plot on the price panel. A tick is the smallest amount/increment an instrument moves or trades at.
Forex: In NinjaTrader, a tick is 1/10th of a pip by default. NinjaTrader can be changed so a tick equals a pip within the settings.
E.G. To express $0.50 in the CL futures instrument, you would set the value to 50 and Measured In to Ticks (CL futures have a tick size of $0.01).
Please Note: When using the Difference in the Comparison solver and using an indicator that plots in its own sub-panel(e.g. MACD, CCI, Stochastics) you will need to set the Measurement Unit to Points. Do not use Ticks.
Renko Bricks and ATRs
Both the Renko Brick and ATR setting for Measured In is useful for expressing a value in terms of number of bars. For example, suppose your trading criteria required you to find moments where two particular indicators where 5 “bars” apart in distance. You could accomplish this by using either the Renko Brick (if you were using a Renko Chart) or ATR setting for Measured In.
Setting Measured In to Renko Bricks only applies to the Renko Chart‘s and allow you to express a value in terms of the number of bricks. For example, suppose you had a Renko chart open with the brick size set to 5. A measurement of $0.50 therefore is actually 10 bricks (since each brick is 5 ticks, and as we established earlier, $0.50 is equivalent to 50 ticks). Thus to express $0.50 the preceding example, you would set value to 5, and Measured In to Renko Bricks. Note, the behavior is unpredictable if you use the Renko Brick measurement on a non-Renko chart!
Similar to Renko Bricks, setting the Measured In to ATR’s allows you to express a measurement in terms of the average bar size (determined by the Average True Range). Since all chart types other than the Renko Chart have undefined bar sizes, ATR’s are often used as a viable alternative to gauge bar size. The ATR setting works the same as the Renko Bricks setting with one exception – you can also specify the ATR Period that is used to arrive at the Average True Range value. The longer the ATR Period, the more bars are considered when calculating the average bar size. A period that is too large may incorporate bars that are not typical of current market conditions, and a period too short may not include enough bars to get an accurate sample to calculate an average.