Comercio Cuantitativo - página 34

 

Parte IX Estrategia de Trading de Aprendizaje por Refuerzo. DQN: prueba de la estrategia comercial basada en la política del agente


Parte IX Estrategia de Trading de Aprendizaje por Refuerzo. DQN: prueba de la estrategia comercial basada en la política del agente

Estoy encantado de anunciar que hemos alcanzado un hito importante en nuestro viaje: probar nuestra estrategia. Para este propósito, utilizaremos un marco Python de backtesting sencillo para realizar nuestras pruebas. Para comenzar, puede instalar el marco ejecutando el comando "pip install" seguido del nombre del marco.

El autor del marco ha proporcionado un ejemplo simple que demuestra cómo usarlo de manera efectiva. Sin embargo, antes de sumergirnos en eso, debemos implementar nuestra propia estrategia. Comencemos inicializando y definiendo todas las variables que necesitaremos para nuestra estrategia.

Un aspecto interesante es que podemos cargar nuestra política guardada usando la API de TensorFlow. Como estamos usando una QRNNNetwork, necesitamos obtener el estado inicial de la política. En consecuencia, hemos implementado la función de inicialización. Ahora es el momento de implementar la función "siguiente", que se llamará para cada nuevo paso. Al principio, necesitamos recopilar datos de los primeros 10 días y, después, podemos alimentar nuestro diccionario de observación. Con cada paso, actualizamos la observación y la pasamos a la política.

Una vez que hemos creado el diccionario de observación, necesitamos crear un objeto de intervalo de tiempo ya que nuestro modelo de política lo requiere como entrada. Para facilitar este proceso, he creado una función simple que convierte nuestros datos de observación en el objeto de intervalo de tiempo. Los elementos cruciales aquí son los datos de observación y step_type. Después de obtener nuestro objeto de período de tiempo, podemos recuperar una acción de la política. Como puede ver, la función "runPolicy" restablece el estado de la política si step_type es igual a 0 y devuelve la acción y el nuevo policy_state.

A continuación, debemos actualizar nuestros estados de posición y ejecutar la acción. Finalmente, al final de la función "siguiente", incrementamos el contador y reiniciamos todo a los estados iniciales para simular el comienzo de un nuevo episodio. ¡Excelente! Hemos implementado con éxito nuestra estrategia. Ahora, necesitamos algunos datos para fines de prueba. Podemos usar la biblioteca panda_datareader para recuperar datos diarios de Yahoo Finance. Comencemos probando nuestra estrategia en acciones de Intel, utilizando datos históricos de un año.

Creamos un objeto de backtest y comenzamos a probar. Los resultados de la prueba muestran un retorno del 106%, lo cual es impresionante. Sin embargo, es importante tener en cuenta que el marco de backtesting inicia los cálculos desde el 100 %, lo que significa que nuestro rendimiento real es solo del 6 %. No obstante, este no es un mal resultado considerando que nuestra política no fue capacitada extensamente. Para proporcionar una evaluación más completa, también probemos nuestra estrategia en acciones de AMD. Como puede ver, el resultado de AMD muestra una disminución de aproximadamente el 40%. Por lo tanto, podemos comparar el rendimiento de nuestra estrategia con las acciones de AMD e Intel.

Ahora ya sabe cómo utilizar la política de agente con un marco de backtesting. De manera similar, si está utilizando Python para su entorno comercial real, puede emplear la política de la misma manera. Sin embargo, para aquellos que usan otros idiomas, pueden implementar la política usando el marco Flask y acceder a ella a través de una API REST.

Espero que hayas encontrado estos videos interesantes e informativos. Si es así, considere suscribirse y nos vemos en el próximo episodio.

 

¿Qué es un sistema de comercio cuantitativo? Estructura y descripción.


¿Qué es un sistema de comercio cuantitativo? Estructura y descripción.

¡Hola a todos! Espero que estéis todos bien. Ha pasado bastante tiempo desde la última vez que publiqué un video, pero quiero asegurarles que no me he olvidado de ustedes. Hoy, estoy emocionado de comenzar un tema nuevo e interesante: la arquitectura de software de un sistema de comercio automatizado.

Antes de profundizar en los detalles de la arquitectura del software, primero comprendamos qué es un sistema comercial y en qué consiste. En este video, exploraremos la estructura y los elementos de un sistema de comercio automatizado. Ahora, como dice el dicho, "No hay nada nuevo bajo el sol". Cuando comencé mi viaje en este campo, buscaba una descripción bien estructurada de un sistema comercial. Quería algo que facilitara la comprensión de qué bloques implementar y cómo crear una solución de software robusta.

Encontré un libro de Rishi K. Narang llamado "Inside the Black Box", donde describe un sistema cuantitativo compuesto por cinco bloques comunes: el modelo alfa, el modelo de riesgo, el modelo de costo de transacción, el modelo de construcción de cartera y el modelo de ejecución. Además, hay un bloque esencial más: los datos.

Echemos un vistazo más de cerca a esta estructura, comenzando con el bloque de datos. Aunque el bloque de datos no es técnicamente una parte del sistema comercial, juega un papel vital como el oxígeno del que dependen todos los componentes del sistema. El bloque de datos abarca varios tipos de datos requeridos por el sistema comercial. Estos datos pueden provenir de diferentes fuentes, como bolsas, reguladores, agencias de noticias y otras fuentes relevantes, como datos microeconómicos, tarifas de corredores o información de cartera.

Ahora que entendemos el bloque de datos, exploremos los elementos del sistema comercial y las relaciones entre ellos. En el diagrama, puede ver flechas que representan el flujo de información. El modelo alfa, el modelo de riesgo y el modelo de costos de transacción no toman decisiones finales; en cambio, brindan información al modelo de construcción de cartera, que, a su vez, desencadena el modelo de ejecución. Es importante tener en cuenta que hay estrategias en las que solo está presente un subconjunto de estos elementos, y las relaciones entre los elementos pueden variar. Sin embargo, esta estructura nos da una visión holística de los principales elementos de un sistema de comercio.

El primer elemento de esta estructura es el modelo alfa. El modelo alfa representa la idea o estrategia comercial diseñada para predecir resultados futuros. Por lo general, el resultado de este modelo es un pronóstico de retorno o de dirección. Hay dos tipos bien conocidos de modelos comerciales: modelos técnicos basados en datos de precios y análisis técnico, y modelos fundamentales que utilizan datos financieros y análisis fundamental. También podemos tener modelos híbridos que combinen aspectos de ambos. Independientemente de la complejidad, el objetivo principal del modelo alfa es brindar asesoramiento en forma de pronóstico.

