A fairly naive approach to estimate the probability of drawdown / ruin is to calculate the probabilities of all the permutations of your sample returns, keeping track of those that hit your drawdown / ruin level (as I've written about). However, that assumes returns are independently distributed, which is unlikely.

In response to my blog post, Brian Peterson suggested a block bootstrap to attempt to preserve any dependence that may exist. (Extra credit: is there a method / heuristic to choose the optimal block size?)

What other methods are there?


I highly recommend the Maximum Entropy Bootstrap for time series, implemented by the meboot package in R. In my work, I've stopped using both the block bootstrap and residuals bootstrap in favor of meboot, and I am pleased with the results.

Hrishikesh Vinod, the researcher behind meboot, described it in his talk at UseR/2010 last year. The algorithm is quite clever and preserves the correlation structure of the original time series while creating bootstrap replications consistent with that structure. The algorithm is outlined in the package documentation.

The package does the heavy lifting for you, creating all the bootstrap replications of your time series. It does not take the final step of calculating the estimated confidence intervals based on the replications, unfortunately. Read the vignette for how you can calculate the CIs from the replications. (In contrast, the boot package supplies the boot.ci function which performs that final step.)

A final note: I trust statistical methods to estimate reasonable outcomes based on historical data. I have absolutely no faith they can predict the full range of possible outcomes, however. Please remember the false sense of security induced by VaR analysis... right up to the great financial meltdown. Now, how will you protect yourself from ruin?


A block bootstrap makes sense to me. (If the term doesn't make sense to you, I explain it at the end.)

In order to pick the block size, I would essentially do a grid search:

  • pick the largest feasible block size

  • pick a smallest reasonable block size

  • pick how many block sizes you feel like testing

I'd run the selected bootstraps and see if there was a pattern, and if so, what might it mean. Once that was done, then hopefully you could feel comfortable with just one block size for subsequent use.

I would think that the best block size would be strategy dependent. But of course I could be wrong. I haven't done this in practice -- I'd be interested to hear of real experiences.

What is a block bootstrap?

Suppose you have N observations. A regular bootstrap repeatedly samples the N observations N times with replacement and performs the statistic on each resampled set of data. The two key things are that the sample size remains the same and the sampling is done independently.

The regular bootstrap is good for when the data are independent. But if there is autocorrelation in the data, then the regular bootstrap completely destroys that. In the case of drawdown, autocorrelation is of significant interest.

The block bootstrap keeps a lot of the autocorrelation of the original data by taking continuous blocks of data instead of individual datapoints. For example if we had 1000 (ordered) observations, then we could sample 10 blocks of length 100, or 100 blocks of length 10, or 50 blocks of length 20, ...


You could try measuring autocorrelation at varying lags, as described here, and then choose your optimal block size according to the results of this test, i.e. if there is significant autocorrelation up to and including lag 5, your block size should be no larger than 5.


I like the function b.star in the np package for R to select the block size and pass it to tsboot although I don't have the math background to determine whether this is the best method.


Recently I faced some results in calculations of such probabilities in a very nice and accurate way for Markov models. If you are interested, I will be happy to tell you where you can find it.

  • $\begingroup$ I am interested, please do tell :) $\endgroup$ – Dan Nov 30 '11 at 19:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.