Capítulo 1. Finanzas y Python

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

La historia de la teoría financiera en es un ejemplo interesante de la interacción entre la teorización abstracta y la aplicación práctica.

Frank Milne (1995)

En los últimos años, los fondos especulativos han succionado decenas de miles de millones de dólares en inversiones a través de , ayudados cada vez más por la tecnología. Esa misma tecnología también está beneficiando a las personas que toman las decisiones financieras en estas organizaciones.

Laurence Fletcher (2020)

Este capítulo ofrece una visión general concisa de los temas relevantes para el libro. Su objetivo es proporcionar el marco financiero y tecnológico para los capítulos siguientes. "Breve Historia de las Finanzas" comienza dando una breve visión general de la historia y el estado actual de las finanzas. "Principales tendencias de las finanzas" analiza las principales tendencias que han impulsado la evolución de las finanzas a lo largo del tiempo: las matemáticas, la tecnología, los datos y la inteligencia artificial. Con este telón de fondo, "Un mundo de cuatro lenguajes " sostiene que las finanzas son hoy una disciplina de cuatro tipos de lenguajes estrechamente interconectados: Inglés, finanzas, matemáticas y programación. El enfoque general del libro se explica en "El enfoque de este libro". "Primeros pasos con Python" ilustra cómo se puede instalar un entorno Python adecuado en el ordenador del lector. Sin embargo, todo el código puede utilizarse y ejecutarse a través de un navegador web normal en la Plataforma Quant, de modo que más adelante pueda configurarse una instalación local de Python.

Breve historia de las finanzas

Para comprender mejor el estado actual de las finanzas y la industria financiera, es útil echar un vistazo a cómo se han desarrollado a lo largo del tiempo. La historia de las finanzas como campo científico puede dividirse a grandes rasgos en tres periodos, según Rubinstein (2006):

El periodo antiguo (anterior a 1950)

Un periodo caracterizado principalmente por el razonamiento informal, las reglas empíricas y la experiencia de los profesionales del mercado.

El periodo clásico (1950-1980)

Un periodo caracterizado por la introducción del razonamiento formal y las matemáticas en este campo. Durante este periodo se desarrollaron modelos especializados (por ejemplo, el modelo de valoración de opciones de Black y Scholes (1973)), así como marcos generales (por ejemplo, el enfoque de valoración neutral al riesgo de Harrison y Kreps (1979)).

El periodo moderno (1980-2000)

Este periodo generó muchos avances en subcampos específicos de las finanzas (por ejemplo, las finanzas computacionales) y abordó, entre otros, importantes fenómenos empíricos de los mercados financieros, como los tipos de interés estocásticos (por ejemplo, Cox, Ingersoll y Ross (1985)) o la volatilidad estocástica (por ejemplo, Heston (1993)).

Quince años después de la publicación del libro de Rubinstein (2006), hoy podemos añadir un cuarto y un quinto periodos. Estos dos periodos son responsables del auge y la omnipresencia actual de Python en las finanzas:

El periodo computacional (2000-2020)

En este periodo de se produjo un cambio del enfoque teórico de las finanzas al computacional, impulsado por los avances tanto en el hardware como en el software utilizados en finanzas. El artículo de Longstaff y Schwartz (2001) -que proporciona un algoritmo numérico eficiente para valorar opciones americanas mediante simulación de Montecarlo- ilustra bastante bien este cambio de paradigma. Su algoritmo es muy exigente desde el punto de vista informático, ya que en general se necesitan cientos de miles de simulaciones y múltiples regresiones por mínimos cuadrados ordinarios para valorar una sola opción (véase Hilpisch (2018)).

El periodo de la inteligencia artificial (después de 2020)

Los avances en inteligencia artificial (IA) y las historias de éxito relacionadas han estimulado el interés por aprovechar las capacidades de la IA en el ámbito financiero. Aunque ya existen aplicaciones de éxito de la IA en las finanzas (véase Hilpisch (2020)), cabe suponer que a partir de 2020 se producirá un cambio de paradigma sistemático hacia las finanzas AI-first. AI-first finance describe el paso de modelos financieros simples, en general lineales, al uso de modelos y algoritmos avanzados de IA -como las redes neuronales profundas o el aprendizaje por refuerzo- para captar, describir y explicar los fenómenos financieros .

Un mundo cuatrilingüe

