Burning Bridges and Getting Banned From Full Tilt Poker

This is post #20 in an ongoing series of articles about my work as a poker bot developer.

In a previous post, I described how I was banned from PokerStars. Basically I think I was playing the bot too much, PokerStars security got suspicious, reviewed my account, and figured out it was a bot.

I actually built the bot to run on both PokerStars and FullTiltPoker (FTP), but due to problems interfacing with FTP’s software, I abandoned it and focused on PokerStars.

October 2, 2008 was the day the bot was banned on PokerStars. In June 2009, I started writing about it on this blog. On July 14, 2009, less than a month after I started writing about it here, I got the bright idea that I should double check with FTP that I was still able to play on their site so I emailed them. Keep in mind I was not banned from FTP at the time I sent this email…

Support,

I have a bit of an odd question.

I have an account with FullTiltPoker under the name “…” that I used for a few weeks in early 2008 to test a poker bot I was developing.

The bot played about 300 low stakes Heads Up SNG’s but mostly due to the difficulty of building a bot for the FTP software, I turned my efforts to PokerStars and continued my work there. My account at PokerStars (“kaon”) lasted until early October 2008 when it was promptly suspended for operating the bot. I have not attempted to run the bot since that time on PokerStars, FullTilt, or any other network for that matter.

In the interest of full disclosure, I have written about my work on my programming blog (see: http://www.mattmazur.com/category/poker-bot/).

I may be intersted in playing poker again at some point in the future and I’d like to do it on FullTiltPoker if possible. For what it’s worth, I have no intention of ever running the bot again–indeed, I wish I had never tried to make it in the first place. Why tell you all this? I’m afraid I might build up a significant bankroll and then somehow your security team will learn of my former bot transgressions and suspend my account.

If I never violate Full Tilt’s Terms of Service again, can I play on your service without fear of having my account suspended?

I’d be happy to answer any questions you have.

Regardless of your decision, thank you for the excellent support.

Matt Mazur

Surprise surprise, they did not take kindly to this otherwise friendly email. Three days later they responded:

Hello Matt,

Thank you for your mail and for your candor.

Unfortunately, we have taken the decision to exclude you from the site. We have taken this decision as a precautionary measure to protect the integrity of our site. Whilst we understand that this decision will be frustrating we are exercising our authority to close any account as outlined under Term 3 of our End User License Agreement:

Full Tilt Poker retains authority over the issuing, maintenance, and closing of players’ accounts at Full Tilt Poker. The decision of Full Tilt Poker management, as regards any aspect of a player’s account, use of the Software, or dispute resolution is final.

Which can be seen here:

http://www.fulltiltpoker.com/end_user_license_agreement

You are not permitted to set up any more accounts with Full Tilt Poker. Should you do so, any further accounts will be closed and their balances may be forfeited.

Regards,

Martin
Security
Full Tilt Poker

I kind of smacked myself in the head after this. Why, oh why, did I email them in the first place? I had no intention of playing poker at that time and there was no indication that they were investigating me (though they could have looked up my account by my name), so what value did emailing them have?

After a bit of introspection, I realized the answer: I wanted to burn the bridge. Having an active FTP account was good because it enabled me to turn back to poker should I ever need extra money. But getting banned from FTP, the largest poker site next to PokerStars, was great because it forced me to abandon poker as a possibility. Sure, I could probably grind it away on some of the less popular sites, but PokerStars and FTP are where all the money is. With poker not a viable option, I had to focus on my startup pursuits because I had no fallback plan.

Was it a good decision? Check back in five years and I’ll let you know. :)

What’s your backup plan? Would eliminating it give you a better chance at succeeding at your current endeavor?

What are you working on? How can I help?

My nights and weekends pursuits over the past five years can be divided into two overarching categories: poker and startups. In both cases, I’ve received a ton of help from individuals as well as online communities including Two Plus Two and HackerNews. I wouldn’t be where I am today without the help of many people along the way.

In an effort to pay it forward, maybe I can be of some help to you. I’m not an expert by any means, but I’ve spent a fair amount of time playing poker and working on a poker bot (~3 years) as well as working on various startup endeavors (~2.5 years) and I’ve learned a lot along the way.

If you’re working on a poker bot or a startup and need an outside perspective to bounce your ideas off of, review what you’ve done, or anything else drop me a note: matthew.h.mazur@gmail.com.

