The following script allows you to simulate sample runs of Win, Loss, Breakeven streaks based on a random distribution, using the run length encoding function, rle in R. Associated probabilities are entered as a vector argument in the sample function.

You can view the actual sequence of trials (and consequent streaks) by looking at the trades result. maxrun returns a vector of maximum number of Win, Loss, Breakeven streaks for each sample run. And lastly, the prop table gives a table of proportion of run transition pairs from losing streak of length n to streak of all alternate lengths.

Example output (max run length of losses was 8 here):

100*prop.table(tt)

lt.2

lt.1 1 2 3 4 5 6 7 8

1 41.758 14.298 5.334 1.662 0.875 0.131 0.000 0.044

2 14.692 4.897 1.924 0.787 0.394 0.087 0.131 0.000

3 4.985 2.405 0.525 0.350 0.000 0.000 0.044 0.000

4 1.662 0.875 0.306 0.087 0.000 0.000 0.000 0.000

5 0.831 0.219 0.175 0.000 0.000 0.044 0.000 0.000

6 0.087 0.131 0.044 0.000 0.000 0.000 0.000 0.000

7 0.087 0.087 0.000 0.000 0.000 0.000 0.000 0.000

8 0.044 0.000 0.000 0.000 0.000 0.000 0.000 0.000

maxrun

B L W

3 8 17

-----------------------------------------------------------------------------------------

#generate simulations of win/loss streaks use rle function

trades<-sample(c("W","L","B"),10000,prob=c('.6','.35','.05'),replace=TRUE)

traderuns<-rle(trades)

tr.val<-traderuns$values

tr.len<-traderuns$lengths

maxrun<-tapply(tr.len,tr.val,max)

#streaks of losing trades

lt<-tr.len[which(tr.val=='L')]

lt.1<-lt[1:(length(lt)-1)]

lt.2<-lt[2:(length(lt))]

#simple table of losing trade run streak(n) frequencies

table(lt)

#generate joint ensemble table streak(n) vs streak(n+1)

tt<-table(lt.1,lt.2)

#convert to proportions

options(digits=2)

100*prop.table(tt)

maxrun

1 day ago