All posts by QTip

Multitabling on WPN (America’s Cardroom) with a Controller

Here’s a demo of me using this setup while playing around 41 tables.

People have emailed and PM’d me about getting this setup for a couple years now, wanting to pay me, etc. I’ve never done it. Now…here it is for everyone—free of charge. It will likely be a while before I masstable again. I don’t wish to sell this because I don’t want to support it. I’m sure the code could be more efficient, etc. Getting it to work on your setup will take some time and patience. I’m sure I have a couple weeks work in getting this setup just right.

I doubt I’ll respond to inquiries; I’m sure you can get help in poker forums, etc. Anyway, this is the setup I use to play 45+ tables on Americas Cardroom. You can use it to put it more relaxing sessions. Also, you can grind mass tables for the Beast and rakeback.

  • Controller
  • Monitors
  • Furniture
  • Table Management
  • Script
  • Configuration / Manual
  • 1. Controller: You can use any controller that will connect to your PC. You want to make sure there are enough buttons. Otherwise, you may struggle to find sufficient combinations to do what you want. I use the Logitech Gamepad. I’ve used other controllers, but this one is my favorite, and it’s durable. If you can spare the extra cash, go for a wireless controller. When you get used to the setup, you can put in massive volume in a relaxed, laid back position. On the flip side, I also use to masstable while riding an exercise bike. A cord in the way is restrictive. This isn’t the time to pinch pennies. You’ll press these buttons hundreds of thousands of time; cheap controllers wear out quick and misclicks are a result. I also purchased an identical second controller to have on hand if the first ever broke. In a similar vein, I always had back-up batteries at my desk. When the controller isn’t responding well, that’s typically the problem.

    Once you get the controller cord plugged into your machine, you can go through the configuration setup on your computer.

    2. Monitors: I used two monitors. The first monitor is a 32” monitor. This is the minimum size I’d work with; would have liked a bigger one really. Why so big? This monitor is where you’ll play the tables. I use a HUD, so you don’t want minuscule numbers on the monitor wearing out your eyes. You’ll have four tables tiled on this monitor. The large size also allows you to get in a relaxed position without leaning forward to see the details. Actually, I used a 32” TV (like $250) for this one and saved a lot of cash over buying a 32” monitor (> $1k). It took some tweaking to get the text on the TV to look good, but it worked well.

    The second monitor I used a 17” monitor. Really, about any size would work. I used a 15” for a while before it died. This monitor is the location for Americas Cardroom lobby and a couple of workhorse grid slots for table management (more on this later).

    3. Furniture: If you’re looking to do some serious grinding, you must be comfortable. Sessions over 17 hours were routine for me. Spend the money to get a comfortable chair and a desk that puts your monitors at eye level. I also got a few special pillows for my neck. Not going to spend more time here. Get comfy.

    4. Table Management: I always wanted to take the time to write my own code for table management, but never found the time. I use StackAndTile (SaT). Unfortunately, it’s a monthly subscription (currently $18/month for the full version, and $9 a month for the small stakes version). SaT alone (w/o the rest of this setup) will likely help you impressively increase your volume. You’ll have to go through the instructions to learn how to use SaT on their website, but here are my settings.:

    Play Mode: Stack And Tile
    Move to Grid: When action required
    Total Grid Slots: 6
    Grid Visualization:

    GridLayout

    Hot Keys:

    HotKey1

    HotKey2

    5. Script: Here’s the tough part for those of us who aren’t programmers. The main purpose of the script is to facilitate the interaction between your controller and SaT. I also used the Script to close unwanted pops and get on waiting lists on Americas Cardroom client (using mouse buttons). I use Autohotkey. If you’ve never used autohokey, you’ll need to step through some tutorials and such; prepare to be tenacious… You’ll find much help in autohotkey forums and the help files online.

    There are a few pieces to using the script. When I paste code in this blog, I’ll surround the code in asterisks. The asterisks are not part of the code.

    Firstly, you need to figure out what the buttons are on your controller. I found this script for that:

    ****************
    ; July 6, 2005: Added auto-detection of joystick number.
    ; May 8, 2005 : Fixed: JoyAxes is no longer queried as a means of
    ; detecting whether the joystick is connected. Some joysticks are
    ; gamepads and don’t have even a single axis.

    ; If you want to unconditionally use a specific joystick number, change
    ; the following value from 0 to the number of the joystick (1-16).
    ; A value of 0 causes the joystick number to be auto-detected:
    JoystickNumber = 0

    ; END OF CONFIG SECTION. Do not make changes below this point unless
    ; you wish to alter the basic functionality of the script.

    ; Auto-detect the joystick number if called for:
    if JoystickNumber <= 0
    {
    Loop 16 ; Query each joystick number to find out which ones exist.
    {
    GetKeyState, JoyName, %A_Index%JoyName
    if JoyName <>
    {
    JoystickNumber = %A_Index%
    break
    }
    }
    if JoystickNumber <= 0
    {
    MsgBox The system does not appear to have any joysticks.
    ExitApp
    }
    }

    #SingleInstance
    SetFormat, float, 03 ; Omit decimal point from axis position percentages.
    GetKeyState, joy_buttons, %JoystickNumber%JoyButtons
    GetKeyState, joy_name, %JoystickNumber%JoyName
    GetKeyState, joy_info, %JoystickNumber%JoyInfo
    Loop
    {
    buttons_down =
    Loop, %joy_buttons%
    {
    GetKeyState, joy%a_index%, %JoystickNumber%joy%a_index%
    if joy%a_index% = D
    buttons_down = %buttons_down%%a_space%%a_index%
    }
    GetKeyState, joyx, %JoystickNumber%JoyX
    axis_info = X%joyx%
    GetKeyState, joyy, %JoystickNumber%JoyY
    axis_info = %axis_info%%a_space%%a_space%Y%joyy%
    IfInString, joy_info, Z
    {
    GetKeyState, joyz, %JoystickNumber%JoyZ
    axis_info = %axis_info%%a_space%%a_space%Z%joyz%
    }
    IfInString, joy_info, R
    {
    GetKeyState, joyr, %JoystickNumber%JoyR
    axis_info = %axis_info%%a_space%%a_space%R%joyr%
    }
    IfInString, joy_info, U
    {
    GetKeyState, joyu, %JoystickNumber%JoyU
    axis_info = %axis_info%%a_space%%a_space%U%joyu%
    }
    IfInString, joy_info, V
    {
    GetKeyState, joyv, %JoystickNumber%JoyV
    axis_info = %axis_info%%a_space%%a_space%V%joyv%
    }
    IfInString, joy_info, P
    {
    GetKeyState, joyp, %JoystickNumber%JoyPOV
    axis_info = %axis_info%%a_space%%a_space%POV%joyp%
    }
    ToolTip, %joy_name% (#%JoystickNumber%):`n%axis_info%`nButtons Down: %buttons_down%`n`n(right-click the tray icon to exit)
    Sleep, 100
    }
    return

    *******************

    Secondly, you need to get some coordinates on your monitor. Specifically, you want the coordinates of the center (roughly) of each grid on your monitor. Also, if you wish to use some of the features like sit in, sit out, join waitlists, etc., you’ll need to get the coordinates for those locations. Below is code you can use to get the coordinates of where your mouse is.

    ********************

    CoordMode, Mouse, Relative
    MouseGetPos, xpos, ypos
    Msgbox, The cursor is at X%xpos% Y%ypos%.

    ***********************

    That above code is saved as a file. Then the code I would run is this:

    ************************

    CoordMode, Mouse, Relative
    c:: Run B:\Poker\WinningPokerJoyStick\MousePosition.ahk

    *************************

    When you run that second autohotkey file, you can put your mouse where a grid is, then press the letter c. The coordinates for your mouse location are displayed on your screen and you record it for use in the main script.

    Third is the main script that. Here goes:

    **************************

    #SingleInstance force ; closes prompt when reloading
    MyGlobal := n ; variable used for number entry mode for bet sizing
    SetKeyDelay, 0
    SetMouseDelay, 0

    #Persistent
    SetTimer, TimedOut, 250
    return

    TimedOut: ; cancel timed out and sure want to fold

    SetTitleMatchMode 3
    IfWinExist, AmericasCardroom
    {
    WinGet, TimeOuts, list, AmericasCardroom
    Loop %TimeOuts%
    {
    thisid := TimeOuts%A_Index%
    SetControlDelay -1
    ControlClick, OK, ahk_id %thisid%
    }
    }
    SetTitleMatchMode 3
    IfWinExist, StackAndTile.exe
    {
    WinGet, TimeOuts, list, StackAndTile.exe
    Loop %TimeOuts%
    {
    thisid := TimeOuts%A_Index%
    SetControlDelay -1
    ControlClick, OK, ahk_id %thisid%
    }
    }
    SetTitleMatchMode 2
    IfWinExist, Confirm
    {
    SetControlDelay -1
    ControlClick, No, Confirm
    }
    return

    ;TABLE POSITIONS

    Joy1:: ; table 3

    KeyWait, Joy1 ; wait until button is released
    GetKeyState, joypov, JoyPOV

    If joypov = 18000 ; sit out next hand all tables
    {
    ; activate screen under mouse
    MouseGetPos, , , id, control
    IfWinActive, ahk_id%id%
    {

    }
    else
    {
    WinActivate, ahk_id %id%
    }
    Click, 73, 403
    Click, 180, 361
    Send s
    }
    else if joypov = 0 ; sit out next hand all tables
    {
    ; activate screen under mouse
    MouseGetPos, , , id, control
    IfWinActive, ahk_id%id%
    {

    }
    else
    {
    WinActivate, ahk_id %id%
    }
    Click, 73, 403
    Click, 172, 384
    }
    else if MyGlobal = y ; when enter bet sizes
    {
    Send 2
    }
    else ; mouse over table 3
    {
    CoordMode, Mouse, Screen
    MouseMove, 896, 783
    }
    return

    Joy2:: ; table 4

    KeyWait, Joy2 ; wait until button is released

    GetKeyState, joypov, JoyPOV

    If joypov = 18000
    {
    ; activate screen under mouse
    MouseGetPos, , , id, control
    IfWinActive, ahk_id%id%
    {

    }
    else
    {
    WinActivate, ahk_id %id%
    }
    Click, 453, 461
    Send s
    }
    else if MyGlobal = y ; when enter bet sizes
    {
    Send 3
    }
    else ; mouse over table 4
    {
    CoordMode, Mouse, Screen
    MouseMove, 1587, 776
    }
    return

    Joy3:: ;table 1

    KeyWait, Joy3 ; wait until button is released
    GetKeyState, joypov, JoyPOV

    if joypov = 18000
    {
    Send z
    }
    else if MyGlobal = y ; when enter bet sizes
    {
    Send 1
    }
    else ; mouse over table 1
    {
    CoordMode, Mouse, Screen
    MouseMove, 912, 270
    }
    return

    Joy4:: ;table 2

    KeyWait, Joy4 ; wait until button is released
    GetKeyState, joypov, JoyPOV

    If joypov = 18000 ; sit out next hand all tables
    {
    ; activate screen under mouse
    MouseGetPos, , , id, control
    IfWinActive, ahk_id%id%
    {

    }
    else
    {
    WinActivate, ahk_id %id%
    }
    Click, 80, 413
    Click, 169, 366
    Send s
    }
    else if MyGlobal = y ; when enter bet sizes
    {
    Send 4
    }
    else ; mouse over table 2
    {
    CoordMode, Mouse, Screen
    MouseMove, 1592, 270
    }
    return

    ; FOLDING AND CHECK/CALL

    Joy5::

    ; activate screen under mouse
    MouseGetPos, , , id, control
    IfWinActive, ahk_id%id%
    {

    }
    else
    {
    WinActivate, ahk_id %id%
    }

    GetKeyState, joyy, JoyY
    GetKeyState, checkcall, Joy6

    If checkcall = D
    if joyy < 30 ; check/call no stack
    {
    Send c
    }
    else ; check/call
    {
    Send k
    }
    else if MyGlobal = y ; when enter bet sizes
    {
    Send 5
    }
    else if joyy < 30 ; fold no stacking
    {
    Send f
    }
    else ; fold with stacking
    {
    Send j
    }
    return

    ;BET

    Joy6::

    GetKeyState, joyz, JoyZ
    GetKeyState, joyy, JoyY
    GetKeyState, joypov, JoyPOV

    ; activate screen under mouse
    MouseGetPos, , , id, control
    IfWinActive, ahk_id%id%
    {

    }
    else
    {
    WinActivate, ahk_id %id%
    }

    If joyy > 70 ; execute typed in bet size
    {
    Send l
    MyGlobal = n
    }
    else if MyGlobal = y ; when enter bet sizes
    {
    Send 6
    }
    else if joypov = 18000 ; #3 choice
    {
    Send {Numpad3}
    Send l
    }
    else if joypov = 27000 ; #4 choice
    {
    Send {Numpad4}
    Send l
    }
    else if joypov = 0 ; #1 choice
    {
    Send {Numpad1}
    Send l
    }
    else if joypov = 9000 ; #2 choice
    {
    Send {Numpad2}
    Send l
    }
    else if joyz > 70 ; #5 choice
    {
    Send {Numpad5}
    Send l
    }
    return

    ; ENTER BET SIZING

    Joy7::

    ; activate screen under mouse
    MouseGetPos, , , id, control
    IfWinActive, ahk_id%id%
    {

    }
    else
    {
    WinActivate, ahk_id %id%
    }

    GetKeyState, joyz, JoyZ
    GetKeyState joyy, JoyY

    If MyGlobal = y
    If joyz < 30
    MyGlobal = n
    else
    {
    Send 7
    }
    else
    {
    Click, 644, 484
    MyGlobal = y
    }
    return

    ; GRIDHOLD

    Joy8::

    ; activate screen under mouse
    MouseGetPos, , , id, control
    IfWinActive, ahk_id%id%
    {

    }
    else
    {
    WinActivate, ahk_id %id%
    }

    GetKeyState, joyy, JoyY
    GetKeyState, joyz, JoyZ

    If MyGlobal = y
    {
    Send 8
    }

    else if joyy < 30 ; ungridhold and stack
    {
    Send q
    }
    else if joyz < 30 ; Keep all in grid
    {
    Send t
    }
    else if joyz > 70 ;
    {
    CoordMode, Mouse, Screen
    MouseMove, 2080, 145
    Send g
    }
    else ; gridhold table
    {
    Send q
    Send s
    }
    return

    Joy9:: ; open lobby

    GetKeyState, joyz, JoyZ

    If MyGlobal = y ; when enter bet sizes
    {
    Send 9
    }
    else if joyz < 30
    {
    Send x
    }
    else if joyz > 70
    {
    Send i
    }
    else ;
    {
    CoordMode, Mouse, Screen
    MouseMove, 2923, 677
    SetTitleMatchMode 1
    WinActivate, AmericasCardroom
    }
    return

    ; STACK OR JOIN TABLES; MISC

    Joy10::

    ; activate screen under mouse
    MouseGetPos, , , id, control
    IfWinActive, ahk_id%id%
    {

    }
    else
    {
    WinActivate, ahk_id %id%
    }

    GetKeyState, joyy, JoyY
    GetKeyState, joyz, JoyZ
    GetKeyState, joypov, JoyPOV

    if joyy < 30 ; stack all
    {
    Send a
    CoordMode, Mouse, Screen
    MouseMove, 912, 270
    }
    else if MyGlobal = y ; decimal
    if joyy > 70
    Send .
    else
    Send 0
    else if joypov = 0 ; autopost
    {
    Click 458, 459
    Click 261, 455
    }
    else if joypov = 18000 ; close table
    {
    CoordMode, Mouse, Relative
    Click 650, 12
    Sleep, 300
    SetTitleMatchMode 2
    IfWinExist, Leave ; leave table
    {
    SetControlDelay -1
    ControlClick,Yes, Leave
    }
    }
    else if joypov = 9000 ; exit script
    {
    exitapp
    }
    else if joyz > 70 ; join table
    {
    SetTitleMatchMode 2
    IfWinExist, Available ; join table
    {
    SetControlDelay -1
    ControlClick, OK, Available
    }
    }
    else if joyz < 30 ; cancel table
    {
    SetTitleMatchMode 2
    IfWinExist, Available ; cancel join
    {
    SetControlDelay -1
    ControlClick, Cancel, Available
    }
    }
    else ; stack single table
    {
    Send s
    }
    return

    ; JOIN WAITLISTS

    RButton:: ; join waitlist specific
    SetMouseDelay, 10

    CoordMode, Mouse, Screen
    Click 3349, 690
    Click 3155, 560
    SetMouseDelay, 0
    return

    MButton:: ; join waitlist any
    SetMouseDelay, 10

    CoordMode, Mouse, Screen
    Click 3449, 690
    Click 2839, 526
    Click 2912, 568
    Click 2895, 629
    Click 3155, 560
    SetMouseDelay, 0
    return

    ************************

    Much like the mouse code, the above isn’t what I run. I use this code to start and stop the above script.

    **************************

    Joy10::
    GetKeyState, joypov, JoyPOV
    If joypov = 27000
    {
    Run B:\Poker\WinningPokerJoyStick\AmericasCardroomAHK_Logitech.ahk
    return
    }
    else
    {
    }
    return

    ************************

    This way I can start and stop the script using my controller.

    Going through someone else’s code blows, so good luck. I didn’t do much documentation in the code itself, which just makes this process worse…

    6. Configuration / Manual: Designing what button configurations do what is a job. Over time, I made sure the most frequent operations were easy tasks for my fingers. Then, you want to create a manual and have it handy during play. It will take some practice to remember everything. However, over time, everything becomes second nature. Someone will talk about “folding” the laundry, and your left forefinger will involuntarily twitch ;) Here’s my manual:

    ControllerButtons

    Winning Poker AHK Manual

    Run Script – DPad Left + 10
    Close Script – DPad Right+ 10

    Stack & Tile
    Stop/Start SAT – Dpad Down + 3
    Disable HotKeys – R2 + 9
    Ignore Table – L2 + 9
    Stack – 10
    Stack All – LStick Up + 10
    Gridhold – 8
    Gridhold All – R2 + 8
    Grid Stacked Table – L2 + 8

    Betting

    Tables Locations: 1, 4, 2, 3
    Fold: 5 (no stack option: LStick Up + 5)
    Call/Check: 6 + 5 (no stack option: LStick Up)
    BetSize: First option then + 6
    · #1 – DPad Up
    · #2 – DPad Right
    · #3 – DPad Down
    · #4 – DPad Left
    · #5 – L2
    · Bet Box – 7
    o Automatic # mode to type bet (10 is 0 and LStick Down + 10 is period)
    o R2 + 7 to leave mode
    o LStick Down + 6 to execute bet
    o LStick Button to click if focus is stolen

    Lobby
    Activate Lobby – 9
    Join Waitlist Any – Mouse Middle Button
    Join Specific Waitlist -Mouse Right Button
    Accept Join – L2 + 10
    Cancel Join – R2 + 10

    Table
    AutoPost – DPad Up + 10
    Close Table – DPad Down + 10
    Deal In – DPad Down + 2
    Sit Out Next Hand All – DPad Down + 1
    Back All – DPad Up + 1
    Sit Out BB All – DPad Down + 4

    Table Positions
    Table 1 – 912 272
    Table 2 – 1592 270
    Table 3 – 896 783
    Table 4 – 1587 776
    Table 5 – 2269 265
    Table 6 -2269 788

    Specific Window Coordinates
    Bet Box – 644 484
    Sit Out Next Hand – 73, 403
    Sit Out BB – 80, 413
    sit out all tables – 180 361
    sit out bb all – 169 366
    back all tables – 172 384

    That’s that. Enjoy.

    Like this post? Receive free tips and articles from QTipPoker.

    Overdue

    An Overdue Update

    Bloggers are supposed to be consistent. Guess I’ve failed there; been about four weeks since my last blog. I’ve been busy. Mostly playing poker. Anyway, here’s an update on my activity over the last month.

    Playing Poker

    On April 5th, ACR changed the way the money is taken for the Beast. This changed everything for me. Playing poker is no longer a pure race of putting in massive amounts of hands. I have green numbers in my database. I’ve cut my tables down to about 30 (normally between 27-32) instead of the 45 I used to play. I’ve retooled my strategy to account for the reduced rake and more focused play. My buy-in is 100x and my VPIP/PFR is double my old style. The new strategy requires more focus, so I’m rarely watching movies, listening to audio books, or playing games as I used to.

    It’s like I’m back in 2007 and 2008, except this time I have a more resolute work ethic. I’ve made a commitment to a minimum of 40 hours a week. I’ve been successful with this goal thus far. In the afternoon, I typically play every table from 25nl to 600nl. In the evening, typically more than 40 tables are running. In contrast to pre-April 5th, I fill up my tables from the larger stakes to the low stakes. So, sometimes I have no micros games going. In the four weeks of play (I took one week off because of spring break with my kids), I put in 290,000 hands. At the micros (25nl and 50nl), I’ve broke even. At the small and mid stakes, I’ve won about 2.5bb/100. With the mix of stakes thus far, I’m about 1.5bb/100 over this 300k hands.

    So far, I’ve gotten first place in the Beast each of the four weeks I’ve played. First place is no longer my ultimate goal. I imagine I’ll get 2nd at some point here. I’m working out a more sane schedule than pre-Apr 5th. Second place will feel weird I’m sure. I was in second on a Thursday a few weeks ago. However, I decided that just won’t due for that week. So, I ran down first and passed him on the last day. With the summer months approaching, I’m guessing I’ll have weeks where I won’t do that. While the prize difference between first and second is still incentivizing, with a winrate, it’s not that big of a deal anymore.

    Playing small and mid stakes, I’m getting points much more quickly in the elite program. However, I will not reach the 5 Star General (Supernova Elite equivalent) status on ACR this year. Perhaps I will in 2015 with a full year of playing larger stakes. I did the calculations this morning; it will be close for a full year of play.

    Studying Poker

    I’ve been spending much time studying poker and working on my game. I continue to uncover areas for improvement, which is thrilling for me. I’m striving to spend at least 30 minutes every day working on strategies. I’m hit and miss with this goal…only so many hours in a day. However, I’m excited about the progress I’ve been making both in my understanding of the game and the application at the tables.

    Two days ago, I received Tipton’s new book, Volume 2: Strategies for Multiple Streets. Only getting started (on page 20), but I’m confident it will be a fruitful read. I’ll provide a blog review when I’m finished with a first read through.

    Unfortunately, working on Postflop Course Part 2 has come to an abrupt halt over the last month. I must be realistic with how I allocate my time, and now, working on Part 2 is low on my priority list. Certainly the time will come when I pick up the writing again.

    Family Time

    Turns out I’m still a husband to a wonderful wife and father to three great children! :) Working out a sane poker schedule is an effort to enjoy my family. With summer break on the way, I’m sure my blogging will be sparse.

    So….that’s the update. See you at the tables.

    Like this post? Receive free tips and articles from QTipPoker.

    Win

    I Win Money Playing Poker

    Since I’ve been grinding the Beast, playing 45 tables paying little attention to the action, it’s been a long time since I’ve seen green numbers in my database. With the new Beast design, I’ve cut my tables down to 25-35, I’ve been paying attention…and what do you know!? It looks like I may win money at the tables! :) Feels good after so many red numbers. I’m still down about 2800 in all-in, but we’ll see what the future holds for my results. Just thought I’d share the green numbers ;)

    Beast1

    Like this post? Receive free tips and articles from QTipPoker.

    Grind

    Keep Grinding the Poker Tables

    Well…still under $3k on all-in, but today felt a lot less doom-switchy than yesterday. I’m encouraged with how the Beast feels with the reduced rake. I feel like I can keep green numbers while grinding. Today was all around 30 tables. I’ve been playing more of my normal game than my typical 46 table mode. Once I felt quite rushed, and sure enough, I had 36 tables going. It’s just too much to run over a 20 vpip-for me at least. Here’s the results since April 5th with the new Beast. I can definitely feel the release from the rake. However, it’s difficult to say if my improved results are a product of playing my normal game or the reduced rake. Certainly both are a factor. Wish I would have played more with the old Beast…but there was money to print.

    I’m not far from first place. I wasn’t planning on getting first, but I doubt I’ll pass up on it now. Next week I’ll be travelling a lot, so I might as well knock it out this round.

    Like this post? Receive free tips and articles from QTipPoker.

    Doom

    Poker Doom Switch Enabled

    Sooo…after a three-week break from the tables, I have the grind on again for the new Beast. I’ve got much going on lately, so I don’t know what place I’ll get. I’m just playing around 25-30 tables and seeing what happens. I was excited to see the impact of the reduced rake and see what might results would look like with 15-20 fewer tables. It’s definitely a change in strategy, and I’m still adjusting to everything. The doom switch has definitely welcomed me back to the tables. There’s no cap in these results, so it’s all just a straight variance smack in the face. Everything is red by the right number :) Well…if I can keep green numbers going, I’ll be happy. The doom switch won’t stay on forever.

    AprilBeastIntro

    Like this post? Receive free tips and articles from QTipPoker.

    Why

    Why Think About GTO Poker?

    I received a Facebook PM from a player the other day:

    “How can working on your frequencies can be better than working your hands through CardrunnerEV and making the most +EV plays based on your assumptions?”

    If you’ve followed my work through the years, you know I’ve said little about GTO/Balance. I’ve always focused on pounding away on my opponents’ weakness. If there are no/little weaknesses present, I find greener pastures.

    Over the last eight months, I’ve spent much time on GTO ideas, and I think this focus is surprising to many of my readers. So…a public answer to this question.

    Before I start with this answer, I want to provide a caveat. I’m still in my infancy with understanding GTO and what a balanced strategy looks like. So, my answer below doesn’t come from experience; simply what makes sense to me from my current understanding of theory.

    I don’t think using words like “better” is the correct way to approach this topic. In a recent rereading of The Mathematics of Poker (MOP), this sentence popped. “We are searching for strategies that are near-optimal, or at least balanced, which can be profitably played against a wide range of opposition with little or no information.” So, we ask, “Why are we searching for such a strategy?” Simply put, there are benefits to the effort that often make it worth a player’s time. Here are a handful of benefits of attempting to find “at least balanced” strategies. MOP gives several great reasons on page 101. To simply list those ideas:

    • We often deal with unknown opponents
    • Game selection is not an option (think tourneys)
    • Good games often still have a tough opponent or two.

    However, I’d like to add a couple ideas.

    1. Playing a fixed strategy is less-taxing at the tables and easier to mass-produce. Finding weakness in an opponent’s strategy is hard work and can be exhausting. A fixed strategy, while perhaps making less money, is less-taxing and easier to multitable.

    2. Learning about balance shines a brighter light on weaknesses. It’s not necessary to understand a balanced strategy to spot glaring holes in an opponent’s strategy. However, as opponents patch the most glaring holes, we have greater difficulty understanding how to exploit. Being familiar with a balanced strategy gives us a better idea of when opponents stray from “safe zone” and what adjustments we must make.

    In the meantime, an exploitive strategy makes more money than an unexploitable strategy, and many unskilled opponents remain in the player pool.

    So, I don’t think “better” belongs in this discussion. However, I do think a player who puts effort in “attempting to find near optimal or at least balanced strategies” has the advantage in the game. I think it at least develops a deeper understanding of the game and perhaps provides this player with a mode not available to others who haven’t invested the time/effort.

    Having said all this, the best of the exploiters have likely already approached something resembling balance. It seems clear to me that balance looks similar to playing exploitively versus your perceived range. And we know GTO is two players maximally exploiting each other. So, these ideas are connected…again, “better” just doesn’t seem to fit.

    In any case, I’ll continue to dig and let my readers know what I find.

    Enjoy the game.

    Like this post? Receive free tips and articles from QTipPoker.

    Work

    Frequency Work Hand Four

    Played this hand at 1/2 the other night. Turns out Snowie wants to check the flop (as is so often the case oop).

    On this flop, UTG’s range has 56.4% equity against the button’s flatting range. This is actually quite strong from what I’ve seen with most range vs range flop equities from snowie’s ranges. They’re typically somewhere between 52 and 56 for one player.

    I’ve not yet been able to find the pattern with Snowie’s flop betting frequencies; however, I’ve not spent much time on it yet. In the coming hand analyses, I hope to get a better idea of what Snowie is doing.

    Also, I no longer plan on having “Typical Actions”, “My Buckets”, or “Sniff Test” sections in these. I’m just taking a peek at Snowie’s actions.

    Hand:

    Winning Poker Network Game #268488820: No Limit Holdem ($1/$2) [2014/03/30 05:44:48 UTC]

    Table: Hydrogen (JP) – 5

    Seats: 6

    Seat 1: SemperFidelis ($183)

    Seat 2: 768hon ($208.30)

    Seat 3: NoahSDsDad ($316.62)

    Seat 4: MamaCoolJ ($200)

    Seat 5: Leatherass9 ($408.26)

    Seat 6: ISP1421 ($585.54)

    Button is seat 1

    768hon: posts small blind $1

    NoahSDsDad: posts big blind $2

    *** HOLE CARDS ***

    MamaCoolJ: dealt [9c Jc]

    MamaCoolJ: raises $4.50

    Leatherass9: folds

    ISP1421: folds

    SemperFidelis: calls $4.50

    768hon: folds

    NoahSDsDad: folds

    *** FLOP *** [Tc Jd 9s]

    MamaCoolJ: bets $11

    SemperFidelis: calls $11

    *** TURN *** [Tc Jd 9s] [2c]

    MamaCoolJ: bets $30

    SemperFidelis: folds

    Preflop Range:

    Opening range: 228 combos; AA-55,AKs-A2s,KQs-K9s,QJs-QTs,JTs-J9s,T9s,AKo-ATo,KQo-KJo,QJo

    BTN flatting range: 102 combos; JJ-55,AQs-ATs,KJs-KTs,QJs-QTs,JTs,T9s,76s,65s,54s,AQo (Roughly, because Snowie uses a mixed strategy with many holdings for the flatting range.)

    On average, UTG has 52.7% equity vs. the button’s flatting range. This flop seems a good one for UTG’s as his equity is 56.7%. As I said, from what I’ve seen with range vs range (given Snowie’s ranges), this is a more lopsided flop for UTG than average.

    After the flop, UTG has 193 combos, and BTN has 83.

    Snowie’s Strategy:

    Snowie suggests betting half pot with 3.9% of our range.

    Hand

    Combos

    Frequ

    Total

    Kqo, KhQh

    13

    34%

    4.42

    Ajo, AhJh

    10

    24%

    2.4

    Kjo, KhJh

    10

    7%

    0.7

    Total

       

    7.52

    Certainly wouldn’t say this range contains bluffs; however, the top pairs are likely unhappy with action. Top pairs are 41% of the betting range. This makes some sense because if the button raises, 60% of our range isn’t going anywhere…which sucks for a raising strategy. We’ll look at the BTN’s strategy in the next blog.

    Our checking range then has 186 combos, with some very strong hands in it…including straights, sets, two pair, and overpairs. Checking Range: AA-55,AKs-A2s,KQs-K9s,QJs-QTs,JTs-J9s,T9s,AKo-ATo,KdQd,KcQc,KsQs,AdJd,AcJc,AsJs,KdJd,KcJc,KsJs,QJo This range still has about 54% equity vs. the BTN.

    If we bet, get called, and a blank hits the turn (say 3c), Snowie bets only the straights for half pot, and those only 75% of the time. Makes one ponder the bluff:value ratios often spoke of… If the turn is the 3h (completing the rainbow), Snowie checks 100%.

    So, let’s look at checking because that’s 96% of the strategy.

    First, let’s say BTN checks back the flop. What does UTG do on the 3c turn? This time Snowie fires with 42.6% of his range, holding back half his straight and most his sets. However, most two pairs and overpairs get bet on the turn. The value:bluff ratio on the turn is about 3:1, with the bluffs consists mostly of suited clubs and oesd hands. If the turn is the 3h, still UTG leads with many hands for 42.8% of his range, with a similar makeup as the 3c turn.

    When we check, and Snowie suggests BTN bet half pot with 46.3% of his range. I’ll save the breakdown for the following blog, suffice to say, BTN unloads a bet with all his monster hands. The strongest hands he checks back are suited AJ and KJ hands, some of those weighted. He includes about 60% high card hands in his betting range, many of those AQ and then some suited trash with bdfds.

    Now let’s say BTN bets the flop after we check. Again, he’s betting half pot. Snowie folds 47%, calls 33%, and raises half pot with 20%. For autoprofit with any two cards with a half pot bet, BTN needs 33% fold equity; he has 47%. However, we do hear experts tell us that raising is a more effective defense than calling and therefore the necessary fold equity goes up when the opponent raises. 20% raising is certainly a lot of raising. I’m not sure if 20% raising makes up for the 14% excess fold equity or not. Course, we’re OOP and that hurts. Idk.

    The check-raising range consists of a small portion of the straights (the backdoor flush draw straights get raised more frequently), about 2/3 of the sets (calling mostly with bottom set), none of the two pair hands, about a third of the overpairs, about half of the top pair + oesd hands (QJ) and some QT hands. The raising range is spiked with almost 50% high card hands, but most of these are hands like A8s and AQ. So, the check-calling range is still quite strong with straights, sets, all 2 pairs, some overpairs and some top pair hands.

    Interestingly, UTG folds most the AJ hands, holding back backdoor flush AJs. Same for AT and AK. The rest of the folding range consists of the underpairs and small suited Aces.

    If BTN bets pot, UTG folds 64% (there’s that 14% excess again…coincidence or not?), calls 33.5%, and raises about 2%. Certainly not much raising, so idk about that folding percentage. The check-raising range consists of a small fraction of straights and mostly AQ (btw, if BTN ships over the check-raise, UTG folds AQ). The weakest hands Snowie calls with are AQ with backdoor flushdraws and QTs.

    So, let’s say we call the flop half pot bet from BTN. If the turn is the 3c, UTG checks 100%. I think it makes sense from what we’ve seen so far, the same is true for the 3h. At this point, BTN bets POT with 82% of his range, about 20% bluffs. He does hold back 99 and some two pair hands. To this bet, UTG folds 21%, calls 77%, raises 3%.

    Interestingly, if the turn is the 3h after we check-call the flop and check the turn, BTN now bets 2x pot with 8% of his range. This betting range consists of mostly KJ and AQ hands. To the 2x bet, UTG folds 59% of his range, the strongest hand folded is J9 (KK and QQ call the bet).

    So…what to make of this information. It’s difficult to say yet. I hope to make more sense of this stuff as I go along (if there’s sense to be made). What seems recurrent, though, is OOP often keeps his checking range quite strong. Looking at a flop where UTG’s equity sucks: 5h7d9c. UTG is 43.8%. Still, UTG bets only 1% of his range. So, it seems the IP player is the one who pounds away and the OOP player is keeping a strong defense. I’ll look to test this idea more by looking at spots like SB vs BB and BTN vs BB.

    In the meantime, I welcome thoughts and ideas.

    Like this post? Receive free tips and articles from QTipPoker.

    Work

    Frequency Work Hand Three

    Until I learn more, I’m using the frequencies and recommended bet size in Snowie. If you feel the frequency is whacked, I’d love to hear the discussion. I’ll be checking it out myself; no idea what these are going to look like.

    (As it turns out, when Snowie gives a percentage for an action, it’s not including card removal for the combos of the previous street. So, my numbers are a bit off for my buckets. I didn’t go back and redo my buckets after finding this out. The weighted combos on the turn and river are because not all combos got through from earlier streets. Perusing Snowie’s hand selections are really interesting.)

    I’ll use the default bluff to value ratios (2:1, 1:1, 1:2) until I discover some reason to begin deviating. In addition, I’ll be examining Snowie’s ranges compared to the ones I create. Tedious work in this software. That way I can compare hand selection for buckets as well as Snowie’s ratios.

    For Hand 3, I’m using another UTG hand, still working with a more manageable number of combinations and ensuring I get comfortable with the opening ranges in each position. This time, only the BB flats so I’m in position.

    Hand:

    QTip Imagination Table

    QTip (UTG)

    100x effective

    QTip opens 2.25bb

    Folds to BB, who calls

    Flop: Qh4h8d

    BB checks

    QTip bets pot

    BB calls

    Turn: 3d

    BB checks

    QTip bets pot

    BB calls

    River: Tc

    BB checks

    QTip Shoves

     

    Preflop Range:

    Opening range: 228 combos; AA-55,AKs-A2s,KQs-K9s,QJs-QTs,JTs-J9s,T9s,AKo-ATo,KQo-KJo,QJo

    207 after the flop

     

    Typical action (sort of):

    Bet Flop: 79 combos (38% range)

    Value (42 combos): AA, KK, QQ, 88, AQ, KQ,

    Bluff (37 combos): A8, A4, 55-77, 8/10 A-high FDs, 6/6 weaker FDs

    Leaves back QJ, QTs, 99-JJ, a couple A-high FDs

     

    Bet Turn: 53 combos (67% of flop betting range)

    Value (42 combos): AA, KK, QQ, 88, AQ, KQ

    Bluff (9 combos): A8, 6 weaker FDs

     

    Bet River: 41 combos (77% of turn betting range)

    Value (19 combos) AA, KK, QQ, 88, J9

    Bluff (10 combos) missed flush draws (no pair T or >)

     

    Snowie Frequencies:

    Flop: Pot 25%

    207 * .25 = 52

    52 * .667 = 35

    35 bluffs / 17 value

     

    Turn: Pot 33%

    52 * .33 = 17

    8 bluffs / 9 value

     

    River: All-in 49%

    17 * .49 = 8

    5:3ish

     

     

    My Buckets Based on Snowie’s Frequencies and Default Ratios:

     

    Bet flop: 53 combos

    Value betting hands (18) AA, KK, QQ, 88

    Bluffing hands (35) 8/10 Ahigh FD, 6/6 other FD, A8, A4, JT, J9, Td9d, Kd9d-KdJd, Adxd (not all)

     

    Bet turn: 17 combos

    The turn only removes 1 card from my flop betting range, Ad3d. So, I have 52 on the turn.

    Value betting hands (9) – QQ, 88, AA

    Bluffing (8) – 6/6 other FD, JdTd, Jd9d,

     

    Bet River: 10 combos

    River removes no combos

    Value betting hands (5) – Jd9d, Jh9d, QQ

    Bluffing (3) – KhJh, KhTh, JdTd

     

    Snowie’s Buckets:

    Flop: A bit less than 2:1 Interesting a large chunk is made of KJ.

    Hand Combos Frequ Total
    QQ 6 100% 6
    88 6 100% 6
    AcAd, AcAs, AdAs 3 100% 3
    KcKh, KdKh, KhKs 3 17% 0.51
    KdKd, KcKs, KdKs 3 100% 3
    QdJd 1 3% 0.03 19 Value
    Ah8h 1 6% 0.06
    Ac4c, As4s 2 5% 0.1
    AhJh 1 46% 0.46
    AhJc, AhJd, AhJs 3 93% 2.79
    AhTh 1 56% 0.56
    AhTc, AhTd, AhTs 3 100% 3
    Ah9h 1 6% 0.06
    Ah2h-Ah9h 6 100% 6
    Ad3d 1 83% 0.83
    Ad2d 1 100% 1
    KJ 16 100% 16
    KhTh, Kh9h 2 100% 2
    KTs 3 100% 3
    JdTd 1 2% 0.02
    Jd9d 1 5% 0.05 36 Bluffs
    Total 54.47

     

    Turn: Way more value hands than bluffs

    Hand Combos Frequ Total
    QQ 3 100% 3
    88 3 100% 3
    AA 3 100% 3
    KcKh, KdKh, KhKs 0.5 100% 0.5
    KdKd, KcKs, KdKs 3 100% 3
    QdJd 0 100% 0 12.5 Value
    Ah8h 0.1 50% 0.05
    Ah3h 1 60% 0.6
    Ah5h 1 100% 1
    Ah2h 0.9 100% 0.9
    Ad2d 0.9 100% 0.9
    KdJd 1 8% 0.08
    KhJh 1 8% 0.08
    KdTd 1 9% 0.09
    KhTh 1 9% 0.09
    Kd9d, Kh9h 2 10% 0.2
    JdTd, Jd9d 0 100% 0 4 Bluffs
    Total 16.49

     

    River: Only 25% bluffs…curious. With the all-in, seems you’d want to toss in more bluffs.

    Hand Combos Frequ Total
    Jd9d 0 100% 0
    QQ 3 100% 3
    88 3 100% 3 6 Value
    Ah5h 1 54% 0.54
    Ad2d 0.9 62% 0.558
    Ah2h 0.9 62% 0.558
    KdJd 0.1 100% 0.1
    KhJh 0.1 100% 0.1
    Kd9d 0.1 100% 0.1
    Kh9h 0.1 100% 0.1 2 Bluffs
    Total 8.056

     

    Changes to Typical:

     

    Flop: Looks like I had a decent selection of bluffs, but don’t hold back enough value hands.

    Turn: Similar to the turn

     

    Sniff Test:

    I’m a bit too tired to sniff…

    Like this post? Receive free tips and articles from QTipPoker.

    Pitfalls

    GTO Mental Pitfalls

    GTO mental pitfalls…I’m an expert in this topic as I think I’ve fallen in every mental pitfall available on my current, unfulfilled journey to understanding this topic.

    In 2007, The Mathematics of Poker was published, and I’ve been confused ever since. Recently, a wave of poker literature hit the market about game theory and unexploitable poker strategies. I’ve read these books, discussed the ideas with others, and I’m making progress in grasping concepts.

    Let’s get some semantics out of the way. When players say GTO, they typically mean playing an unexploitable strategy (specifically, the most +EV unexploitable strategy). That’s how I’m using the term here. Certainly, GTO could speak of a broader umbrella of the application of math to games, but this isn’t the typical meaning these days.

    Pitfall #1: Exploitive VS GTO

    Players tend to think about these words as an oxymoron; pitting GTO vs. Exploitive. Turns out, these terms are married: At equilibrium, GTO is Exploitive play.

    Maximally exploiting your opponent means you’ve minimized his EV and therefore maximized your EV. Playing unexploitably means no strategy can lower your EV.

    Let’s use two players, Bob and Mary.

    At a game’s equilibrium, Bob and Mary are playing unexploitably. Neither player can lower the other’s EV. At equilibrium, both players are maximally exploiting the opponent.

    Now, let’s say Bob decides to change his strategy. Equilibrium is broken. What has happened?

    1. Bob is not playing a maximally exploitive strategy.
    2. Mary is still playing an unexploitable strategy.

    Bob cannot minimize Mary’s EV. However, Bob is not maximizing his EV. Bob hurt himself with this adjustment.

    Meanwhile, Mary is unexploitable; Bob has not and cannot reduce her EV in this game. However, Mary is neither maximizing her EV nor minimizing Bob’s EV. Mary is not exploiting Bob. However, Mary has an option. She may remain at the safer, unexploitable strategy or she may adjust her strategy to maximize her EV and minimize Bob’s EV. If Mary leaves the safety of her part of the equilibrium pair, she exposes herself to exploitation…just as Bob already did.

    Pitfall #2: No Money in GTO

    I could understand unexploitable play best through the game rock, paper, scissors (called Roshambo). Unfortunately, this example provided a pitfall.

    In Roshambo, I may perfectly randomize my choices so I pick rock, paper, or scissors each 33.3% of the time. This is unexploitable Roshambo. My nemesis is left with no winning strategy. We break even over the long run regardless my opponent’s decisions.

    Imagine Mary and Bob are playing Roshambo. They are at equilibrium, both randomizing decisions at 33.3%. Suddenly, Bob decides to play rock every time. The results do not change. Bob’s EV is still the same as when he was at equilibrium; Bob is not losing. Mary can work hard to ensure she plays unexploitably, Bob can be a monkey, and Mary gains nothing from her hard work. Certainly, Mary could change her strategy to an exploitive strategy of all paper and crush Bob.

    Why would I want to create such a situation in poker!? I want to win! Why would I work so hard to ensure Bob can act like a monkey and have the same results regardless his decisions?

    Turns out, while poker and Roshambo share a theoretical equilibrium, the effect of one opponent leaving the equilibrium is different in the two games. In Roshambo, only one of the equilibrium pairs need satisfied to ensure both players’ EVs are minimized and maximized. To get this effect in poker, both players must be at equilibrium.

    In poker, when Bob left the equilibrium and Mary stayed, Bob lost EV and Mary gained EV. Mary works hard to stay at the unexploitable strategy, Bob plays like a monkey and Mary wins money!

    Yes, Mary can win even more money by maximally exploiting Bob’s altered strategy, but she has a risk in doing so (she opens herself up to exploitation).

    In summary, staying with an unexploitable strategy is a defense plan. You can’t be hurt, you’re not attempting to hurt your opponent, and you’re simply hoping they hurt themselves…and they can…and likely will.

    Pitfall #3: GTO Doesn’t Apply

    I often read comments in forums where players are saying GTO will not work in their games because players are so bad. If you’ve followed me to this point, you’ll know this thinking is incorrect. I’ve never been in this pitfall, but I’ve been in something similar.

    All I’ve ever done in poker is work to exploit my opponent’s strategy. If I felt I couldn’t exploit well for whatever reason, I leave the game…I find a situation I feel I can exploit my opponents. With good games available, why bother working to understand GTO. There are valid reasons:

    1. Better games are not available.
    2. Game selection is not an option (think tournaments).
    3. Your opponent is unknown.
    4. Your opponent’s play is virtually random.
    5. Understanding the equilibrium helps you identify exploitable strategies as well as how to exploit those strategies.

    Pitfall #4: GTO is King

    I’ve never been in this pitfall either, but I’ve seen others here. “Exploitive play is dead, GTO is the future of poker.”

    A poker player staying at an unexploitable strategy regardless Villain’s decisions makes money when Villain is not at equilibrium. However, if your goal is to maximize your winnings, staying at the unexploitable strategy after Villain has left equilibrium will not make the most money. GTO is not king.

    I’m reminded of a sentence in The Mathematics of Poker on page 47. “Virtually every player uses exploitive play in one form or another, and many players even some of the strongest players in the world, view exploitive play as the most evolved form of poker.”

    Seems apparent to me exploitive poker is the most evolved form. In Bob vs. Mary, exploitive poker always produces at least the same money as the unexploitable strategy. And because the goal in poker is to win as much as possible, choosing to exploitive your opponent is always the most evolved decision.

    Certainly I can imagine reasons why someone would remain at an unexploitable strategy when they have the option to exploit. And I understand arguments can be made to say one could make more money staying with an unexploitable strategy because of mental fatigue, etc.

    Further Questions

    Now that we’ve worked those pitfalls out, I’ve still plenty of core issues to resolve.

    First, I don’t know how much money playing an unexploitable strategy produces. Say you’re playing in a 25nl game with decent opponents. If you played an unexploitable strategy, would you beat the rake? I tend to think this strategy would perform well in today’s environment, but I’m not sure.

    Second, the small problem of application. ;) Poker is so complex, those on the cutting edge realize they’re dealing with approximations. How close are those approximations? What’s the impact of our best estimation’s deviations from equilibrium in typical game environments? When we do find some decent approximation, how feasible is it for a human to employ the strategy?

    To me, these are huge questions. I’m more intrigued than I’ve ever been in this topic, and I’m starting to dig on my own with these ideas. In my recent research, I’ve tripped over a few more pitfalls I’ll share another time.

    Like this post? Receive free tips and articles from QTipPoker.