I Eliminated the Free Plan from my Web App for a Month: Here’s What Happened.

Background

In January 2010 I launched Preceden, a free web-based timeline tool. In May I migrated to a freemium plan, where users could add a certain number of events for free but had to upgrade to the pro plan in order to create more than that. After some experimentation with different limits and prices, I settled on 5 events for free and a one time payment of $30 to upgrade to the pro plan.

In June I started working on jMockups, a web-based high fidelity mockup tool. From June until the beginning of December I hardly touched Preceden. At the beginning of December I started reviewing Preceden’s stats and realized Hey, this is actually bringing in some decent money so I decided to start dedicating some time each week to working on it. (For a more detailed explanation of why I wasn’t watching it closely, read my 2010, 2011, and a $4K/month challenge post.)

Removing the Free Plan

Looking over the revenue figures I wondered: What would happen if I completely removed the free plan? Instead of a user being able to create 5 events for free, new users would have to pay first to use it.

After about three minutes of planning, I decided to go ahead and implement the change.

Additional Changes

I wanted to change as little as possible so that the results of the experiment would be accurate. After all, you can’t change several variables at once and then attribute the changes to only one.

That being said, I made a few small changes to the site which may have affected the results.

1) I dropped the price from $30 to $29

2) I changed the background color the header from #112a40 (dark blue) to #244386 (a lighter blue) and reduced its height

3) I made some layout and copy changes on the homepage

4) I removed the reCAPTCHA form from the sign up page

I shouldn’t have made these changes, but at the time I was more focused on the potential increase in revenue than on running a proper experiment.

Before and After Screenshots

Click to view full size:

Homepage

Sign Up Page

Notice at the top of the new sign up page it indicates what step of the process you are on (1. Create an Account, 2. Checkout, 3. Create Timelines). I also changed the copy on the button from “Create my Account” to “Create Account and Proceed to Checkout”. The wording will come into play later.

Checkout Page

(Only present on the pay-first version)

Results and Analysis

Notes

  • The number of homepage and sign up page visitors was taken from Google Analytics by looking a the number of new visitors to those particular pages.
  • Promotions refers to users I upgraded because they are bloggers and bloggers can get upgraded to the pro account for free.

Analysis

From Nov 1 – Dec 4, 3287 new visitors came to the Preceden homepage, 894 visited the sign up page, 567 created an account, and 22 upgraded to a paid account. That’s a 0.67% conversion rate from new visitor to paid user.

From Dec 6 – Jan 1, 3343 new visitors came to the site, 528 visited the sign up page, 210 created an account (oops), and 5 upgraded to a paid account. That’s a 0.15% conversion rate.

Users who were able to test Preceden before paying were 347% more likely to upgrade to a paid account than those who weren’t.

Also — and this is definitely my fault — 205 people filled out the sign up page and then abandoned the process on the Checkout page. Why? Most people probably didn’t realize they had to pay before using it. Sure, the Pricing page said “$29 for Unlimted Access” without mentioning a free account and Step #2 of the sign up process was called “Checkout”, but overall the copy didn’t clearly indicate that you had to pay before you could use the app.

Another problem is that the site doesn’t include a demo. It includes examples, but nothing the user can create on their own. Adding a demo section so that new users can get that “Oh cool” moment would have gone a long way.

The good news is that about 4% of the people who created an account converted to the paid plan when they were able to test the product first. Even if the pay-first experiment resulted in better figures, I feel more comfortable letting users test the product before paying. I think this depends a lot on your app and your business model, but for a tool like Preceden there’s no reason not to let people try it for free first. Accordingly, I’m switching back to the freemium version starting today.

Lessons Learned

  • If you run a web app and start building a new product, don’t neglect what you’ve already built. Dedicate some time each week to analyzing your key performance indicators and to making small changes — they’ll add up in the long run.
  • The best way to test this would have been to run the experiment on a fraction of visitors to the site. For example, show a pay-only version to half of the visitors and a free plan version to the other half.
  • Don’t change several variables at once when you run an experiment. Every change you make will affect the results.
  • The time of the year matters. Measuring only the number of paid users would be a bad way choice because a lot of the customers are teachers and I don’t imagine a lot are on the market for a new teaching tool in December. Measuring the conversion rates is better, but there still may be a “Oh I’ll wait till after the holidays to pursue this” mentality among some of the visitors, which could have affected the results. Running this experiment simultaneously would have yielded better results.

