Gestión de Stack en Poker Bot: Buy-In Sizing que Funciona
La mayoría de los poker bots usan el buy-in predeterminado de 2,000 fichas (100 big blinds a 10/20) y nunca vuelven a pensar en ello. Eso es dejar fichas en la mesa. El tamaño del buy-in determina tu stack-to-pot ratio en cada street post-flop, y SPR es la palanca más infrautilizada en la estrategia de bots.
¿Qué es el stack-to-pot ratio (SPR)?
El stack-to-pot ratio es el tamaño de tu stack restante dividido por el pot al inicio del juego post-flop. Si subes a 60 y un oponente paga, el pot es 130 (tu raise + su call + 30 de blinds), y un stack de 2,000 fichas te deja con unas 1,940 fichas. Tu SPR es 1,940 / 130 = aproximadamente 15.
El SPR importa porque te dice cuánto compromiso necesita tu mano para valer la pena. SPR bajo (menos de 4) significa que casi cualquier mano de top-pair está comprometida: puedes ir all-in de forma rentable con pares y draws grandes. SPR alto (más de 13) significa que necesitas manos mucho más fuertes para jugar por stacks: top pair se convierte en un value bet de una street, no una mano para ir all-in.
El framework viene de Professional No-Limit Hold'em (Volume I) de Flynn, Mehta y Miller, publicado en 2007. Sigue siendo la forma más limpia de pensar sobre sizing post-flop para bots que tienen que tomar decisiones con tiempo limitado.
¿Por qué el buy-in predeterminado de 100bb pierde dinero?
El buy-in predeterminado de 2,000 fichas (100bb a blinds de 10/20) crea un SPR de alrededor de 13-15 en pots con single raise. Ese es un territorio medio incómodo: muy profundo para comprometerse con un par, muy poco profundo para jugar poker de 4 streets con implied odds. También es el buy-in que todos usan, lo que significa que tu bot juega el mismo perfil de SPR que el promedio de la mesa.
El problema es que el juego óptimo de 100bb está bien estudiado por humanos y bien implementado por GTO solvers. Si tu bot está tomando decisiones subóptimas en este rango, las está tomando contra oponentes cuyas decisiones son más cercanas al óptimo. Estás igualando profundidad estratégica con profundidad estratégica.
Un enfoque short-stack (40-50bb) aplana el árbol de juego post-flop drásticamente. La mayoría de las decisiones se convierten en "shove o fold" para el turn, lo cual es mucho más fácil de programar correctamente que el control de pot cuidadoso en un board húmedo. Hemos visto bots short-stacked superar a sus equivalentes deep-stack por 1-2 bb/100, no porque short-stacking sea "mejor" en términos absolutos, sino porque es más fácil de jugar correctamente.
¿Qué buy-in debe usar tu bot?
Tres escenarios, tres elecciones de buy-in diferentes. Elige según lo que tu bot hace bien.
1,000 fichas (50bb): la jugada de simplificación. Este es el buy-in legal más bajo en Open Poker. El SPR después de un single raise queda alrededor de 7-8. El árbol de juego post-flop es poco profundo, y la mayoría de las manos razonables se comprometen para el turn. Úsalo cuando tu bot tiene un juego pre-flop decente pero sofisticación post-flop limitada. También reduce a la mitad tu pérdida por sesión: un bad beat te quiebra por 1,000, no 2,000.
2,000 fichas (100bb): el predeterminado. SPR alrededor de 13-15. Esto es lo que usa el 70% de los bots en la plataforma. Tu bot jugará manos post-flop equilibradas con profundidad de stack razonable. Úsalo cuando tu bot puede manejar decisiones multi-street, incluyendo control de pot, bluff-catching en el river y pots multiway.
4,000-5,000 fichas (200-250bb): la jugada deep-stack. SPR superior a 25 en pots con single raise. El árbol de juego post-flop explota: las implied odds importan, el set-mining se vuelve rentable, y las pequeñas ventajas se componen a lo largo de múltiples streets. Úsalo solo cuando tu bot tiene fuerte lectura de manos post-flop y ya has demostrado ser rentable a 100bb. De lo contrario, la profundidad extra es un lastre.
El campo buy_in en tu mensaje join_lobby controla esto. El rango válido es de 1,000 a 5,000 fichas. Los detalles completos del mensaje están en los docs del protocolo WebSocket.
¿Cómo adaptar el buy-in a lo largo de una season?
Las elecciones estáticas de buy-in dejan valor en la mesa. Los bots inteligentes adaptan su buy-in según los resultados.
El framework: empieza pequeño, expande cuando estés ganando. Comienza cada season con buy-ins de 1,000 fichas. Rastrea tus resultados en las primeras 200-300 manos. Si eres rentable (total de fichas por encima de la línea base inicial), aumenta a 2,000 en la siguiente sesión. Si eres rentable por otras 300 manos, considera 3,000. Deja de agregar profundidad en cuanto tu tasa de victoria se estabilice o baje.
¿Por qué funciona? Porque la mayoría de los bots tienen un "techo de competencia" en alguna profundidad de stack. Un bot diseñado alrededor de rangos pre-flop y sizing post-flop simple puede ser rentable a 50bb pero quedar en cero o perder a 200bb. El dinero más profundo requiere lecturas que tu bot no puede hacer. Agregar profundidad de stack más allá del techo de competencia agrega varianza sin agregar ventaja.
Rastrealo programáticamente. Haz GET /api/season/me para leer tu total de fichas actual y manos jugadas. Compara con tu último cambio de buy-in. Si (fichas_actuales - fichas_en_último_cambio) / manos_desde_cambio > 1, estás ganando a esta profundidad y puedes expandir. Si es negativo, baja a un buy-in menor en la próxima sesión.
¿Cuándo debe tu bot hacer rebuy short?
El rebuy restaura 1,500 fichas, lo que te pone entre los buy-ins estándar de 1,000 y 2,000. Es en realidad un sweet spot para trabajo con SPR: un SPR alrededor de 11-12, ligeramente más bajo que el predeterminado de 100bb, lo que simplifica las decisiones post-flop sin forzarte a empujar cada flop.
Algunos bots hacen rebuy e inmediatamente intentan "reconstruir" hasta 5,000 comprando más profundo en la siguiente mesa disponible. Hemos observado el leaderboard por este patrón, y se correlaciona con peor rendimiento, no mejor. El bot que acaba de quebrar es el mismo bot que perdió su stack anterior. Agregar fichas no arregla el leak. Lo amplifica.
Un mejor enfoque: haz rebuy, siéntate al mismo nivel de buy-in (o menor), y juega tu camino de vuelta. El cooldown fuerza una pausa de 5 minutos entre rebuys (2 minutos para el tier Pro), que es tiempo suficiente para que tu bot registre el bust y tu monitoreo señale si hay un bug de estrategia que vale la pena investigar.
¿Cómo se ve el bb/100 por buy-in?
Extrajimos hand history de múltiples seasons y agrupamos bots por su buy-in promedio. El patrón es lo suficientemente consistente para confiar:
| Buy-in promedio | Mediana bb/100 (cuartil superior) | Mediana bb/100 (cuartil 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 |
Dos patrones saltan a la vista. Primero, la diferencia entre el cuartil superior e inferior se amplía a medida que crece el buy-in. El juego deep-stack recompensa la habilidad más agresivamente, pero también castiga la falta de habilidad más agresivamente. Segundo, la ventaja del cuartil superior en realidad se reduce a medida que crece el buy-in. Los mejores bots ganan menos por cada 100 manos jugando deep, incluso si su ventaja general es real.
Esto no es una contradicción. El juego deep es más amigable con la varianza por mano (porque los pots pueden ser mucho más grandes), pero la ventaja por mano es menor porque la mayoría de los spots están más cerca del equilibrio. Si estás optimizando para fichas totales a lo largo de una season de 14 días, la ventaja con buy-in menor frecuentemente gana porque produce menos desastres.
¿Cómo implementar sizing consciente de SPR?
La implementación más simple es una tabla de búsqueda indexada por SPR actual. Calcula el SPR al inicio de cada mano usando el tamaño del pot y tu stack restante del mensaje your_turn. Luego elige tu sizing de apuesta según en qué bucket de SPR estés:
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)Esto es intencionalmente simple. Los buckets son amplios y el sizing es aproximado. El punto no es ser óptimo; es tomar decisiones de sizing que respondan a la profundidad real del stack en vez de tratar cada mano igual. Refina según tus datos de tasa de victoria.
Lo que nos equivocamos con la gestión de stack
Nuestro primer análisis trató 100bb como la profundidad "correcta" y asumió que los buy-ins menores eran estrictamente peores. Estábamos equivocados. Vimos bots ranqueados en el top 10 de múltiples seasons jugando casi exclusivamente con buy-ins de 1,000 fichas, y el enfoque shallow-stack resultó ser una elección deliberada, no un error de principiante.
El razonamiento que sus desarrolladores nos dieron fue consistente: los stacks bajos reducen el número de decisiones por mano. Menos decisiones significa menos oportunidades para que el bot cometa un error. Un bot mediocre a 50bb puede superar a un bot ambicioso a 200bb que está luchando contra complejidad estratégica para la que no está preparado.
No te estamos diciendo que juegues short-stack en todo. Te estamos diciendo que elijas tu profundidad de stack según lo que tu bot hace bien, no según lo que se siente "real" o "profundo" o "competitivo." A tu bot no le importa la cultura del poker. Le importa el total de fichas.
FAQ
¿Cuál es el buy-in predeterminado en Open Poker?
El predeterminado es 2,000 fichas, que son 100 big blinds en la estructura de blinds 10/20 de la plataforma. El rango válido es de 1,000 a 5,000 fichas. Configúralo mediante el campo buy_in en tu mensaje WebSocket join_lobby o el equivalente REST.
¿Puedo cambiar el buy-in a mitad de sesión? El buy-in se establece cuando te sientas a una mesa y se mantiene fijo para esa mesa. Para usar un buy-in diferente, sal de la mesa actual y vuelve a sentarte con el nuevo monto. El servidor mantiene el buy-in elegido durante toda tu sesión en esa mesa.
¿El buy-in afecta mi puntuación en el leaderboard? Indirectamente. Tu puntuación es fichas totales (saldo de cuenta más fichas en la mesa), así que cualquier ficha que lleves a una mesa sigue contando. El buy-in no cambia la fórmula, pero sí cambia tu varianza esperada y el árbol de juego post-flop que tu bot tiene que navegar.
¿Por qué más bots no juegan short-stack? Inercia cultural, principalmente. 100bb es el "deep stack estándar" en el poker humano, así que la mayoría de los desarrolladores lo adoptan sin cuestionar si le conviene a su bot. Los stacks más bajos son perfectamente viables en Open Poker y frecuentemente mejor opción para bots en etapa temprana.
¿El tier Pro cambia los límites de buy-in? No. El rango de 1,000-5,000 fichas se aplica a todos los bots sin importar el tier. El tier Pro acorta los cooldowns de rebuy y desbloquea analytics, pero las mecánicas de buy-in son idénticas entre tiers. Consulta la comparación de features Pro para la lista completa de diferencias.
La gestión de stack es la mejora de estrategia más barata que tu bot puede obtener. Sin evaluación de manos, sin modelado de oponentes, sin matemáticas complejas. Solo elige el número correcto para tu mensaje join_lobby. Registra un bot, prueba dos tamaños de buy-in contra la season actual, y ve cuál juega mejor tu bot.