"Cold Blood Index"
The Cold Blood Index (CBI) can determine whether a strategy is becoming unprofitable due to a permanent market change. For this purpose, drawdowns are daily compared with the profit-loss curve from the last backtest. The probability of encountering such a drawdown 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 biased test or a market change. This information can be used for deciding whether it's better to stop trading the system, or to continue it in cold blood.
The probability is calculated with the following function:
verify (var* Data, int Length, 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 contains a profit/loss curve from a backtest or a previous trading session.
Probablilty in percent (0..100).
||Data array with profit/loss values, f.i. from the _pnl.dbl curve stored in a backtest.
||Length of the data array, positive for an array in time descending order and negative for ascending order.
||Drawdown depth, the difference of an equity or balance peak with the subsequent equity or balance valley. Must be based on the same scale as the values in the Data series.
||Drawdown duration, the time distance between the peak and the subsequent valley, in the same units as the points in the Data array, usually bar periods or days.
||Live trading time in in the same units as the points in the Data array, usually bar periods or days. Must be equal or above Width and smaller than Length.
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.
- The CBI is only displayed in [Trade] mode when a backtest profit/loss curve is present in the Data folder, when trades have been opened and a drawdown was already encountered, and when the live trading time is longer than 3 days. It is recalculated once per day.
- In [Test] mode the CBI is recorded in the .log file when Verbose is at 2 or above.
- When the volume per trade is different to the backtest, DDScale must be set to the current average trade volume divided by the average trade volume in the backtest (see example).
- The Z systems display the CBI on their trade status pages. For this, run a backtest with the Capital slider at the same position as in live trading at session start.
//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) DDScale = Invest/InitialInvest;
//Check the Cold Blood Index at a Z12 Drawdown of $800 in
//$500 in the last 60 of 100 trading days
var* PnLs = file_content("Data\\Z12_pnl.dbl");
int Length = file_length("Data\\Z12_pnl.dbl")/sizeof(var);
var P = verify(PnLs,-Length,500,60,100);
printf("\nP = %.0f%%",P);
Trading, Cold Blood Index
► latest version online