Over the next few weeks I’m going to experiment with A/B testing and AdWords to see what’s possible. I’m also going to email the 205 people who signed up during this experiment but didn’t pay; I’m sure they’d be interested in trying it out.

Can you think of anything else that might improve the conversion rates? Leave a comment below and I may test it out.

###

If you enjoyed this post, you should subscribe to the RSS feed for this blog to get future updates. Also, if you’re a web designer or developer I’d love to get your thoughts on jMockups, my new web design startup. Drop me a note at matthew.h.mazur@gmail.com or @jmockups on Twitter. Thanks!

How to List Your WordPress Posts by Category

There’s a nifty WordPress plugin called List Category Posts that makes it dead-simple to list all of the blog posts in a specific category of your blog.

Why is this useful? If you’ve been blogging for a while you’ve likely got a lot of valuable posts buried on your blog that aren’t easily accessible to new visitors. Most bloggers include a list of categories on the side of their blog, but if you’ve got a lot of items filed under a category it can take a while to peruse them all the posts. By creating a a list of posts sorted by category, you can point new visitors so they can get familiar with your site; it acts as a site map.

Your should create a blog post that lists all of your blog categories with a list of posts below them. Then include a link to it somewhere prominently on your site so new visitors can quickly scan your old posts.

You can see the list of posts I created for this blog here. And here’s what the post itself looks like:

The name attribute refers to the category name (make sure you put categories that have multiple words in quotes), numberposts specifies how many posts you want to be displayed for that category (-1 means list everything), and date tells it to display the post date next to the link.  You can see all the options on the plugin’s Other Notes page.

And the great thing about this is that it will update automatically as you add new posts.

To add a link to your side bar, go to Appearance > Editor > Sidebar and add a link to that blog post:


Enjoy!

Blog Posts by Category

AOL-Files

Design

Domain Pigeon

HNTrends

jMockups

Poker Bot

Preceden

Programming

Quotes

Startups

Misc

Startup Blogs To Make You a Better Entrepreneur

As an aspiring startup founder, I’m always on the lookout for blogs that will help me become a more adept entrepreneur.  Fortunately for me and for the startup community there’s a lot of really talented entrepreneurs who write regularly about what they’ve learned so you can benefit from their experiences.

The following is a list of the best startup blogs that I’ve run across, which I thought I’d share in the hope that you find something new for your collection. In no particular order…

  1. Derek Sivers – Founder of CD Baby and several other companies, the word “wise” comes to mind. His post Let pedestrians define the walkways is always in the back of my head while I’m working on my startup.
  2. Gabriel Weinberg – Ballsy Philadelphia-based founder of Duck Duck Go, an inspirational (and quite successful) one-man search engine startup. Really nice guy too.
  3. IIlya Lichtenstein – Internet marketer who recently helped more than 150 startups with their marketing efforts and wrote about the lessons learned in a series of great blog posts.
  4. Jason Baptiste – Boston-based cofounder of PadPressed. His posts on startups are some of the best I’ve read. See, for example, If You Build It, They Won’t Come (something I’ve learned the hard way) and 16 Ways Your Startup Needs to be Getting Customers.
  5. Eric Ries – Eric has changed the way people approach building startups with the Lean Startup movement. He also coined the phrase Minimum Viable Product, which is now common lingo in the startup world.
  6. Ben Cashnocha – An all around brilliant guy, he writes on topics including entrepreneurship, travel, and philosophy.
  7. OnStartups – By Dharmesh Shah and others, it offers troves of invaluable advice for startup founders in posts that always seem to begin with a number.
  8. Jason Cohen – Another very successful startup founder who writes about how to do it well. Rich vs King: Why I Sold My Company and Why I feel like a fraud are great places to start.
  9. Paul Graham of Y Combinator fame — his essays are essential reading for startup founders.
  10. Rob Walling – Software by Rob is a new addition to the list. I recently read his new book Start Small, Stay Small and immediately identified with his approach. Highly recommended for anyone running or aspiring to run a small online business.
  11. Matt MaroonFormer poker player turned YC-backed startup founder of Blue Frog Gaming, Matt excels at seeing the big picture and articulating it for his readers (just not on HackerNews).
  12. Chris Dixon – Cofounder of Hunch and active angel investor who writes on investing, technology, social media, etc.
  13. Mixergy – An excellent series of interviews by Andrew Warner, who relentlessly pursues the execution details behind many successful startups.
  14. Sebastian Marshall – Sebastian offers practical advice drawn from a breadth of knowledge and experience on how to excel at just about anything. Here‘s an inspiring post from yesterday and here‘s a list of his top posts.
  15. Balsamiq Products Blog – The more I work on jMockups, the more impressed I am with Balsamiq’s incredible execution. Too bad I’m going to destroy them (just kidding… maybe). :)
  16. Steve Blank – Former Air Force officer turned Silicon Valley serial entrepreneur, Steve invented the Customer Development process which is the foundation of the Lean Startup movement.
  17. Patrick McKenzie – Of Bingo Card Creator and soon-t0-be Appointment Reminder fame, he inspired me to create Preceden, a web-based timeline tool.
  18. Spencer Fry – Creator of Carbonmade, a site for designers that lets you show off your portfolio, who writes about entrepreneurship, freemium, and more.
  19. Jacques Mattheij – A pillar of the HackerNews community and thought leader in earning money from web apps, Jacques’s blog is not one to miss.
  20. Daniel Tenner – Cofounder of Woobius, who puts things in perspective with posts like iPad: Apple for Mom and The questionable value of the real time web.
  21. This Week in Startups with Jason Calacanis
  22. Furqan Nazeeri – Boston-based serial entrepreneur who writes about startups, venture capital, and entrepreneurship
  23. Seth Godin – Seth is a brilliant marketer and businessman who shares his seemingly endless supply of insights via his blog. He’s also got some great books including  Small is the New Big and The Purple Cow.
  24. Mark Suster at BothSidesOfTheTable – Musing of an entrepreneur turned venture capitalist. I came across his blog via his post How to Talk to Investors About Your Competitors.

