---
name: avellaneda_stoikov_quotes
kind: function
lang: py
domain: finance
version: "1.0.0"
purity: pure
signature: "avellaneda_stoikov_quotes(mid_price: float, inventory: float, gamma: float, sigma: float, spread_base: float, n_levels: int, qty_base: float) -> list[dict]"
description: "Genera ordenes de market maker usando el modelo Avellaneda-Stoikov. Calcula precio de reserva y half spread optimos segun inventario y volatilidad."
tags: [simulation, market-making, avellaneda-stoikov, montecarlo, finance, order-book]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: []
params:
  - name: mid_price
    desc: "precio medio actual del activo subyacente (punto de referencia para la cotizacion)"
  - name: inventory
    desc: "inventario actual neto del market maker (cantidad de activos tenidos, positivo=long)"
  - name: gamma
    desc: "coeficiente de aversion al riesgo de inventario (rango tipico: 0.01-1.0). Mayor gamma = spreads mas amplios."
  - name: sigma
    desc: "volatilidad estimada del activo en la ventana de tiempo actual (ej: 0.02 para 2% diario)"
  - name: spread_base
    desc: "spread base en unidades de precio para el nivel 0 (ej: 0.5 para +/-0.5 alrededor del mid_price)"
  - name: n_levels
    desc: "numero de niveles de cotizacion a generar (tipico: 3-5). Cada nivel se ensancha a partir del anterior."
  - name: qty_base
    desc: "cantidad base de unidades por nivel (se reduce en cada nivel: qty_base, qty_base*0.5, qty_base*0.25, ...)"
output: "lista de ordenes con campos {'side': 'buy'|'sell', 'price': float, 'qty': float}"
tested: false
tests: []
test_file_path: ""
file_path: "python/functions/finance/finance.py"
---

## Ejemplo

```python
orders = avellaneda_stoikov_quotes(
    mid_price=100.0,
    inventory=0.0,
    gamma=0.1,
    sigma=0.02,
    spread_base=0.5,
    n_levels=3,
    qty_base=10.0,
)
# [
#   {'side': 'buy',  'price': 99.75, 'qty': 10.0},
#   {'side': 'sell', 'price': 100.25, 'qty': 10.0},
#   ...
# ]
```

## Notas

Funcion pura — sin aleatoriedad.
`gamma` controla la aversion al riesgo de inventario: mayor gamma = spreads mas amplios.
`inventory` positivo sesga los quotes hacia venta (reduce inventario largo).
Cada nivel adicional ensancha el spread en `half_spread * 0.5` y aumenta la cantidad en `qty_base * 0.5`.
Ordenes con precio <= 0 se descartan automaticamente.
