Cold Blood Index

It is essential for risk control to permanently observe automated trading systems and detect as early as possible if a market change rendered the algorithm unprofitable. The Cold Blood Index (CBI) can distinguish between normal drawdowns that are common to algo trading systems, and loss of profitability due to due to a substantial market change.
  For this purpose, the live trading profit/loss curve is daily compared with the backtest profit-loss curve. The drawdown probability is calculated based on the algorithm published on Financial Hacker, and displayed in the trade log and on the status page. A drawdown of low probability indicates a deviation from the backtest due to a a market change. This information can be used for deciding whether to stop the trading algorithm, or to continue it in cold blood.

The drawdown probability is calculated with the following function:

CBI (var* Data, int Length, int Shuffle, var Depth, int Width, int Horizon): var

Returns the probability in percent (0..100) of encountering a drawdown of the given Depth and Width within a given time Horizon. For this, the drawdown is compared with the Data array that is supposed to contain a profit/loss curve from a backtest or a previous trading session.

Returns:

Probability in percent (0..100). A low probability (less than 2%) indicates a deviation from the backtest. 

Parameters:

Data Data array with profit/loss values, f.i. from the pnl.dbl curve stored in a backtest.
Length Length of the data array, positive for an array in time descending order and negative for ascending order.
Shuffle Number of shuffled profit/loss curves to evaluate, or 1 for only evaluating the original curve. The returned probability is calculated from the original and the shuffled curves.
Depth Drawdown depth, the difference of an equity or balance peak with the subsequent equity or balance valley, in the same scale as the values in the Data array.
Width Drawdown duration, the time distance between the highest peak and the subsequent deepest valley, in the same units as the time distance of the points in the Data array, usually bar periods or days.
Horizon Live trading time in in the same units as the Data array, usually bar periods or days. Must be equal or above Width and smaller than Length.

 

CBIScale

Drawdown scale for the automatic CBI calculation in [Trade] mode (default = 1 = no scaling). The drawdown depth is divided by this scale factor for calculating the CBI.

Type:

var

ReturnCBI

Current CBI value in  [Trade] mode (see remarks).

Type:

var, read/only
 

Remarks:

Examples:

//scale drawdowns for CBI according to invested capital
var Invest = slider(1,5000,0,10000,"Investment","Invested capital");
static var InitialInvest = 0;
if(is(INITRUN)) InitialInvest = Invest; // store the initial investment that was also used in the backtest 
if(InitalInvest > 0) CBIScale = Invest/InitialInvest;
//Check the Cold Blood Index at a Z12 Drawdown of $800 in 
//$500 in the last 60 of 100 trading days
void main()
{
  var* PnLs = file_content("Data\\Z12_pnl.dbl");
  int Length =  file_length("Data\\Z12_pnl.dbl")/sizeof(var);
  var P = CBI(PnLs,-Length,1,500,60,100);
  printf("\nCBI = %.0f%%",P);
}

See also:

Trading, Cold Blood Index, randomize, ScholzBrake

 

► latest version online