Calculadora de arbitraje con cuotas de Pinnacle
Respuesta: hay arbitraje cuando los mejores precios de todos los resultados de un mercado, tomados entre varias casas, tienen probabilidades implícitas que suman menos de 1: 1/p1 + 1/p2 (+ 1/p3) < 1. Reparte el stake de cada resultado en proporción a 1/precio para asegurar el mismo retorno. PinnFeed aporta el lado de Pinnacle en tiempo real (Builder) o por REST; los precios de la otra casa salen de tu propia fuente, porque PinnFeed solo lleva Pinnacle.
Fórmula y reparto del stake#
def arb(prices: list[float], bankroll: float = 100):
inv = [1 / p for p in prices]
total = sum(inv)
if total >= 1:
return None # no arbitrage
stakes = [bankroll * i / total for i in inv]
return {"margin": 1 - total, "stakes": [round(s, 2) for s in stakes],
"return": round(bankroll / total, 2)}
print(arb([2.12, 2.02])) # Pinnacle over 2.12, other book under 2.02 -> small arb
Con 2,12 y 2,02 la suma implícita es 0,9668, así que una banca de 100 devuelve unos 103,44 gane el lado que gane, antes de comisiones y siempre que ambas apuestas se mantengan.
Bucle de alertas (lado Pinnacle desde PinnFeed)#
import os, time, requests
KEY = os.environ["PINNFEED_KEY"] # ps_live_...
def other_book_prices(event): # plug in your own source here
return {}
while True:
r = requests.get("https://pinnfeed.io/v1/odds",
params={"sport": "tennis", "market": "moneyline", "main": "true", "limit": 100},
headers={"x-api-key": KEY}, timeout=10)
for e in r.json()["events"]:
for m in e["markets"]:
if (m["maxStake"] or 0) < 100:
continue
pin = {o["name"]: o["decimal"] for o in m["outcomes"]}
other = other_book_prices(e) # {"home": 1.9, "away": 2.2}
if set(pin) == set(other) and pin:
best = [max(pin[k], other[k]) for k in pin]
res = arb(best)
if res:
print(e["home"], "v", e["away"], res)
time.sleep(5) # Hobby allows 2 req/s
Riesgos antes de apostar#
- Los precios se mueven entre las dos apuestas; puedes quedarte sin una de las patas.
- Las casas pueden anular errores evidentes o limitar cuentas de arbitraje.
- Las reglas difieren (retiradas en tenis, prórroga, empates en carreras); un arbitraje "seguro" puede perder si la liquidación es distinta.
- Compara con el value betting, que suele escalar mejor: arbitraje frente a value betting.
Planes#
Free va con 30 s de retraso, demasiado lento para arbitraje salvo para pruebas. Hobby (€29/mes) es REST en tiempo real; Builder (€99/mes) envía los cambios de Pinnacle por el WebSocket. Prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles.
Contenido educativo para mayores de 18 años. El arbitraje tiene riesgo de ejecución y de liquidación; nada de esto promete beneficios. En España, apuesta solo con operadores con licencia de la DGOJ.
Preguntas frecuentes#
¿Puedo encontrar arbitrajes solo con PinnFeed?#
No. El arbitraje necesita al menos dos casas; PinnFeed solo aporta Pinnacle.
¿Importa el maxStake en el arbitraje?#
Sí. Limita cuánto acepta Pinnacle a ese precio, y con ello la pata de Pinnacle.
¿Debo contar las comisiones?#
Sí. La comisión de un exchange o las comisiones de pago pueden comerse un margen de arbitraje pequeño.