Full text
FINEANCE, COMPARADOR DE RENTABILIDADES ESPERADAS DE ACTIVOS MEDIANTE MACHINE LEARNING Y TÉCNICAS TRADICIONALES DE CÁLCULO DE RENTABILIDAD TRABAJO FIN DE GRADO CURSO 2022-2023 AUTORES PAULA GARCÍA PINILLA, MARTA GÓMEZ GALVÁN, ALBA MILLÁN GARCÍA, JUNE ZUAZO BERASATEGI DIRECTOR MANUEL NÚÑEZ GARCÍA GRADO EN ADMINISTRACIÓN Y DIRECCIÓN DE EMPRESAS E INGENIERÍA INFORMÁTICA FACULTAD DE INFORMÁTICA UNIVERSIDAD COMPLUTENSE DE MADRID
I RESUMEN En este trabajo de Fin de Grado se ha desarrollado una aplicación web llamada Fineance destinada a la comparación de rentabilidades y a la predicción de precios futuros de diversos activos financieros. En primer lugar, se lleva a cabo un Business Plan en el que se explican los objetivos del negocio, las principales necesidades que se desean cubrir y adicionalmente, se realiza un estudio de mercado desde una perspectiva externa e interna con el fin de identificar las principales oportunidades que ofrece Fineance. De esta manera, Fineance se posiciona como una aplicación que ofrece información financiera y la posibilidad de realizar una gran variedad de cálculos de rentabilidad, riesgo y predicciones a corto y largo plazo. Para su desarrollo, se han establecido una serie de requisitos tanto funcionales como no funcionales, sirviendo así de pauta para su implementación. La aplicación cuenta con un frontend que utiliza el marco de trabajo Vue y un backend que se desarrolla bajo el framework de Django, escogido por su compatibilidad con el lenguaje Python, en el cual se ha desarrollado la aplicación. Fineance se encuentra desplegada en el servidor Railway, al cual se puede acceder a través del enlace proporcionado: fineance.vercel.app. Palabras clave Finanzas, aplicación web, activos, rentabilidad, predicciones.
II ABSTRACT In this Final Degree project, a web application called Fineance has been developed for the comparison of yields and the prediction of various financial assets future prices. First, a business plan is conducted explaining the business objectives, the main needs that are desired to be covered, and additionally, a market study is carried out from an external and internal perspective to identify the main opportunities that Fineance could take advantage of. This way, Fineance positions itself as an application that offers financial information and the possibility of performing a wide variety of profitability, risk, and short and long-term prediction calculations. For its development, a series of functional and non-functional requirements have been established, serving as a guideline for the implementation. The application has a frontend that uses the Vue framework, and a backend developed under the Django framework, chosen for its compatibility with Python language in which the application has been developed. Fineance is deployed on the Railway server, which can be accessed through the provided link: fineance.vercel.app Keywords Finance, website, assets, profitability, predictions.
III ÍNDICE DE CONTENIDOS Capítulo 1 - INTRODUCCIÓN ........................................................................................... 1 Capítulo 2 - OBJETIVO Y METODOLOGÍA ........................................................................ 3 2.1 OBJETIVO ............................................................................................................... 3 2.2 METODOLOGÍA UTILIZADA ................................................................................... 4 Capítulo 3 - BUSINESS PLAN ............................................................................................... 6 3.1 FINEANCE .............................................................................................................. 6 3.2 MISIÓN, VISIÓN Y VALORES .................................................................................. 8 3.3 ANÁLISIS DEL ENTORNO GENERAL ....................................................................... 8 3.4 ANÁLISIS DEL ENTORNO ESPECÍFICO ..................................................................10 3.5 ANÁLISIS INTERNO ................................................................................................12 3.6 PRINCIPALES COMPETIDORES .............................................................................14 3.7 MAPA DE POSICIONAMIENTO ............................................................................14 Capítulo 4 - REQUISITOS ...................................................................................................16 4.1 REQUISITOS FUNCIONALES ..................................................................................16 4.2 REQUISITOS NO FUNCIONALES ............................................................................17 Capítulo 5 - CLASIFICACIÓN DE ACTIVOS FINANCIEROS ..............................................18 5.1 ACTIVOS DE RENTA FIJA ......................................................................................18 5.1.1 Letras del Tesoro ..................................................................................................18 5.1.2 Bonos y Obligaciones .........................................................................................19 5.1.3 Depósitos ..............................................................................................................21 5.2 ACTIVOS DE RENTA VARIABLE .............................................................................23 5.2.1 Bandas de Bollinger ............................................................................................23 5.2.2 Acciones ..............................................................................................................25
IV 5.2.3 Fondos de Inversión.............................................................................................28 5.2.4 Criptomonedas ...................................................................................................30 Capítulo 6 - CLASIFICACIÓN DE PASIVOS FINANCIEROS ...............................................33 6.1 HIPOTECAS ...........................................................................................................33 Capítulo 7 - ESTRUCTURA DEL PROYECTO .......................................................................35 7.1 FRONTEND ............................................................................................................35 7.2 BACKEND..............................................................................................................37 7.3 BASE DE DATOS ....................................................................................................41 7.4 FRONTEND TESTING ..............................................................................................43 7.5 BACKEND TESTING ...............................................................................................51 7.6 SEGURIDAD Y CONTRASEÑAS .............................................................................54 7.6.1 Cors .......................................................................................................................54 7.6.2 Seguridad en las contraseñas ............................................................................55 Capítulo 8 - INTELIGENCIA ARTIFICIAL .............................................................................57 8.1 MACHINE LEARNING ...........................................................................................57 8.2 FORECASTING ......................................................................................................58 8.2.1 Redes neuronales ................................................................................................58 8.2.2 Red LSTM ..............................................................................................................59 8.2.3 Modelo de regresión lineal .................................................................................72 Capítulo 9 - CONCLUSIONES ...........................................................................................79 Capítulo 10 - CONCLUSIONS ............................................................................................80 Capítulo 11 - CONTRIBUCIONES PERSONALES .....................................................................81 BIBLIOGRAFÍA ...……………………………………………………………………………………….. 90 Apéndice A - ANEXO .............................................................................................................99 - ALERTAS DE COMPRA/VENTA SEGÚN BANDAS DE BOLLINGER ........................99
V - PRUEBAS REALIZADAS TESTING DEL FRONTEND ................................................ 100 - DESCARGA DE DATOS FINANCIEROS ............................................................... 103 - DESPLIEGUE DE LA APLICACIÓN ....................................................................... 103 - ACCESO AL CÓDIGO ....................................................................................... 104 Apéndice B - CASOS DE USO............................................................................................... 105 - VISUALIZACIÓN DE PÁGINA INICIAL Y ACCESO A INFORMACIÓN DE ÍNDICE BURSÁTIL 105 - CALCULAR RENTABILIDAD DE ACTIVO/PASIVO DE RENTA FIJA ...................... 106 - CALCULAR RIESGO, RENTABILIDAD Y PREDICCIONES DE ACTIVO DE RENTA VARIABLE ........................................................................................................................... 108 - AÑADIR Y VISUALIZAR FAVORITOS .................................................................... 112
VI ÍNDICE DE ILUSTRACIONES Ilustración 1: Diagrama de gestión del proyecto ................................................................. 5 Ilustración 2: Logo de la compañía Fineance ...................................................................... 6 Ilustración 3: Mapa de posicionamiento de Fineance .......................................................15 Ilustración 4: Retenciones a aplicar sobre los depósitos en función del capital ..............22 Ilustración 5: Valores de Depósitos españoles ....................................................................22 Ilustración 6: Cálculo de la línea central ..............................................................................23 Ilustración 7: Cálculo de las bandas superior e inferior .......................................................23 Ilustración 8: Bandas de Bollinger para la acción ‘AACG’ .................................................24 Ilustración 9: Funciones de obtención de tickers del mercado americano .....................27 Ilustración 10: Funciones de obtención de información entre dos fechas de acciones de Apple ...............................................................................................................................27 Ilustración 11: Valores fondos de inversión obtenidos del símbolo “AAPL” .......................28 Ilustración 12: Valores símbolos fondos de inversión ...........................................................29 Ilustración 13: Biblioteca yfinance y función obtención de datos .....................................29 Ilustración 14: Valores fondos de inversión obtenidos del símbolo “AAAAX” ...................30 Ilustración 15: Biblioteca yfinance y función obtención de datos .....................................31 Ilustración 16: Valores criptomoneda obtenidos del símbolo “BTC” ..................................32 Ilustración 17: Arrancar la parte del frontend ......................................................................35 Ilustración 18: Arrancar la parte del backend .....................................................................38 Ilustración 19: Diagrama entidad relación de la base de datos .......................................41 Ilustración 20: Ejecución de la migración de las hipotecas ...............................................42 Ilustración 21: Ventana emergente de la interfaz gráfica de la herramienta Cypress ....43 Ilustración 22: Opciones para la realización de las pruebas en Cypress ..........................44
VII Ilustración 23: Test de carga de activos de renta fija .........................................................45 Ilustración 24: Test con nominal válido de 5000 unidades monetarias ..............................46 Ilustración 25: Test con nominal inválido de 2 unidades monetarias .................................47 Ilustración 26: Test de carga de página de activos de renta variable .............................47 Ilustración 27: Test carga de la página en menos de un segundo ....................................48 Ilustración 28: Visualización de la página en iPhone6 ........................................................49 Ilustración 29: Comprobar si la app está adaptada a personas con discapacidades ..50 Ilustración 30: Anterior pie de página del inicio ..................................................................50 Ilustración 31: Nuevo pie de página del inicio ....................................................................50 Ilustración 32: Test de carga de trabajo de la página de cálculo ....................................51 Ilustración 33: Fallo en test porque no está registrado el usuario en la base de datos ..52 Ilustración 34: Acierto en test porque se han encontrado los datos históricos .................53 Ilustración 35: Salida de los 11 precios predichos por el modelo .......................................54 Ilustración 36: Error en la predicción por introducir un símbolo erróneo ...........................54 Ilustración 37: Dominios permitidos por la configuración CORS ........................................55 Ilustración 38: Entradas y salidas de una Red neuronal recurrente ...................................59 Ilustración 39: Obtención de datos sobre la acción ‘AAPL’ desde enero de 2017 usando “yfinance” .......................................................................................................................60 Ilustración 40: Eliminación de los valores nulos del dataframe ..........................................60 Ilustración 41: Eliminación de datos negativos del conjunto de datos .............................60 Ilustración 42: Elección de variables a utilizar en el modelo ..............................................61 Ilustración 43: Normalización de los precios obtenidos ......................................................61 Ilustración 44: Creación de conjuntos de entrenamiento y test ........................................61 Ilustración 45: Creación de conjuntos de datos ..................................................................62 Ilustración 46: Creación de conjuntos de datos para las variables X e Y .........................62
VIII Ilustración 47: Transformación de los datos de los conjuntos .............................................62 Ilustración 48: Generación modelo LSTM .............................................................................63 Ilustración 49: Disminución del porcentaje de error de “loss” ............................................64 Ilustración 50: Predicción de la variable objetivo ................................................................64 Ilustración 51: Cálculo raíz del error cuadrático medio (RMSE) .........................................65 Ilustración 52: Predicciones obtenidas del modelo 1 ..........................................................67 Ilustración 53: Predicciones obtenidas del modelo 2 ..........................................................68 Ilustración 54: Predicciones obtenidas del modelo 3 .........................................................68 Ilustración 55: Predicciones obtenidas del modelo 4 .........................................................69 Ilustración 56: Predicciones obtenidas del modelo 5 ..........................................................69 Ilustración 57: Predicciones obtenidas del modelo 6 ..........................................................70 Ilustración 58: Predicciones obtenidas del modelo 7 ..........................................................70 Ilustración 59: Predicciones obtenidas del modelo 8 ..........................................................71 Ilustración 60: Predicciones obtenidas del modelo 9 ..........................................................71 Ilustración 61: Definición de los parámetros del modelo de predicción ...........................76 Ilustración 62: Extracción de la variable de estacionalidad ..............................................77 Ilustración 63: Definición del modelo SARIMAX ...................................................................77 Ilustración 64: Cálculo de las predicciones de los precios a 90 días .................................78 Ilustración 65: Visualización de la predicción de los precios de cierre de la acción ‘AAPL’ ..........................................................................................................................................78 Ilustración 66: Línea de precios rebasa la banda superior de Bollinger ............................99 Ilustración 67: Línea de precios rebasa la banda inferior de Bollinger ..............................99 Ilustración 68: Test de regresión del menú de navegación .............................................. 100 Ilustración 69: Visualización del menú de navegación ..................................................... 100 Ilustración 70: Test con nominal válido de 5000 unidades monetarias ............................ 101
4 2.2 METODOLOGÍA UTILIZADA Para el análisis, consecución de los objetivos y obtención de la conclusión final, se consultan fuentes de información con referente bibliográfico sobre sistemas, rentabilidades y riesgos de activos, forecasting y machine learning. Además de información secundaria proveniente de publicaciones, informes de innovación y tecnología, también se obtiene información primaria de estudios de investigación y memorias anuales a través de portales de búsqueda como Yahoo Finance, y motores de búsqueda como Google Academics. Se realiza un esfuerzo por mantener la objetividad en el análisis y para ello, se utilizan tanto datos cuantitativos como cualitativos, obtenidos a través de las fuentes encontradas en los motores de búsqueda. Se realiza un análisis pormenorizado de los diferentes activos y su rentabilidad y riesgo, basados en su desempeño histórico y pronósticos futuros, y se utilizan técnicas avanzadas de machine learning para mejorar la precisión de los resultados. Para garantizar la privacidad y seguridad de los datos de los usuarios, se implementa DB Browser for SQLite como sistema de base de datos y se asegura la protección y guardado adecuado de los datos extraídos y procesados en cada fase del análisis. Para el desarrollo del proyecto se ha adoptado la metodología ágil como enfoque para el proceso de desarrollo. La metodología ágil se centra principalmente en la colaboración continua y la retroalimentación frecuente con los clientes o usuarios de la aplicación web (Canós et al., 2003), lo que permite entregar soluciones innovadoras y eficientes en un ambiente de incertidumbre y cambio constante. Además, la metodología ágil se enfoca en la entrega incremental de productos y la resolución de problemas de manera rápida y efectiva (Cadavid et al., 2013). La planificación del proyecto se divide en varios Sprints cortos, de entre 1 y 4 semanas cada uno, en los cuales el equipo se reúne regularmente para revisar el progreso e identificar problemas y hacer ajustes en consecuencia. En el primer Sprint se hace una definición y se planifica el proyecto, se establecen sus requisitos y objetivos, y se hace una recopilación y lectura de la materia, este Sprint tiene una duración aproximada de 2 semanas. Posteriormente, en el Sprint 2 (1 semana) se identifica cuáles
5 son los recursos necesarios para implementar el proyecto, y se hace la elección de lenguajes y frameworks a utilizar, y adicionalmente la elección de los activos principales que se comparan en la aplicación. En el Sprint 3 (3 semanas) se monta la estructura de la aplicación. En el siguiente Sprint, el cuarto, se programa la aplicación completa, la duración de este sprint excede la media de 1-4 semanas, ya que tiene una duración de 7 meses. En paralelo se hace la redacción del documento del TFG según se hacen revisiones regulares de la aplicación. Por último, en el Sprint 5 se hace el testing, la corrección de errores, la actualización de los datos de la aplicación, y la revisión y correcciones del documento del TFG. La duración de este último Sprint es de 4 semanas. Ilustración 1: Diagrama de gestión del proyecto Fuente: Elaboración propia Al final de cada uno de ellos se ha hecho una exposición del prototipo del proyecto, obteniendo así un feedback gradual para mejorar el producto final. Gracias a ello se garantiza la calidad y la satisfacción del usuario en cada entrega, y se logra un producto final que cumpla con todas las especificaciones y requisitos deseados.
6 Capítulo 3 - BUSINESS PLAN A continuación, se desarrolla el plan de negocio para la empresa Fineance, nueva en el mercado. Para ello se describen las principales funcionalidades de la aplicación, se estudia el mercado de forma externa e interna para determinar su posicionamiento. 3.1 FINEANCE Fineance es una empresa que se enfoca en brindar una plataforma en línea para comparar la rentabilidad de diversos activos financieros disponibles en el mercado y predicciones acerca de precios futuros de los activos financieros mediante modelos de machine learning usando el histórico de precios de la acción. La aplicación utiliza tecnología avanzada, como herramientas de desarrollo de la interfaz de usuario y gestión lógica de la página, así como una base de datos, para apoyar la funcionalidad de la plataforma. La actividad principal de Fineance es proporcionar información valiosa a los usuarios sobre la rentabilidad de los activos financieros, permitiéndoles tomar decisiones de inversión. Fineance se posiciona como un líder en el sector financiero y tecnológico, brindando una plataforma eficiente y fácil de usar para los usuarios. Ilustración 2: Logo de la compañía Fineance Fuente: Elaboración propia Esta aplicación ofrece una serie de fortalezas que se han desarrollado teniendo en cuenta ciertas características del sector financiero, pudiendo destacar entre otras opciones semejantes: ● Permite acceder a una amplia y diversa selección de activos de renta fija y variable.
7 ● Proporciona información histórica de los activos, lo que permite mostrar su evolución a lo largo del tiempo. ● La información proporcionada es fiable y se encuentra actualizada. ● Muestra gráficos de los rendimientos actuales y la duración para los activos de renta fija y los pasivos financieros registrados lo que facilita una comparación visual. ● Proporciona predicciones o estimaciones del rendimiento futuro de un activo, tanto a largo plazo (tres meses) como a corto plazo (diez días). ● Realiza alertas en el caso de que algún activo variable atraviese el ancho de las bandas de Bollinger ese mismo día, creando una recomendación de venta si atraviesa la superior o de compra si es la inferior. Véase Ilustración 66 y 67 del apéndice. ● Facilita la búsqueda de activos variables mediante la posibilidad de buscar por símbolos, simplificando así este proceso. ● Ayuda a calcular las posibles ganancias que se pueden obtener con diferentes importes proporcionados por el inversor. ● Muestra la evolución de algunos de los principales índices bursátiles y su valor actual en el mercado. ● Facilita el seguimiento de uno de los pasivos financieros más relevantes del mercado, las hipotecas. ● Permite crear y personalizar una cartera de favoritos con los diferentes tipos de activos y pasivos disponibles en la aplicación. Se pueden incluir activos de renta fija con diferentes plazos, o activos de rentabilidad variable con sus respectivos símbolos identificativos, también conocidos como tickers. Los favoritos se almacenan en el perfil del usuario, lo que facilita el acceso rápido y la consulta directa a los datos. ● Sencilla de usar incluso sin conocimientos financieros.
8 3.2 MISIÓN, VISIÓN Y VALORES La misión principal de la empresa es proporcionar a los usuarios una herramienta intuitiva y eficiente para comparar la rentabilidad de diferentes activos financieros, brindando información valiosa y objetiva para tomar decisiones de inversión. La visión se centra en ser reconocidos como la plataforma líder en la industria financiera, brindando una experiencia única y plenamente satisfactoria para los usuarios, al mismo tiempo que fomentamos su crecimiento económico y éxito financiero. Los valores principales se basan en: - Innovación - Transparencia - Integridad - Satisfacción del cliente - Responsabilidad social - Efectividad 3.3 ANÁLISIS DEL ENTORNO GENERAL Para llevar a cabo un análisis exhaustivo del contexto y entorno en el que se encuentra Fineance, se han identificado seis factores que pueden tener un impacto significativo en la empresa. 1. Político: En el entorno político en el que opera la empresa, es crucial mencionar el papel de las leyes fiscales en vigor. Fineance, con sede en España, opera bajo las leyes impositivas españolas, destacándose la Ley 14/1985 sobre activos financieros, que establece la necesidad de reconocer y tributar por las rentas producidas de activos financieros y el principio de equidad que deben seguir estos activos financieros. (BOE, 1985). Además, existen tipos impositivos diferenciados por tramos en la compraventa de activos financieros, y una retención del 19% en los dividendos obtenidos de los activos financieros (Hernández, 2023).
9 2. Económico: En el contexto económico, es importante destacar un aumento en los niveles de interés, lo cual es el resultado de políticas monetarias más restrictivas. Asimismo, se ha observado un incremento en los niveles de interés de deuda soberana y en las primas de riesgo en los mercados de renta fija, tal como se menciona en el Informe de Estabilidad Financiera Español de otoño de 2022. Además, cabe destacar la apreciación del tipo de cambio del dólar en relación con el euro, lo que puede afectar las transacciones en diferentes divisas. El aumento de la inflación que están sufriendo España y EEUU, también aumenta el riesgo de recesión en dichas economías (Banco de España, 2022). 3. Social: En España, la educación financiera se encuentra en un nivel cercano a los de su entorno, aunque aún no alcanza los mismos. Solo el 50% de la población española considera que tiene la capacidad de manejar sus finanzas de manera efectiva (Universia, 2023). Es esencial analizar la estructura de ahorro de los ciudadanos españoles para comprender el mercado financiero del país. El ciudadano medio español no tiene inclinación por invertir en acciones o fondos de inversión, según El Economista, solo un 3% de la población invierte en estos activos financieros, mientras que un 39% prefiere mantener sus ahorros en cuentas corrientes y un 23% en metálico (Alonso, 2021). Por lo tanto, en términos sociales, la población española no es propensa a las inversiones en activos financieros y prefiere mantener sus ahorros en cuentas corrientes. 4. Tecnológico: En la banca española español, la digitalización ha tomado un papel importante, especialmente desde la pandemia. Durante el año 2021, más del 50% de los productos bancarios fueron contratados de forma digital lo que ilustra la importancia de la tecnología en el mercado financiero. Los puntos de atención física en la banca están disminuyendo, lo que sugiere que también esto se extenderá a las inversiones y dará lugar a la necesidad de plataformas en línea para obtener información e incluso realizar
10 inversiones, funciones que antes eran realizadas por los bancos. (KPMG Tendencias, 2021). 5. Ecológico: Este factor, no tiene especial relevancia en el contexto de la empresa ya que se trata de una aplicación que se desempeña íntegramente en un entorno digital. Se opera en un mercado en el que el factor ecológico y el medio ambiente no tiene gran relevancia para sus operaciones. 6. Legal: En el aspecto legal, destacan las leyes impositivas previamente mencionadas en el contexto político. Además, es importante destacar las leyes de protección de datos que aplican a los usuarios. La Ley Orgánica 3/2018, de 5 de diciembre, de Protección de Datos Personales y garantía de los derechos digitales establece las prácticas que se deben seguir a la hora de tratar datos personales conforme a la ley española y a las directivas europeas (BOE, 2018). 3.4 ANÁLISIS DEL ENTORNO ESPECÍFICO Se ha seguido el modelo estratégico de las cinco Fuerzas de Porter para llevar a cabo el análisis del entorno específico y evaluar la estrategia de negocio de la empresa en cuestión. 1. Entrada de nuevos competidores Fineance se encuentra en un mercado donde la entrada de nuevos competidores es relativamente sencilla, dado a que es un sector en auge donde toda la información financiera está disponible. Además, no se necesita de una gran inversión inicial para desarrollar una plataforma similar a la de Fineance. Sin embargo, el mercado se ha vuelto altamente competitivo debido a la gran cantidad de plataformas ya existentes que ofrecen este servicio o servicios muy similares, lo que ha reducido su atractivo.
11 2. Productos sustitutivos La amenaza de productos sustitutivos es moderada. Existen otras fuentes de información sobre inversiones disponibles más tradicionales, como los brokers, que pueden ser preferidos por algunos usuarios debido a la asesoría que brindan y su carácter complejo. 3. Competidores actuales El sector de las inversiones es sumamente muy amplio, abarca desde brokers, corredores de bolsa, gestores de fondos de inversión y asesores financieros, ya que actúan como intermediarios en la compra/venta de activos financieros brindando asesoramiento y orientación a personas o empresas que tengan interés en invertir, hasta plataformas como Fineance que proporcionan información disponible del mercado de valores donde cualquier individuo pueda consultarla. Debido a esta amplia gama de opciones, el sector es altamente competitivo, primando fundamentalmente la transparencia, la confiabilidad y la claridad. Finance, al ser simplemente una aplicación web donde poder visualizar y calcular las rentabilidades que se podrían obtener según los intereses de cada individuo, sin ningún interés propio ni comisión, cuenta con una competencia directa más reducida en comparación con otras plataformas ya mencionadas. Además, la capacidad de diferenciarse en términos de características y funcionalidades ayuda a competir en el mercado con más éxito que los rivales. 4. Poder de negociación de los proveedores El conjunto de plataformas que brindan información sobre todas las inversiones disponibles brinda este mismo servicio por lo que no necesitan de ningún proveedor que les dote de materias primas u otros materiales. Aparte, toda la información sobre los activos financieros que necesitan es pública, por lo que no necesitan de ningún proveedor que se la proporcione. Por último, a la hora de elegir los recursos tecnológicos necesarios, existe una amplia variedad de alternativas por las que optar, por lo que no dependen de un proveedor en específico que se los proporcione.
12 5. Poder de negociación de los clientes El poder negociador de los clientes es elevado ya que ellos mismos eligen donde consultar la información entre todas las plataformas existentes, lo que se traduce en que pueden presionar a las plataformas para exigir una mejora en la calidad de sus servicios o bien en la reducción de sus precios en aquellas donde se requiera de un pago. 3.5 ANÁLISIS INTERNO Para realizar el análisis interno se sigue el análisis DAFO, de manera que se puede realizar la evaluación de la situación financiera y operativa de la empresa con el fin de identificar sus fortalezas, debilidades, oportunidades y amenazas, con el objetivo de mejorar su eficiencia y rentabilidad. ➢ Debilidades: Imposibilidad de cubrir todos los activos financieros del mercado. No se trata de una aplicación de inversión o de formación de carteras, sino de información de inversión y cálculo de rentabilidades. No se tienen en cuenta factores externos como los desastres naturales que pueden llevar a que las comparaciones sean sesgadas y no se reflejen las condiciones actuales del mercado. Únicamente se tiene en cuenta el histórico de precios y la estacionalidad en las predicciones. ➢ Amenazas: Gran cantidad de inteligencias artificiales que están surgiendo cada día, siendo tan sofisticadas que podrían dejar a la aplicación obsoleta o incompleta en poco tiempo. Modificaciones en las leyes de protección o uso de datos. La aparición de nuevos competidores o productos sustitutivos podría tener un impacto en el mercado y en la aplicación Fineance.
13 Los cambios en las condiciones de mercado obligan a la página a mantenerse actualizada constantemente para no perder la confianza de los usuarios. El cambio de los patrones de inversión por parte de los usuarios obliga a la página a tener que adaptarse a esos cambios para no perder usuarios y relevancia en el mercado. ➢ Fortalezas: Facilidad de uso de la aplicación. Presencia de distintos tipos de activos en la misma página para el cálculo de las rentabilidades que da una buena imagen general de que tipo de activo podría ser el adecuado para el usuario. Enfoque en una necesidad real, es clave elegir los activos adecuados para obtener una rentabilidad óptima y un éxito financiero a largo plazo. Ahorro de tiempo para los usuarios ya que calcular las rentabilidades de los activos y compararlas puede llegar a ser una tarea tediosa. ➢ Oportunidades: Gran parte de la población española no tiene gran formación financiera, por lo que sirve de ayuda para poder tener una mejor visión de potenciales inversiones. La inteligencia artificial y el machine learning están en auge y tienen muchas posibilidades, pero por el momento, no hay muchas plataformas que ofrezcan este servicio de forma gratuita por lo que supone un nicho de mercado que aún no está cubierto. Potencial de crecimiento y expansión a medida que se incorporen más activos y opciones. En los últimos años se ha aumentado el interés en la inversión entre los consumidores, especialmente entre los más jóvenes, pudiendo aprovechar esta oportunidad para atraer más usuarios a la plataforma. Se pueden establecer alianzas estratégicas con empresas financieras para proporcionar información detallada y atraer nuevos usuarios.
20 Para efectuar los cálculos, se han seleccionado los valores de emisión de los cupones que se encuentran en vigor en ese momento, los rendimientos obtenidos son los observados en la (Tabla 2). Tabla 2: Valores en emisión de los Bonos y Obligaciones del Estado Fuente: (Tesoro Público, 2023c) El proceso de cálculo se lleva a cabo siguiendo el procedimiento descrito de la (Ecuación 2). Ecuación 2: Cálculo de la rentabilidad de los Bonos y las Obligaciones Fuente: (Universidad a Distancia de Madrid, (UDIMA), 2023) Estos parámetros representan lo siguiente: La i es conocida como la TIR (Tasa Interna de Rentabilidad) que representa la rentabilidad anual, Pa es el precio de adquisición del bono u obligación, Pv es su precio de venta o de amortización, N es el número total de cupones emitidos hasta el vencimiento de la operación, t los días que han transcurrido entre la compra y la venta, C es el importe bruto de cada cupón, y tj
21 los días transcurridos entre la fecha de valoración y vencimiento de cada cupón (Edufinet, 2023a). Los datos relativos a su emisión con plazos predeterminados también han sido extraídos del diario económico Expansión (Página web: Valores Bonos y Obligaciones) y almacenados en una base de datos para su posterior acceso, diferenciando entre Bonos y Obligaciones. Tabla 3: Valores Bonos y Obligaciones Fuente: (Expansión, 2013) 5.1.3 Depósitos A través de un depósito bancario, se realiza una inversión de capital por un período de tiempo preestablecido y acordado previamente con la entidad financiera, a una tasa de interés fija. Al finalizar este período, el inversor recibirá el 100% de su inversión inicial, junto con los intereses generados. Dado que el capital inicial se devuelve de forma íntegra, este tipo de inversión se considera uno de los activos más seguros en el mercado (precio.com, SunMedia, 2019). La manera de calcular los beneficios obtenidos es la siguiente: Beneficios = Capital Invertido * (rentabilidad / 12 meses) * duración en meses
22 No obstante, el rendimiento mencionado anteriormente no representa el beneficio total que se recibirá, ya que los depósitos están sujetos al pago de impuestos sobre las ganancias generadas (Martín, 2023). La retención aplicada varía en función del capital invertido, tal y como se puede observar en la (Ilustración 4). Ilustración 4: Retenciones a aplicar sobre los depósitos en función del capital Fuente: (Martín, 2023) Los datos relativos a los depósitos utilizados han sido extraídos de la aplicación web de Rankia (Página web: Comparador de Depósitos) filtrados por el país de emisión (España), han sido traspasados a un archivo con formato .csv y se han almacenado en una base de datos para su posterior acceso. Ilustración 5: Valores de Depósitos españoles Fuente: (Rankia, 2023)
23 5.2 ACTIVOS DE RENTA VARIABLE Los activos de renta variable son aquellos cuyo rendimiento depende del desempeño de la empresa o mercado, estando sujetos a un vencimiento determinado. Tanto la rentabilidad como el riesgo pueden llegar a presentar altos valores variando con el emisor del activo (Calero et al., 2018). 5.2.1 Bandas de Bollinger Para analizar los cambios en la tendencia de los precios de los diferentes activos, se usa como herramienta las Bandas de Bollinger (Alegre, 2022). Estas bandas también se visualizarán en las predicciones de los diferentes activos, tanto a corto como a largo plazo, pudiendo ofrecer información al inversor sobre si en el momento actual se recomienda comprar o vender un activo determinado. Se distinguen tres bandas que se calculan, de diferente manera, haciendo uso de la desviación estándar (Blanco Garzón, 2023): ● Banda media o línea central: Representa la línea móvil simple de los precios en un periodo específico, se han tomado como referencia 20 periodos. Para obtener su valor, se calcula la media de los últimos 20 precios que se encuentren en el histórico de precios de una determinada acción. Ilustración 6: Cálculo de la línea central Fuente: Elaboración propia ● Banda superior: Se calcula añadiendo dos veces la desviación estándar de la línea central, al valor de esta. ● Banda inferior: Se calcula restando dos veces la desviación estándar de la línea central, al valor de esta. Ilustración 7: Cálculo de las bandas superior e inferior Fuente: Elaboración propia
24 Se ha comprobado que el 95% de los valores de los precios obtenidos se encuentran dentro de las Bandas de Bollinger (Blanco Garzón, 2023), esto deriva en que un precio por encima o por debajo de las bandas sea algo muy significativo. En la (Ilustración 8) se puede observar los precios de cierre en color verde, las bandas superior e inferior en color morado y banda media en color amarillo. Ilustración 8: Bandas de Bollinger para la acción ‘AACG’ Fuente: Elaboración propia Estas bandas se usan para medir la volatilidad de los activos, siendo superior este valor cuanto más se expandan las bandas, e inferior cuanto más se contraigan. Si los precios de cierre se mueven hacia las bandas esto conlleva un aumento de la volatilidad del activo, mientras que cuando se acercan a la banda media se puede interpretar que existe una disminución de la volatilidad del activo (Alegre, 2022). Se generarán alertas como las de las (Ilustraciones 66 y 67 en el apéndice) para informar al usuario de la aplicación cada vez que la banda media sobrepase una de las bandas superior o inferior en el día actual. En el caso de que el precio de cierre de ese día rebase la Banda de Bollinger inferior, se recomendará al usuario comprar ese activo. En cambio, si la banda rebasada es la Banda de Bollinger superior, se recomendará vender dicho activo (Alegre, 2022). Estos valores no son usados para realizar predicciones futuras, pero son muy útiles a la hora de tomar decisiones de compraventa de activos.
25 5.2.2 Acciones Las acciones de una empresa son activos financieros que forman parte de su patrimonio. Quien adquiere acciones se convierte en socio y tiene deberes y derechos en la sociedad. En función del número de acciones que se posean y el tipo de estas, se obtienen ciertos derechos como el derecho a voto en juntas, la recepción de dividendos, la venta de estas, etc (GMB, 2022). Para poder analizar el funcionamiento y los cambios en el mercado en el que operan estos activos financieros existen los índices bursátiles. Estos índices son indicadores de referencia del funcionamiento de una agrupación de empresas en el mercado. (Banco Santander, 2021). Los principales índices bursátiles por regiones son (ING, 2022): a) Americanos: - Dow Jones Industrial Average: 30 mayores compañías de EE.UU. - SP500: 500 mayores empresas de la bolsa de NY. - Nasdaq: Empresas norteamericanas más importantes del sector tecnológico. b) Europeos: - Eurostoxx 50: Índice europeo más importante compuesto por las 50 mayores empresas en términos de capitalización y volumen de negocio. - IBEX 35: Índice de referencia español que agrupa a las 35 mayores empresas del país. - DAX 30: Índice de referencia alemán que reúne a las 30 principales empresas alemanas según su capitalización. - FTSE 100: Índice que agrupa a las 100 mayores empresas del Reino Unido.
26 Existen muchos otros índices bursátiles de referencia como el NIFTY 50 en la India, Nikkei 225 en Japón, etc. Todos ellos funcionan como indicadores del funcionamiento del mercado del país en el que operan las compañías que los componen. Para calcular la rentabilidad de las acciones, se debe comparar el valor de mercado de las acciones entre dos fechas distintas, que se toman como referencia de inicio y final del período en cuestión. Para obtener su valor se ha utilizado la siguiente fórmula: Ecuación 3: Cálculo de la rentabilidad de las acciones Fuente: (Edufinet, 2023b) donde VLt es el valor de mercado al final del periodo de inversión, y VL0 es el de mercado al inicio de la inversión. El resultado se expresa en forma de porcentaje y representa la variación porcentual del valor del fondo en el período analizado. Es importante tener en cuenta el riesgo o volatilidad que deriva de una compra de acciones, esto se refiere a la variación del precio de una acción a lo largo del tiempo. Una acción es más rentable a corto plazo si su volatilidad es alta, pero conlleva un mayor riesgo (Admirals, 2023). El procedimiento seguido es el siguiente: Ecuación 4: Cálculo del riesgo de las acciones Fuente: (Coll Morales, 2022) donde Xi es el valor de la rentabilidad de la acción, X es el valor de la rentabilidad media y N es el número total de acciones (Coll Morales, 2022). Los datos utilizados han sido extraídos haciendo uso de los valores sobre los índices bursátiles NASDAQ e IBEX 35. En el caso de NASDAQ, los datos sobre las acciones han sido obtenidos mediante la librería Yahoo_fin de Python, a través de las funciones
27 observadas en la (Ilustración 9). Cada una de ellas descarga una lista de tickers o símbolos de las empresas que componen cada uno de los índices. Ilustración 9: Funciones de obtención de tickers del mercado americano Fuente: Elaboración propia Los datos del IBEX 35 han sido extraídos de la página de Yahoo! Finance (Página web: Componentes IBEX 35) que contiene los datos sobre las principales empresas. Los componentes principales han sido añadidos en un archivo excel para su posterior incorporación en la base de datos. Todos los datos recogidos fueron introducidos en la base de datos en la tabla llamada fineance_stocksymbols para poder consultarlos posteriormente. La biblioteca yfinance de Python se utiliza para extraer los correspondientes valores de fecha, apertura, cierre, máximo y mínimo de cada una de las acciones a partir de su ticker. Ilustración 10: Funciones de obtención de información entre dos fechas de acciones de Apple Fuente: Elaboración propia En la (Ilustración 11) podemos observar los valores obtenidos al ejecutar la función de la (Ilustración 10) donde la palabra symbol se corresponde con el ticker de la acción de la que queremos obtener información.
28 Ilustración 11: Valores fondos de inversión obtenidos del símbolo “AAPL” Fuente: Elaboración propia 5.2.3 Fondos de Inversión Los fondos de inversión son instituciones de inversión colectiva (IIC). Son una cartera que agrupa distintos activos financieros, como renta fija, renta variable, derivados o cualquier combinación de estos. Al invertir en un fondo, te conviertes en propietario de una parte proporcional del mismo. Los fondos de inversión están administrados por empresas especializadas, conocidas como gestoras. Estas empresas se encargan de elegir los activos financieros que compondrán el fondo, en función de su política de inversión. Los inversores compran participaciones del fondo, y la gestora se encarga de invertir el dinero en los activos elegidos. Los inversores reciben rentabilidad en función del rendimiento del fondo (CNMV, 2023). La rentabilidad de los fondos de inversión se calcula según el procedimiento de la (Ecuación 3), mientras que el riesgo/volatilidad se calcula mediante la fórmula de la (Ecuación 4), ambos explicados en el apartado 6.2.1. Los datos relativos a los fondos de inversión han sido obtenidos de la página de Yahoo! Finance que contiene los símbolos de los fondos de inversión, junto con el nombre de la empresa (Página web: Principales fondos de inversión de hoy - Yahoo Finanzas). Han sido descargados en formato .csv para que puedan ser almacenados en la base de datos, específicamente, en la tabla denominada fineance_fundssymbols.
29 Ilustración 12: Valores símbolos fondos de inversión Fuente: (Yahoo Finance, 2023a) Los datos en relación con los fondos de inversión, como la fecha, el precio de apertura, el máximo, el mínimo y el precio de cierre se obtienen de la biblioteca yfinance de Python, haciendo una comparación con los símbolos almacenados en la base de datos, de la siguiente forma: Ilustración 13: Biblioteca yfinance y función obtención de datos Fuente: Elaboración propia
36 ● La carpeta cypress, que será detallada posteriormente en la documentación, es utilizada para las pruebas. ● La carpeta node_modules almacena todos los paquetes instalados por defecto al utilizar npm y aquellos adicionales instalados durante el desarrollo de la aplicación. Esta carpeta no es necesario incluirla en el repositorio Git, ya que las dependencias se especifican en el archivo package.json, por lo que solo se requiere un comando npm install para su instalación. Algunos de los paquetes instalados son bootstrap, que facilita el diseño de la aplicación web, echarts, que permite representar información sobre los activos financieros en forma de diagramas y gráficos, o los paquetes css como por ejemplo los módulos css-loader, css-select y css-tree que son módulos que se utilizan para procesar y manipular hojas de estilo CSS en aplicaciones de JavaScript. Cada uno de ellos tiene un propósito específico y se utiliza en diferentes partes del proceso de construcción de aplicaciones web. ● La carpeta src contiene los siguientes archivos clave para el funcionamiento de la aplicación: el archivo Api.js que se encarga de realizar las llamadas a la API, el archivo App.vue que define la configuración gráfica de la página de inicio, el archivo main.js que inicia la aplicación, y el archivo router.js que administra el enrutamiento de las diferentes páginas. Esta carpeta incluye cuatro subcarpetas, cada una con un propósito específico: ● La carpeta assets alberga todas las imágenes que se utilizarán en la aplicación para mejorar su diseño. ● La carpeta cálculos contiene el desarrollo matemático de las fórmulas para los cálculos que se desean realizar para cada activo o pasivo. ● La carpeta components almacena componentes de la interfaz de usuario, como botones y gráficos, que han sido diseñados como código y son de uso frecuente en el desarrollo. ● La carpeta views incluye las diferentes ventanas de la aplicación web que serán accesibles por el usuario para navegar por la aplicación.
37 Cada una de las carpetas mencionadas contiene archivos que están estructurados en tres secciones distintas. La primera sección se denomina template y es donde se lleva a cabo el diseño del componente en HTML. La segunda sección se llama script y alberga toda la lógica del componente, es decir, su funcionalidad completa. Finalmente, la tercera sección se llama style y es donde se incluyen los estilos aplicables a la página, teniendo en cuenta los elementos especificados en la primera sección. 7.2 BACKEND El backend se desarrolla bajo el framework de Django. Se elige este framework debido a su compatibilidad con Python, lenguaje en el que se programa esta parte del proyecto. Este lenguaje aporta las librerías necesarias para realizar las predicciones de activos futuros usando machine learning. Para crear el “esqueleto” de la aplicación se ha seguido el siguiente procedimiento: Primero, se ha utilizado la herramienta de django-admin para la creación de la carpeta del proyecto. A continuación, mediante el comando python3 manage.py startapp catalog se ha creado una carpeta nueva con los ficheros específicos para la aplicación (Mozilla, 2023). Si se quieren añadir automáticamente algunos modelos de administración de la aplicación web se ejecutan los comandos python3 manage.py makemigrations, y python3 manage.py migrate (Mozilla, 2023). En la ejecución del proyecto de forma local, es necesario la disposición de un entorno virtual. El entorno virtual permite tener varios proyectos bajo el framework de Django con versiones específicas de Python y librerías y paquetes aislados para el proyecto (DreamHost, s.f.). Cada desarrollador del proyecto debe instalar su propio entorno virtual, ya que, si se utiliza un entorno virtual creado por otro usuario, se corre el riesgo de aparición de problemas en la instalación de nuevos paquetes y ejecución de paquetes ya existentes. Para instalar un entorno virtual, se debe ejecutar python -m venv <nombre del entorno virtual>, una vez creado, es posible instalar los paquetes necesarios de forma manual o utilizar un archivo requirements.txt, el cual indica todos los paquetes y librerías necesarios para la ejecución del proyecto y su correspondiente versión a través del comando pip install -r requirements.txt.
38 Para arrancar la ejecución del backend, hay que situarse dentro de la carpeta llamada backendtfg y ejecutar el comando Scripts/activate para iniciar el entorno virtual. Una vez iniciado, se inicia accediendo a la carpeta backend con la ejecución del comando python manage.py runserver. Ilustración 18: Arrancar la parte del backend Fuente: Elaboración propia Dentro del proyecto, la carpeta backendtfg, está compuesta las siguientes carpetas (Macarena, 2022): ● La carpeta backend está compuesta por dos subcarpetas: ○ backend es la carpeta principal del proyecto y contiene la configuración general, incluyendo la configuración de la base de datos, la configuración de las aplicaciones, las configuraciones de autenticación y autorización, y otros archivos de configuración importantes. Los archivos incluidos más significativos son los siguientes: ■ El archivo init.py es un archivo vacío que se utiliza para indicar que la carpeta en la que se encuentra es un paquete de Python. ■ El archivo settings.py es un archivo de configuración que se utiliza para configurar el proyecto de Django. Contiene configuraciones para la base de datos, el servidor web, las aplicaciones, la seguridad y otros aspectos importantes del proyecto. ■ El archivo urls.py es un archivo que se utiliza para definir las URL del proyecto. Contiene un mapa de URL que asocia las URL de las solicitudes del usuario con las vistas que se encargan de procesar
39 esas solicitudes. También se pueden definir patrones de URL, como expresiones regulares, para manejar diferentes tipos de URL. ○ fineance es una de las carpetas de la aplicación. En ella, se encuentran los modelos, vistas, plantillas y archivos estáticos específicos de la aplicación del proyecto. En esta carpeta hay varios archivos, los más significativos son los siguientes: ■ El archivo admin.py para registrar los modelos de Django en la interfaz de administración que viene incluida en Django y permite a los administradores gestionar y editar los datos del sitio. ■ El archivo apps.py para configurar la aplicación de Django. Contiene información sobre el nombre de la aplicación, la etiqueta de la aplicación, la ruta de la aplicación, etc. ■ El archivo models.py para definir los modelos de datos de la aplicación. Los modelos son clases de Python que representan tablas de la base de datos y que definen los campos y las relaciones entre los datos. ■ El archivo tests.py para escribir pruebas unitarias para la aplicación que se realizan para asegurarse de que el código funciona correctamente y de que se cumple con las especificaciones del proyecto. ■ El archivo views.py para definir las vistas de la aplicación. Las vistas son funciones de Python que manejan las solicitudes del usuario y que se encargan de generar las plantillas HTML con los datos adecuados. ■ El archivo serializers.py para definir los serializadores de la aplicación. Los serializadores son clases de Python que se utilizan para convertir los modelos de Django en formatos de datos que se pueden enviar a través de la red, como por ejemplo JSON.
40 ○ El archivo de Python manage.py se utiliza para administrar el proyecto de Django. Se utiliza para realizar tareas como iniciar el servidor, ejecutar pruebas y migrar la base de datos. Además, se puede utilizar para crear nuevas aplicaciones dentro del proyecto. ○ El archivo db.sqlite3 contiene la estructura y los datos de la base de datos utilizada para el proyecto. ● La carpeta Lib almacena bibliotecas y módulos de terceros que no son parte del código base de Django. Estas bibliotecas y módulos de terceros pueden ser importados a otros archivos de código para agregar funcionalidad adicional al proyecto. Para instalar todas estas librerías de forma conjunta, se usa un archivo llamado requirements.txt que contiene todos los paquetes necesarios para la ejecución del proyecto. Algunos de los paquetes instalados son yfinance y yahoofinancials, para obtener datos sobre los activos financieros, matplotlib para visualizar datos de manera gráfica, y tensorflow para el desarrollo de la parte de Machine Learning. ● La carpeta Scripts almacena scripts de automatización de tareas relacionadas con el proyecto. Estos scripts pueden ser utilizados para tareas como realizar copias de seguridad de la base de datos, cargar datos iniciales en el sistema o automatizar pruebas y depuración. Por ejemplo, el script activate, incluido en la carpeta, se utiliza para activar un entorno virtual de Python en el que se pueden instalar bibliotecas y dependencias específicas del proyecto. Para activar este entorno, es necesario usar el comando Scripts/activate. ● La carpeta share almacena archivos compartidos que se utilizan en todo el proyecto. Estos archivos pueden incluir plantillas HTML, archivos de configuración, imágenes y otros recursos.
41 7.3 BASE DE DATOS Es necesaria una base de datos para poder usar el backend, en este caso SQLite. El diagrama entidad relación de la base de datos es el siguiente: Ilustración 19: Diagrama entidad relación de la base de datos Fuente: Elaboración propia
42 En la base de datos, para cada activo de renta variable existe una única tabla que lo representa. Sin embargo, para cada activo de renta fija, como los bonos, obligaciones y letras del tesoro, hay varias tablas que representan los diferentes plazos o duraciones de estos activos. Por ejemplo, las obligaciones tienen cuatro tablas diferentes en la base de datos, una para obligaciones con plazo de 10 años, otra para obligaciones con plazo de 15 años, otra para obligaciones con plazo de 30 años y otra para obligaciones con plazo de 50 años. Cada tabla contiene la información específica de las obligaciones correspondientes a su plazo o duración. De esta manera, es sencillo acceder a la información específica de cada activo de renta fija en función de su plazo o duración, lo que facilita el análisis y la toma de decisiones en cuanto a la inversión en estos activos. Para actualizar la estructura de la base de datos cada vez que se hacen cambios en los modelos en la aplicación se ha hecho uso de las migraciones en Django. Las migraciones actualizan la base de datos de manera automática y sin necesidad de crear o modificar tablas manualmente y guardan un registro de los cambios hechos en la estructura de la base de datos. Se definen dos pasos para realizar las migraciones, primero, definir los modelos, clases de Python que definen los campos y relaciones de la base de datos, y segundo, crear y aplicar las migraciones para actualizar la estructura de la base de datos. Este procedimiento se lleva a cabo mediante los comandos python manage.py makemigrations que detecta los nuevos modelos que han sido creados, y python manage.py migrate que aplica las migraciones que han sido encontradas. En la (Ilustración 20) podemos ver la ejecución de una migración del activo de hipotecas. Ilustración 20: Ejecución de la migración de las hipotecas Fuente: Elaboración propia
43 7.4 FRONTEND TESTING Para esta parte de testing, se ha utilizado la herramienta Cypress, usada para realizar tests en una aplicación web. Permite realizar una gran cantidad de tests distintos para asegurar que se están usando las mejores prácticas para la construcción de la aplicación y probando que el desarrollo es correcto (Cypress, 2023). Primero, se instala la herramienta mirando como se hace su instalación en Vue. Una vez instalada, para ejecutarla, el usuario se sitúa dentro de la carpeta frontendtfg y se ejecuta el siguiente comando npm run cypress:open, de esta manera, se abrirá una ventana de la aplicación preguntando por el tipo de testing que queremos realizar, que en este caso el elegido ha sido E2E Testing. Este tipo de testing, se basa en entrar a la aplicación y realizar acciones a través de la interfaz simulando como lo haría un usuario real (Cypress, 2023). Ilustración 21: Ventana emergente de la interfaz gráfica de la herramienta Cypress Fuente: Elaboración propia Una vez escogido el tipo, se puede abrir la app en el navegador que se elija de los cuatro que tienen disponibles que son Chrome, Edge, Electron y Firefox. Normalmente, se ha elegido Chrome para la visualización de las pruebas.
44 Ilustración 22: Opciones para la realización de las pruebas en Cypress Fuente: Elaboración propia Todas estas pruebas están albergadas dentro de la carpeta frontendtfg en una nueva subcarpeta llamada cypress. Esta carpeta incluye otras cuatro subcarpetas, cada una con un propósito específico (De Martinis Pacif, 2022): ● La carpeta downloads guarda los posibles archivos que pueden ser descargados cuando se ejecuta alguna de las pruebas automatizadas. ● La carpeta e2e contiene todos los archivos que se han creado para la realización de las pruebas, es decir, todos los tests que se van a ejecutar. Todos los archivos dentro de esta carpeta tienen la extensión .js. Se encuentra subdividida en carpetas que contienen los diferentes tipos de tests realizados. ● La carpeta fixtures contiene archivos de datos de prueba que pueden ser necesarios en algún momento para los propios archivos de prueba. Los archivos que contiene tienen una extensión .json. ● La carpeta support contiene los archivos de soporte que sean necesarios para la realización de las pruebas. El archivo denominado commands.js contiene el único plugin que ha sido instalado, llamado cypress-axe. Esta extensión se usa para realizar las pruebas de accesibilidad del código de la página. En cuanto a los tests realizados, se pueden dividir las pruebas realizadas en funcionales y en no funcionales. Las pruebas funcionales se basan en la funcionalidad
45 del software, es decir, en que la aplicación funcione según lo esperado, y las pruebas no funcionales se basan en evaluar ciertos aspectos de la aplicación como el rendimiento, usabilidad, seguridad, etc. (Canelo, 2021). A raíz de esta distinción, se agrupan las pruebas realizadas en estos dos grandes grupos, y se separan en cada uno de los distintos tipos de cada grupo. Las pruebas funcionales que se han aplicado en el proyecto son las siguientes (Canelo, 2021): ● Pruebas para verificar la carga de las páginas. Con estos tests se verifica que la página principal se ha cargado correctamente, al igual que otras subpáginas se carguen también. Asimismo, se verifica que todos los elementos de la página estén presentes. Ejemplo: Verificar la carga adecuada de la página correspondiente a la renta fija, así como también de todas las subpáginas de activos, verificando que se visualicen de manera íntegra sus respectivos títulos. Ilustración 23: Test de carga de activos de renta fija Fuente: Elaboración propia ● Pruebas para comprobar que la aplicación no deje de funcionar si se producen cambios en el código o actualizaciones. Asegura el correcto desempeño de la aplicación en todo momento.
52 Algunas de las pruebas realizadas tienen los siguientes objetivos: ● Pruebas para detectar errores en el código que se realizan en pequeñas partes. Ejemplo: Realizar un test para el modelo de Login en el que se han definido seis casos de prueba. Cada uno de ellos verifica una de las propiedades de esta función, como la etiqueta del campo “password” o si su longitud máxima no supera los 30 caracteres. Este caso de prueba también incluye otro método que hará que no se pase el test en caso de que se introduzca un correo electrónico no registrado. Ilustración 33: Fallo en test porque no está registrado el usuario en la base de datos Fuente: Elaboración propia ● Pruebas para verificar que los datos históricos de los diferentes activos están siendo descargados correctamente de Yahoo Fineance. Ejemplo: Descargar los datos de Yahoo Finance de la acción con el símbolo específico “AACG” verificando que se han cargado de manera exitosa al comprobar si la longitud de los datos es mayor que cero, de lo contrario, la prueba fallará. Igualmente, el test fallará si no existiese dicha acción.
53 Ilustración 34: Acierto en test porque se han encontrado los datos históricos Fuente: Elaboración propia ● Pruebas para verificar que los objetos de Python se transformen correctamente en objetos JSON, esto se consigue gracias a los serializers (Keith-Magee, 2023). Ejemplo: Realizar un test del serializer del usuario para verificar que los datos se pasan en un formato que se pueda enviar y almacenar en la base de datos. Al pasar el test sin errores, se comprueba que los datos se están transformando de manera correcta. ● Pruebas para comprobar que se obtengan datos precisos y coherentes en las predicciones de los precios de cierre usando diferentes modelos de Machine Learning. Ejemplo: Comprobar que para la acción de Apple con el símbolo específico "AAPL" se obtengan los precios de predicción de cierre para los próximos 10 días usando el modelo de redes neuronales. El test comprueba que se devuelvan 11 precios predichos, los de los próximos 10 días y el precio actual de la acción. También se examina si los precios son números positivos y si los precios que han sido predichos están en orden ascendente.
54 Ilustración 35: Salida de los 11 precios predichos por el modelo Fuente: Elaboración propia Asimismo, este test también agrega una condición de fallo si se intenta hacer una predicción de un símbolo que no existe. Ilustración 36: Error en la predicción por introducir un símbolo erróneo Fuente: Elaboración propia 7.6 SEGURIDAD Y CONTRASEÑAS Dentro de una aplicación, la seguridad es importante. Las filtraciones de datos pueden dañar severamente al negocio y poner en un compromiso a los clientes y usuarios que apuestan por ella. 7.6.1 Cors La aplicación está compuesta en dos partes. La primera parte es el backend, el cual gestiona los accesos a la base de datos de SQLite3, y ejecuta el código de los cálculos de las rentabilidades, riesgos, bandas de Bollinger, etc. y los cálculos de las
55 predicciones de precios futuros. La segunda parte es el frontend que contiene la parte visual de la aplicación, llamadas a la API, y todas las funcionalidades mínimas. Ambas partes interactúan entre ellas y envían y reciben datos a través de peticiones GET y POST, y respuestas de tipo JSON y HTTP. Ambas partes de la aplicación se encuentran en dominios distintos. Por defecto, los navegadores bloquean peticiones de distintos orígenes por motivos de seguridad, el CORS, por medio de encabezado, permite peticiones entre dominios distintos (Silas, 2019). Para poder realizar peticiones entre ambas partes en la aplicación web se han configurado las cabeceras CORS en el proyecto y la configuración de seguridad de CORS en Django, con su correspondiente middleware. Los encabezados de CORS han sido habilitado instalando CORS mediante el comando pip install django-cors-headers, agregando corsheaders a la sección de aplicaciones instaladas y corsheaders.middleware.CorsMiddleware a la sección middleware en el script settings.py. Finalmente, para permitir el acceso a todos los dominios, ha sido definida la variable CORS_ORIGIN_ALLOW_ALL a True (Barcelona Geeks, 2023). Por último, se ha creado una lista de hosts permitidos, en este caso, http://localhost:8080/ y la dirección del servidor como únicos hosts permitidos debido a que la aplicación se ejecuta de forma local. Esto permite, que las peticiones a la API desde el frontend de Vue se realicen de manera exitosa, y el navegador no restrinja estas peticiones, evitando que otros dominios puedan realizar peticiones al backend. Ilustración 37: Dominios permitidos por la configuración CORS Fuente: Elaboración propia 7.6.2 Seguridad en las contraseñas Las contraseñas son uno de los datos más sensibles que se almacenan de los usuarios de la aplicación. Para evitar filtraciones de contraseñas, y restringir la visualización de las contraseñas de los usuarios por parte de los administradores de la base de datos, las contraseñas son cifradas. El cifrado de contraseñas consiste en la
56 transformación de la cadena de caracteres introducida por el usuario en otra cadena ininteligible, a través de algún algoritmo de cifrado. Esta cadena es lo que se almacena en la base de datos, y se revierte el proceso de cifrado en la comprobación de la contraseña para poder realizar procesos como el login en la aplicación. El cifrado de contraseñas se ha realizado a través de la siguiente librería de Django, django.contrib.auth.hashers, que realiza el cifrado de contraseñas usando el algoritmo SHA256, y crea una cadena no inteligible a la vista con la siguiente estructura: <algoritmo>$<iteraciones>$<salt>$<hash>
57 Capítulo 8 - INTELIGENCIA ARTIFICIAL La inteligencia artificial es una rama de la informática que intenta simular el aprendizaje y la inteligencia humana a través de software para que el ordenador pueda realizar tareas de forma independiente imitando cualidades de los seres humanos como el razonamiento, el aprendizaje o la creatividad a través de datos proporcionados y modelos para lograr el aprendizaje de la máquina (Parlamento Europeo, 2021). 8.1 MACHINE LEARNING Machine Learning es una técnica de inteligencia artificial usada para crear algoritmos que son entrenados a partir de una serie de datos (Iberdrola, s.f.), y se encargan de detectar patrones para ser capaz de realizar predicciones o tareas de forma autónoma en base a los datos de entrenamiento y los patrones detectados en la ejecución del algoritmo (Pombo Nartallo, 2022). Para la correcta definición de un algoritmo de este tipo de inteligencia son seguidos los siguientes pasos (Velogig, 2018): 1. Recopilación de datos. 2. Preparación de los datos. - Eliminación de datos duplicados. - Formato de datos correcto. - Eliminación de valores atípicos. - Eliminación de datos nulos. 3. Elección del algoritmo. 4. Preparación de los conjuntos de datos de entrenamiento y test. 5. Entrenamiento del algoritmo elegido. 6. Aplicación del algoritmo. 7. Evaluación del algoritmo.
58 8.2 FORECASTING El concepto forecast hace referencia a la predicción del tipo de información que sea (Arsys, 2021), en este caso, se realizará una predicción de los precios futuros de los activos de renta variable a través de los datos históricos obtenidos de cada uno de ellos. Se han utilizado dos tipos de algoritmos para la predicción de precios de los activos: ● Redes neuronales LSTM ● Modelo SARIMAX de regresión 8.2.1 Redes neuronales Este tipo de algoritmo se basa en una serie de nodos conectados entre sí, formando la red neuronal, los nodos forman una estructura similar al cerebro humano, permitiendo la interpretación de los datos de entrada y salida mediante conexiones que se establecen de forma no lineal trabajando en conjunto para resolver situaciones complejas (Amazon Web Services, s.f.). Estas redes procesan datos, comenzando en los nodos de entrada, y terminando por los nodos de salida (Amazon Web Services, s.f.). Dentro de estos algoritmos encontramos la siguiente clasificación: ● Recurrentes ● No recurrentes En el caso de las redes neuronales recurrentes, el algoritmo tiene la capacidad de recordar entradas anteriores, podemos decir por lo tanto que el algoritmo tiene memoria, convirtiéndose en una herramienta de aprendizaje automático (KeepCoding, 2023). Estas redes envían valores de salida a la entrada del nodo, de forma que, el nodo recibe información del nodo anterior, y la salida que el propio nodo ha producido. Esta información se va propagando, pero no solamente se propaga hacia adelante, sino que guarda información importante sobre la salida, que provoca que cada nodo tenga cierta memoria sobre los pasos siguientes del proceso (Torres, 2019). Estas redes están compuestas de dos entradas, el dato actual y la activación anterior, y de dos salidas, la predicción y la activación actual. A esta última, también se le llama estado oculto, y es la información que guarda la memoria, y que permite transmitirla entre distintos periodos de tiempo (M. Sotaquirá, 2019).
59 Ilustración 38: Entradas y salidas de una Red neuronal recurrente Fuente: (M. Sotaquirá, 2019) Al igual que otros modelos de inteligencia artificial, para poder predecir, estas redes necesitan un conjunto de datos de entrenamiento. 8.2.2 Red LSTM Las redes LSTM son un tipo de red neuronal recurrente, que incluye una memoria no solo a corto plazo, como las redes neuronales recurrentes tradicionales, sino a largo plazo, siendo muy útiles en la detección de patrones y tendencias (J. Sotaquirá, 2019). Las redes se componen de una serie de celdas. Las celdas están conectadas entre ellas, y la información fluye entre ellas de forma secuencial. Cada una de las celdas tiene tres puertas, de entrada, de salida, y de olvido. Estas puertas controlan qué información entra y sale de la celda (J. Sotaquirá, 2019). Se consigue guardar información sobre las celdas LSTM en los distintos periodos de tiempo, lo que permite tener información de todo el proceso, y, por lo tanto, memoria a largo plazo de cada una de las etapas del algoritmo de predicción, y de este modo guardar tendencias y patrones útiles en las predicciones posteriores (J. Sotaquirá, 2019). Para el desarrollo del proyecto Fineance, se ha aplicado una red LSTM para realizar las predicciones en el corto plazo. Para ello, se han seguido una serie de pasos: 1. Obtención de los datos: Los datos usados para realizar las predicciones han sido obtenidos de la biblioteca yfinance de Python. Esta biblioteca proporciona el histórico de precios de los activos financieros para los que se realizan las predicciones.
60 Ilustración 39: Obtención de datos sobre la acción ‘AAPL’ desde enero de 2017 usando “yfinance” Fuente: Elaboración propia Todos los datos obtenidos son guardados en un dataframe, en este caso llamado df, en un formato tabla de dos dimensiones a través de la biblioteca Pandas de Python. 2. Limpieza de los datos: Con el objetivo de realizar pronósticos a corto plazo empleando la red neuronal LSTM, se ha seleccionado un conjunto de datos correspondiente a los últimos cinco años aproximadamente. Esta decisión se ha tomado con el fin de optimizar la eficiencia del modelo y, por ende, de la aplicación. Asimismo, se busca evitar la influencia de tendencias pasadas que ya no inciden en el comportamiento del activo financiero en la actualidad. Una vez obtenidos los datos es necesario tratarlos para evitar valores anómalos o nulos que puedan afectar a la eficiencia y precisión del modelo. Se han llevado a cabo los siguientes pasos para la limpieza de datos: ● Eliminación de valores nulos o vacíos: Usando el método dropna() que se encarga de eliminar todos los valores nulos que encuentre (pandas, 2023), incluido en la librería de Pandas. Ilustración 40: Eliminación de los valores nulos del dataframe Fuente: Elaboración propia ● Eliminación de valores negativos: El objetivo es descartar todos los datos negativos que contenga el histórico del activo para evitar que puedan sesgar el comportamiento actual sobre dicho activo. Ilustración 41: Eliminación de datos negativos del conjunto de datos Fuente: Elaboración propia
61 ● Selección de las variables a utilizar: Se escoge el conjunto de valores del activo sobre el que se va a realizar la predicción. Ilustración 42: Elección de variables a utilizar en el modelo Fuente: Elaboración propia ● Escalado de las variables: Se normalizan los datos para que sea más sencilla su interpretación, utilizando por defecto las reglas definidas en la función StandardScaler(). Ilustración 43: Normalización de los precios obtenidos Fuente: Elaboración propia El conjunto de datos se ha fragmentado en dos partes, generando un conjunto de entrenamiento para pruebas con el objetivo de evaluar la eficiencia del modelo. No obstante, dado que se están realizando predicciones futuras de los precios de los activos financieros, se requiere utilizar los precios más recientes de la serie para entrenar el modelo. Por lo tanto, el modelo se entrena únicamente con datos hasta la fecha actual y no existe un conjunto de test. Para llevar a cabo las pruebas del modelo se hace uso de una división de datos específica: el 80% de los datos obtenidos se utilizan para entrenar el modelo, mientras que el 20% restante se reserva para comprobar el rendimiento y ajustar el modelo. Primero se entrena el modelo con los datos del conjunto de entrenamiento, denominado train. Ilustración 44: Creación de conjuntos de entrenamiento y test Fuente: Elaboración propia
68 Ilustración 53: Predicciones obtenidas del modelo 2 Fuente: Elaboración propia Entre el modelo 3 y el modelo 4 se puede observar una gran diferencia en el tiempo de ejecución, teniendo este un valor muy extenso en el modelo 4. Esto es debido a que el modelo se entrena el doble de veces que en el modelo 3. Ilustración 54: Predicciones obtenidas del modelo 3 Fuente: Elaboración propia
69 Ilustración 55: Predicciones obtenidas del modelo 4 Fuente: Elaboración propia En el caso del modelo 5, el entrenamiento se realiza un número muy reducido de veces, eso hace que las predicciones no salgan en un color naranja tan concentrado debido a que se está realizando un número menor de predicciones. Esto genera que las predicciones obtenidas no sean tan precisas. Ilustración 56: Predicciones obtenidas del modelo 5 Fuente: Elaboración propia En los resultados obtenidos de los modelos 6 y 7 se observa que una diferencia en los valores de las ventanas mantiene un resultado similar en cuanto al cálculo del error del modelo. Sin embargo, cuanto más elevada sea la ventana de días, más amplia será
70 la visión del comportamiento histórico de los datos, pudiendo generar resultados más precisos en el largo plazo, pero menos precisos en el corto plazo. Ilustración 57: Predicciones obtenidas del modelo 6 Fuente: Elaboración propia Ilustración 58: Predicciones obtenidas del modelo 7 Fuente: Elaboración propia Por último, al variar el número de neuronas de la red en los modelos 8 y 9, el modelo 8, el cual cuenta con 100 neuronas, se ajusta muy bien a los datos, pero puede sufrir sobreajuste, además aumenta el tiempo de entrenamiento del modelo. Al contrario que en el modelo 9, el cual cuenta con 25 neuronas, y aumenta el error de forma considerable, no siendo tan efectivo en el reconocimiento de tendencias y patrones.
71 Ilustración 59: Predicciones obtenidas del modelo 8 Fuente: Elaboración propia Ilustración 60: Predicciones obtenidas del modelo 9 Fuente: Elaboración propia Teniendo en cuenta el error medio de las predicciones del modelo, el tiempo de ejecución, y la precisión de las estimaciones del conjunto de test en relación con los precios reales, el modelo escogido es el Modelo 3. Esto se debe a que es el modelo con el que se obtiene un menor error en las predicciones, y el tiempo de entrenamiento del modelo es inferior a 2 minutos. Este tiempo de espera es perfectamente asumible en la aplicación. En el gráfico de la (Ilustración 52) se puede visualizar que las predicciones del conjunto de test se ajustan a los precios reales con gran precisión. Tras la comparación de modelo con distintas variables, se llega a la conclusión que el número óptimo de veces que se recorre el conjunto de datos de entrenamiento no debe ser superior a 60, ni menor de 30. Si el número es menor de 30, el modelo no
72 detecta bien los patrones y aumenta en valor de predicción, y si es mayor de 60, las tendencias del modelo sufren un sobreajuste y el error aumenta, provocando que las predicciones en los precios tengan tendencias muy marcadas en un corto periodo de tiempo. La ventana de datos óptima a utilizar para la predicción se ha establecido en 30 días, ya que, con una cifra menor, los datos no son suficientes para poder detectar patrones en el movimiento de la serie de forma adecuada, y conforme se aumenta esta ventana, el error del modelo va aumentando. Se establecen 2 capas para el modelo, ya que conforme se añaden capas, el error del modelo disminuye de forma poco significativa, pero el tiempo de entrenamiento y ejecución de las predicciones sufre un aumento considerable. El número de neuronas se establece en 50, para evitar sobre ajustes y disminución del rendimiento del modelo. 8.2.3 Modelo de regresión lineal Los algoritmos de regresión lineal son modelos estadísticos que predicen valores de una variable, llamada variable dependiente, en función de otras variables exógenas, llamadas variables independientes (MathWorks, s.f.). Los modelos de regresión lineal se basan en la siguiente fórmula: Ecuación 6: Cálculo regresión lineal Fuente: (MathWorks, s.f.) Existen distintos tipos de modelos de regresión lineal: ● Simple: El modelo utiliza una única variable para predecir los datos de la variable dependiente (MathWorks, s.f.). Se puede observar su procedimiento en la (Ecuación 6). ● Múltiple: El modelo utiliza varias variables para predecir los datos de la variable dependiente (MathWorks, s.f.).
73 Ecuación 7: Fórmula regresión lineal múltiple univariante Fuente: (Mathworks, s.f.) ● Simple multivariante: El modelo predice varias respuestas en función de una única variable independiente. Es decir, utiliza varias ecuaciones distintas, que producen salidas distintas en función de una única variable independiente. Por ejemplo, cuando se necesitan distintas salidas con distintos pesos para la variable independiente (MathWorks, s.f.). Ecuación 8: Fórmula regresión lineal simple multivariante Fuente: (Mathworks, s.f.) ● Múltiple multivariante: El modelo predice varias respuestas en función de varias variables independientes. Es decir, utiliza varias ecuaciones distintas, que producen salidas distintas en función de las variables independientes usadas. Por ejemplo, cuando se necesitan distintas salidas con distintos pesos para una o varias variables independientes (MathWorks, s.f.). Ecuación 9: Fórmula regresión lineal múltiple multivariante Fuente: (Mathworks, s.f.) Los modelos de regresión pueden usarse tanto para predecir valores de la variable dependiente, en función de las variables independientes para una serie de datos que proporcionamos al modelo, como para averiguar si existe una relación entre
74 las variables dependientes e independientes y cómo de fuerte es dicha relación (MathWorks, s.f.). 8.2.3.1 Modelos ARIMA, SARIMA Y SARIMAX Existen diversos modelos de regresión lineal que pueden ser utilizados. En el presente estudio se han seleccionado tres de ellos con el fin de determinar cuál es el más adecuado para el cálculo de predicciones. Se trata de modelos de regresión lineal univariante simple o múltiple en el caso de SARIMAX, el cual puede utilizar variables exógenas. ● ARIMA: Es un modelo estadístico que ayuda a predecir patrones futuros en un conjunto de datos. Utiliza la varianza y la regresión de datos estadísticos para hacer predicciones y se enfoca en patrones y relaciones en series de tiempo en lugar de variables independientes. Se supone que tanto la media como la varianza son estacionarias. No obstante, si estas no cumplen con tal supuesto, no se debe emplear el modelo ARIMA para realizar predicciones (Ortuño Lorente, 2017). Este modelo se compone de los siguientes parámetros, siendo importante su correcta elección porque en ello se basa el adecuado funcionamiento y precisión (González Sánchez, 2021): - p: Se trata del orden de términos autorregresivos (AR) de la serie. - q: Es el orden del término MA de la serie, es decir, número de veces que se aplica la operación de diferenciación para hacer que la serie sea constante en media y varianza. - d: Número de errores de la serie temporal que se utilizarán para predecir el valor futuro. ● SARIMA (Seasonal ARIMA): Modelo estadístico basado en el modelo ARIMA, pero con patrones estacionales. Se configuran los mismos parámetros que en el modelo ARIMA y además se añaden los siguientes parámetros (González Sánchez, 2021): - P: Factores estacionales autorregresivos.
75 - Q: Promedio móvil. - D: Diferenciación estacional. ● SARIMAX: Mismo modelo que el modelo SARIMA previo, con la diferencia de que se incluyen variables exógenas que pueden influir en el modelo (González Sánchez, 2021). Para el desarrollo del proyecto Fineance en el cálculo de las predicciones a largo plazo, se ha optado por usar modelos de regresión en lugar de redes neuronales. La razón se debe a que, al predecir valores a muy largo plazo, las redes neuronales tienden a estabilizarse en torno a un valor, lo cual reduce la eficacia de la predicción. Para definir el modelo de predicción se han seguido los siguientes pasos: 1. Obtención y limpieza de datos: La obtención y limpieza de los datos se realiza de la misma forma que en el modelo de redes neuronales LSTM. En primer lugar, son eliminados los valores nulos y valores negativos. Posteriormente, se escalan los datos, usando la función StandardScaler, que normaliza los precios. Se realiza una división en el conjunto datos, en datos de entrenamiento y testing. El 80% de los datos, serán datos de entrenamiento del modelo, y el 20% restante será utilizado como datos de prueba para comprobar la fiabilidad y el correcto funcionamiento del modelo. Una vez seleccionado el modelo y sus parámetros óptimos, se procede a entrenar el modelo con datos históricos de alrededor de los últimos 5 años. En este caso, no es necesaria la división en conjuntos de entrenamiento y prueba, ya que el modelo se entrena con los valores más recientes disponibles con el objetivo de mejorar las predicciones. 2. Elección del tipo de modelo adecuado: Para la selección del modelo de regresión se han considerado los tres modelos previamente descritos: ARIMA, SARIMA y SARIMAX. Entre ellos, se ha elegido el modelo SARIMAX para realizar el proyecto, en lugar del modelo ARIMA, dado que el modelo ARIMA es apropiado para modelos sin
76 estacionalidad, y se ha observado que algunos activos financieros presentan estacionalidad, lo que debe ser detectado por el modelo. Entre el modelo SARIMA y el SARIMAX, se ha seleccionado el segundo debido a que admite variables exógenas. Para poder solucionar el problema de la posible estacionalidad en los precios de ciertos activos financieros, en lugar de proporcionar parámetros preestablecidos para la estacionalidad, se introduce la estacionalidad como una variable exógena en el modelo. De este modo, si se detecta estacionalidad, esta será incorporada en el modelo. 3. Elección de los valores p, q, d: Una vez los datos han sido limpiados y procesados, se realiza la elección de parámetros del modelo. En este caso, los parámetros del modelo son elegidos usando la función auto_arima de la biblioteca pdarima que recorre el conjunto de datos y elige los mejores valores para los parámetros p, d y q del modelo. Esta función utiliza el criterio de información bayesiana, también conocido como BIC, para seleccionar el mejor modelo. A la hora de elegir los mejores parámetros, utiliza la bondad de ajuste y la complejidad del modelo para elegir el que resulte más adecuado. En caso de igualdad de condiciones, se priorizan los modelos más simples. El modelo proporcionado en la (Ilustración 61) ya contiene los valores más adecuados para el modelo según el criterio BIC. Ilustración 61: Definición de los parámetros del modelo de predicción Fuente: Elaboración propia ● Elección de valores P,Q,D,m: No se pretende establecer la estacionalidad de manera manual en el modelo, ya que esta puede variar según el activo financiero, e incluso puede no existir. Los valores de P, Q, D y m se han fijado en 1, con el fin de evitar que el modelo tenga la misma estacionalidad en todos los casos. Para calcular y añadir la estacionalidad al modelo, se descompone la serie histórica de precios en tres componentes distintos a través de la función
77 seasonal_decompose incluida en la biblioteca statsmodels de python (Lewinson, 2022). Esta función nos permite descomponer la serie en los siguientes componentes: - Tendencia - Estacionalidad - Residuo De los tres componentes, se obtiene la estacionalidad y es guardada en una variable, que posteriormente será usada en el modelo como variable exógena. Ilustración 62: Extracción de la variable de estacionalidad Fuente: Elaboración propia 4. Definición del modelo final: Usando los parámetros obtenidos en la variable model que proporciona la función autoarima, definimos el modelo SARIMAX. Se define el orden del modelo, es decir, los valores de los parámetros p, d y q, e introduciendo la variable exógena de la estacionalidad del modelo. Ilustración 63: Definición del modelo SARIMAX Fuente: Elaboración propia ● Cálculo de predicciones a largo plazo: Se realiza el cálculo de las estimaciones de precios. En este caso se ha establecido unas predicciones a futuro a 3 meses, por tanto, se solicita una predicción de los precios para los próximos 90 días. Esto quiere decir que se toman como referencia las últimas 90 observaciones de la variable exógena.
84 numpy. Por último, me he encargado de configurar el archivo tests.py que contiene todas las pruebas relacionadas con la parte del backend. - Testing: He desarrollado tanto el testing del backend como el del frontend. La parte del frontend requirió de un mayor tiempo debido a que me resultó más complicado seleccionar la herramienta que iba a usar y posteriormente investigar su uso, eligiendo Cypress como entorno para poder crear y visualizar los resultados de las pruebas. He dividido las pruebas en funcionales, como por ejemplo tests para comprobar el correcto funcionamiento de la aplicación, y en no funcionales, para evaluar aspectos como el rendimiento de la página. El mayor desafío de los tests del frontend fue que tenía que ir constantemente creándolos y modificándolos para que no fallasen. También fue difícil pensar en tests que realizasen cada uno de los requisitos que tenía en mente. Para la parte del backend me decanté por el uso del archivo test.py que ya era proporcionado por la propia aplicación de Django. En cuanto a código, estos tests han sido más difíciles de crear y de probar debido a que salían errores complejos, pero consiguiendo ejecutarlos finalmente con éxito. En general, esta ha sido una parte complicada para mi debido a que no tenía ningún conocimiento previo sobre el testing ni sus herramientas, por lo que he dedicado bastante esfuerzo y tiempo en seleccionar las herramientas y en crear los diferentes tests. - Memoria: He contribuido de manera activa a completar la memoria final, además de revisar los apartados escritos por mis compañeras y que ellas revisarán los míos. Primero comencé realizando la descripción de la mayoría de los activos de renta fija y de las hipotecas. Incluyendo también las distintas funcionalidades del trabajo y las fortalezas que proporciona Fineance. Cuando terminé de desarrollar la parte de los tests, documenté ambos procesos de testing, así como también el apartado en el que se explica el Frontend. Por último, me he encargado junto con mi compañera Alba, de desarrollar el apartado de Inteligencia Artificial. Desarrollar este punto ha sido complejo
85 para ambas ya que los procedimientos seguidos conllevan una complejidad técnica que es difícil de explicar y poder plasmar de forma sencilla en el presente documento. ALBA MILLÁN GARCÍA Mi contribución al trabajo se compone de cinco partes: - Estructura del proyecto: En primer lugar, realicé la primera creación del proyecto. Comenzamos el proyecto creando el frontend de la aplicación en Vue. Para ello, creé un proyecto con la estructura básica de carpetas, y creé la página Home, que nos sirvió como guía para la adición de nuevas vistas y componentes de Vue. Una vez creada la carpeta se subió al repositorio para que todos los miembros pudieran realizar los cambios. Una vez el frontend estaba avanzado, creé una aplicación basada en el framework Django, por su compatibilidad en Python que nos serviría de backend para el proyecto y donde se desarrollan todas las funcionalidades más complejas de la aplicación, como los cálculos de rentabilidades, o las funciones de machine learning que realizan las predicciones, además de los accesos a la base de dato. En primer lugar, creé el proyecto Django con las carpetas estándar, y a continuación, un entorno virtual en el que poder instalar los paquetes necesarios a medida que la aplicación se iba desarrollando y volviendo más compleja. Posteriormente, creé un archivo requirements.txt con los paquetes iniciales requeridos en el proyecto para que mis compañeras pudieran instalarlos al crear su propio entorno virtual. - Frontend: He desarrollado la pantalla que lista las acciones, mediante llamadas a la API, y las correspondientes funciones de recuperación de datos en el backend. El mayor desafío que encontré en el desarrollo de las distintas pantallas de acciones ha sido la introducción de gráficos, tanto de líneas como de velas. Opté por la biblioteca echarts, por su alta compatibilidad con Vue.js, y la gran cantidad de tipos de gráficos que ofertaba. Implementé, con la ayuda de mi compañera June Zuazo, gráficos de líneas y de velas, que se actualizan con la actualización de los datos.
86 - Backend: En primer lugar, debíamos obtener información de los activos financieros a partir de los cuales queríamos realizar los cálculos y predicciones. Para poder lograrlo, primero obtuve los tickers o símbolos identificativos del mercado bursátil NASDAQ e IBEX, dos índices principales en los mercados español y estadounidense a partir de la biblioteca “yahoo_fin” de Python, y fueron almacenados en la base de datos, para poder acceder al histórico de datos de las acciones en función de estos. En un primer momento, comencé realizando “webscrapping” para obtener los precios actualizados de las acciones, sin embargo, finalmente, opté por usar la biblioteca “yfinance” para recuperar el histórico de precios de las acciones debido a la gran cantidad de información que podemos recuperar y la fiabilidad de esta. Mi función principal en el backend ha sido la definición de modelos de machine learning. Esta parte del proyecto ha sido particularmente complicada ya que era totalmente nuevo para mí, en primer lugar, por la dificultad para comprender los tipos de modelos existentes y en segundo lugar para encontrar unos parámetros correctos para lograr las mejores estimaciones posibles. Comencé por investigar los modelos de machine learning más adecuados para estimaciones de series temporales, y las opciones para su uso en Python. Me decanté por un modelo LSTM para las predicciones a corto plazo por su capacidad para reconocer patrones, y un modelo SARIMAX para las predicciones a más largo plazo, para un mejor reconocimiento de tendencias y evitar la estabilización de las predicciones del modelo. Realicé una serie de pruebas con distintos parámetros y finalmente escogí aquellos en los que el error de estimación era más pequeño, y las estimaciones de precios eran más precisas. Ha sido un desafío comprender cómo funcionan los modelos, y poder aplicarlos a la funcionalidad que queríamos conseguir en la aplicación. Además, he realizado distintas funciones de recuperación y envío de información al frontend para las acciones, y las funciones de cálculo de bandas de Bollinger para poder realizar las recomendaciones de compra/venta.
87 - Despliegue del proyecto: El despliegue del proyecto también ha sido una tarea difícil, debido a la gran cantidad de paquetes necesarios en el proyecto, lo cual ha generado problemas a la hora del despliegue. Finalmente opté por Vercel para el despliegue del frontend, debido a su sencillez, compatibilidad con Vue.js, y escalabilidad que ofrece, además realiza un despliegue automático en función de cambios realizados en el repositorio de github del proyecto, lo cual proporciona flexibilidad a la hora de ampliar funcionalidades, o corregir posibles que puedan surgir. En el caso del backend, opté por Railway ya que ofrece posibilidades de ampliación del rendimiento, en caso de que fuera necesario, debido a la gran cantidad de recursos que consumen las funciones de predicción. Para ello, añadí los archivos necesarios para el despliegue, como los paquetes necesarios, y el Procfile con las funciones de ejecución. - Memoria: A la par que avanzábamos con el proyecto, mis compañeras y yo, comenzamos a escribir la memoria. Me he encargado de las partes de activos sobre los que desarrollé funcionalidades, que en mi caso fueron las acciones. Una vez definidos y elegidos los modelos de machine learning, completé la parte de inteligencia artificial, y por último la parte de despliegue de la aplicación. JUNE ZUAZO BERASATEGI Mi contribución al trabajo de fin de grado se compone de tres partes, el backend, el frontend y la memoria. - Frontend: He desarrollado varias de las pantallas de activos de renta variable basándome en el diseño de la pantalla de Acciones realizada por mi compañera Alba Millán. Estas pantallas son las de fondos de inversión y criptomonedas, y las pantallas de los cálculos correspondientes a las mismas. Las principales se componen de una tabla de Símbolos y nombres de los activos, y las de cálculo se componen de dos gráficos (uno de líneas y otro de velas), una tabla con el detalle de cada uno de los activos específicos, y varios botones para calcular las rentabilidades y los riesgos de cada uno de ellos. Asimismo,
88 también ayudé a completar la pantalla de inicio con los índices bursátiles del mercado junto a mis compañeras Paula García y Alba Millán. - Backend: Este ha sido el apartado más complicado para mí, ya que a diferencia del frontend, en el que ya tenía una experiencia previa de programación, nunca había trabajado en ningún proyecto con Python. Para ello, realicé un curso propuesto por el tutor del tfg. En primer lugar, como parte de mi contribución al proyecto, para obtener los datos de las pantallas mencionadas anteriormente, en un principio pensé en sacar los Símbolos de los activos que posteriormente se guardarían en la base de datos mediante una API de una web externa. Sin embargo, encontré una aplicación web de la que pude exportar en CSV los Símbolos de los Fondos de Inversión. Una vez tenía la página de Fondos de Inversión más desarrollada, me di cuenta de que la biblioteca de Python “yfinance” no tenía todos los datos respecto a los símbolos obtenidos de dicho csv. Por lo que tuve que borrar esos datos, y finalmente los conseguí guardando cada uno de los activos deseados en Portfolios de Yahoo Fineance y exportándolos para luego migrarlos a la base de datos. Respecto a los índices bursátiles de la pantalla principal, el procedimiento fue igual. - Memoria: Una vez la aplicación web estaba definida empezamos a escribir la memoria. En mi caso, primero definí los objetivos, y redacté la metodología, ya que mi tfg de ADE trata de metodologías de gestión de proyectos. Asimismo, escribí la misión, visión y valores de Fineance. Una vez hecha la investigación y lectura sobre los activos de renta variable de los cuales iba a realizar las pantallas, añadí dichos activos a la memoria del trabajo. Casi cuando el proyecto estaba acabado, junto a mi compañera Marta Gómez redacté la parte del backend y la de base de datos. Para realizar el diagrama entidad relación de las tablas tuve que instalarme una herramienta, ya que SQLite no ofrecía esa funcionalidad. Por último, junto con mi compañera Paula García realicé los
89 diagramas de secuencia UML de los casos de uso, y una vez finalizado el trabajo redacté las conclusiones, todo ello con ayuda y revisiones de mis compañeras.
90 BIBLIOGRAFÍA Admirals. (2023). Volatilidad de Mercados ▷ Qué es y Cómo aprovecharla. Admirals. Retrieved Apr 19, 2023, from https://admiralmarkets.com/es/education/articles/forex-analysis/volatilidad-forex Alegre, A. (2022). ¿Cómo se calculan las bandas de bollinger? Fórmula e interpretación. Rankia. Retrieved May 14, 2023, from https://www.rankia.cl/blog/analisisipsa/3346628-como-calculan-bandas-bollinger-formula-interpretacion Alonso, Á. (2021). Solo el 3% de los españoles invierte en fondos de inversión y acciones. elEconomista.es. Retrieved May 26, 2023, from https://www.eleconomista.es/mercados-cotizaciones/noticias/11146131/04/21/Solo-el3-de-los-espanoles-invierte-en-fondos-de-inversion-y-acciones.html Amazon Web Services. (s.f.). ¿Qué es una red neuronal? Amazon Web Services. https://aws.amazon.com/es/what-is/neural-network/ Aplyca. (2023, 01/26/). Vercel: Desarrollar, Previsualizar, Enviar. https://www.aplyca.com/blog/blog-qu%C3%A9-es-vercel-desarrollar-previsualizarenviar Arsys. (2021). Forecasting de ventas con Machine Learning . https://www.arsys.es/. https://www.arsys.es/blog/forecastingventasmachinelearning#:~:text=Forecasting%20en%20general%20es%20una,tiempo%20o%20l os%20resultados%20deportivos. Banco de España. (2022). Informe de Estabilidad Financiera. Otoño 2022. (). https://www.bde.es/f/webbde/Secciones/Publicaciones/InformesBoletinesRevistas/Info rmesEstabilidadFinancera/22/IEF_Otono2022.pdf#page=39&zoom=100,0,0 Banco de España. (2023). ¿Qué son las criptomonedas? https://www.bde.es/bde/es/areas/polimone/Preguntas-y-respuestas-frecuentas-sobrela-politica-monetaria/definicion-y-funciones-del-dinero/que-son-lascriptomonedas.html
91 Banco Santander. (2021). ¿Qué son los índices bursátiles y para qué sirven? Retrieved 04/15/2023, from https://www.santander.com/es/stories/que-son-los-indicesbursatiles-y-para-que-sirven Banco Santander. (2022). Guía para saber qué son las criptomonedas. https://www.santander.com/es/stories/guia-para-saber-que-son-las-criptomonedas Barcelona Geeks. (2023). ¿Cómo habilitar los encabezados CORS en su proyecto Django? Barcelona Geeks. https://barcelonageeks.com/como-habilitar-losencabezados-cors-en-su-proyecto-django/ BBVA. (2017). ¿Qué es una hipoteca? Así lo define el Banco de España | BBVA. BBVA NOTICIAS. Retrieved Apr 11, 2023, from https://www.bbva.com/es/que-es-unahipoteca/ Blanco Garzón, E. (2023). Bandas de Bollinger | Cómo funcionan y 3 Estrategias. Admirals. Retrieved May 14, 2023, from https://admiralmarkets.com/es/education/articles/forex-strategy/bandas-de-bollinger Cadavid, A. N., Martínez, J. D. F., & Vélez, J. M. (2013). Revisión de metodologías ágiles para el desarrollo de software. Prospectiva, 11(2), 30-39. https://www.redalyc.org/pdf/4962/496250736004.pdf Calero, D., Campos, C., Cárdenas, K., & Pancho, S. (2018). renta fija y renta variable. 593 Digital Publisher CEIT, 3(1), 51-58. https://dialnet.unirioja.es/servlet/articulo?codigo=7143989 Canelo, M. M. (2021, -09-07). Qué es el testing de software. https://profile.es/blog/que-es-el-testing-de-software/ Canós, J. H., Letelier, P., & Penadés, M. C. (2003). Metodologías ágiles en el desarrollo de software. Universidad Politécnica De Valencia, Valencia, , 1-8. https://www.academia.edu/download/34546906/XP_Agil.pdf Cañadas, R. (2021). RMSE o Error Cuadrático Medio | Métricas de error en ML. abdatum. Retrieved May 12, 2023, from https://abdatum.com/ciencia/rmse
92 Casas, J. d. l. (2022). Letras del Tesoro-defini. Business Insider España. Retrieved Jan 30, 2023, from https://www.businessinsider.es/que-es/letras-tesoro-1140111 CNMV. (2023). CNMV - Fondos inversión. https://www.cnmv.es/Portal/inversor/Fondos-Inversion.aspx Coll Morales, F. (2022). Volatilidad ¿Qué es? Definición | Rankia. Rankia.Com, https://www.rankia.com/diccionario/trading/volatilidad Cypress. (2023). Why Cypress? | Cypress Documentation. Retrieved Mar 5, 2023, from https://docs.cypress.io/guides/overview/why-cypress De Martinis Pacif, M. (2022). Automatización de pruebas para aplicaciones web con Cypress. Universitat Politècnica De València, , 60. https://riunet.upv.es/bitstream/handle/10251/185623/Martinis%20- %20Automatizacion%20de%20pruebas%20para%20aplicaciones%20web%20con%20Cy press.pdf?sequence=1 Derry, R. R. (2022). Diferencia entre un lote y una época en una red neuronal. IA Noticias. Retrieved May 12, 2023, from https://ianoticias.com/diferencia-entre-un-lote-yuna-epoca-en-una-red-neuronal/ DreamHost. (s.f.). Instalar Django usando virtualenv. Centro de Ayuda. Retrieved May 15, 2023, from https://help.dreamhost.com/hc/es/articles/215317948-InstalarDjango-usando-virtualenv EAE Business School. (2017, -11-08). ¿Cuál es la diferencia entre bonos y obligaciones? | EAE. https://retos-directivos.eae.es/cual-es-la-diferencia-entre-bonos-yobligaciones/ Edufinet. (2023a). ¿Cómo se calcula la rentabilidad de los bonos y obligaciones del Estado? Retrieved Feb 7, 2023, from https://www.edufinet.com/inicio/rentafija/rentabilidad-y-riesgo/como-se-calcula-la-rentabilidad-de-los-bonos-y-obligacionesdel-estado Edufinet. (2023b). Cómo se calcula la rentabilidad de un fondo de inversión? Edufinet. Retrieved Apr 13, 2023, from https://www.edufinet.com/inicio/fondos-de-
93 inversion/rentabilidad-y-riesgo/como-se-calcula-la-rentabilidad-de-un-fondo-deinversion Expansión. (2013). Valores del Tesoro 2023 | Datosmacro.com. Retrieved Apr 3, 2023, from https://datosmacro.expansion.com/deuda/espana/tesoro Fernández, Y. (2022). Criptomonedas: qué son, cómo funcionan y qué otras existen además de Bitcoin. Xataka. Retrieved May 26, 2023, from https://www.xataka.com/basics/criptomonedas-que-como-funcionan-que-otrasexisten-bitcoin GMB. (2022, -11-17). Acciones de una empresa: Definición, tipos y ventajas. https://gbm.com/academy/que-son-las-acciones-definicion-tipos-y-ventajas/ González Sánchez, G. (2021, -11-22). Modelo ARIMA: guía completa para el pronóstico de series de tiempo en Python | Machine Learning Studio® 2023. https://mlstudio.jaol.net/arima-model-time-series-forecasting-python/ Hernández, L. Á. (2023). Fiscalidad de las acciones. Rankia. Retrieved May 26, 2023, from https://www.rankia.com/blog/irpf-declaracion-renta/2586971-fiscalidadacciones Housfy. (2023, -01-10). Pasos y ejemplos sobre cómo calcular la cuota de una hipoteca fija. https://housfy.com/blog/pasos-y-ejemplos-sobre-como-calcular-cuotahipoteca-fija/ Iberdrola. (s.f.). Descubre los principales beneficios del Machine Learning. Iberdrola. Retrieved May 14, 2023, from https://www.iberdrola.com/innovacion/machine-learning-aprendizaje-automatico IBM. (2023). IBM Documentation. Retrieved May 15, 2023, from https://www.ibm.com/docs/es/cloud-paks/cp-data/4.5.x?topic=overview-meansquared-error Infobolsa. (s.f.). Infobolsa: Bolsa,ibex,prima riesgo, euribor, euro dólar hoy,bono. infobolsa. Retrieved May 11, 2023, from http://www.infobolsa.es
100 - PRUEBAS REALIZADAS TESTING DEL FRONTEND Ilustración 68: Test de regresión del menú de navegación Fuente: Elaboración propia Ilustración 69: Visualización del menú de navegación Fuente: Elaboración propia
101 Ilustración 70: Test con nominal válido de 5000 unidades monetarias Fuente: Elaboración propia Ilustración 71: Test con nominal inválido de 2 unidades monetarias Fuente: Elaboración propia
102 Ilustración 72: Test contra ataques XSS Fuente: Elaboración propia Ilustración 73: Intento ataque XSS Fuente: Elaboración propia
103 Ilustración 74: Test para visualización en distintos dispositivos Fuente: Elaboración propia - DESCARGA DE DATOS FINANCIEROS Ilustración 75: Acceso a datos de aplicación web Fuente: Elaboración propia - DESPLIEGUE DE LA APLICACIÓN El despliegue de la aplicación se realiza en dos partes. Por un lado, se despliega el frontend, desarrollado en Vue.js. Se escoge Vercel para el despliegue del frontend. Vercel es una plataforma que permite desplegar, escalar, y gestionar aplicaciones de forma sencilla desde código almacenado en github o crear aplicaciones desde plantillas predefinidas (Aplyca, 2023). Se escoge Vercel por la facilidad de despliegue y la escalabilidad que proporciona y su gran compatibilidad con Vue.js. Se ha llevado a
104 cabo el despliegue del backend en un servidor para poder proporcionar el acceso a todos aquellos usuarios interesados. Se ha escogido para ello Railway, al ser una plataforma de despliegue simple y potente que se enfoca en proporcionar un plan de despliegue que aumenta radicalmente la eficiencia del desarrollador (Railway, s.f.). Por motivos de eficiencia de la aplicación en el servidor, en las predicciones a largo plazo, en lugar de un modelo SARIMAX, se ha utiliza un modelo ARIMA, sin el uso de la estacionalidad, ya que aumenta notablemente la complejidad del modelo, y el servidor no es capaz de soportar la carga de trabajo en su versión bajo coste. Por motivos económicos, no ha resultado posible utilizar el modelo más complejo, sin embargo, este puede ser ejecutado de forma local con el código del proyecto. - ACCESO AL CÓDIGO El código es accesible desde el siguiente enlace de GitHub que contiene tanto el frontend como el backend de la aplicación: https://github.com/albamlln06/Fineance Además, también se encuentra subido a Drive en una carpeta compartida proporcionada por la Universidad Complutense: https://drive.google.com/drive/folders/1yQ7nofby6ivua7Xwwh8T9Ce-VU2frEN9
105 Apéndice B - CASOS DE USO En esta sección se explican detalladamente los cuatro procesos principales desarrollados en Fineance (calcular rentabilidad de un activo de renta fija, calcular el riesgo, la rentabilidad, y predicciones de los activos de renta variable y añadir y visualizar favoritos), sirviendo, así como guía para cualquier usuario que acceda a esta. - VISUALIZACIÓN DE PÁGINA INICIAL Y ACCESO A INFORMACIÓN DE ÍNDICE BURSÁTIL Este proceso se aplica de igual forma para todos los índices bursátiles registrados en la aplicación que aparecen en la página principal de la aplicación. Para realizar un ejemplo de ejecución de la funcionalidad, hemos escogido el índice “IBEX 35”. - El usuario accede a la aplicación. - El servidor frontend realiza una petición GET a api/infoIndex del backend, en la que a su vez se ejecuta la función infoIndex(), donde se obtienen los datos de los índices bursátiles. - El frontend carga la página HomeView.vue. - Se muestra la pantalla principal con un carrusel de fotos y algunos de los principales índices bursátiles con sus respectivos botones para acceder a su información detallada. - El usuario selecciona el botón de “IBEX 35”. - El servidor frontend realiza una petición GET a api/infoAccion del backend, en la que a su vez se ejecuta la función infoAccion(), donde se obtienen los datos del IBEX 35. - El frontend carga la página accionesCalculo.vue. - Se muestra información detallada relativa al IBEX 35: escrita, gráfica y detallada en una tabla. En el siguiente enlace se encuentra una descripción visual de este caso de uso:
106 Google Drive - Caso de Uso Home Ilustración 66: Diagrama de secuencia UML: visualización de página inicial y acceso a información de índice bursátil Fuente: Elaboración propia - CALCULAR RENTABILIDAD DE ACTIVO/PASIVO DE RENTA FIJA Este proceso se aplica de igual forma para todos los activos de renta fija y pasivos registrados en la aplicación. Para realizar un ejemplo de ejecución de la funcionalidad, hemos escogido el activo “Letras del Tesoro”. - Requisito: el usuario debe encontrarse en la página de Activos de Renta Fija (RentaFijaView.vue) donde se muestran los distintos activos de renta fija registrados en la aplicación. - El usuario selecciona la opción de “Letras del Tesoro”.
107 - El servidor frontend realiza una petición GET a api/letra del backend, en la que a su vez se accede a la base de datos para cargar todas las letras registradas en ella. - El frontend carga la página LetrasTesoroView.vue mediante el rooter de la app, redirigiendo a la url /letrasTesoro. - Se muestra información relativa a las Letras del Tesoro: escrita, gráfica y detallada en una tabla donde aparece la opción de “Calcular”. - El usuario selecciona el botón de “Calcular”. - El frontend carga la página letrasCalculo.vue mediante el rooter de la app, redirigiendo a la url /letrasCalculo. El procedimiento que se expone a continuación se puede repetir las veces que el usuario desee, ofreciendo la posibilidad de comparar las diversas rentabilidades que se pueden obtener con dicho activo, visualizando el gráfico del beneficio. - Se muestra el detalle de la letra del tesoro seleccionada previamente y un input donde el usuario introduce el importe del valor nominal del que quiere hacer el cálculo. - El usuario selecciona el botón de “Calcular”. - El frontend ejecuta el método calcularVF() donde realiza el cálculo de la rentabilidad. - Se muestra la rentabilidad calculada y un gráfico con el beneficio obtenido. En el caso de los pasivos financieros, en concreto de las hipotecas, estos cuatro últimos pasos se realizan de forma diferente debido a que no se lleva a cabo el cálculo de la rentabilidad, sino los intereses totales netos que el usuario deberá pagar a la entidad financiera correspondiente. Asimismo, el importe que se deberá introducir será el importe total de la hipoteca, pudiendo observar el importe máximo que la entidad financiera le puede prestar y las cuotas mensuales que tendrá obligación de pagar. En el siguiente enlace se encuentra una descripción visual de este caso de uso: ● Activo de renta fija: Google Drive - Caso de Uso Activo de Renta Fija
108 ● Pasivo de Renta Fija: Google Drive - Caso de Uso Pasivo de Renta Fija Ilustración 76: Diagrama de secuencia UML: cálculo de rentabilidad del activo de renta fija Fuente: Elaboración propia - CALCULAR RIESGO, RENTABILIDAD Y PREDICCIONES DE ACTIVO DE RENTA VARIABLE Este proceso se aplica de igual forma para todos los activos de renta variable registrados en la aplicación. Para realizar un ejemplo de ejecución de la funcionalidad, hemos escogido el activo “Acciones”.
109 - Requisito: el usuario debe encontrarse en la página de Activos de Renta Variable (RentaVariableView.vue) donde se muestran los distintos activos de renta variable registrados en la aplicación. - El usuario selecciona la opción de “Acciones”. - El servidor frontend realiza una petición GET a api/accion del backend, en la que a su vez se accede a la base de datos para cargar todas las acciones registradas en ella. - El frontend carga la página AccionesView.vue mediante el rooter de la app, redirigiendo a la url /accion. - Se muestra información relativa a las acciones: escrita, y detallada en una tabla donde aparece la opción de “+”. - El usuario selecciona la opción de “+”. - El servidor frontend realiza una petición GET a api/infoAccion del backend, en la que a su vez se accede a la base de datos para cargar todas las acciones registradas en ella. - El frontend carga la página accionesCalculo.vue mediante el rooter de la app, redirigiendo a la url /infoAccion. - Se muestra información detallada relativa a las acciones: escrita, gráfica y detallada en una tabla. - El usuario selecciona el botón de “Riesgo”. - El servidor frontend realiza una petición POST a api/RiesgoActivos del backend, en la que a su vez se ejecuta la función calcularRiesgoActivoFinanciero(), donde se realiza el cálculo del riesgo. - Se muestra el riesgo calculado. - El usuario selecciona el botón de “Rentabilidad Media”. - El servidor frontend realiza una petición POST a api/rentabilidadMedia del backend, en la que a su vez se ejecuta la función calcularRentabilidadMedia(), donde se realiza el cálculo de la rentabilidad.