En este contexto, las finanzas se han convertido en un mundo de cuatro lenguas:

Lenguaje natural

Hoy en día, la lengua inglesa es la única lengua relevante en el campo cuando se trata de investigaciones, libros, artículos o noticias publicados.

Lenguaje financiero

Como cualquier otro campo, las finanzas tienen términos, nociones y expresiones técnicas que describen ciertos fenómenos o ideas que no suelen ser relevantes en otros ámbitos.

Lenguaje matemático

Las matemáticas son la herramienta y el lenguaje preferidos a la hora de formalizar las nociones y conceptos de las finanzas.

Lenguaje de programación

Como señala la cita del principio del prefacio, Python como lenguaje de programación se ha convertido en el lenguaje preferido en muchos rincones de la industria financiera.

Por tanto, el dominio de las finanzas requiere que tanto el académico como el profesional dominen los cuatro idiomas: inglés, finanzas, matemáticas y Python. Esto no quiere decir que, por ejemplo, el inglés y el Python sean los únicos lenguajes naturales o de programación relevantes. Se trata más bien de que si sólo dispones de un tiempo limitado para aprender un lenguaje de programación, lo más probable es que debas centrarte en Python -junto con las finanzas matemáticas- en tu camino hacia el dominio del campo .

El enfoque de este libro

¿Cómo aborda este libro los cuatro idiomas necesarios en finanzas? La lengua inglesa es obvia: ya la estás leyendo. Sin embargo, quedan tres.

Por ejemplo, este libro no puede presentar en detalle todas y cada una de las matemáticas necesarias para las finanzas. Tampoco puede presentar en detalle todos y cada uno de los conceptos de programación (Python) necesarios para las finanzas computacionales. Sin embargo, intenta introducir conceptos relacionados de las finanzas, las matemáticas y la programación de forma paralela siempre que sea posible y sensato.

A partir del Capítulo 2, el libro introduce una noción o concepto financiero y luego lo ilustra basándose tanto en una representación matemática como en la implementación en Python. Como ejemplo, echa un vistazo a la siguiente tabla del Capítulo 3. La tabla enumera el tema financiero, los principales elementos matemáticos y la principal estructura de datos de Python utilizada para implementar la matemática financiera:

Finanzas Matemáticas Python

Incertidumbre

Espacio de probabilidad

ndarray

Activos financieros

Vectores, matrices

ndarray

Demandas contingentes alcanzables

Amplitud de los vectores, base del espacio vectorial

ndarray

A continuación se describe un ejemplo concreto, cuyos detalles se ofrecen en capítulos posteriores. El ejemplo sólo sirve para ilustrar el planteamiento general del libro en este punto.

Como ejemplo, tomemos el concepto central de incertidumbre en finanzas del cuadro anterior. La incertidumbre encarna la noción de que los estados futuros de una economía modelo no se conocen de antemano. Qué estado futuro de la economía se desarrolle puede ser importante, por ejemplo, para determinar el pago de una opción de compra europea. En un caso discreto, se trata de un número finito de tales estados, como dos, tres o más. En el caso más sencillo de sólo dos estados futuros, la retribución de una opción de compra europea se representa matemáticamente como una variable aleatoria, que a su vez puede representarse formalmente como un vector v que a su vez es un elemento del espacio vectorial 2 Un espacio vectorial es una colección de objetos -llamados vectores- para los que están definidas la suma y la multiplicación escalar. Formalmente, para un vector de este tipo se escribe v por ejemplo

v = v u v d ≥0 2

Aquí, se supone que ambos elementos del vector son números reales no negativosv u ,v d ≥0 Más concretamente, si el precio incierto y dependiente del estado de la acción sobre la que se emite la opción de compra europea viene dado en este contexto por

S = 20 5 ≥0 2

y el precio de ejercicio de la opción es K = 15 la retribución C de la opción de compra europea viene dada por

C = max ( S - K , 0 ) = max ( 20 - 15 , 0 ) max ( 5 - 15 , 0 ) = 5 0 ≥0 2

Esto ilustra cómo las nociones del precio incierto de una acción y el pago dependiente del estado de una opción europea pueden modelarse matemáticamente como un vector. La disciplina que se ocupa de los vectores y los espacios vectoriales en matemáticas se denomina álgebra lineal.

¿Cómo se puede trasladar todo esto a la programación en Python? En primer lugar, los números reales se representan como números de coma flotante u objetos float en Python:

