PJ Variables

In this article we will take a look at how to use PJ Variables as part of PJ Syntax. The example in this article can be downloaded and opened in PokerJuice.

PJ Variables allows us to work with ranges much dynamically and intuitively than the old-school approach of dealing with endless strings of ranges.

PJ Variables uses Range Distribution sub ranges

RANGE DISTRIBUTION is the powerful range analysis module in PokerJuice. It contains advanced feature to express sub ranges within a given player's over range.

As we can see RANGE DISTRIBUTION allows use to specify up to 8 sub ranges. For each sub range we can see frequencies and Hero's equity against each sub range.

With PJ Variables we can directly extract these sub ranges and use them anywhere in PokerJuice!

PJ Variables Syntax

To express a certain sub range we use a hash tag and the name of the sub range (A-H):

#A is what we call a PJ variable. We have 8 such variables in total: #A-#H. We can use these variables anywhere in PokerJuice.

Here we are using the PJ Variable #B in the SHOVE module. Notice that we added a plus-sign. This works analogous to the plus-sign in PJ Syntax:

#A+ #A
#B+ #A, #B
#C+ #A, #B, #C
#D+ #A, #B, #C, #D
#E+ #A, #B, #C, #D, #E
#F+ #A, #B, #C, #D, #E, #F
#G+ #A, #B, #C, #D, #E, #F, #G
#H+ #A, #B, #C, #D, #E, #F, #G, #H


Cumulative Ranges in Range Distribution

Recall that in RANGE DISTRIBUTION we can have the option of turning Cumulative Ranges on and off. Cumulative ranges mean that the sub ranges are mutually exclusive. This setting affects the sub ranges A-H.

PJ Variables extract the exact sub range from RANGE DISTRIBUTION depending on the settings and so Cumulative Ranges are applied to PJ Variables as well.


Example #1

Let's see how PJ Variables work in action. Here we have a heads-up situation where Villain 3bet us preflop and makes a cbet on the flop:

We would like to divide his range up into these sub ranges:

A) A strong b/c range

B) Strategic b/f range

C) Medium strength x/c range

D) Air

When we have split his range into these sub-ranges we can always make assumptions on what he does with each sub range. But it is a good way to build ranges and we help us build a good balanced c-bet range if we were in Villain’s shoes.

We start by assigning Villain a proper preflop range:

We are playing heads-up and Villain is 3-betting us about 25% of the time so PJ First In 25% seems reasonable.

Now, let's move on the sub ranges. For each sub range we will be more specific about what hands they include:

A) A strong b/c range

Strong made hands: Q5+
Strong FDs: Kcc+
Strong combo draws: JT+:cc
Made hands + help: Q+:(cc,T8+)

B) Strategic b/f range

Good hands to bet/fold on this flop are high clubs that we can bluff on later streets if we are called: Kc+

C) Medium strength x/c range

If we make sure cumulative ranges are turned on in RD we can now describe his x/c hands since all stronger hands that we already mentioned are automatically removed.

Weak mades: Q,95+
Weak draws: cc,JT

D) Air 

The rest: *

We enter the sub ranges into RANGE DISTRIBUTION:

We click the play button and execute RANGE DISTRIBUTION and we get the following distribution:

So, we expect him to b/c 36% of the time. To b/f strategic hands 12% of the time. To x/c 16% of the time. The remaining 36% of the time he will have air.

Thanks to RANGE DISTRIBUTION and cumulative ranges we now have his range divided into sub ranges that we can work with.

Let’s do a few scenarios:

1. Villain cbets his entire range except the range he check-calls. How do we express his range now that he has made a cbet?

All we have to do is exclude his checking range. As we can see this gives him a cbet frequency of 84.20%. If we run RANGE DISTRIBUTION again we get:

Which totally makes sense, right? We have excluded his checking range and he is now more polarized between strong hands and air. This could be the situation after he has made the cbet. If we shove he his now stacking off 42.66% of the time if he cbets his entire range except his check/call range. 


2. Villain cbets A+B but check folds D. How do we express his range now that he has made a cbet?

We enter #B+ into the flop range. As we can see Villain is now cbetting much less, only 46.60%. So we expect him to be able to stack-off more often. We run RANGE DISTRIBUTION again to find out:

As expected he is now bet/calling much more often - 77.08% of the time.


3. Villain skips his cbet and checks. We expect him to only cbet A+B.

We exclude #B+ from his range. We run RANGE DISTRIBUTION and we get:

His range now consists of only his weak x/c hands and his air and we can see the distribution between the two.



As we can see PJ Variables can be very powerful and they make working with sub ranges a lot simpler. We can utilize the powerful RANGE DISTRIBUTION to create sub ranges and then we can easily extract the exact sub range we want to use and use it anywhere in PokerJuice. 

In this example we used the PJ Variables in the Player Ranges but we could also use them as input in the other modules.


I hope this article was useful. Please do not hesitate to contact us. You can find me on Skype or in the PokerJuice Community.

Skype: PokerJuice
PJC: morten.pokerjuice.com
Web: pokerjuice.com


Have more questions? Submit a request


  • Avatar
    James Whittet

    Hey, awesome article. Variables are super easy to understand and follow and make working with PKJ easier.

    Now let me complicate it a little :D

    We have allowed to options for Villain Cbet %:
    #B+ = 47%
    *!#C = 84%

    But what if Villain's true cbet % on this board texture is believed to be in between those two numbers?

    Would it be beneficial to be able to express:
    #B+,#D@50% = 66% cbet frequency

    I'm not sure if the @x% command is in pokerjuice, or if it should be. It's in Odds Oracle, but I'm not sure if that is most most intelligent way to express that villain bets some % of his air.

    Maybe instead should be try to express a wider b/f range by altering #B to include Tc+ which would be somewhat relevant blockers on this board.

  • Avatar
    Morten Poulsen

    Hi James,

    Thanks, I am glad it is helpful. What you are talking about are what is called "weighted ranges". We cannot use weighted ranges in PJ because Odds Oracle does not support weighted ranges inside nested ranges. And PJ uses nested ranges to narrow a player's range street by street.

    What you would have to do if you are not satisfied with the Cbet % is to alter the sub ranges in Range Distribution until you are satisfied with the Cbet %.

Please sign in to leave a comment.
Powered by Zendesk