A continuación, tenemos el modelo de riesgo. El modelo de riesgo está diseñado para ayudar a reducir o minimizar la exposición a factores que podrían generar pérdidas. Los modelos de riesgo se pueden clasificar en dos tipos. El primer tipo se centra en el dimensionamiento de la posición para reducir los riesgos, empleando estrategias como el dimensionamiento duro o funciones complejas. El resultado de este tipo de modelo de riesgo es el tamaño de la posición. El segundo tipo de modelo de riesgo tiene como objetivo mitigar tipos específicos de riesgos, como el riesgo de dirección del mercado. En tales casos, el modelo puede sugerir una posición de cobertura como salida.

El tercer elemento es el modelo de costos de transacción. Este modelo proporciona información sobre el costo asociado con la ejecución de una operación. Hay tres costos principales: comisiones y tarifas, deslizamiento e impacto en el mercado. Los modelos de costos de transacción pueden variar desde modelos simples que devuelven un valor de costo fijo hasta modelos más complejos, como funciones de costos cuadráticas, cuyo objetivo es predecir el costo real con la mayor precisión posible. El siguiente gráfico demuestra cómo pueden funcionar diferentes funciones de costos.

Una vez que tenemos todos los elementos que aportan información, pasamos al modelo de construcción de cartera. Este modelo toma entradas del modelo alfa, el modelo de riesgo y el modelo de costo de transacción, y decide cómo asignar fondos entre diferentes activos. Su objetivo es construir una cartera basada en alguna función objetivo. Hay dos tipos principales de modelos de construcción de carteras: modelos basados en reglas (p. ej., pesos iguales, riesgos iguales, métodos de árboles de decisión) y optimizadores de carteras. Este último implica optimizar una función objetivo para lograr una asignación de activos más óptima en la cartera.

Por último, tenemos el modelo de ejecución, que recibe información del modelo de construcción de cartera y se centra en ejecutar órdenes al mejor precio posible. Hay varios tipos de modelos de ejecución, que van desde el mercado simple o órdenes limitadas hasta los más complejos que analizan la microestructura del mercado y utilizan algoritmos de aprendizaje automático.

Con esto concluye la breve descripción de los elementos principales de un sistema de comercio cuantitativo. Espero que esta descripción general le haya proporcionado una mejor comprensión de la estructura del sistema comercial y cómo funciona en general.

En los próximos videos, intentaré crear una arquitectura de sistema de software basada en esta descripción. Si encuentra este tema interesante, considere suscribirse al canal para futuras actualizaciones. Gracias por mirar, y nos vemos en el próximo video.
 

¡Diseño de alto nivel de un entorno comercial local!


¡Diseño de alto nivel de un entorno comercial local!

¡Hola todos! Mi nombre es Denis y estás viendo "Cerca de AlgoTrading".

En nuestro último video, discutimos la estructura común de un sistema de comercio algorítmico. Hoy, quiero crear un diseño simple de alto nivel para un entorno comercial local.

Comencemos identificando lo que esperamos de nuestro entorno. Queremos la capacidad de agregar nuevas estrategias y fuentes de datos en el futuro. La escalabilidad es importante, ya que actualmente nos enfocamos en el mercado de valores, pero podemos aventurarnos en el comercio de criptomonedas en el futuro. Por lo tanto, necesitamos apoyar nuevos mercados. Además, queremos la flexibilidad para cambiar fácilmente los componentes dentro del sistema.

Ahora, echemos un vistazo a la estructura general del entorno comercial.

Los dos componentes principales son los datos y el sistema comercial. También queremos incluir una interfaz de usuario para controlar el entorno de manera efectiva. Como bloque adicional, consideremos incorporar un sistema de simulación.

El componente de datos impulsa todo el sistema. Inicialmente, planeamos usar datos de nuestro corredor y archivos en el disco duro. Sin embargo, es posible que luego decidamos acceder a diferentes bases de datos y agencias de noticias. Dado que queremos admitir múltiples fuentes de datos, debemos acomodar diferentes controladores.

Los controladores brindan una funcionalidad simple, como leer y escribir datos, abrir o cerrar conexiones, y más. Sin embargo, no queremos que nuestro sistema comercial interactúe directamente con la API de los conductores. Para abordar esto, presentamos una capa de controladores de datos.

Los controladores de datos trabajan directamente con los controladores e implementan funciones lógicas, como serialización, deserialización y conversión de datos a un formato especial. Si bien tenemos un conjunto de controladores de datos, aún necesitamos una interfaz unificada para nuestra capa de aplicación.

Para proporcionar estas interfaces, presentamos un administrador de datos y un administrador de pedidos. El administrador de datos ofrece una interfaz común para trabajar con fuentes de datos, mientras que el administrador de pedidos proporciona una interfaz común para la ejecución de pedidos. Al utilizar ambas interfaces, el sistema puede acceder a varias fuentes de datos y servicios de intermediación.

Aquí viene un aspecto importante. Definimos componentes que proporcionan una interfaz común para acceder a las fuentes de datos. Esto significa que si nuestro sistema comercial quiere recuperar noticias, por ejemplo, utilizará la misma interfaz, independientemente de si la fuente es nuestro corredor o una base de datos. Este diseño garantiza que la interfaz permanezca sin cambios cuando cambiamos de proveedor de datos. Por lo tanto, podemos agregar nuevas fuentes de datos o agentes de cambio sin interrumpir la funcionalidad de la aplicación.

Ahora que hemos diseñado la parte de manejo de datos, concentrémonos en el usuario principal de nuestros datos: el sistema comercial. Si vio mi video anterior, está familiarizado con los cinco bloques del sistema comercial: modelo alfa, modelo de riesgo, modelo de costo de transacción, modelo de construcción de cartera y modelo de ejecución. Estos bloques utilizan el Administrador de datos y el Administrador de pedidos para acceder a los datos y los servicios de intermediación.

Hemos descrito los datos y los componentes del sistema comercial, pero ahora necesitamos definir quién controlará todo. Necesitamos un componente responsable de todo el sistema: una aplicación base. Esta aplicación manejará la secuencia de inicio, la inicialización del controlador y el componente, e implementará la máquina de estado principal.

Después de definir la aplicación principal, debemos considerar la interfaz de usuario. Podría ser una interfaz de PC o una interfaz web, pero generalmente es una buena práctica separar el frontend del backend. Para lograr esto, creamos una capa de comunicación entre la GUI y nuestra aplicación principal.

Además, necesitamos incluir un componente de registrador. Este componente implementa la interfaz del registrador y almacena registros en una base de datos o archivo de registro. También podemos utilizar un sistema de monitoreo basado en la web para rastrear nuestro entorno, que puede acceder directamente al servidor de la base de datos y leer datos desde allí. La aplicación frontend puede usar el Administrador de datos para acceder a los datos y el Administrador de pedidos para interactuar con los servicios del corredor.

Por último, no olvidemos la posibilidad de ejecución manual de órdenes. También podemos integrar esa funcionalidad en el sistema.