In [1]: vu = 1.5  1

In [2]: vd = 3.75  2

In [3]: type(vu)  3
Out[3]: float

In [4]: vu + vd  4
Out[4]: 5.25
1

Define una variable con el nombre vu y el valor 1,5.

2

Define una variable con el nombre vd y el valor 3,75.

3

Busca el tipo del objeto vu: es un objeto float.

4

Suma los valores de vu y vd.

En segundo lugar, en programación se suelen llamar matrices a las colecciones de objetos del mismo tipo. En Python, el paquete NumPy proporciona soporte para este tipo de estructuras de datos. La principal estructura de datos que proporciona este paquete se llama ndarray, que es la abreviatura de n -ndimensional. Los vectores de valor real son fáciles de modelizar con NumPy:

In [5]: import numpy as np  1

In [6]: v = np.array((vu, vd))  2

In [7]: v  3
Out[7]: array([1.5 , 3.75])

In [8]: v.dtype  4
Out[8]: dtype('float64')

In [9]: v.shape  5
Out[9]: (2,)

In [10]: v + v  6
Out[10]: array([3. , 7.5])

In [11]: 3 * v  7
Out[11]: array([ 4.5 , 11.25])
1

Importa el paquete NumPy.

2

Instancia de un objeto ndarray.

3

Imprime los datos almacenados en el objeto.

4

Busca el tipo de datos de todos los elementos.

5

Busca la forma del objeto.

6

Suma vectorial ilustrada.

7

Multiplicación escalar ilustrada.

Esto muestra cómo se representan y aplican en Python los conceptos matemáticos que rodean a los vectores. Sólo hay que dar un paso más para aplicar esos conocimientos a las finanzas:

In [12]: S = np.array((20, 5))  1

In [13]: K = 15  2

In [14]: C = np.maximum(S - K, 0)  3

In [15]: C  4
Out[15]: array([5, 0])
1

Define el precio incierto de la acción como un objeto ndarray.

2

Define el precio de ejercicio como una variable Python con un valor entero (objetoint ).

3

Calcula la expresión máxima elemento a elemento.

4

Muestra los datos resultantes almacenados ahora en el objeto ndarray C .

Esto ilustra el estilo y el enfoque de este libro:

  1. Se introducen nociones y conceptos de finanzas.

  2. Se proporciona una representación matemática y un modelo.

  3. El modelo matemático se traduce en código Python ejecutable.

En ese sentido, las finanzas motivan el uso de las matemáticas, que a su vez motivan el uso de las técnicas de programación de Python .

Primeros pasos con Python

Una de las ventajas de Python es que es un lenguaje de código abierto, lo que también es cierto para la mayoría absoluta de los paquetes importantes. Esto permite instalar fácilmente el lenguaje y los paquetes necesarios en los principales sistemas operativos, como macOS, Windows y Linux. Sólo se necesitan unos pocos paquetes importantes para el código de este libro y las finanzas en general, además de unintérprete básico de Python:

NumPy

Este paquete permite manejar eficazmente grandes conjuntos de datos numéricos n-dimensionales.

pandas

Este paquete está pensado principalmente para el manejo eficaz de conjuntos de datos tabulares, como los datos de series temporales financieras. Aunque no es necesario para los fines de este libro, pandas se ha convertido en uno de los paquetes Python más populares en finanzas.

SciPy

Este paquete es una colección de funciones científicas necesarias, por ejemplo, para resolver problemas típicos de optimización.

SymPy

Este paquete permite realizar matemáticas simbólicas con Python, lo que a veces resulta útil cuando se trabaja con modelos financieros y algoritmos.

matplotlib

Este paquete es el paquete estándar de Python para la visualización. Te permite generar y personalizar distintos tipos de gráficos, como gráficos de líneas, gráficos de barras e histogramas.

Del mismo modo, sólo se necesitan dos herramientas para iniciarse en la codificación interactiva con Python:

IPython

Este es el entorno más popular para realizar codificación interactiva con Python en la línea de comandos (terminal, shell).

JupyterLab

Este es el entorno de desarrollo interactivo en el que realizar codificación y desarrollo interactivos de Python en el navegador.

Los prerrequisitos técnicos de para seguir adelante con la programación en Python son mínimos. Existen básicamente dos opciones para utilizar el código Python de este libro:

