Buenas! Vengo con algo que no he sabido resolver...
En mi tiempo libre hago bots de trading y de índole similar (tranquilos no vengo a venderos un curso ni a haceros ricos 😂😂)
Desde hace un año tengo un bot de arbitraje funcionando, para el que no lo sepa, el arbitraje en el mundo de la bolsa o activos digitales, se produce cuando la entidad A y la entidad B ofrecen un mismo activo a precios diferentes.
Ejemplo: En la entidad A, el precio del ETH (ethereum) es de 910€ por unidad, y en la entidad B, 929€ por unidad, una diferencia del 2,12%, por lo que si yo comprase 5€ del activo ETH en la entidad A, me darían => 5€ / 910€ => 0.0054 ETH. Si los vendiese en la entidad B me darían de vuelta 0.0054 * 929 = 5.016€ obteniendo un beneficio neto de 0.16€.
Sin embargo, para poder operar, las entidades establecen dos tasas:
1) Tasas del pool de liquidez: 1% de la cantidad a intercambiar.
2) Impacto del movimiento del precio (conocido como price impact) de la pool.
Los pools de liquidez contiene dos activos intercambiables, en este caso EUROS y ETH y estas pools contienen la misma cantidad (en valor) de ambos activos (se conoce constante K por si hay algún interesado)
Por consiguiente, y para que los números cuadren con el ejemplo, las pools quedarían:
Entidad A:
EUROS: 100.000
ETH : 109,89 (100.000€ / 910 que vale cada ETH)
Entidad B:
EUROS: 100.000
ETH : 107,60 (100.000€ / 929 que vale cada ETH)
La tasa del pool de liquidez es sencilla, un % en función de la cantidad del intercambio: 1% de 5€ = 0.05€. Al haber dos movimientos (intercambio en entidad A € por ETH (1%), e intercambio en entidad B ETH por € (1%)), la suma de esta tasa se va a 2%, el margen de beneficio (2.12%) ya se ha ido prácticamente solo con esta tasa...
El PI (price impact) de una pool se calcula con la siguiente fórmula:
PI = (cantidadOp - tasaDelPool%) / reservasActivo + (cantidadOp - tasaDelPool%)
Siendo:
cantidadOp = Cantidad a operar (5€)
tasaDelPool = 1%
reservasActivo = Reservas en la pool del activo (pe. 100.000 €, 109,89 ETH)
Por lo que, el PI de la transacción quedaría:
Entidad A: (5 -1%) / (109.89 + (5 - 1%)) => 4.95 / 114.84 => 0.043%
Al otro pool, llegarían los 5€ - 1% - 0.043% => 4.9478€ después de las tasas, quedando 0.00543 ETH (4.9478€/910€ q es el precio de ETH)
Entidad B: (4.9478 - 1%) / (107.6 + (4.9478 - 1%)) => 0.0439%
Es decir, sumando las tasas se quedaría en un 2% + 0.95% = 2.09%
Finalmente, mi operación se quedaría en que, aún con margen del 2,12%, por mis 5€ me darían 5.0043€ siendo el beneficio final de 0.0043€
Llegamos a la trampa: si yo aumento mi posición de 1€ en 1€, 6€, 7€, 8€, etc. veré como mi beneficio aumenta hasta que llega a 24€, que toca el techo de beneficio neto de 24.0115 y a partir de aquí, el beneficio empieza a disminuir...
Y la pregunta es esa, ¿Qué fórmula podría aplicar para encontrar la cantidad a operar más beneficiosa teniendo en cuenta que las tasas expuestas previamente?
Actualmente, el bot hace simplemente un bucle, desde 1€ en 1€, hasta encontrar que la cantidad siguiente sea menor que la anterior, quedándose con ésta... pero entiendo q hay una formula para saber cúal es esta cantidad.
Disculpad por la chapa, gracias de antemano.