Aunque no profundizamos en el entorno de simulación en este video, podría implementarse de manera similar a un servicio de intermediario adicional sin ningún cambio en el sistema existente.

Mirando el diseño de nuestro entorno comercial, podemos decir con confianza que nos permite lograr nuestros objetivos. Hemos dividido nuestra aplicación en dominios separados y los hemos conectado a través de capas de interfaz. Los administradores de datos y pedidos proporcionan interfaces comunes, lo que simplifica el acceso a los recursos. Con este diseño, podemos cambiar fácilmente los proveedores o intermediarios de datos y usar diferentes interfaces de usuario. También podemos realizar cambios en partes específicas del sistema sin tener que actualizar toda la aplicación.

Eso es todo por hoy. Si me perdí algo o si tiene alguna idea sobre este diseño, deje sus comentarios y no olvide suscribirse a este canal. ¡Nos vemos en el próximo vídeo!

 

Entorno comercial IB API - QT C++ - Flask - Modelo RL. Ejemplo de trabajo completo.


Entorno comercial IB API - QT C++ - Flask - Modelo RL. Ejemplo de trabajo completo.

Mi nombre es Denis y bienvenido a Close to Algo Trading. Hoy tengo un video especial donde demostraré cómo todos los componentes que hemos discutido en episodios anteriores pueden funcionar juntos en el comercio real. Puede encontrar todo el código fuente en GitHub y probarlo usted mismo.

Para esta demostración, usaré la API de Interactive Brokers y mi antiguo proyecto llamado IBTrader. Empecé a trabajar en IBTrader hace muchos años, pero nunca tuve tiempo de terminarlo. Sin embargo, estoy considerando renovar el proyecto ahora. Si está interesado en este proyecto especial, hágamelo saber en la sección de comentarios de este video. Entonces, profundicemos en lo que vamos a hacer en este video. Comenzaremos con una breve actualización y descripción general de nuestro agente y entorno de aprendizaje por refuerzo. Luego, proporcionaré una introducción rápida a la implementación del modelo con Flask.

Dado que usaremos una aplicación Qt para conectarnos al corredor, necesitamos usar una API REST para interactuar con nuestro modelo. Hacia el final del video, veremos cómo todas estas partes funcionan juntas a la perfección.

Antes de comenzar, recomiendo ver mis videos anteriores para comprender mejor los conceptos discutidos aquí. Si ya vio esos videos, puede recordar cómo crear un agente RL utilizando la biblioteca TF-Agent. He realizado algunos cambios tanto en el agente como en el entorno para esta demostración. El agente sigue siendo DQN, tal como lo usábamos antes, pero ahora usaremos QNetwork en lugar de QRnnNetwork. Del mismo modo, he simplificado el entorno. En lugar de utilizar varios días de datos históricos, ahora solo tenemos la observación de precios del día actual.

Sin embargo, confiar únicamente en la observación actual no es lo ideal. Para abordar esto, transformaremos nuestra observación de un día para incluir tres días históricos. Podemos lograr esto usando el envoltorio de historial del paquete de entornos tf-agent y configurando el parámetro history_length en 3. Ahora, si verificamos las observaciones del entorno, encontraremos que tenemos tres de nuestras observaciones normales combinadas. Cada observación contiene los datos OHLC (apertura, máximo, mínimo, cierre) junto con el volumen.

Para asegurar un rango consistente, realicé algunas transformaciones, y ahora nuestros datos de entrada deberían representar cambios porcentuales de precios de registro. Finalmente, necesitamos alimentar nuestro modelo con tres observaciones: el día actual y los dos días históricos. También necesitamos recordar los estados de posición de los últimos días. Una vez que el agente esté capacitado, tendremos una política que puede predecir acciones como comprar, vender, omitir o cerrar posiciones. La política se implementa mediante una red neuronal y podemos usar una API directa para trabajar con ella.

Sin embargo, ¿qué pasa si no queremos vincular estrechamente nuestra aplicación con el modelo de recomendación? ¿O qué pasa si nuestro modelo está implementado en Python y queremos usarlo en diferentes aplicaciones? Para abordar esto, podemos implementar nuestro modelo como un pequeño servicio web usando Flask. Flask es un marco micro web escrito en Python. Elegí Flask para este video porque es simple y no requiere mucho tiempo de configuración. También nos permite usar JSON para transferir datos entre nuestra aplicación y el modelo.

Para depurar e implementar nuestra aplicación Flask, podemos usar un Dockerfile. Microsoft tiene un buen tutorial sobre cómo crear un Dockerfile, así que consulte el enlace en la descripción para obtener más detalles. Nuestra aplicación Flask tendrá una ruta llamada "predecir", que manejará las solicitudes POST que contengan datos de entrada en formato JSON. La respuesta también estará en formato JSON. Escribiremos código para transformar los datos JSON y pasarlo al modelo de políticas para la predicción.

Ahora, pasemos a la aplicación que se conecta al corredor, recibe datos y envía órdenes al servidor. Aunque podríamos implementar nuestra estrategia directamente en la aplicación, para este ejemplo, no lo haremos. En su lugar, utilizaremos la aplicación QtIBTrade, que está conectada al bróker y se comunica con nuestro modelo de estrategia y selección de acciones mediante la API REST. QtIBTrade es una aplicación basada en Qt que creé hace algún tiempo para explorar el comercio algorítmico usando C++. Es multiplataforma y está bien documentado.

Sin embargo, tenga en cuenta que QtIBTrade todavía está en desarrollo porque no he tenido suficiente tiempo para trabajar en él. Si alguien está interesado en colaborar en este proyecto, hágamelo saber o verifique el código en GitHub (enlace provisto en la descripción).

Ahora, veamos cómo funcionan todos estos componentes juntos. Primero, debemos iniciar nuestra aplicación Flask. Lo inicié en modo de depuración, por lo que debemos recordar el número de puerto y actualizarlo en nuestra aplicación Qt. A continuación, debemos conectarnos a la aplicación o puerta de enlace de IB. Antes de hacer clic en el botón "Conectar", verifiquemos si la API está activada y si tenemos configurado el puerto correcto.

Una vez que todo esté configurado, podemos iniciar nuestra aplicación de prueba, que utiliza nuestro modelo. Como puede ver, cada cinco segundos, enviamos una solicitud al servidor con diferentes datos de precios. Cada vez que recibimos datos de precios del corredor, activamos nuestro modelo y recibimos la acción correspondiente.

Espero que hayas encontrado esta demostración interesante. Si es así, suscríbete al canal para ver más videos. ¡Gracias por mirar, y nos vemos en el próximo video!

 

Con qué facilidad y sencillez realizar una prueba retrospectiva de una cartera de acciones


Con qué facilidad y sencillez realizar una prueba retrospectiva de una cartera de acciones