Plataforma Quant

En la Plataforma Quant, a la que puedes inscribirte gratuitamente, encontrarás un entorno completo para el análisis financiero interactivo con Python. Esto te permite hacer uso del código Python proporcionado en este libro a través del navegador, haciendo innecesaria una instalación local. Tras registrarte gratuitamente, tendrás acceso automático a todo el código y a todos los Cuadernos Jupyter que acompañan al libro, y podrás ejecutar el código de inmediato en el navegador.

Entorno Python local

Hoy en día también es sencillo instalar un entorno Python local que te permita sumergirte en el análisis financiero y en el código del libro en tu propio ordenador. Esta sección describe cómo hacerlo.

Instalación local frente a la plataforma Quant

Por experiencia, la instalación local de un entorno Python adecuado a veces puede resultar difícil para alguien que se inicia en el mundo de la programación. Por lo tanto, se recomienda que no dediques demasiado tiempo al principio a instalar Python localmente si te encuentras con algún problema. Más bien, utiliza la Plataforma Quant y más adelante, con algo más de experiencia, podrás volver e instalar Python en tu máquina local.

Una forma fácil y moderna de instalar Python es mediante el uso del conda gestor de paquetes y entornos (ver Figura 1-1).

ftwp 0101
Figura 1-1. Página webconda

La forma más eficaz de instalar conda y un intérprete básico de Python es a través de la distribución Miniconda. En la página de descargas de Miniconda, se proporcionan paquetes instaladores para los sistemas operativos y versiones de Python más importantes (ver Figura 1-2). El proyecto Miniforge proporciona opciones adicionales, como para los chips M1 de Apple ("Apple Silicon").

ftwp 0102
Figura 1-2. Página de descarga de Miniconda

Después de haber instalado Miniconda o Miniforge según las directrices proporcionadas para tu sistema operativo, debes abrir un intérprete de comandos o un símbolo del sistema y comprobar si conda está disponible. Los ejemplos que siguen se basan en conda instalado a través de Miniforge en un ordenador Apple Mac con el chip M1. Deberías obtener una salida similar a ésta:

(base) minione:finpy yves$ conda --version
conda 4.10.3
(base) minione:finpy yves$

Fíjate también en la parte (base) del mensaje, que es típica de las instalaciones de Python basadas en conda. El siguiente paso es crear un nuevo entorno Python como se indica a continuación (y responder "y" cuando se te pida):

pro:finpy yves$ conda create --name finpy python=3.9
...
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate finpy
#
# To deactivate an active environment, use
#
#     $ conda deactivate

Una vez completado con éxito, activa el entorno como sigue :

(base) minione:finpy yves$ conda activate finpy
(finpy) minione:finpy yves$

Observa cómo cambia el indicador. A continuación, instala en las herramientas necesarias IPython y JupyterLab como se indica a continuación (y responde "y" cuando se te pida):

(finpy) minione:finpy yves$ conda install ipython jupyterlab
...

Después, debes instalar los principales paquetes de Python utilizados generalmente para la ciencia de datos financieros, como se indica a continuación (la bandera -y evita la pregunta de confirmación):

(finpy) minione:finpy yves$ conda install -y numpy pandas matplotlib scipy sympy
...

Proporciona los paquetes Python más importantes para el análisis de datos en general y el análisis financiero en particular. Puedes comprobar si todo se ha instalado de la siguiente manera:

(finpy) minione:finpy yves$ conda list
# packages in environment at /Users/yves/Python/envs/finpy:
#
# Name                    Version                   Build    Channel
anyio                     3.3.0            py39h2804cbe_0    conda-forge
appnope                   0.1.2            py39h2804cbe_1    conda-forge
argon2-cffi               20.1.0           py39h5161555_2    conda-forge
...
jupyterlab                3.1.12             pyhd8ed1ab_0    conda-forge
...
numpy                     1.21.2           py39h1f3b974_0    conda-forge
...
python                    3.9.7        h54d631c_1_cpython    conda-forge
...
zipp                      3.5.0              pyhd8ed1ab_0    conda-forge
zlib                      1.2.11            h31e879b_1009    conda-forge
zstd                      1.5.0                h861e0a7_0    conda-forge
(finpy) minione:finpy yves$

A continuación, se inicia una sesión interactiva de Python simplemente escribiendo python:

