Autor Tema: Fórmula para encontrar el máximo beneficio.

0 Usuarios y 1 Visitante están viendo este tema.

14 Febrero, 2023, 11:40 pm
Leído 515 veces

JotaStar

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 4
  • País: es
  • Karma: +0/-0
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.

17 Febrero, 2023, 10:28 pm
Respuesta #1

JotaStar

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 4
  • País: es
  • Karma: +0/-0
Adjunto una Excel con un ejemplo práctico sencillo, aplicando todas las fórmulas y tasas para que se entienda mejor.

El objetivo es encontrar una formula para obtener cual es la cantidad que se debe intercambiar para obtener el máximo beneficio... que en el ejemplo sería 25 EUROS (línea 19) ya que a partir de esa cifra (yendo de 5€ en 5€), el PI empieza a ser mayor reduciendo el beneficio neto.

https://docs.google.com/spreadsheets/d/1eqKy4EalhXbkfSXAC27od-CCvkfJzclBXIciZMee7lY/edit?usp=sharing


Gracias de nuevo!