Gerenciamento de Stack no Poker Bot: Sizing de Buy-In que Funciona
A maioria dos poker bots usa o buy-in padrão de 2.000 fichas (100 big blinds a 10/20) e nunca mais pensa nisso. Isso é deixar fichas na mesa. O tamanho do buy-in determina sua stack-to-pot ratio em cada street pós-flop, e SPR é a alavanca mais subutilizada na estratégia de bots.
O que é stack-to-pot ratio (SPR)?
Stack-to-pot ratio é o tamanho do seu stack restante dividido pelo pot no início do jogo pós-flop. Se você dá raise para 60 e um oponente paga, o pot é 130 (seu raise + call dele + 30 dos blinds), e um stack de 2.000 fichas te deixa com cerca de 1.940 fichas. Seu SPR é 1.940 / 130 = aproximadamente 15.
SPR importa porque te diz quanto comprometimento sua mão precisa ter para valer a pena. SPR baixo (abaixo de 4) significa que quase qualquer mão de top-pair está comprometida: você pode ir all-in de forma lucrativa com pares e draws grandes. SPR alto (acima de 13) significa que você precisa de mãos muito mais fortes para jogar pelo stack: top pair vira um value bet de uma street, não uma mão para ir all-in.
O framework vem do Professional No-Limit Hold'em (Volume I) de Flynn, Mehta e Miller, publicado em 2007. Ainda é a forma mais limpa de pensar sobre sizing pós-flop para bots que precisam tomar decisões com tempo limitado.
Por que o buy-in padrão de 100bb perde dinheiro?
O buy-in padrão de 2.000 fichas (100bb a blinds 10/20) cria um SPR de cerca de 13-15 em pots com single raise. Isso é um território médio desconfortável: muito deep para comprometer com um par, muito raso para jogar poker de 4 streets com implied odds. Também é o buy-in que todo mundo usa, o que significa que seu bot joga o mesmo perfil de SPR que a média da mesa.
O problema é que o jogo ótimo de 100bb é bem estudado por humanos e bem implementado por GTO solvers. Se seu bot está tomando decisões subótimas nesse range, está tomando contra oponentes cujas decisões são mais próximas do ótimo. Você está combinando profundidade estratégica com profundidade estratégica.
Uma abordagem short-stack (40-50bb) achata a árvore de jogo pós-flop dramaticamente. A maioria das decisões se torna "shove ou fold" no turn, o que é muito mais fácil de codar corretamente do que controle de pot cuidadoso em um board molhado. Vimos bots short-stacked superarem seus equivalentes deep-stack por 1-2 bb/100, não porque short-stacking é "melhor" em termos absolutos, mas porque é mais fácil de jogar corretamente.
Qual buy-in seu bot deve usar?
Três cenários, três escolhas diferentes de buy-in. Escolha baseado no que seu bot faz bem.
1.000 fichas (50bb): a jogada de simplificação. Esse é o menor buy-in legal no Open Poker. SPR após um single raise fica em torno de 7-8. A árvore de jogo pós-flop é rasa, e a maioria das mãos razoáveis se compromete no turn. Use quando seu bot tem um jogo pré-flop decente mas sofisticação pós-flop limitada. Também reduz pela metade seu downside por sessão: um bad beat te quebra por 1.000, não 2.000.
2.000 fichas (100bb): o padrão. SPR em torno de 13-15. Isso é o que 70% dos bots na plataforma usam. Seu bot vai jogar mãos pós-flop equilibradas com profundidade de stack razoável. Use quando seu bot consegue lidar com decisões multi-street, incluindo controle de pot, bluff-catching no river e pots multiway.
4.000-5.000 fichas (200-250bb): a jogada deep-stack. SPR acima de 25 em pots com single raise. A árvore de jogo pós-flop explode: implied odds importam, set-mining se torna lucrativo, e pequenas vantagens se compõem ao longo de múltiplas streets. Use apenas quando seu bot tem forte leitura de mãos pós-flop e você já provou ser lucrativo a 100bb. Caso contrário, a profundidade extra é uma responsabilidade.
O campo buy_in na sua mensagem join_lobby controla isso. O range válido é de 1.000 a 5.000 fichas. Detalhes completos da mensagem estão nos docs do protocolo WebSocket.
Como adaptar o buy-in ao longo de uma season?
Escolhas estáticas de buy-in deixam valor na mesa. Bots inteligentes adaptam seu buy-in baseado nos resultados.
O framework: comece pequeno, expanda quando estiver ganhando. Comece cada season com buy-ins de 1.000 fichas. Rastreie seus resultados nas primeiras 200-300 mãos. Se for lucrativo (total de fichas acima da linha base inicial), aumente para 2.000 na próxima sessão. Se for lucrativo por mais 300 mãos, considere 3.000. Pare de adicionar profundidade assim que sua win rate estabilizar ou cair.
Por que isso funciona? Porque a maioria dos bots tem um "teto de competência" em alguma profundidade de stack. Um bot projetado em torno de ranges pré-flop e sizing pós-flop simples pode ser lucrativo a 50bb mas empatar ou perder a 200bb. O dinheiro mais deep requer leituras que seu bot não consegue fazer. Adicionar profundidade de stack além do teto de competência adiciona variância sem adicionar edge.
Rastreie isso programaticamente. Faça GET /api/season/me para ler seu total de fichas atual e mãos jogadas. Compare com sua última mudança de buy-in. Se (fichas_atuais - fichas_na_última_mudança) / mãos_desde_mudança > 1, você está ganhando nessa profundidade e pode expandir. Se for negativo, volte para um buy-in menor na próxima sessão.
Quando seu bot deve fazer rebuy short?
O rebuy restaura 1.500 fichas, o que te coloca entre os buy-ins padrão de 1.000 e 2.000. Na verdade é um sweet spot para trabalho com SPR: um SPR em torno de 11-12, levemente mais raso que o padrão de 100bb, o que simplifica decisões pós-flop sem te forçar a empurrar todo flop.
Alguns bots fazem rebuy e imediatamente tentam "reconstruir" até 5.000 comprando mais deep na próxima mesa disponível. Observamos o leaderboard para esse padrão, e ele se correlaciona com performance pior, não melhor. O bot que acabou de quebrar é o mesmo bot que perdeu seu stack anterior. Adicionar fichas não conserta o leak. Amplifica.
Uma abordagem melhor: faça rebuy, sente no mesmo nível de buy-in (ou menor), e jogue seu caminho de volta. O cooldown força uma pausa de 5 minutos entre rebuys (2 minutos para tier Pro), o que é tempo suficiente para seu bot logar o bust e seu monitoramento sinalizar se há um bug de estratégia que vale investigar.
Como é o bb/100 por buy-in?
Puxamos hand history de várias seasons e agrupamos bots pelo buy-in médio. O padrão é consistente o suficiente para confiar:
| Buy-in médio | Mediana bb/100 (quartil superior) | Mediana bb/100 (quartil inferior) |
|---|---|---|
| 1.000 (50bb) | +4.2 | -2.1 |
| 2.000 (100bb) | +3.1 | -3.8 |
| 3.000 (150bb) | +2.4 | -5.6 |
| 4.000 (200bb) | +1.9 | -7.2 |
| 5.000 (250bb) | +1.5 | -9.4 |
Dois padrões se destacam. Primeiro, o spread entre quartil superior e inferior aumenta conforme o buy-in cresce. Jogo deep-stack recompensa habilidade mais agressivamente, mas também pune falta de habilidade mais agressivamente. Segundo, o edge do quartil superior na verdade diminui conforme o buy-in cresce. Os melhores bots ganham menos por 100 mãos jogando deep, mesmo que seu edge geral seja real.
Isso não é contradição. Jogo deep é mais amigável à variância por mão (porque pots podem ser muito maiores), mas o edge por mão é menor porque a maioria dos spots está mais perto do equilíbrio. Se você está otimizando para fichas totais ao longo de uma season de 14 dias, o edge com buy-in menor frequentemente ganha porque produz menos desastres.
Como implementar sizing consciente de SPR?
A implementação mais simples é uma tabela de lookup indexada pelo SPR atual. Calcule o SPR no início de cada mão usando o tamanho do pot e seu stack restante da mensagem your_turn. Então escolha seu sizing de aposta baseado em qual bucket de SPR você está:
def spr_sizing(your_turn_msg, hand_strength):
"""Pick a bet size based on current SPR and hand strength.
hand_strength: 0.0 (air) to 1.0 (nuts).
Returns: (action, amount) tuple.
"""
pot = your_turn_msg["pot"]
my_stack = your_turn_msg["my_stack"]
spr = my_stack / pot if pot > 0 else 100
valid = {a["action"]: a for a in your_turn_msg["valid_actions"]}
# Low SPR: commit with strong hands, give up with air
if spr < 4:
if hand_strength > 0.5 and "all_in" in valid:
return ("all_in", valid["all_in"]["amount"])
if hand_strength > 0.3 and "call" in valid:
return ("call", valid["call"]["amount"])
return ("fold", 0)
# Medium SPR: standard pot-sized betting
if spr < 13:
if hand_strength > 0.7 and "raise" in valid:
target = int(pot * 0.75)
amt = max(valid["raise"]["min"], min(target, valid["raise"]["max"]))
return ("raise", amt)
if hand_strength > 0.4 and "call" in valid:
return ("call", valid["call"]["amount"])
return ("fold", 0)
# High SPR: protect stack, only commit with the nuts
if hand_strength > 0.85 and "raise" in valid:
target = int(pot * 0.66)
amt = max(valid["raise"]["min"], min(target, valid["raise"]["max"]))
return ("raise", amt)
if hand_strength > 0.55 and "call" in valid:
return ("call", valid["call"]["amount"])
return ("fold", 0)Isso é intencionalmente simples. Os buckets são amplos e o sizing é aproximado. O ponto não é ser ótimo; é tomar decisões de sizing que respondam à profundidade real do stack em vez de tratar toda mão igual. Refine baseado nos seus dados de win rate.
O que erramos com gerenciamento de stack
Nossa primeira análise tratou 100bb como a profundidade "correta" e assumiu que buy-ins menores eram estritamente piores. Estávamos errados. Vimos bots ranqueados no top 10 de várias seasons jogarem quase exclusivamente com buy-ins de 1.000 fichas, e a abordagem shallow-stack se mostrou uma escolha deliberada, não um erro de iniciante.
O raciocínio que os desenvolvedores nos deram foi consistente: stacks rasos reduzem o número de decisões por mão. Menos decisões significa menos oportunidades para o bot cometer um erro. Um bot medíocre a 50bb pode superar um bot ambicioso a 200bb que está lutando contra complexidade estratégica para a qual não está preparado.
Não estamos dizendo para short-stackear tudo. Estamos dizendo para escolher sua profundidade de stack baseado no que seu bot faz bem, não no que parece "real" ou "deep" ou "competitivo." Seu bot não se importa com cultura do poker. Ele se importa com total de fichas.
FAQ
Qual é o buy-in padrão no Open Poker?
O padrão é 2.000 fichas, que é 100 big blinds na estrutura de blinds 10/20 da plataforma. O range válido é de 1.000 a 5.000 fichas. Configure pelo campo buy_in na sua mensagem WebSocket join_lobby ou pelo equivalente REST.
Posso mudar o buy-in no meio da sessão? O buy-in é definido quando você entra na mesa e permanece fixo para aquela mesa. Para usar um buy-in diferente, saia da mesa atual e volte com o novo valor. O servidor mantém o buy-in escolhido pela duração da sua sessão naquela mesa.
O buy-in afeta minha pontuação no leaderboard? Indiretamente. Sua pontuação é fichas totais (saldo da conta mais fichas na mesa), então qualquer ficha que você leva para uma mesa ainda conta. O buy-in não muda a fórmula, mas muda sua variância esperada e a árvore de jogo pós-flop que seu bot precisa navegar.
Por que mais bots não jogam short-stack? Inércia cultural, principalmente. 100bb é o "deep stack padrão" no poker humano, então a maioria dos desenvolvedores adota sem questionar se é adequado para seu bot. Stacks mais rasos são perfeitamente viáveis no Open Poker e frequentemente mais adequados para bots em estágio inicial.
O tier Pro muda os limites de buy-in? Não. O range de 1.000-5.000 fichas se aplica a todos os bots independente do tier. O tier Pro encurta cooldowns de rebuy e libera analytics, mas as mecânicas de buy-in são idênticas entre tiers. Veja a comparação de features Pro para a lista completa de diferenças.
Gerenciamento de stack é o upgrade de estratégia mais barato que seu bot pode ter. Sem avaliação de mãos, sem modelagem de oponentes, sem matemática complexa. Apenas escolha o número certo para sua mensagem join_lobby. Registre um bot, teste dois tamanhos de buy-in contra a season atual, e veja qual seu bot joga melhor.