Learn more about the app here.


Some poker players think about hands just like how scientists think about light. If we think about our opponent's hand as a random variable, we can model it using the idea of a distribution. In the case of light, we organize the visible spectrum by frequency and our brains map those frequencies to color. Higher frequency light appears blue and lower frequency light appears red.

Documentation Layout 1

In poker we care about how likely our hand is to win. And rather than organizaing light by its frequency, we can organize starting hands by their probability of beating a random hand. This order is well known in Texas Hold'Em with AA at the top. In Omaha however this ranking is either undefined or poorly defined. We ran a simulation that took months to complete and were able to map starting hands to their probability of winning.

One way to visualize this is a graph of a hand's rank against its probability of beating a random hand:

Documentation Layout 1

If you define a player's Omaha range to be 25%, this means that for whatever situation you are trying to model, the player continues with 25% of their holdings. We make a logical leap by assuming this corresponds to the top 25% of possible hands. This means that you have selected everything to the left of the first red line in the above image.

Post Flop Ranges

Another way to define a range is by specifying specific criteria that a hand must meet in order to be included in the range. For instance, continuing with the previous example, if we select the flop to be A - 5 - 5 and want to model a flush draw and only a flush draw, this means the set of hands we are now working with is every hand from the previous range (the top 25% of PF holdings) that at least contains two .

We can then test this range against another hand, say 4567, or against another range like all the hands from 100% of PF combinations that have three of a kind on this board. This range would include the previous hand.

Mutually Exclusive, Collectively Exhaustive

With some exceptions, post flop ranges are mutually exclusive and collectively exhaustive. This is applied from the top down. Meaning that in order for a hand to qualify as part of a range that includes only pairs, it cannot also have a flush. Conversely, if we define a range to be all flushes, a hand that also has a pair would qualify.

The main exception is the range criteria "All Combinations." This is an easy was to define all hands in a certain category. For instance, "All Combinations" of full houses is equivalent to "Top Full House" + "Middle Full House" + "Bottom Full House." These categories are collectively exhaustive, together they define all combinations of full houses. Taken individually, they are also mutually exclsuive. There is no overlap between the hands included in the "Bottom Full House" range and those included in the "Middle Full House" range.

The category High CardsAll Combinations represents an easy way to tell the simulator that a player is continuing with 100% of their range.

Another potentially notable exception is the Nut Flush and Nut Flush Draw criteria. As one would when playing, this test looks at hole cards, not just five card hands. This means that if the board is again A - 5 - 5, a player would have to have to have KX in their hand to have the Nut Flush Draw. Meaning there is, in this case, some overlap between the hands included in the Nut Flush Draw set and those included in the K - J high flush draw set.


Your app is not very smart. It is a plug and chug brute force approach to modeling equities. Your app was however intelligently designed. This means that while certain algorithms are O(n) or O(n2), we avoid repeating ourselves wherever possible.

If you run 100,000 iterations to test A A 5 5 on a 2 - 9 - T flop against all sets drawn on a 100% PF range, the app will first test 148,995 hands (270,725 hands - (the hands that are not possible) because of cards already removed from the deck) to see if they meet the qualification of All 3 of a kind. All of the hands that pass the test are appended to a new list. Hands from the new range along with the turn and river are then randomly sampled 100,000 times and tested against A A 5 5.

Runtime Implications

As you would expect, this means that there is a direct relationship between the size of the range you are testing, the number of iterations you are running, and the runtime.

To help you decide how many iterations to run we have provided the following considerations and guidelines.

With simple random sampling, which directly reflects the reality at the poker table, you minimize sampling error by increasing the number of samples you draw. So a good metric to consider is the ratio between the hand space and the number of samples you take. Hands in a range are sampled with replacement. Random community cards are not replaced until the end of the hand.

If you are testing AK against a 100% preflop range, 1,000 iterations is pretty good. The hand space is 1,225 (50 choose 2) and the ratio is 1.225 : 1. If, however, you are doing a similar test for Omaha, 48 choose 4 means that you are only drawing 1,000 samples from a hand space of 194,580 hands. With a ratio of 194.58 : 1, that isn't very good and the odds that you have effectively sampled the distribution are pretty low.

In testing, 1,000 iterations of Hold'Em run pretty much instantly. And 100,000 tests, which takes a couple of minutes is probably overkill. With 100,000 iterations, if you are working with the widest range possible in Hold'Em, you will on average, have tested each hand almost 10 times. In Hold'Em, if you want it done quickly ("no time flat") we suggest 1,000 or 10,000 iterations. If you don't care about runtime and would rather have a higher degree of confidence in your results we suggest 25,000 or 50,000 iterations.

With Omaha however, it is a different story. If you are testing a 50% PF range against a 25% PF range, the larger hand space is 135,363 hands. So 1,000 itertions would not sample this range very effectively. A good rule of thumb for Omaha is that if you want it done quickly do 10,000 or 25,000 iterations. We find that numbers for Omaha equities start to converge on four significant figures after 20,000 iterations. In otherwords, you don't have to test an entire range to get a good idea of its value. If you want an even more accurate idea of what the range looks like, we suggest 100,000 or 200,000 iterations.

Choosing a number of iterations >= the size of the largest range you are testing should yield consistently good results.


When testing a range, the app will also tell you the number of combinations in that range. This is trivial in the case a pre-flop range. Anyone can do it, just multiply the number of possible combinations times the percentage representing the range.

Post-flop however, this is a different story. Given that you have A Q 6 5 on an A - Q - T flop, and that your opponent plays 10% of the hands that they are dealt, how many combinations of hands are there in your opponents range if they continue with all FDs, all straights, and 2-pair or better?

Besides telling you the number of combinations in their range, the app will also tell you what percent of their previous range this represents. In other words, given a reasonable criteria for what your opponent should be continuing with, you can infer how frequently they should be doing so.

Data Entry and Export

Entering and tracking your results has never been easier. Our intuitive UI presents user defined categories for casino or venue, games, and stakes. Select the correct values, enter your buy in, and press the play button to kick off your session. Conveniently pause a session to go on a break. And when you are done, archive it with the save button.

From the analysis tab, you can export your data as a CSV file. Just define the data that you would like to export, say all data from the year 2020, or all PLO data, and then use the expot button.


The Analysis tab provides a way for you to filter and visualize your session data. The Profit vs Time graph is just what it sounds like. There is a Probability Mass Function that displays your results in Big Blinds. The the X-axis is a random variable representing session results and the Y-axis is probability. Learn more about probability mass functions here.

There is also a Scatter Plot of your session data where the X-axis is session length, and the Y-axis is currency or Big Blinds. What outliers do you see? Maybe you have a grouping of sessions around the 8-hour mark that are all roughly -$1,000.00. Maybe you shouldn't play more than 4 hours at a time? Sessions tagged with different games are represented by different colors. Maybe the 8-hour sessions are fine for PLO because you like the action. But after 4 hours you get bored playing Hold'Em and start making poor decisions.

Finally, there is a a Pie Chart that shows the magnitude of winnings and losses. Data is again grouped by game type. Solid sections represent winnings and hollow sessions represent losses.

Where appropriate, the axis can be set to the user's currency or BBs and data can be filtered based upon: game type, casino / venue, and stakes. Stakes are adjusted whether you are looking at cash game or tournament data.


The Next Gen Poker App is a powerful tool. We had to review various topics just to build it and have decided to provide some resources in the table below. Hopefully they will help you leverage the app and improve your game. Good luck!