¡Hola a todos! Bienvenido a "Cerca de AlgoTrading". Soy Denis, y hoy quiero compartir con ustedes un marco muy útil y simple que he desarrollado para realizar pruebas retrospectivas de diferentes carteras. Se basa en una idea anterior que discutí en uno de mis videos anteriores.

Si bien hay implementaciones más potentes disponibles, como la proporcionada por quantconnect, creo que siempre es bueno tener una solución local simple que nos permita probar ideas sin depender de servicios adicionales.

El núcleo de este marco es Backtrader, un marco de Python para backtesting y comercio. Implementé una estrategia de reequilibrio genérica que usaremos, pero el marco está diseñado de una manera que permite probar diferentes ideas sin tener que profundizar en los detalles de Backtrader.

Echemos un vistazo más de cerca a la estructura y los componentes de este marco. La estrategia de reequilibrio es el componente clave y sigue una estructura específica. Primero, debemos seleccionar el conjunto de activos con los que trabajaremos. Para ello contamos con un modelo que implementa un proceso de selección basado en nuestro universo, denominado modelo de selección. Una vez que tenemos los activos seleccionados, se pasan al modelo alfa. El modelo alfa es el núcleo de nuestro algoritmo y genera las señales comerciales. Estas señales se utilizan luego para construir nuestra cartera.

El modelo de construcción de cartera toma las señales generadas por el modelo alfa y genera una asignación de activos. Esta asignación es un diccionario donde la clave es el ticker del activo y el valor es el peso. Después de construir la cartera inicial, pasamos al paso de reequilibrio. Aquí, podemos eliminar activos antiguos, agregar nuevos o ajustar la cantidad de activos en la cartera en función de los pesos definidos.

A continuación, es posible que deseemos verificar algunas condiciones de riesgo utilizando el modelo de riesgo. Este modelo recibe el resultado del paso de reequilibrio, realiza los cambios necesarios y luego lo pasa al modelo de ejecución. El modelo de ejecución, por defecto, coloca órdenes para comprar o vender la cantidad solicitada de activos.

Si echa un vistazo al código de la estrategia de reequilibrio, verá la implementación de cada uno de estos pasos. Antes del modelo de selección, invoco una función que devuelve un marco de datos con solo los precios de cierre. Esto se debe a que, para esta estrategia, solo necesitamos los precios de cierre.

Ahora, repasemos brevemente la implementación de los modelos dentro del marco. El modelo de selección es sencillo. Su objetivo principal es descartar activos con precios faltantes o cero para garantizar que todos los datos que utilizamos sean válidos. El modelo alfa es una estrategia de impulso genérico simple. En este caso, compramos activos con el impulso más alto. Para el modelo de asignación, implementamos un modelo que asigna pesos iguales a todos los activos.

Finalmente, el modelo de rebalanceo realiza un rebalanceo simple en base a los pesos asignados. Una vez que hayamos implementado todos los modelos, veamos cómo usarlos.

Primero, necesitamos algunos datos. Para este ejemplo, usaré la lista actual de tickers del S&P 500 como nuestro universo. Descargaremos los datos de precios históricos de todas estas acciones a partir de enero de 2007. A continuación, completaremos nuestra configuración. Definimos la estructura de nuestra fuente de datos, especificando que usaremos solo los precios de apertura y cierre. El precio de apertura es necesario porque queremos abrir y cerrar posiciones en función del precio de apertura del día siguiente.

También definimos nuestra lista de activos, el ticker de referencia, el efectivo inicial, el comercio de opciones al abrir y establecemos un período de calentamiento para que nuestro algoritmo calcule el impulso en función del último año. Luego, creamos nuestra configuración de estrategia. En esta configuración, configuramos la opción rebalanceDay en 22, lo que significa que reequilibraremos nuestra cartera una vez al mes. También disponemos de un parámetro de caja de reserva para evitar errores de ejecución por insuficiencia de fondos.

A continuación, definimos todos nuestros modelos y sus parámetros. Antes de iniciar el backtest, debemos asignar dos conjuntos de datos a nuestra configuración: uno que contenga los datos de todos nuestros activos y otro que contenga los datos de referencia. Finalmente, podemos llamar a la función backtest y esperar a que se genere el informe. El informe se genera utilizando el paquete quantstats y proporciona mucha información útil.

Puede encontrar el código completo en mi página de GitHub. El enlace se proporciona en la descripción.

Eso es todo por hoy. Gracias por mirar, y si tiene alguna pregunta o comentario, déjelos a continuación. No olvides suscribirte a mi canal para más contenido interesante.

 

Cómo vencer al mercado. Momentum y optimización de cartera


Cómo vencer al mercado. Momentum y optimización de cartera

¡Hola a todos! Mi nombre es Denis y estás viendo "Cerca de AlgoTrading".

En este breve video, exploraremos dos estrategias básicas de inversión de cartera: Momentum of Return y Momentum como la diferencia entre el precio y la tendencia. También veremos cómo los métodos de optimización de cartera pueden ayudarnos a mejorar nuestros resultados de inversión.

El impulso es esencialmente la diferencia entre dos precios tomados en un intervalo fijo. Representa la velocidad o tasa de cambio. En el contexto del mercado de valores, el impulso se puede expresar como rendimientos diarios. La idea detrás de la estrategia de impulso es simple: si el precio ha estado aumentando en el pasado, es probable que continúe aumentando en el futuro. Es conveniente expresar todos los mercados en la misma notación para facilitar las comparaciones.

Para el mercado de valores, el impulso a menudo se define como la diferencia entre el precio de hoy y el valor promedio móvil correspondiente. Cuando el impulso aumenta, los precios se alejan más de la media móvil. Por el contrario, cuando el impulso se vuelve más pequeño, la velocidad de cambio de precios se ralentiza y los precios se acercan o incluso en la dirección negativa en relación con el promedio móvil.

Para implementar estos dos tipos de impulso, ya he creado un modelo alfa. Nos permite probarlos con diferentes parámetros.

Calculemos el impulso durante un período de un año y seleccionemos las 10 acciones principales con el mayor impulso. Reequilibraremos nuestra cartera una vez al mes y todos los activos recibirán asignaciones iguales. Ahora, copiemos nuestra configuración y establezcamos otro tipo de impulso. Podemos agregar estas configuraciones a nuestra prueba y probarlas durante el período de 2005 a 2015.

Puede ver que ambas estrategias exhiben una volatilidad y reducción similares, y superan la inversión en el índice. Sin embargo, es importante tener en cuenta que aceptamos un riesgo ligeramente mayor en comparación con mantener el índice. Para reducir el riesgo al nivel del índice, podemos intentar usar algunos métodos de optimización de cartera. En lugar del modelo de asignación equitativa, usaremos un modelo que implementa varios métodos de optimización del paquete pyportfolioopt, que analicé en un video anterior sobre optimización de cartera.

