Full Tilt Color Coding In Twenty Minutes or Less
The other day we talked about how opponent color-coding can dramatically improve your online poker ROI because it addresses one of the most important and yet under-appreciated skills in poker:
Table selection, table selection, table selection
My opinion is that table selection is the single biggest factor influencing online poker results at any level.

All you have to do is read something like Table Selection and Variance 101 (by well-known 6-man SNG player Jared "jhub3000" Hubbard) to get a feel for the effort top players devote to table selection.
Now that you're educated in variance, let's move on to table selection. A recent study was done to see how winning players effect your ROI. Here's how much each type of player lowers your ROI when they sit in your game:
Good player: -4.5%
Decent player: -2.8%
Barely winning player: -2%We'll assume we play $100 SNGs, in general I'd say each type of player would have the following ROI range:
Good player: 5%+, maybe 4%
Decent player: 2-3%, maybe 4%
Barely winning player: 1%Now you need to use judgement in assessing ROIs. For one, there's good players who practice poor table selection. They might have a 2% ROI at $100s, but actually lower your ROI 4.5%. We'll assess some stats/player types & I'll tell you how I think they would effect my ROI in a $100 turbo:
Player 1: 10,000 games, $250 avg. stake, 3% ROI....Without knowing how they play I'd probably assume he lowers my ROI 4.5%...although his ROI is only 3% he has a higher avg. stake
Player 2: 500 games, $100 avg. stake, 6% ROI, has numerous glaring leaks....this player might even be a losing player, depending on how bad those leaks are, but you don't want to give your opponents too little of credit....despite the ROI, he has a small sample size & glaring leaks...I'd put him as a 2% ROI dropper
The exact numbers he quotes are irrelevant; the point is that he's even thinking in these terms in the first place. Good players cost you a lot of money. Even if they're not as good as you. Which of course is why color coding is so useful, and why I make a big deal about it: it helps you shun good players and follow bad ones.
And that means money in your pocket.
Automated Color Code Generation for Full Tilt
A regular player will face hundreds of thousands of opponents during his online poker career. Obviously, manually color-coding each opponent isn't really feasible unless you start doing it from the beginning. Even then, it's a pain. And what do you do a year down the road, when half of the players have changed their style?
What's needed is an automated color-coding tool. We'll build a (very) basic version of such a tool today.
- Retrieve each player in your PokerTracker 3 or Hold'em Manager database
- Calculate or retrieve a rating for each player
- Choose a color-code to represent that rating
- Inject the color code into the Full Tilt player notes file
For now we'll limit the scope of our tool to Full Tilt, since it's the only major venue that:
- Stores color codes in an open, accessible format
- Propagates color codes throughout the UI
But the same techniques should work in theory for other sites, when and if they add support for color coding.
The Player Ranking Algorithm
Needless to say, a color-coding system is only as good as the accuracy and consistency of its player ranking algorithm. A sophisticated player ranking algorithm would take all of the following into account:
- Historical winnings results from sites like Sharkscope, OPR, and PokerDB
- Hand histories (via PokerTracker or Hold'em Manager etc.)
- Any notes or flags set by the player
But since this is a proof of concept, and since most of the sites like Sharkscope and OPR expressly forbid external automation, for now we'll use the PokerTracker 3 Auto-Rate feature to generate our player rankings:
![]()
It's not an ideal solution, because PokerTracker can only rate opponents for whom you have a certain number of hand histories, but for demo purposes it's fine. We'll associate each player rating with a Full Tilt color code using the stoplight color scheme discussed previously.
And of course, you can easily extend this "algorithm" to incorporate any data and/or color scheme you want.
The Code
I've kept the (C#) code as simple as possible:
- One class (ColorCodeInjector)
- One public method (Inject)
In order to build and run the code, you'll need to:
- Backup your Full Tilt player notes file!!!
- Run the Auto-Rate feature inside PokerTracker
- Install Npgsql, the .NET Data Provider for PostgreSQL
- Change the portions of the code marked "TODO" to match your particular settings.
Here's the ColorCodeInjector class in all its ugly, unrefactored glory.
using System;
using System.Data;
using System.Xml;
using Npgsql;
namespace FTColorDemo
{
public class ColorCodeInjector
{
private static NpgsqlConnection _conn;
public static void Inject()
{
// First, open the Full Tilt player notes file.
// TODO: replace this with the full path to your FT player notes file.
string filePath = @"c:\Program Files\Full Tilt Poker\YourPlayerNameHere.xml";
XmlDocument doc = new XmlDocument();
doc.Load(filePath);
XmlNode playerNotesNode = doc.GetElementsByTagName("NOTES")[0];
// Build the PostgreSQL connection string
// TODO: Below values are defaults. You may need to change these on your system.
string server = "localhost";
string port = "5432";
string user = "postgres";
string password = "dbpass";
string database = "PT3 DB";
string connString = String.Format("Server={0};Port={1};User Id={2};Password={3};" +
"Database={4};Pooling=False;CommandTimeout=120;",
server, port, user, password, database);
// Open the connection
_conn = new NpgsqlConnection(connString);
_conn.Open();
// Prepare our SELECT statement...
// This query returns all RATED Full Tilt players from the PT3 database...
NpgsqlCommand cmd = new NpgsqlCommand(
"SELECT player_name, val_icon " +
"FROM player WHERE val_icon > 0 AND id_site = 300", _conn);
// (If color-coding based on some other heuristic, use something like this instead):
//NpgsqlCommand cmd = new NpgsqlCommand("SELECT player_name, val_icon FROM player WHERE id_site = 300", _conn);
// Invoke the reader
NpgsqlDataReader reader = cmd.ExecuteReader();
bool modified = false;
// Iterate across each player
while (reader.Read())
{
string playerName = reader.GetString(0);
int playerRating = reader.GetInt32(1);
// See if this player already has a note. If so, ignore.
// (Alternately, if you're using some other heuristic than PT3 ratings,
// comment this test out.)
XmlNode n = doc.SelectSingleNode(
String.Format("PLAYERDATA/NOTES/NOTE[@PlayerId = '{0}']", playerName));
if (n != null)
continue;
// Get the player's color.
int playerColor = GetPlayerColor(playerName, playerRating);
//if (playerColor != meaningfulValue)
// continue;
modified = true;
// Create a new <NOTE> element for this player
XmlElement el = doc.CreateElement("NOTE", "http://www.fulltiltpoker.com/schemas/client");
// Add <NOTE> attributes: PlayerId, ColourIx, and Text
XmlAttribute att = doc.CreateAttribute("PlayerId");
att.Value = playerName;
el.Attributes.Append(att);
att = doc.CreateAttribute("ColourIx");
att.Value = playerColor.ToString();
el.Attributes.Append(att);
att = doc.CreateAttribute("Text");
att.Value = "[Generated by FTColorCoder]";
el.Attributes.Append(att);
playerNotesNode.AppendChild(el);
}
if (modified)
doc.Save(filePath);
reader.Close();
_conn.Close();
}
/// <summary>
/// Calculate the color for a given player. Currently all we're doing is
/// correlating the PokerTracker rating for this player to a given color.
/// A more sophisticated implementation would actually run some heuristics,
/// either locally on the PT3 data, or by connecting to an online results
/// repository.
/// </summary>
/// <returns></returns>
private static int GetPlayerColor(string playerName, int playerRating)
{
// Insert player-ranking algo here
return _colorIndices[playerRating];
}
/// <summary>
/// Correlate player ratings to FT color codes. The array index
/// is the player rating, the value at that index is the color
/// to use, or rather, the index (in the color-code dropdown)
/// of the color to use.
/// </summary>
/// <remarks>
/// To get a better idea for how this all works with PT3, run this query in pgAdmin:
/// SELECT CAST(substring(setting_name from 11 for 2) AS integer) AS id_rating, setting_value FROM settings WHERE setting_name LIKE 'icon_desc_%' ORDER BY id_rating
/// </remarks>
private static int[] _colorIndices = new int[] {
14, // Player rating of "0" means not rated. Color: NONE.
14, // "Default" [Icon: Player] -> NONE.
7, // "Loose-Passive/Passive" [Icon: Fish] -> GREEN
2, // "Tight-Aggressive/Aggressive" [Icon: Money Bag] -> RED
6, // "Semi-Loose-Aggressive/Aggressive" [Icon: Smiley] -> CHARTREUSE
7, // "Semi-Loose-Aggressive/Passive" [Icon: Frowney] -> GREEN
3, // "Tight-Aggressive/Passive" [Icon: Exclamation] -> ORANGE
3, // "Semi-Loose-Passive/Aggressive" [Icon: Bomb] -> ORANGE
5, // "Loose-Aggressive/Passive" [Icon: Dice] -> YELLOW
5, // "Tight-Passive/Aggressive" [Icon: Rock] -> YELLOW
2, // "Loose-Aggressive/Aggressive" [Icon: Hurricane] -> ORANGE
14, // "Not Sure Yet" [Icon: Question Mark] -> NONE
6, // "Semi-Loose-Passive/Passive" [Icon: Cell Phone] -> CHARTREUSE
7, // "Tight-Passive/Passive" [Icon: Mouse] -> GREEN
5, // "Loose-Passive/Aggressive" [Icon: Elephant] -> YELLOW
2, // "Tight-Aggressive" [Icon: Eagle] -> RED
};
}
}
This isn't the cleanest code:
- Hard-coded array correlating PokerTracker player ratings to Full Tilt color indexes
- Hard-coded inline SQL statements
- Use of XmlDocument (stream would probably be a better choice)
But this is Full Tilt Color Coding in Twenty Minutes or Less, not Full Tilt Color Coding in Twenty Hours or Less. What do you expect?
So copy and paste the above code into a .NET Console or Windows Forms project and kick off the color injection process by calling the Inject method:
{
static void Main(string[] args)
{
ColorCodeInjector.Inject();
}
}
And voila! It crashes, destroying your player notes forever. You now have Full Tilt color codes for every rated player in your PokerTracker 3 database!

Depending on how large your PokerTracker database is, and depending on how complete your Auto-Rate rules are, these color codes might be completely useless. But at least you know the mechanism works. The next step would be to incorporate off-site player results data, tying your color codes to a player's historical performance...
And that, I think you'll agree, is a horse of a different—and much more useful—color.
Use the form below to leave a comment.
- Of Gravatars and Robohashes
- Optimizing VP$IP
- A Question of VP$IP
- John Carmack: Script Interpreters Considered Harmful
- Movie Doppelgangers: B-Movie Ripoffs of Hollywood Blockbusters
- BROWSE ALL POSTS
Subscribe to Coding the Wheel over email or through any RSS reader. Coding the Wheel has been published since 2008.
- How I Built a Working Online Poker Bot, Part 1, 2, 3, 4, 5, 6, 7, 8
- Summoning the Harry Potter MMORPG
- Are Commercial Databases Worth It?
- 21 and the Monty Hall Paradox
- Online Poker and the Multi-Tabling Effect (34)
talia wrote: Ping G15 Fairway Wood Mizuno MP 53 Irons Mizuno MP 68 Irons Mizuno MX 1000 Irons ... - Online Poker and the Multi-Tabling Effect (34)
talia wrote: Ping G15 Fairway Wood Mizuno MP 53 Irons Mizuno MP 68 Irons Mizuno MX 1000 Irons ... - The Coin Flip: A Fundamentally Unfair Proposition? (92)
carla wrote: great post Thanks for sharing! [mutui][1] [1]: http://www.finmutui.it/ "mutui" ... - Summoning the Harry Potter MMORPG (1593)
AmberTheHarryPotterNumber1Fan wrote: Oh Does anyone know when it will come out? - Full Tilt Color Coding In Twenty Minutes or Less (34)
Timber Decking wrote: [url=http://www.deck-max.com.au/]Timber Decking[/url] [url=http://www.timberdeckingsydney.net.au/]Timber ... - Summoning the Harry Potter MMORPG (1593)
Tekken9 wrote: There is no game, at least not yet. - The Programming Aphorisms of Strunk and White (90)
parkeren wrote: So that we will follow and what shall be the first step to do so, because everyone will like this software ... - Online Poker and the Multi-Tabling Effect (34)
Anonymous wrote: This was an entirely new concept that Titleist Japan & Titleist US worked together on to create. They ... - Summoning the Harry Potter MMORPG (1593)
AmberTheHarryPotterNumber1Fan wrote: How do i play the Game? ;{ - The Coin Flip: A Fundamentally Unfair Proposition? (92)
maria wrote: i like this article and got info.this is very nice and popular site ,it site have informative and intrusting ... - The Coin Flip: A Fundamentally Unfair Proposition? (92)
Brian wrote: This is fascinating. I wonder if there's a similar bias vis a vis the coin flip during a football ... - Movie Doppelgangers: B-Movie Ripoffs of Hollywood Blockbusters (14)
Brian wrote: This is certainly not a hollywood blockbuster [dating site][1] [1]: http://www.basecandy.com/ ... - Movie Doppelgangers: B-Movie Ripoffs of Hollywood Blockbusters (14)
Brian wrote: Singles looking for [dating websites][1] can join now. [1]: http://www.basecandy.com/ ... - Full Tilt Color Coding In Twenty Minutes or Less (34)
Photo booth san diego wrote: Appreciate your making the effort to discuss this, I find myself strongly about this and love mind ... - Of Gravatars and Robohashes (20)
rake wrote: [rake][1] you provide the nice information , gravaters are amazing [1]: http://www.rakebackrage.com/ ... - The Programming Aphorisms of Strunk and White (90)
Steve Waters Vancouver wrote: A random act of kindness! - Movie Doppelgangers: B-Movie Ripoffs of Hollywood Blockbusters (14)
Bradly wrote: Battle: LA was a great movie (the new one that is). I have noticed a lot of very similar movies, mostly ... - Summoning the Harry Potter MMORPG (1593)
Shawn wrote: Haha, these photos are classic! I'm actually not a fan of the Harry Potter movies but I do play ... - A Word About Authenticity (57)
Shawn wrote: Being authentic is very important. If I'm playing poker against a bot and it goes all in on a 2, ... - Coding the Tweet: Building a Custom Branded Twitter Application (71)
Shawn wrote: Using Twitter to promote a business is extremely popular today. I actually found a place to train ...

34 comment(s)
I have been waiting for something like this, glad you have posted this james thanks.
This is a good starting point. I think the author is not able to say "make an HTTP request to pokerprolabs.com and retrieve the player data" because technically that might be abuse.
But you can HTTP request into say:
http://www.pokerprolabs.com/camoflge/pokerstars.aspx
And pull the player's winnings that way. If the site requires Javascript, do this in a local (embedded) browser instnace. Otherwise a simple HttpRequest should do the trick.
Hope this helps...
EDIT: That might be against that site's TOS so be careful and don't deluge them with requests.
Awesome, any attempt to use ADO.NET, XML, and XPath for online poker gets my vote. :-) By the way, XmlDocument may not be the best choice as the number of players grows. I'd use an XmlWriter myself.
I wonder when we're going to get a market for buying/selling auto generated FTP notes, thus saving the effort of DB parsing, etc.
So is there no version for non-programmers? All I see is source code and no download link. I was hoping to give this a try tonight.
James - thanks for the demo. I recently signed up for FT, downloaded the code and played with it a bit.
Works great though I had to tweak a couple things. Maybe somebody will build a commercial version like Indiana was saying. Until then, I'll probably go in and add some sort of support for pulling the data from pokertableratings.com.
[i]>So is there no version for non-programmers? All I see is source code and no download link. I was hoping to give this a try tonight.[/i]
Not yet, unfortunately. I was afraid to package this as an executable because somebody out there will invariably forget to backup their Full Tilt notes file prior to running, and I didn't have the time to add all the behaviors necessary to get this running smoothly on any user's machine.
But as per Indy's comment I think there's a decent change we might see a packaged version of a tool like this in the near future. If not, I'll post something a little more complete...
awesome!! want it! but make it so it pumps some useful info to the player notes. if you get player ss opr ptr records why cant you put the win amount in the notes?
Something is not right with this. I noticed that players in PT3 with the moneybag icon showed up green in the player notes. Upon further inspection, I checked a couple of players with the money bag icon(Settings.idrating=3) and Player.valicon = 2 on these players, NOT 3 as the lookup array is expecting. This means that all the players that should be specifically avoided are color-coded as green (fish). Am I missing something?
[i]>This means that all the players that should be specifically avoided are color-coded as green (fish). Am I missing something?[/i]
Hi jw, the Full Tilt color indexes are 0-based whereas the initial version of the code used 1-based indexes. I believe that would cause the behavior you're seeing. This is fixed above but of course, you can always just tweak that array manually to color-code things according to your taste... the color selections can probably all be improved.
Thanks James. I predict that somebody will release a commercial version of this. Once again you are on the tip of the sword. Also good to see some code again. I hope that as the site grows you remember to stay true to what brings people here in the first place: technical stuff. Poker, sure. But above all, CODE.
And Harry Potter. ; )
anyone have any idea on a non programmer way to use this? or perhaps someone who is a programmer can briefly explain how to compile and use this?
backing up the original notes file takes exactly one line of code, so i personally don't see what the big deal is. just copy the file to like note-backup.xml prior to color coding players. I would probably hack together a form in about 2 minutes with 2 buttons, 1 being start color coding, the other being 'undo changes', the latter copying the original notes file back, overwriting the changed one. guess i could just steal your code and do it myself if you'd rather (license being creative commons i hope ?)
Not bad!
Famous features color ball lotto software: bet number by six numbers and one red ball numbers composed of blue balls. Red ball number from 01--33 choose; blue ball number from 01 - 16 choices. A single injection of the highest awards of up to 10 million yuan.
Super Lotto: "35 plus 12 selection 5 choose 2", a total of 35 numbers from the 01-35 select five numbers for the former district number, and a total of 12 numbers from the 01-12 select two numbers after the area combination of numbers to bet for a note, and an additional betting games are played, a single injection of up to 10 million yuan the highest prize.
If you look in the FT lobby, it shows colors for all players on the table from there. This allows you to find good tables without having to open the table for your HUD.
I like it very much because it has very helpful articles of various topics like different culture and the latest news. I am a googler and search on many topics. By searching i found this nice website. Thanks for sharing.
Previously it was a hard case in my circumstances, however , finding out a specialised strategy you processed it made me to cry with delight.
Im impressed, I must say. Very rarely do I come across a site thats both informative and entertaining, and let me tell you, youve hit the nail on the head. Your site is important; the issue is something that not enough people are talking intelligently about. Im really happy that I stumbled across this in my search for something relating to this issue. HCG Review
The post is absolutely fantastic! Lots of great information and inspiration, both of which we all need!b Keep 'em coming... you all do such a great job at such Concepts... can't tell you how much I, for one appreciate all you do!
I admire the valuable information you offer in your articles. I will bookmark your blog and visit here often.
Great stuff here. The information and the detail were just perfect. I think that your perspective is deep, its just well thought out and really fantastic to see someone who knows how to put these thoughts down so well. Great job on this.
I am happy that I learnt something new. HCG Diet
Everything on this site is utterley correct! In addition you've made an fantastic article once again! Your style of writing on this site is impeccable, I really enjoy the post. I check your blog on a regular basis and love the fact its popular and has frequent visitors Excellent blog thanks for sharing
Love this post. I have often found that students seem to be looking for the "right" answer versus thinking on their own. I like the idea of encouraging "collisions" to generate creative thinking and I look forward to integrating more blogging and some digital storytelling into my next course. Thanks!
Thanks for a marvelous posting! I actually enjoyed reading it, you’re a great author.I will make sure to bookmark your blog and definitely will come back later on. I want to encourage you to continue your great posts, have a nice afternoon!
Maybe people in small cities and towns are 15% less productive than people in large cities simply because they take the time to enjoy life a little more and get out of the rat race.
Hi, I recently clicked to your site and started reading along your articless. I thought I would leave my first comment. I dont know what to say except that I have adore reading your website. It is a realy nice website. I will keep visiting this blog very often…
I thinks exercise can make a person fit and also it can burn the fat but to be healthy one should have healthy foods. Diet is very important to make you healthy than any other factors.
Thanks for this article. It's just what I was searching for. I am always interested in this subject. Will bookmark it.
Appreciate your making the effort to discuss this, I find myself strongly about this and love mind update reading much more about this topic.
[url=http://www.deck-max.com.au/]Timber Decking[/url] [url=http://www.timberdeckingsydney.net.au/]Timber Decking Sydney[/url] [url=http://www.timberdeckingmelbourne.net.au/]Timber Decking Melbourne[/url]
That’s really true, great post, i have also searching about it and locate some new ideas and as well helpful for others. I absolutely appreciate work done during this blog. Going great man! athanks.