And two non-startup blogs that you might also like:

  1. Less Wrong – Less Wrong is about how to think better–a lot of it will make you go whoa. For example, check out Intellectual Hipsters and Meta-Contrarianism.
  2. David Mangold – Dave is a big picture, outside-of-the-box intellectual who writes about topics including evolution, astrobiology, metaphysics, and more.

Know of a blog that might make a good addition to this list? Let me know in the comments below.

Cheers!

Determining Your Values with Hypothetical Extremes

To be happy is an enormous achievement because it entails working very hard to learn what one needs to be happy and most people choose the incorrect things. – Marty

My great uncle and I have had a long running email conversation about life, philosophy,  happiness, and the like. One of the tenents of his philosophy, which is based heavily on the works of Ayn Rand and Nathanial Brandon, is that happiness is a consequence of living your life in a way that’s aligned with your values, which in turn should be based on your own rational self interest.

Determining your values can be a daunting task if you’ve never done it before but I highly encourage you to take some time and figure them out if you’re not sure. I came up a simple way of determining my values that works pretty well for me so I thought I’d share it with you all in case you’re having trouble:

1. Start by identifying one thing that you value. It doesn’t have to be the most important thing, but it should be something that you would say “Yeah, that’s important to me.”

2. Imagine a hypothetical life where that’s the only thing in your life. Would you be happy if that’s all you had?

3. If not, ask yourself why? What’s missing? Add that to your list of values and repeat these steps until you’ve got a life that you’d be happy with.

The list of things that make up this hypothetical world is what you value.

Here’s an example for me:

I enjoy making things. Would I be happy in a world where all I did was make things? No. It’s not enough to simply make something. It has to be something new and creative.

So I want to make new, creative things. Would I be happy in a world where that’s all I did? No. If I have someone telling me new, creative things I should make I wouldn’t be satisfied. I have to have the independence to make what I want.

So I want to make new, creative things (ie. innovate) without anyone dictating my actions or direction. Would I be happy in a world where I was an independent innovator? No. I could sit in a dimly lit room all day making cool things with legos, but I wouldn’t be happy. The things I build have to have some impact on the world.

So I want to be an independent innovator who creates things with impact. Would that be enough? What if I could change hundreds of lives but no one would ever know it was me? Recognition isn’t paramount, but I find that I would like some recognition for my work. I don’t want to be anonymous.

So I want to be a recognized independent innovator who creates things with impact. Getting there. Would it be enough to do this completely alone, without any friends or family? No. I want those things too.

So I want to be a recognized independent innovator who creates things with impact who also has a great family and friends. Yeah, that sounds pretty good to me. It’s not perfect: I could continue adding other things (physical and mental health, education, self improvement, integrity, etc), but you get the idea.