Aquí, le mostraré cómo cambiar nuestra configuración para usar el modelo de asignación de optimización de cartera. Probaremos dos métodos bien conocidos, CLA y HRP, así como dos métodos más específicos: Efficient CVaR (Conditional Value at Risk) y Efficient CDaR (Conditional Drawdown at Risk). Para obtener información más detallada sobre estos métodos, consulte la documentación oficial. Tenga en cuenta que estos métodos de optimización pueden tardar algún tiempo en ejecutarse, ya que no son muy rápidos. Esperemos pacientemente hasta que se complete el backtesting.

Puede observar que todos los métodos mejoran nuestros resultados. Nuestra estrategia inicial de impulso de rentabilidad, que utiliza una asignación basada en el optimizador de valor en riesgo condicional, reduce la reducción en casi un 12 %. La misma estrategia, con la reducción condicional en el optimizador de riesgos, mejora nuestro rendimiento en un 3%. Hemos visto que simplemente cambiar el modelo de asignación puede mejorar significativamente nuestros resultados. Hay muchas otras formas de potenciar esta estrategia inicial. Lo que es más importante es que la simple idea de usar el impulso funciona y supera al mercado, y podemos implementarlo con solo unos pocos pasos.

Eso es todo por hoy. ¡Nos vemos en el próximo vídeo!

 

Más allá de la relación de Sharpe: presentación de una evaluación de la estrategia comercial efectiva


Más allá de la relación de Sharpe: presentación de una evaluación de la estrategia comercial efectiva

¡Hola a todos! Bienvenido a "Cerca de AlgoTrading". Hoy nos adentramos en el apasionante mundo de la evaluación de estrategias comerciales. Descubriremos por qué la relación de Sharpe, si bien es popular, no siempre es la mejor herramienta para el trabajo.

En este video, cubriremos cuatro áreas principales. Primero, definiremos la relación de Sharpe y explicaremos su fórmula. Luego, discutiremos las limitaciones de la relación de Sharpe. En tercer lugar, presentaremos las proporciones de Sortino y Calmar como métricas alternativas. Finalmente, compararemos dos estrategias comerciales hipotéticas utilizando todas estas métricas. Entonces, ¿cuál es la relación de Sharpe? Nombrado en honor al premio Nobel William F. Sharpe, mide el rendimiento de una inversión en comparación con un activo libre de riesgo después de ajustar por su riesgo. En otras palabras, el índice de Sharpe busca caracterizar qué tan bien el rendimiento de un activo compensa al inversor por el riesgo asumido.

La fórmula del ratio de Sharpe es la siguiente: Ratio de Sharpe = (Rentabilidad esperada - Tasa libre de riesgo) / Desviación estándar.

Consideremos una estrategia con un rendimiento esperado del 8 %, una tasa libre de riesgo del 2 % y una desviación estándar del 15 %. El ratio de Sharpe sería (8 - 2)/15, que es aproximadamente 0,4. Sin embargo, el ratio de Sharpe tiene varias limitaciones que debemos considerar. En primer lugar, supone que los rendimientos siguen una distribución normal, lo que a menudo no es el caso de muchas estrategias comerciales que exhiben distribuciones no normales con rendimientos sesgados o de cola ancha. Esto puede dar lugar a resultados engañosos cuando se utiliza la relación de Sharpe.

En segundo lugar, el índice de Sharpe favorece las estrategias que generan ganancias pequeñas y frecuentes y asume que estas ganancias pueden aumentar proporcionalmente. Esta suposición puede no ser cierta para todos los tipos de estrategias, especialmente las estrategias comerciales de alta frecuencia. Como resultado, las estrategias comerciales de alta frecuencia pueden parecer más exitosas cuando se evalúan utilizando la relación de Sharpe. En tercer lugar, el índice de Sharpe no tiene en cuenta explícitamente el riesgo de cola, que se refiere a la probabilidad de eventos extremos o pérdidas significativas. Es posible que las estrategias con mayor riesgo de cola no se reflejen adecuadamente en el índice de Sharpe, lo que podría subestimar el riesgo asociado con tales estrategias.

Dadas estas limitaciones, los comerciantes a menudo recurren a métricas alternativas como el índice de Sortino y el índice de Calmar. Estas métricas brindan información adicional y pueden ayudar a superar algunas de las limitaciones del índice de Sharpe. El índice de Sortino mide el rendimiento ajustado al riesgo de una inversión considerando solo la volatilidad a la baja. Se centra en la desviación de los rendimientos por debajo de un umbral específico, normalmente la tasa libre de riesgo. Esta relación proporciona una evaluación más específica del riesgo y se alinea con la preocupación común de los inversores por los riesgos a la baja.

Por otro lado, el ratio de Calmar evalúa la rentabilidad ajustada al riesgo comparando la tasa de rentabilidad media anual con la reducción máxima. Esta relación es particularmente útil para estrategias en las que la reducción máxima es un factor crítico. Destaca la rentabilidad generada en relación con el riesgo de experimentar pérdidas significativas. Al considerar estas métricas alternativas, los operadores obtienen una perspectiva más completa sobre las características de riesgo y rendimiento de sus estrategias comerciales. El índice de Sortino se centra en la volatilidad a la baja, mientras que el índice de Calmar mide el rendimiento en relación con la reducción máxima.

Ahora, comparemos dos estrategias hipotéticas usando estas métricas. Las llamaremos Estrategia A y Estrategia B. La estrategia A tiene un rendimiento anual del 15 %, una desviación estándar del 10 %, una desviación a la baja del 7 % y una reducción máxima del -20 %. Esto nos da un índice de Sharpe de 1,3, un índice de Sortino de 1,86 y un índice de Calmar de 0,8. Por otro lado, la estrategia B tiene un rendimiento anual del 12 %, una desviación estándar del 8 %, una desviación a la baja del 5 % y una reducción máxima del -15 %. El índice de Sharpe para la estrategia B es 1,25, el índice de Sortino es 2,0 y el índice de Calmar es 0,8.

Como podemos ver, aunque la estrategia A tiene una mayor rentabilidad, la estrategia B la supera cuando tenemos en cuenta la desviación a la baja y la reducción máxima, mostrando un menor riesgo para la rentabilidad. Por lo tanto, la estrategia B le brinda más rendimiento por cada unidad de riesgo, lo cual es una consideración importante en cualquier decisión de inversión. La elección entre el índice de Sharpe y las métricas alternativas depende de las características y objetivos específicos de su estrategia comercial. Aquí hay algunas recomendaciones para ayudarlo a decidir cuándo enfocarse en el índice de Sharpe y cuándo considerar otras métricas:

