# How to compute prize pool equity

• Bronze
Joined: 12.09.2008
Hi all.

I play a lot of DONs and I am interested in studying them further. I am currently trying to write my own software to do some database analysis, and as part of this I am hoping to determine how to compute equity based on chip stacks.

For example, if the tournament is a 6max 10\$ DON, and there are 4 people left with stacks

2000
2500
3000
1500

What equations should I be using to compute each player's equity of the prize pool? Remember that this is a DON and each places 1-3 pay the same.
• 4 replies
• Bronze
Joined: 12.09.2008
So I found this website...

http://www.thehendonmob.com/matthew_hilger/tournament_equity

I made a program to do this calculation. For the example above with stacks

2000
2500
3000
1500

In a 6 max DON with 5\$ buyin I get the following equity results:

7.30\$
8.06\$
8.55\$
6.09\$

Can anyone verify that I am doing this correctly?
• Bronze
Joined: 11.05.2008
What language are you using? I think I have one in C, python, and maybe a couple more if you need them.

Your numbers are correct BTW, verified with http://www.icmpoker.com/Calculator.aspx

If you are only considering 6max DONs, you could definitely work out a closed form formula. ICM doesn't get really ugly until 4+ payouts.
• Bronze
Joined: 12.09.2008
I am using C, here is the code I wrote in case you are knowledgeable in such an area:

double *DONequitycalc(double *chipcounts, int numplayers, double prizepool, double placespaid)
{
int i,j,k;

double p1[numplayers+1]; //probability of getting first based on ICM
double p2[numplayers+1]; //probability of getting second based on ICM
double p3[numplayers+1]; //probability of getting third based on ICM

double totalchips; //total chips in play

double *equity = malloc(numplayers * sizeof(double)); //add up p1,p2,p3 and muiltiply by prize to get equity

/*initializing variables*/

totalchips=0;

for(i=1;i<=numplayers;i++)
{
totalchips += chipcounts[i];
p1[i]=0;
p2[i]=0;
p3[i]=0;
equity[i]=0;
}

/*probability of first is chipstack divided by total chips*/

for(i=1;i<=numplayers;i++)
{
p1[i]=chipcounts[i]/totalchips;
}

/*adding up conditional probabilities to get probability of second*/

for(i=1;i<=numplayers;i++)
{
for(j=1;j<=numplayers;j++)
{
if(i!=j)
{
p2[i] += p1[j]*(chipcounts[i]/(totalchips-chipcounts[j]));
}
}
}

/*adding up conditional probabilities to get probability of third*/

for(i=1;i<=numplayers;i++)
{
for(j=1;j<=numplayers;j++)
{
for(k=1;k<=numplayers;k++)
{
if((i!=j)&&(i!=k)&&(j!=k))
{
p3[i] += p1[j]*(chipcounts[k]/(totalchips-chipcounts[j]))*(chipcounts[i]/(totalchips-chipcounts[j]-chipcounts[k]));
}
}
}
}

/*calculating equity for each player*/

for(i=1;i<=numplayers;i++)
{
equity[i] = (p1[i]+p2[i]+p3[i])*(prizepool/placespaid);
printf("EQUITY %d is %.02f\n",i,equity[i]);
}

return equity;

}
• Bronze
Joined: 12.09.2008
I now have a fully functional program that analyzes my xml files from Titan poker tournaments and extracts all the preflop play into a separate file. I'm going to try and compile this information into a database in order to get an idea of ranges in different spots preflop. Hopefully, using the equity program I just wrote, I can analyze my hands and fix some leaks in my game.