By following this simple little algorithm you can determine with high fidelity what your values are. It won’t tell you whether these things are in your own self interest (ie, you might imagine a world where you’ve got an endless supply of cocaine to get high on), but it will help you identify what’s important to you.

Give it a shot. See what you come up with.  Figure out how you’re going to get there, then do it.

2010, 2011 & a $4K/month Challenge

A few months back with what seemed like two months of work left to do, I publicly committed myself to launching jMockups in four weeks. The number of things I wanted to get done prior to launching was daunting, but I desperately needed to get the product out there and in the hands of actual users to start collecting feedback.

How’d it go? I didn’t launch it in four weeks; I launched in less than three.

Public accountability is a powerful thing. Sebastian Marshal writes about his own experience:

If I hadn’t set this goal and been accountable publicly, to my friend and to everyone who reads here, I wouldn’t have done it in two weeks. Honestly – I’m pretty internally motivated, but I’ve had a lot of stuff going on the last two weeks, it wouldn’t have happened. But it did happen, largely because I was publicly accountable.

This productivity hack that works especially well for me. I’m an INTJ on the Meyers Briggs type indicator and one of our defining characteristics is the value we place on competence. By publicly committing myself to launch, I put my own competence on the line so I did what it took to meet the goal. Practically this meant postponing a lot of the things on my todo list until after the launch, working some long nights and weekends, and taking a week off of work.

Publicly committing myself worked well for me once, so I’m trying it again.

The Scene

I spent most of 2010 building. I launched Preceden in late January and continued working on it through May. In June I started working on jMockups and launched it in late October. My focus in 2010 (and largely 2009 and 2008) was on learning and building. I knew I eventually wanted to make money off of the apps, but money wasn’t my primary goal.

I’ll be with my current job until October 2012 so I can’t pursue this full time just yet. Because I have a day job I’ve never had to rely on my web app income to survive. It’s always been like Oh, I had another sign up. That’s nice. That’s got to change.

October 2010–a mere 21 months away–will approach fast. In order for web app development/entrepreneurship to be viable long term, I have to start making more money. My true passion lies in building things–not money–but without money I can’t spend my time building things.

The Goal

I don’t have exact numbers (which is part of the problem), but Preceden currently makes about $500/month and costs $70 to operate. jMockups makes $24/month (whohoo!) and costs about $200/month to operate (doh!). Taken together, I’m making about $250/month.

It’s not entirely fair to value the apps in terms of their current profits, but that’s obviously a big part of it. Preceden targets a small niche and has a small goal: be the best timeline tool. jMockups targets a large niche and has an ambitious goal: improve the way people design websites. Long term, jMockups has the potential to be a home run; Preceden doesn’t.

With that in mind:

My goal is to make $4,000 per month from Preceden and jMockups by the end of 2011.

That’s about 16x what they make now. If a public commitment isn’t scary, it’s probably not ambitious enough. And since this is terrifying, I figure it’s a good number to shoot for.

I’ll make monthly progress updates starting at the end of January.

The Plan

Preceden has a marketing problem. It’s is a quality tool that has a lot of happy users, but not enough people know about it. I need to get more people to the site and need more of them to convert to paying customers. My plan with Preceden is to start marketing it heavily (via things like AdWords), perform lots of A/B testing, and optimize the hell out of it by way of extensive analysis. If I can get Preceden to a point where outbound marketing has a measurable positive ROI, I’ll be in really good shape.

jMockups has a product problem. The tool is good, but not great. Trying to change the way people design websites is hard (I probably should have picked a more narrow niche to start with, but that’s another story). I’ve been adding two or three new features a week since it launched in October, but I haven’t spent much time on the other things it takes to create a successful web product. For example, there’s currently way too much friction from when a user arrives at the site and to when they create a mockup that they’re happy with. And it shows in the usage metrics (75% of new users create 1 mockup and never come back). In 2011, I’ll continue working on the product but I’ll place a stronger emphasis on usability, education, and building a community. The revenue should follow from doing these things well.

I have a sole founder problem. But not really. I like the independence of working alone, but having someone else to build with and bounce ideas off of would be great. I’m not going to spend a lot of time actively searching for a cofounder, but if the opportunity presents itself I’d definitely give it a shot. (Interested? Drop me a note: matthew.h.mazur@gmail.com)

###