Cuándo prestar más atención al índice de Sharpe: el índice de Sharpe puede ser una herramienta valiosa al evaluar estrategias que se encuentran dentro de ciertas categorías. Por ejemplo, si tiene una cartera de inversiones a largo plazo bien diversificada centrada en activos tradicionales como acciones y bonos, el índice de Sharpe proporciona una medida adecuada del rendimiento ajustado al riesgo. Es particularmente relevante para estrategias con rendimientos relativamente estables, riesgo moderado y un enfoque en los rendimientos generales ajustados al riesgo.

Cuándo considerar métricas alternativas: por otro lado, las métricas alternativas como el índice de Sortino y el índice de Calmar entran en juego para estrategias que pueden no ajustarse a los supuestos del índice de Sharpe. Por ejemplo, si participa en estrategias comerciales de mayor riesgo, como el comercio de opciones, estrategias basadas en apalancamiento o estrategias con posiciones concentradas, las métricas alternativas se vuelven más valiosas. Estas estrategias a menudo exhiben distribuciones de rendimiento no normales, mayor riesgo de cola y pueden requerir un enfoque en la gestión del riesgo a la baja. El índice de Sortino y el índice de Calmar ofrecen información más específica sobre el rendimiento ajustado al riesgo, el riesgo de cola y las reducciones, lo que brinda una mejor evaluación de la viabilidad de la estrategia en esos contextos.

Recuerde, ninguna métrica única puede capturar completamente la complejidad y los matices de una estrategia comercial. Es esencial considerar una combinación de métricas para obtener una comprensión integral del riesgo y el rendimiento. Mediante el uso de múltiples métricas como el índice de Sharpe, el índice de Sortino y el índice de Calmar, puede evaluar las fortalezas y debilidades de su estrategia desde diferentes perspectivas, lo que permite una evaluación más sólida y una toma de decisiones informada.

Eso es todo por el tutorial de hoy. Gracias por unirse a nosotros, y esperamos que este video le haya resultado útil.

 

Simulación rápida de Monte Carlo para la estimación de la reducción máxima esperada (ejecute el código python x2000 más rápido)


Simulación rápida de Monte Carlo para la estimación de la reducción máxima esperada (ejecute el código python x2000 más rápido)

¡Bienvenidos todos! Soy Denis y estás viendo CloseToalgotrading.

En este video, profundizaremos en el proceso de mejorar significativamente el rendimiento de ejecución de un código de Python, potencialmente más de mil veces. Nuestro objetivo no es solo hacerlo interesante sino también muy útil. Para lograr esto, emplearemos el ejemplo de la simulación de Monte Carlo para calcular una reducción máxima esperada.

Para comenzar, abordemos la pregunta fundamental de qué significa la reducción máxima y cómo se puede calcular. La reducción máxima sirve como indicador del riesgo a la baja durante un período específico. Generalmente expresado en términos porcentuales, se determina utilizando la siguiente fórmula.

Aunque la fórmula parece prometedora, podemos lograr una precisión aún mayor al aplicarla a datos reales. Tomemos el ejemplo de SPY y establezcamos el período de tiempo en 100 días. El gráfico muestra los precios de cierre de SPY durante estos 100 días. Son evidentes dos reducciones, y la segunda parece ser la máxima. Para calcular el drawdown, podemos realizar un cálculo simple. El precio más alto alcanzó alrededor de 212,1 y el más bajo fue de 204,4. Utilizando la fórmula mencionada anteriormente, podemos estimar que la reducción máxima es de aproximadamente 3.6%.

Sin embargo, este resultado carece de precisión debido a los supuestos realizados sobre el nivel de precios. Para obtener un cálculo más preciso, utilizaremos una función de Python diseñada específicamente para este propósito. Una posible implementación es la siguiente:

[Código de Python para calcular la reducción máxima]

Esta función calcula el drawdown máximo, resultando en un valor de 3.5%. El tiempo de ejecución de esta función es de aproximadamente 16,3 microsegundos, lo cual es respetable. Pero, ¿podemos mejorar aún más este momento sin recurrir a técnicas complejas e intrincadas? La respuesta es un rotundo sí, y la medida más sencilla para mejorar la ejecución es emplear Numba.

Numba es un compilador JIT (Just-In-Time) de código abierto que traduce un subconjunto de código Python y NumPy en código de máquina altamente eficiente. Al convertir nuestro código de Python a Numba, podemos mejorar significativamente su rendimiento. Sin embargo, la implementación inicial de nuestra función no funcionará con Numba porque no reconoce la función "acumular máximo". Sin embargo, podemos idear un método alternativo para calcular la reducción máxima sin utilizar esta función. El cálculo de reducción modificado se puede implementar de la siguiente manera:

[Código de Python para el cálculo de reducción modificado usando Numba]

Como puede observar, hemos agregado un decorador de Numba sobre la definición de la función. Con esta implementación, Numba no plantea quejas y el tiempo de ejecución se reduce a tan solo 4,8 microsegundos. Esto representa una mejora de más de tres veces en términos de velocidad. Es bastante simple, ¿no? Personalmente, prefiero esta implementación porque describe el algoritmo de manera directa.

Por lo tanto, podemos calcular con precisión la reducción máxima, que asciende al 3,5%. Vamos a referirnos a él como la "reducción máxima histórica". Con base en esta métrica de riesgo, podemos suponer que si las condiciones del mercado permanecen sin cambios, nuestro riesgo máximo será solo del 3,5%. Sin embargo, plantea la cuestión de si podemos depositar nuestra confianza únicamente en un valor derivado de una sola observación específica. ¿No sería mejor tener algunas observaciones más de situaciones similares? Efectivamente, sería beneficioso, y aquí es donde entra en juego el método Monte Carlo.

Tomemos un momento para aclarar lo que implica el método Monte Carlo. Se trata de describir un proceso a través de un modelo matemático utilizando generadores de variables aleatorias. Luego, el modelo se calcula repetidamente y las características probabilísticas del proceso se derivan en función de los datos adquiridos.

En nuestro caso, el proceso implica una serie de rendimientos bursátiles, que simulamos utilizando el modelo Geometric Brown Motion (GBM). El modelo GBM asume que los rendimientos de las acciones siguen un proceso estocástico de tiempo continuo y se usa ampliamente en el modelado financiero. Al simular los rendimientos de las acciones con GBM, podemos generar múltiples escenarios y calcular la reducción máxima para cada escenario. Esto nos dará una distribución de las disposiciones máximas, proporcionando una estimación más robusta del riesgo a la baja.

Para implementar la simulación Monte Carlo, necesitamos definir los parámetros para el modelo GBM. Estos parámetros incluyen la tasa de deriva (μ), la volatilidad (σ) y el horizonte temporal (T). También especificaremos el número de ejecuciones de simulación (N) y el número de pasos de tiempo (M) dentro de cada ejecución. Con estos parámetros establecidos, podemos proceder con la simulación.

