# Strategy performance statistics

The following system variables can be evaluated in the
objective
or evaluate function. Some become available only at the end of a simulation
or a live trading session, others are updated at any bar during
the test or session. There is also a set of trade statistics that can be evaluated during the
backtest. The statistics variables can be used for calculating individual performance metrics and printing them to the performance report.

## DrawDownMax

Maximum drawdown, the largest difference between a balance peak and the lowest subsequent equity valley
during the simulation period, in account currency units.
Updated at any bar.
## MAE

Maximum adverse excursion, the largest difference between an equity peak and the lowest subsequent equity valley during the simulation period, in account currency units.
Updated at any bar.
## AEDepth

Current adverse excursion, the difference between the last equity peak and the
current equity value, in account currency units. Updated at any bar.
## MarginMax

Maximum margin sum of open trades during the simulation period, in account currency units.
Updated at any trade.
## RiskMax

Maximum possible loss sum of all open trades during the simulation period, in account currency units.
The possible loss is calculated by the stop loss distance of a trade, or estimated at 10% of the price if no stop loss was used.
Updated at any trade.
## SpreadCost

Total loss by bid-ask spreads
during the simulation period, in account currency units.
Updated at any trade.
## SlippageCost

Total win or loss by simulated slippage during the simulation period, in account currency units.
Updated at any trade.
## RollCost

Total win or loss by rollover and margin interest during the simulation period, in account currency units.
Updated at any trade.
## CommissionCost

Total loss by commissions
during the simulation period, in account currency units.
Updated at any trade.
## ReturnMean

Mean of all bar returns on investment. The bar return on investment is the equity difference to the previous bar, divided by Capital. If **Capital** is not set, the sum of normalized
maximum drawdown and maximum margin is used.
Only available at the end.
## ReturnStdDev

Standard deviation of all bar returns on investment. Can be used together with **ReturnMean** for calculating the annualized Sharpe Ratio and other metrics.Only
available at the end.
## ReturnUlcer

Ulcer Index in percent; average drawdown divided by peak equity.Only available
at the end.
## ReturnR2

R2 coefficient; the similarity of the equity curve with a straight line ending up at the same profit.Only
available at the end.
## ReturnLR

Gross profit by linear regression of the equity curve. Only available at the
end.

## ReturnCBI

The last CBI value based on previously stored backtest
data.Only available at the end.

## DrawDownBars

Total number of bars spent in drawdown, updated at any bar. For the percentage spent in drawdown, divide by the duration of the test, **(Bar-StartBar)**.
## DrawDownBarsMax

Maximum length of a drawdown in bars.
Only available at the end.
## LossStreakMax

Maximum number of losses in a row.
Only available at the end.
## NumOpenMax

Maximum number of simultaneously open trades.
Updated at any bar.
## InMarketBars

Total number of bars with open trades.
Updated at any bar.
## InMarketSum

Sum of the durations of all trades, in bars. Updated at any trade. Can be bigger than the duration of the test when several positions are simultaneously open.
### Type:

**int** for numbers that count something, otherwise** var**. Read/only.

## ResultsAtBar

Array in chronological order containing the sums of wins and losses of all open and closed trades at every bar, in account currency units. **(var)ResultsAtBar[Bar]**
is the result at end of the simulation.
### Type:

**float*** pointer, or **0** when no results were calculated.
## ProfileAtBar

Array in chronological order containing the blue equity, balance, or pip return
profile at every bar.
## DrawDownAtBar

Array in chronological order containing the red underwater profile at every bar.
### Type:

**var*** pointer, or **0** when no profile was calculated.
## ResultsDaily

Array in chronological order containing the balance or equity (dependent on the BALANCE flag) at the end of every day, in account currency units. **ResultsDaily[Day]** is the end result. This array is
at the end of the simulation automatically saved to
a **.dbl** file for the CBI calculation,
and to a **.csv** file for further evaluation.
### Type:

**var*** pointer, or **0** when no daily results were calculated.

### Remarks:

- In [Train] mode the parameters are based on trades with 1 lot
and include phantom trades, unless set up otherwise with
TrainMode.
- More statistics parameters can be retrieved from the
win/loss statistics at the end of the simulation.
- Trade dependent metrics can be calculated by enumerating all trades of the simulation with a
for(all_trades) loop, and summing up the desired
trade parameters. Equity curve dependent metrics can be calculated from the
**ResultsAtBar** or **ResultsDaily** arrays.
- All statistics variables are normally reset when the strategy is restarted
or a new session is started. If the SAV_STATS
flag is set, statistics is continued from the previous session.

### Example:

*// print the annualized Sharpe Ratio to the performance report*
function evaluate()
{
if(NumWinTotal == 0) return;
var MySharpe = ReturnMean/ReturnStdDev;
*// roughly adjust to annual in-market bars*
MySharpe *= sqrt(InMarketBars/NumYears);
printf(TO_REPORT,"\nMy Sharpe: %.2f",MySharpe);
}

### See also:

Trade statistics, Cold Blood Index, for(trades), NumBars, performance report
► latest version online