So here’s to 2011. I don’t know how things are going to turn out, but hopefully with this public commitment they’ll turn out a little bit better than they otherwise would have.

Poker Bot Preflop Strategy Explained

This is post #19 in an ongoing series of articles about my work as a poker bot developer.

When I first attempted to build a poker bot, I tried long and hard to come up with a single algorithm that given your two hole cards and the situation would spit out call, raise, or fold for every situation that the bot could face. Turns out its not a trivial task. There are a lot of factors that should affect your decision: your hole cards, your image, your opponent’s style, your position, the stack sizes relative to the blinds, the recent hand history, the stack to pot ratio once the flop hits and, and the history so far in the hand (in the case of three and four bets). To quantify all of this information – let alone weigh it in an intelligent way – is difficult, to say the least. After several weeks of fruitless attempts, I abandoned it in favor of a simpler, albeit less elegant solution.

At its core, my solution boils down to conditional statements using a simplified version of the current situation. Consider this:

“If your effective stack sizes is 55 big blinds and you’re the small blind and you’re first to act and your opponent is loose aggressive and you have 8h 6h then you should raise three times the big blind.”

It would be impossible to enumerate every possible combination this way, but if you take some shortcuts, you reduce it to a manageable number of factors.

Stack Size

In order to work with stack sizes, I grouped them together based on the effective stack size (effective stack size uses the smaller of your and your opponent’s stack size because the rest is not in play):

0 – 10bb: Shortstacked

10 – 15bb: Danger Zone

15 – 22bb: Red

22 – 35bb: Orange

35 – 50bb: Yellow

50 – 75bb: Green

(The maximum effective stack size you can have on PokerStars’ Heads Up SNGs is 1500/20 = 75 bb.)

These groups were based on my observations watching the bot and on the postflop stack to pot ratios.

Previous Actions

Like stack sizes, it would be impossible to list out every possible combination of actions leading up to current situation, so I used a shorthand:

1 = You’re small blind

2 = You’re big blind

All previous actions are reduced to C (call) or R (raise) and the size of the raises are ignored completely.

Examples:

- You’re small blind and just dealt: 1

- You’re big blind and your opponent raises: 2R

- You’re small blind, you limp and your opponent raises: 1CR

- You’re big blind, your opponent raises, you three bet, and he four bets: 2RRR

Every preflop decision can be represented this way.

Hole Cards

It’s generally not a good idea to group holecards beyond the standard 9s 9h = 99, 9s 8h = 98o, etc. There are times when 88, 99, and TT should be treated the same and other times when TT should be treated differently, so it won’t do you much good to create a “Mid Pocket Pair” group and treat everything in it the same way.

That being said, specifying an action for all 169 simplified hole card combinations for every situation would would be a tedious task to do by hand. In an effort to manage it, I created a seperate program specifically for creating ranges and assigning actions to the holecards. I called it Range Maker:

(If you’ve seen ALL IN Expert, the poker calculator that I developed after the poker bot, Range Maker is where the idea came from.)

There are two versions of Range Maker shown in the screenshot above. Below the grid on the left is the older version; on the left is newer version. The grid serves both.

The older version lets me assign a fold, call, raise, or push action to every hole card combination in the selected range.

In the example below, orange represents call, maroon a 3x raise, cyan push, and gray/pink fold:

As time went on I expanded it to include additional options:

The numbers on the right represent the distribution of raise/call/fold for that color. The randomness was necessary to fool observant opponents and PokerStars security, in case that was something they looked at. The decision to push or raise 3x was later delegated to software, which figured out what the stack to pot ratio would be postflop if the opponent called and pushed if it was too high.

Here’s an example of what the range looks like for the small blind opening range vs an aggressive opponent when the stack size was in the red zone (15 – 22 bb):

And here’s the same spot vs a call station:

It took a long time to get these ranges down. I would sit there and watch the bot play for hours, making pages of notes on what I wanted to adjust when the session was over.

For those of you looking for a bit more, here are the range files I used with each version:

These include virtually every range I ever worked with, so if you want to use these you’ll have to spend some time analyzing them to pick out the gems.

Putting it All Together

Here’s roughly how it went in an actual game:

1. Analyze the current situation: hole cards, stack size, previous action, and opponent style and group them.

2. Look up the range based on these factors

3. Act

Example: PokerStars 25/50 blinds, you are small blind with 2100 chips, call station opponent is big blind with 900 and you’re dealt Ks 5h.