Aquí hay un ejemplo de implementación de la simulación de Monte Carlo para calcular la reducción máxima esperada usando Python:

import numpy as np

def monte_carlo_max_drawdown(S0, mu, sigma, T, N, M):
    dt = T / M

    S = np.zeros((N, M+ 1 ))
    S[:, 0 ] = S0

     for i in range( 1 , M+ 1 ):
        epsilon = np.random.normal( 0 , 1 , N)
        S[:, i] = S[:, i- 1 ] * np. exp ((mu - 0.5 * sigma** 2 ) * dt + sigma * np. sqrt (dt) * epsilon)

    drawdowns = np.zeros(N)

     for i in range(N):
        peak = np.maximum.accumulate(S[i])
        drawdowns[i] = np.max((peak - S[i]) / peak)

    expected_max_drawdown = np.mean(drawdowns)

     return expected_max_drawdown

# Example usage
S0 = 100.0    # Initial stock price
mu = 0.05    # Drift rate
sigma = 0.2    # Volatility
T = 1.0    # Time horizon in years
N = 10000    # Number of simulation runs
M = 252    # Number of time steps (assuming 252 trading days in a year)

expected_max_drawdown = monte_carlo_max_drawdown(S0, mu, sigma, T, N, M)
print( "Expected Maximum Drawdown:" , expected_max_drawdown)

En este ejemplo, usamos NumPy para manejar de manera eficiente las operaciones de matriz. Inicializamos una matriz S para almacenar los precios de las acciones simuladas para cada ejecución y paso de tiempo. Iteramos sobre los pasos de tiempo y simulamos los cambios en el precio de las acciones utilizando la fórmula GBM. Después de simular todas las ejecuciones, calculamos la reducción de cada ejecución encontrando el valor máximo y restándolo del precio actual. Finalmente, calculamos la reducción máxima esperada tomando la media de todas las reducciones.

Al ejecutar esta simulación de Monte Carlo, podemos estimar la reducción máxima esperada en función de múltiples escenarios simulados. Esto proporciona una comprensión más completa del riesgo a la baja en comparación con una sola observación de datos históricos.

En conclusión, hemos explorado el concepto de reducción máxima, su cálculo utilizando datos históricos y la aplicación del método de Monte Carlo para estimar la reducción máxima esperada. También hemos discutido cómo mejorar el rendimiento del cálculo de reducción utilizando Numba. La incorporación de estas técnicas puede mejorar en gran medida la eficiencia y la precisión de los cálculos financieros, capacitando a los comerciantes e inversores con valiosas métricas de riesgo para la toma de decisiones.

¡Gracias por ver CloseToalgotrading! Espero que hayas encontrado este video informativo y útil. Si tiene alguna pregunta o comentario, no dude en compartirlos a continuación. Estén atentos para conocer más temas interesantes sobre el comercio algorítmico y las finanzas cuantitativas.

 

Optimización de cartera para maximizar la relación de Sharpe con R Studio (CRAN)


Optimización de cartera para maximizar la relación de Sharpe con R Studio (CRAN)

Hola amigos, bienvenidos a Macro Sapiens. En el tutorial de hoy, aprenderemos cómo optimizar una cartera para maximizar el índice de Sharpe. El índice de Sharpe mide los rendimientos de la cartera por unidad de riesgo asumido. Para lograr esto, utilizaremos las bibliotecas quantmod, PortfolioAnalytics, PerformanceAnalytics y NSE2R. La biblioteca quantmod nos ayudará a obtener datos de Yahoo Finance, PortfolioAnalytics proporcionará la función de optimización, PerformanceAnalytics ayudará con la visualización y NSE2R es una biblioteca dedicada a la Bolsa Nacional de Valores de India.

Primero, definimos una variable llamada "stock_names" para almacenar los nombres de las acciones. Usamos la biblioteca quantmod para obtener los datos de Yahoo Finance para los 50 símbolos bursátiles del índice Nifty 50 en India. Extraemos la columna de símbolos y la almacenamos en una nueva variable llamada "símbolos".

A continuación, debemos especificar las fechas de inicio y finalización de los datos que queremos recuperar. Usamos la variable "since" para definir la fecha de inicio como el 1 de enero de 2018 y la fecha de finalización como la fecha actual. Nos centramos en los precios de cierre ajustados, ya que proporcionan una mejor representación del rendimiento de las acciones y los almacenamos en una variable llamada "prices_data".

Para calcular el rendimiento de la cartera, usamos la fórmula de rendimiento diario: (Precio de cierre del día 2 - Precio de cierre del día 1) / Precio de cierre del día 1. Modificamos la función para manejar cualquier valor faltante (NA) en los datos.

A continuación, definimos los nombres de las columnas del conjunto de datos de rentabilidad de la cartera como "fondos". Esto se utilizará más adelante en el proceso de optimización.

Ahora, podemos comenzar el proceso de optimización utilizando la biblioteca PortfolioAnalytics. Creamos una cartera inicial y agregamos restricciones. Una restricción garantiza que la ponderación total de la cartera sea igual a 1, y la otra restricción especifica que queremos una cartera solo larga, lo que significa que no hay ponderaciones negativas.

Agregamos la función objetivo, que es el rendimiento medio de la cartera utilizando los datos de precios. Establecimos el número máximo de iteraciones para el proceso de optimización en 2000.

Para calcular la relación de Sharpe, necesitamos definir la tasa de rendimiento libre de riesgo. En este caso, lo consideramos como 0%. Utilizamos la función de la biblioteca PerformanceAnalytics para analizar los rendimientos de la cartera y calcular el índice de Sharpe.

Creamos una tabla para mostrar los resultados, incluido el rendimiento máximo de la relación de Sharpe logrado a través de la optimización aleatoria y los rendimientos del optimizador de ROI. Trazamos la frontera eficiente para visualizar las carteras optimizadas.

Además, comparamos los rendimientos de la cartera con los rendimientos de invertir en el índice Nifty 50. Calculamos los rendimientos acumulados para cada enfoque y los graficamos para analizar el rendimiento.

Con base en los resultados, observamos que el método de optimización aleatoria de la cartera proporciona un mayor índice de Sharpe y rendimientos acumulados en comparación con el optimizador de ROI y el índice Nifty 50.

Estas ponderaciones optimizadas se pueden utilizar para crear una cesta de acciones para la inversión. Mediante el seguimiento del rendimiento de la cesta durante un período de tiempo, los inversores pueden tomar decisiones informadas sobre la inversión en las acciones seleccionadas.

Esperamos que este tutorial le haya resultado útil. Si tiene alguna pregunta, no dude en preguntar. No olvides darle me gusta, compartir y suscribirte a nuestro canal. ¡Gracias!

 

Sharpe Ratio, Treynor Ratio y Jensen's Alpha (cálculos para exámenes CFA® y FRM®)