(finpy) minione:finpy yves$ python
Python 3.9.7 | packaged by conda-forge | (default, Sep 14 2021, 01:14:24)
[Clang 11.1.0 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print('Hello Finance World.')
Hello Finance World.
>>> exit()
(finpy) minione:finpy yves$

Un shell interactivo mejor es el que proporciona IPython, que se inicia mediante ipython en el shell:

(finpy) minione:finpy yves$ ipython
Python 3.9.7 | packaged by conda-forge | (default, Sep 14 2021, 01:14:24)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.27.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from numpy.random import default_rng

In [2]: rng = default_rng(100)

In [3]: rng.random(10)
Out[3]:
array([0.83498163, 0.59655403, 0.28886324, 0.04295157, 0.9736544 ,
       0.5964717 , 0.79026316, 0.91033938, 0.68815445, 0.18999147])

In [4]: exit
(finpy) minione:finpy yves$

Sin embargo, es recomendable -especialmente para los principiantes en Python- trabajar con JupyterLab en el navegador. Para ello, escribe jupyter lab en el intérprete de comandos, que debería dar una salida con mensajes similares a los siguientes:

(finpy) minione:finpy yves$ jupyter lab
...
[I 2021-09-16 14:18:21.774 ServerApp] Jupyter Server 1.11.0 is running at:
[I 2021-09-16 14:18:21.774 ServerApp] http://localhost:8888/lab
[I 2021-09-16 14:18:21.774 ServerApp]  or http://127.0.0.1:8888/lab
[I 2021-09-16 14:18:21.774 ServerApp] Use Control-C to stop this server
	 and shut down all kernels (twice to skip confirmation).

En general, se abre automáticamente una nueva pestaña del navegador, que te muestra la página de inicio de JupyterLab de forma similar a la Figura 1-3.

A continuación, puedes abrir un nuevo Jupyter Notebook y empezar con la codificación interactiva en Python, como se muestra en la Figura 1-4. Para escribir código en una celda, haz clic en ella. Para ejecutar el código, utiliza Mayúsculas-Retorno, Ctrl-Retorno o Alt-Retorno (notarás la diferencia).

ftwp 0103
Figura 1-3. Página de inicio de JupyterLab
ftwp 0104
Figura 1-4. Nuevo cuaderno Jupyter

También puedes abrir uno de los archivos de Jupyter Notebook proporcionados con este libro (ver Figura 1-5).

ftwp 0105
Figura 1-5. Cuaderno Jupyter que acompaña al libro

Esta sección sólo proporciona las nociones básicas para empezar a utilizar Python y las herramientas relacionadas, como IPython y JupyterLab. Para más detalles -por ejemplo, sobre cómo trabajar con IPython- consulta el libro de VanderPlas (2016) que aparece en el Capítulo 7.

Conclusiones

Las finanzas tienen una larga historia. El periodo comprendido entre 1950 y 1980 se caracteriza por la introducción del análisis matemático riguroso en este campo. A partir de la década de 1980, y en particular desde el año 2000, el papel de los ordenadores y las finanzas computacionales ha adquirido una enorme importancia. Esta tendencia se verá reforzada por el papel cada vez más importante que desempeña la IA en este campo, con sus algoritmos computacionalmente exigentes de aprendizaje automático (ML) y aprendizaje profundo (DL).

El campo de las finanzas utiliza cuatro tipos diferentes de lenguaje: lenguaje natural (inglés en general), lenguaje financiero (nociones y expresiones especiales del campo), lenguaje matemático (como el álgebra lineal o la teoría de la probabilidad) y lenguaje de programación (como Python a efectos de este libro).

El enfoque de este libro es introducir conceptos relacionados de las finanzas, las matemáticas y la programación en Python de forma paralela. Los requisitos previos necesarios por parte de Python son mínimos, y el gestor de paquetes y entornos conda suele ser la herramienta elegida hoy en día para gestionar entornos Python.

Ahora estás preparado para pasar al Capítulo 2, en el que se analiza el modelo financiero más sencillo presentado en el libro y se introducen muchas de las nociones financieras centrales. La intuición que adquieras en el modelo financiero más sencillo debería trasladarse fácilmente a los modelos y enfoques más avanzados que se tratan a partir del Capítulo 3.

Referencias

Artículos y libros citados en este capítulo:

Get Teoría Financiera con Python now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.