Your effective size is 900/50 = 18 big blinds, putting you in the red zone and since you’re small blind and first to act, the previous action is simply “1″. Now with three layers of conditional statements (stack size, previous action, and opponent style) you can look up the range (see the screenshot above) and determine that K5o is 80% raise, 20% call, and 0% fold. Roll a die (in this case the random number generator) and pick an action based on that distribution.

Here’s the corresponding code for step 2:


'------------------------------------------------------------
'  Name    : PreflopActionFromFile
'  Purpose : Given a specific situation, this'll look up my range in
'            the Hero Ranges.txt file and see what I want to do with this hand
'------------------------------------------------------------
'
Public Function PreflopActionFromFile(sHoleCards As String, sRangeName As String) As String

 Dim sRangeFile_Old As String                ' old range file
 Dim sRangeFile_New As String                ' advanced ranging (mixed ranges)
 Dim sNewINIData As String                   ' data from the advanced file
 Dim iDataPos As Integer                     ' start of the distribution
 Dim sDistribution As String                 ' data from that file
 Dim sDistributionSplit() As String          ' split it up

 Dim sSimpleHand As String                   ' AA, AQs...
 Dim dRndNum As Double                       ' a random #
 Dim dRaisePerc As Double
 Dim dCallPerc As Double
 Dim sINIVal As String

 sSimpleHand = SimpleHand(sHoleCards)

 sRangeFile_Old = App.Path & "\Resources\Hero Ranges.ini"
 sRangeFile_New = App.Path & "\Resources\Hero Advanced.txt"
 sNewINIData = GetFromINI("Range Data", sRangeName, sRangeFile_New)

 If sNewINIData <> vbNullString Then
 ' There is an entry in the advanced range file

 iDataPos = InStr(sNewINIData, sSimpleHand)
 sDistribution = Mid(sNewINIData, iDataPos + Len(sSimpleHand) + Len(" ("), InStr(iDataPos, sNewINIData, ")") - iDataPos - Len(sSimpleHand) - Len(" ("))
 sDistributionSplit = Split(sDistribution, "/")

 ' Make an update
 Update "Mixed Distribution: " & sSimpleHand & " (" & sDistribution & ")", 2, eDecision

 dRndNum = Rnd
 dRaisePerc = Val(sDistributionSplit(0)) / 100
 dCallPerc = Val(sDistributionSplit(1)) / 100

 ' Make a decision...
 If dRndNum <= dRaisePerc Then
 PreflopActionFromFile = "R"
 ElseIf dRndNum <= (dRaisePerc + dCallPerc) Then
 PreflopActionFromFile = "C"
 Else
 PreflopActionFromFile = "F"
 End If

 Update "Action Chosen: " & PreflopActionFromFile, 3, eDecision

 Else

 Update "Hero Range: " & sRangeName, 1

 sINIVal = GetFromINI("Ranges", sRangeName & " (R)", sRangeFile_Old)
 If InStr(sINIVal, SimpleHand(sHoleCards)) > 0 Then
 PreflopActionFromFile = "R"
 Exit Function
 End If

 sINIVal = GetFromINI("Ranges", sRangeName & " (C)", sRangeFile_Old)
 If InStr(sINIVal, SimpleHand(sHoleCards)) > 0 Then
 PreflopActionFromFile = "C"
 Exit Function
 End If

 sINIVal = GetFromINI("Ranges", sRangeName & " (P)", sRangeFile_Old)
 If InStr(sINIVal, SimpleHand(sHoleCards)) > 0 Then
 PreflopActionFromFile = "P"
 Exit Function
 End If

 PreflopActionFromFile = "F"
 End If

End Function

Final Thoughts

This approach covered about 90% of all the preflop situations the bot faced in the course of a game, but about 10% had to be handled with special cases. Consider, for example, an opponent who pushes every time with 75bb. You can’t just treat this as a 2R situation and call with the standard range. There are also a lot of situations where you should shove simply based on its expected value, which you have to figure out in spots that warrant it (which require you to estimate your opponent’s raising and calling range).

If you’re an aspiring botter and have questions about any of this, feel free to shoot me an email. And good luck.

Matt

Domain Pigeon: Deadpool

Domain Pigeon has been among the living dead for quite a while now. The site has been live, but it hasn’t been updated in about two years.

As part of my account clean up today, I’m putting a nail in it.

Here’s to you old friend.

« Previous PageNext Page »