Sharpe Ratio, Treynor Ratio y Jensen's Alpha (cálculos para exámenes CFA® y FRM®)

Señoras y señores, les extiendo mi cordial saludo a todos ustedes. Hoy profundizaremos en un tema importante, a saber, las diversas medidas del rendimiento de la cartera. Específicamente, exploraremos el índice de Sharpe, el índice de Treynor y el alfa de Jensen. Si bien existen varias otras medidas de rendimiento de la cartera, estas tres son ampliamente reconocidas como fundamentales. Comprender la interrelación entre estas medidas y su significado práctico es crucial, no solo para sus próximos exámenes CFA o FRM, sino también para su aplicación en la vida real. Estos conceptos impregnan los tres niveles del plan de estudios CFA, enfatizando su importancia a lo largo de su recorrido de examen.

Comencemos con la relación de Sharpe, que, hasta el día de hoy, sigue siendo la relación más estimada en el campo. Su atractivo radica en su simplicidad, a pesar de algunas limitaciones inherentes. Sin embargo, sigue siendo el índice de referencia cuando se comparan fondos, como lo informan comúnmente los fondos de cobertura y los fondos mutuos. De manera similar, tanto el índice de Treynor como el alfa de Jensen se utilizan ampliamente en la industria. Por lo tanto, es esencial comprender estos conceptos, no solo para sus exámenes sino también por su relevancia práctica.

La relación de Sharpe, formulada de la siguiente manera, merece nuestra atención:

Ratio de Sharpe = (Retorno de la cartera - Tasa libre de riesgo) / Desviación estándar de la cartera

En el numerador, "Retorno de la cartera (rp)" representa el exceso de rendimiento sobre la tasa libre de riesgo (rf). Al invertir en una cartera, se esperan rendimientos superiores a la tasa libre de riesgo, ya que asumir riesgo implica buscar mayores recompensas. Por tanto, nos centramos en el exceso de rentabilidad, que significa la rentabilidad obtenida por encima de la tasa libre de riesgo. En el denominador tenemos la desviación estándar, que sirve como medida de riesgo. Aquí, es esencial tener en cuenta que la desviación estándar representa tanto los riesgos diversificables como los no diversificables. Los riesgos diversificables pueden eliminarse mediante la diversificación, mientras que los riesgos no diversificables persisten. En consecuencia, el ratio de Sharpe evalúa el exceso de rendimiento por unidad de riesgo total, combinando riesgos sistemáticos y no sistemáticos.

Es crucial resaltar que el valor del índice de Sharpe es más relevante cuando se compara con los índices de Sharpe de otras carteras. Encuentra importancia al evaluar las carteras en relación unas con otras. De hecho, los profesionales de la industria a menudo se refieren a las proporciones de Sharpe como "objetos punzantes". Por ejemplo, los administradores de cartera podrían decir: "Voy a devolver dos objetos punzantes" o "tres objetos punzantes", lo que indica sus respectivas proporciones de Sharpe.

Una relación de Sharpe más alta se considera favorable. Una relación más alta indica la capacidad de una cartera para generar más rendimiento para el mismo nivel de riesgo, lo que la convierte en una opción preferible. Así, a la hora de seleccionar una cartera basada en el ratio de Sharpe, opta por la que tenga el ratio más alto.

Ahora, dirijamos nuestra atención a la relación de Treynor, que se parece mucho a la relación de Sharpe en su numerador pero diverge en su denominador. El índice de Treynor mide el exceso de rendimiento por unidad de riesgo sistemático, denotado por beta. Beta representa el riesgo sistemático no diversificable inherente a una inversión. Esta medida más estrecha se centra únicamente en el riesgo sistemático, a diferencia del alcance más amplio del índice de Sharpe. Del mismo modo, el índice de Treynor es más valioso en comparación con los índices de otros fondos comparables. Seleccionar una cartera basada en el índice de Treynor implica elegir el que tenga el índice más alto, ya que un valor más alto indica un mayor exceso de rendimiento por unidad de riesgo sistemático.

Antes de explorar el alfa de Jensen, revisemos el modelo de fijación de precios de activos de capital (CAPM). CAPM nos ayuda a comprender el alfa de Jensen, ya que ayuda a determinar el rendimiento esperado o el rendimiento requerido para una cartera. CAPM calcula el rendimiento esperado comenzando con la tasa libre de riesgo y sumando beta por la prima de riesgo de mercado (la diferencia entre el rendimiento de mercado y el riesgo).

El alfa de Jensen, también conocido como índice de rendimiento de Jensen o simplemente alfa, es una medida del exceso de rendimiento de una cartera en comparación con su rendimiento esperado según el modelo de fijación de precios de activos de capital (CAPM). El CAPM relaciona la rentabilidad esperada de un activo o cartera con su beta, que representa el riesgo sistemático o sensibilidad a los movimientos del mercado.

El alfa de Jensen se calcula de la siguiente manera:

Alfa de Jensen = Rentabilidad de la cartera - [Tasa libre de riesgo + Beta × (Retorno de mercado - Tasa libre de riesgo)]

En esta fórmula, el rendimiento de la cartera representa el rendimiento real obtenido por la cartera, la tasa libre de riesgo es el rendimiento de una inversión libre de riesgo, como un bono del gobierno, beta mide la sensibilidad de la cartera a los movimientos del mercado y el rendimiento del mercado es la rentabilidad media del mercado global.

El alfa de Jensen indica si la cartera tuvo un rendimiento superior o inferior al rendimiento esperado según el CAPM. Un alfa positivo sugiere que la cartera ha generado rendimientos superiores a los esperados dado su riesgo sistemático, mientras que un alfa negativo indica un rendimiento inferior. Por lo tanto, los inversores y gestores de cartera suelen buscar alfas positivos al evaluar el rendimiento de las inversiones.

Es importante señalar que el alfa de Jensen considera solo el riesgo sistemático y no tiene en cuenta el riesgo total o los riesgos específicos asociados con la cartera. Como resultado, se recomienda utilizar el alfa de Jensen junto con otras medidas de rendimiento, como el índice de Sharpe y el índice de Treynor, para obtener una comprensión más completa del rendimiento de una cartera.

En resumen, el índice de Sharpe, el índice de Treynor y el alfa de Jensen son medidas valiosas para evaluar el rendimiento de la cartera. El índice de Sharpe evalúa el exceso de rendimiento por unidad de riesgo total, mientras que el índice de Treynor se centra en el exceso de rendimiento por unidad de riesgo sistemático. El alfa de Jensen compara el rendimiento real de una cartera con su rendimiento esperado en función del CAPM, considerando solo el riesgo sistemático. Estas medidas brindan diferentes perspectivas sobre el rendimiento de la cartera y se pueden usar juntas para tomar decisiones de inversión informadas.

Razón de la queja: