scieee AI-readable full text Open interactive document viewer

Trading app: desarrollo de una herramienta de ayuda a la inversión en Bolsa

Campoverde Méndez, Marlon

Full text

Trading App: Development of a tool to help investment in the Stock Market Trading App: Desarrollo de una herramienta de ayuda a la inversión en Bolsa Trabajo de fin de grado del Grado en Ingeniería Informática Facultad de Informática Autor Marlon Campoverde Méndez Director Antonio Sarasa Cabezuelo Curso 2022–2023 Trading App Development of a tool to help investment in the Stock Market Final Degree Project Report Marlon Campoverde Méndez Directed by Antonio Sarasa Cabezuelo Faculty of Computer Science Complutense University of Madrid Madrid, 2023 Sobre TEFLONX Teflon X(cc0 1.0(documentación) MIT(código))es una plantilla de L A T EX creada por David Pacios Izquierdo con fecha de Enero de 2018. Con atribuciones de uso CC0. Esta plantilla fue desarrollada para facilitar la creación de documentación profesional para Trabajos de Fin de Grado, Trabajos de Fin de Máster o Doctorados. La versión usada es la X V:X Overleaf V2 with XeLaTeX, margin 1in, bib Contacto Autor: David Pacios Izquiero Correo: [email protected] ASCII: [email protected] Despacho 110 - Facultad de Informática ii Índice general Página 1. Introducción 1 1.1. Motivación .................................. 1 1.2. Objetivos ................................... 2 1.3. Metodología .................................. 3 1.3.1. Fases del proyecto .......................... 3 1.3.2. Organización del trabajo ....................... 5 1. Introduction 6 1.1. Motivation ................................... 6 1.2. Objective ................................... 7 1.3. Methodology ................................. 8 1.3.1. Fases del proyecto .......................... 8 1.3.2. Work organization .......................... 9 2. Estado del arte 11 2.1. MetaTrader 4 ................................. 11 2.2. Thinkorswim ................................. 11 2.3. TradingView ................................. 12 2.4. eToro ..................................... 12 2.5. QuantConnect ................................. 12 3. Tecnología empleada 13 3.1. Lenguaje de programación .......................... 13 3.2. Qt Designer .................................. 13 iii UCM 3.3. PySide2 .................................... 14 3.4. Alpha Vantage ................................ 14 3.5. TA Libreria .................................. 14 3.6. MySQL .................................... 15 3.7. PyCharm ................................... 15 3.8. GitHub .................................... 15 4. Especificación de requisitos 16 4.1. Actores .................................... 16 4.2. Módulos .................................... 17 4.2.1. Gestión de cuentas de usuario .................... 18 4.2.2. Área de trading ............................ 22 4.2.3. Historial de trading .......................... 26 4.2.4. Administrar datos de la aplicación ................. 27 5. Arquitectura de la aplicación 28 5.1. Arquitectura de la aplicación ........................ 28 5.2. Modelo de datos ............................... 30 5.2.1. Usuarios ................................ 31 5.2.2. Historial ................................ 31 5.2.3. Asset ................................. 31 6. Implementación y diseño de la aplicación 32 6.1. Modulo gestión de cuentas de usuario .................... 33 6.1.1. Inicio de sesión ............................ 33 6.1.2. Registrar usuario ........................... 35 6.1.3. Logout ................................. 38 6.1.4. Modificar perfil ............................ 38 6.1.5. Darse de baja ............................. 41 6.2. Área de trading ................................ 43 6.2.1. Realizar compras/ventas ....................... 43 6.2.2. Visualización de datos técnicos ................... 46 6.3. Historial de trading .............................. 48 6.3.1. Visualizar historial .......................... 48 iv UCM 6.4. Administrar datos de la aplicación ..................... 50 6.4.1. Añadir activos ............................ 50 6.4.2. Gestión de cuenta de usuario .................... 51 7. Conclusiones y trabajo futuro 54 7.1. Conclusiones ................................. 54 7.2. Trabajo futuro ................................ 55 7. Conclusions and future work 56 7.1. Conclusions .................................. 56 7.2. Future work .................................. 57 A. Guía de uso 59 A.1. Vista principal del administrador ...................... 59 A.1.1. Añadir activos ............................ 59 A.2. Área de trading ................................ 61 A.3. Resultados ................................... 64 v Índice de figuras 1.1. Diagrama de Gantt .............................. 4 1.1. Gantt diagram ................................ 9 4.1. Diagrama de casos de uso módulo gestión cuentas de usuario ....... 18 4.2. Caso de uso registrar usuario ........................ 19 4.3. Caso de uso Login .............................. 20 4.4. Caso de uso Logout .............................. 21 4.5. Caso de uso modificar perfil ......................... 21 4.6. Diagrama de caso de uso cuenta demo ................... 22 4.7. Diagrama de caso de uso obtener datos ................... 22 4.8. Caso de establecer saldo ........................... 23 4.9. Caso de selección de activo .......................... 24 4.10. Caso de uso realizar compra/venta ..................... 25 4.11. Caso de uso visualizar datos técnicos .................... 25 4.12. Diagrama de caso de uso historial ...................... 26 4.13. Caso de uso historial ............................. 26 4.14. Diagrama de caso de uso administración de la aplicación ......... 27 4.15. Caso de uso administración de la aplicación ................ 27 5.1. Esquema de la arquitectura ......................... 29 5.2. Diagrama UML del modelo de datos .................... 30 6.1. Pantalla de login ............................... 34 6.2. Fragmento de código Login ......................... 34 6.3. Fragmento de código Login en consultas SQL ............... 35 vi UCM 6.4. Pantalla de registrar ............................. 36 6.5. Fragmento de código de registrar ...................... 37 6.6. Fragmento de código de la consulta SQL de registrar ........... 37 6.7. Sección para hacer Logout .......................... 38 6.8. Pantalla de modificar datos ......................... 39 6.9. Fragmento de código cambiar nombre .................... 39 6.10. Fragmento de código de la consulta SQL cambiar nombre ......... 40 6.11. Fragmento de código cambiar contraseña .................. 40 6.12. Fragmento de código de la consulta SQL eliminar cuenta ......... 40 6.13. Pantalla de darse de baja .......................... 41 6.14. Fragmento de código de eliminar cuenta .................. 41 6.15. Fragmento de código eliminar cuenta consulta SQL ............ 42 6.16. Pantalla selección de datos .......................... 44 6.17. Fracción de código donde se leen los datos ................. 44 6.18. Fragmento de código de realizar compra/venta ............... 45 6.19. Fragmento de código de realizar compra .................. 45 6.20. Fragmento de código de realizar las ventas ................. 46 6.21. Fragmento de código de consulta SQL para registrar en historial ..... 46 6.22. Pantalla de los resultados .......................... 47 6.23. Fragmento de código para la visualización de los datos .......... 47 6.24. Pantalla historial ............................... 48 6.25. Fragmento de código de mostrar historial .................. 48 6.26. Fragmento de código de la consulta SQL para historial .......... 49 6.27. Pantalla añadir activo ............................ 50 6.28. Fragmento de código de añadir activo .................... 51 6.29. Fragmento de código guardar datos ..................... 51 6.30. Fragmento de código guardar datos diarios ................. 51 6.31. Pantalla gestión de cuentas de usuario ................... 52 6.32. Fragmento de código mostrar usuarios ................... 52 6.33. Fragmento de código eliminar usuario .................... 52 6.34. Fragmento de código de consulta SQL eliminar usuario .......... 53 A.1. Pantalla añadir activo ............................ 60 vii UCM Fase 3: Desarrollo de la aplicación En la tercera etapa, se llevó a cabo el desarrollo de la aplicación la cual se dividió en 4 iteraciones. Se realizó la implantación de los módulos gestión de cuentas de usuario, administración de los datos, área de trading e historial de trading. Fase 4: Pruebas y solución de errores En la fase cuatro, se realizaron pruebas de usuario de la aplicación, probando todas las funcionalidades para corroborar su correcto funcionamiento y se solucionaron aquellos errores que iban apareciendo. Fase 5: Presentación al tutor En la quinta fase se hizo una presentación del funcionamiento la aplicación al tutor, modulo por modulo. 1.3.2. Organización del trabajo Para realizar el proyecto se ha establecido una metodología de trabajo iterativa incremental. Es decir, se dice que es incremental ya que en cada entrega se añaden nuevas funcionalidades, e iterativa debido a que sobre las funcionalidades existentes se realizan mejoras. Cada iteración se finalizaba con una reunión en la cual se verificaba el trabajo realizado, pasando a marcar los objetivos de la siguiente. Por otro lado, la necesidad de llevar un seguimiento del desarrollo del software hizo que fuese necesario el uso de GitHub como sistema de control de versiones. 5 Capítulo 1 Introduction Investing in the stock market is an activity that has captured the attention of individuals and entities alike. The pursuit of opportunities to maximize capital returns has led to the development of various strategies and approaches. Among these approaches, technical analysis has established itself as an essential tool in investment decision-making, relying on the study of price charts, patterns, and volume to predict future market movements. 1.1. Motivation The volatile and dynamic nature of financial markets presents investors with a challenging and ever-changing environment. The quest for patterns and trends in price movements has become an ongoing pursuit for those looking to seize investment opportunities. However, comprehensive analysis of historical data and the interpretation of technical indicators can be labor-intensive. Additionally, a thorough strategy testing (backtesting) is necessary to determine in which scenarios it performs well and in which it doesn’t. Motivated by the need to streamline the decision-making process for investors of all levels, the idea of developing an application that simplifies and automates part of this process was conceived. The application is based on the premise of using technical indicators as signals to identify potential buying and selling points in the stock market, providing easy 6 UCM and fast access to historical data for analysis 1.2. Objective The main objective is to develop a basic application to assist in stock investment decisionmaking, using technical indicators as the basis for purchase recommendations. To determine selling points, risk management principles are use. Based on this objective, the following subobjectives are proposed: Establish a general understanding of the objectives of technical analysis and its application in investment decision-making. Select an appropriate set of technical indicators that will be used as the basis for purchase signals. Provide a target price to establish selling points. Design and implement the application, ensuring its functionality and the ability to generate investment recommendations. Evaluate the effectiveness of the application through tests utilizing historical market data and executing the recommendations. Provide an analysis of the obtained results, discussing the limitations of the application, potential improvements, and its possible utility in the real financial environment.” 7 UCM 1.3. Methodology The project implementation has been carried out in accordance with a project plan and a work organization, both of which are described in the following sections. 1.3.1. Fases del proyecto For the project development, a preliminary phase was conducted to gather requirements. This helped define the scope of the application, determining the modules that would be included. In the subsequent phases, the program functionality was developed and tested, and in the final phase, the project report was prepared. The table 1.1 shows the duration of each project phase. Additionally, a Gantt chart depicting this information visually is presented in Figure 1.1. Phase Duration date Research and Requirement Gathering 19/09/2022 - 19/10/2022 API Acquisition and Testing 20/10/2022 - 18/11/2022 Application Development 19/10/2022 - 30/05/2023 Testing and Bug Resolution 01/06/2023 - 24/06/2023 Presentation to Supervisor 25/06/2023 Report Development 26/06/2023 - 03/09/2023 Cuadro 1.1: Phases in Project Development 8 UCM Figura 1.1: Gantt diagram 1.3.2. Work organization Phase 1: Requirement Gathering In the initial stage, an analysis was conducted to determine the principal modules that an application should have, in addition to those that a dedicated investment software should include. Subsequently, a detailed breakdown of the functionalities of each module was provided. Phase 2: API Acquisition and Testing The second phase consists of two processes. The first process involves research, where a series of companies providing an API for obtaining financial data were analyzed. The second process is testing, in which their proper functionality as well as the limitations of each were verified. This was done to ultimately choose the one that best suited the project. 9 UCM Phase 3: Application Development In the third stage, the development of the application was executed, which was divided into 4 iterations. The implementation of the user account management modules, data administration, trading area, and trading history was carried out. Phase 4: Testing and Bug Resolution In phase four, user testing of the application was conducted, testing all functionalities to verify their proper operation. Any errors that arose were addressed and resolved during this testing phase. Phase 5: Presentation to Supervisor In the fifth phase, a presentation of the application’s functionality was given to the supervisor, module by module. 10 Capítulo 2 Estado del arte En esta capítulo se exponen algunas aplicaciones que comparten funcionalidades similares con el sistema creado en este proyecto. 2.1. MetaTrader 4 Esta plataforma de trading permite la creación y ejecución de asesores expertos (EAs). Son programas que funcionan en la plataforma de MetaTrader 4 [5], se emplean para operar los mercados financieros mediante algoritmos, es decir, trading automático diseñado con los gustos y preferencias de cada usuario. Se encargan de encontrar oportunidades en función de parámetros establecido por el usuario, notificando o abriendo la posición de forma automática. Una vez que la posición se ha abierto se establecen las condiciones de cierre. 2.2. Thinkorswim Broker que permite operar diferentes mercados. Ofrece datos en tiempo real, gráficos, estudios técnicos y mas utilidades. Dispone de una sección ”demo”que permite testear en un entorno simulado diferentes técnicas y estrategias.[10] 11 UCM 2.3. TradingView En esta plataforma se pueden realizar análisis de todos los mercados financieros del mundo, ofreciendo a los usuarios gráficos y herramientas. [11]. A través de su función Pine Script el cual es un lenguaje de programación desarrollado por la misma empresa. Mediante un editor incorporado en la plataforma los usuarios pueden escribir indicadores y estrategias personalizadas que pueden ser automatizadas para general señales de compra y de venta. 2.4. eToro Empresa que permite acceder a varios mercados, es decir, es un broker. Cuenta con una sección denominada trading social, los usuarios forman una comunidad en donde exponen sus movimientos permitiendo que otros usuarios puedan copiar automáticamente dichos movimientos de otros inversores. La empresa denomina esta acción CopyTrader, la cual permite imitar operaciones en tiempo real. [3] 2.5. QuantConnect Es un entorno de código abierto, de trading algorítmico diseñado en la nube. Permite a los usuarios crear y probar algoritmos de trading mediante librerías escritas en Python y C#. Ya sea para hacer backtesting u operar en vivo. [9] Además dispone de un entorno de aprendizaje, tanto para los conocimientos de programación como de funcionamiento de la plataforma. 12 Capítulo 3 Tecnología empleada 3.1. Lenguaje de programación El lenguaje de programación que se ha seleccionado para la creación de esta aplicación ha sido Python. El motivo principal para la elección de este lenguaje sobre los otros existentes, ha sido que en Python la manipulación de datos es mediante el uso de librerías como Numpy, la cual hace que sea sencillo. Además de las numerosas APIs y librerías que existen. 3.2. Qt Designer Es una herramienta gráfica para el diseño de interfaces de usuario (UI). Qt Designer se caracteriza por facilitar la creación y el diseño de las interfaces de usuario de manera visual. Permite a los programadores diseñar ventanas, botones, menús, etc. Sin tener que escribir el código manualmente. Qt Designer proporciona una interfaz gráfica en la cual se puede arrastrar y soltar elementos de la interfaz a crear, esto reduce de manera muy significativa la necesidad de codificar. 13 UCM Permite configurar las propiedades de los elementos de nuestra aplicación como el tamaño, la ubicación, los colores. Directamente desde la interfaz de la aplicación. Una vez que se haya terminado de diseñar la interfaz se puede generar de forma automática el código en C++ o Python que corresponde con la interfaz que se ha creado. [4]. 3.3. PySide2 Es un conjunto de bibliotecas la cual proporciona una interfaz de Python para el uso de Qt. Es decir, PySide2 permite a los desarrolladores utilizar Qt desde Python, esto permite la creación de aplicaciones con interfaz gráficas complejas desde un entorno de alto nivel como lo es Python.[8]. 3.4. Alpha Vantage Proveedor de datos financieros el cual ofrece gran cantidad de información y servicios relacionados con el mercado de valores y las finanzas. Los datos que ofrece Alpha Vantage se realiza mediante su API (Interfaz de Programación de Aplicaciones). [1]. Esta API ofrece datos históricos de activos, permitiendo a los usuarios analizar el rendimiento pasado además de poder realizar análisis técnico. Además incorpora una amplia gama de indicadores técnicos los cuales se pueden usar para evaluar las tendencias de los mercados. 3.5. TA Libreria Libreria de análisis técnico hecha por Bukosabino cuya licencia es MIT. La cual permite el uso de DataFrames de la librería Panda de Python para la gestión de series temporales de datos. De esta forma la gestión de varios datos que contienen los precios de un activo no resulta complejo. [2]. 14 UCM Figura 4.4: Caso de uso Logout Figura 4.5: Caso de uso modificar perfil 21 UCM 4.2.2. Área de trading El usuario puede simular el funcionamiento de la aplicación con dinero ficticio, el saldo se verá incrementado o disminuido dependiendo del éxito de las operaciones. También se podrán obtener parámetros técnicos del activo para conocer los valores según temporalidad. Figura 4.6: Diagrama de caso de uso cuenta demo Figura 4.7: Diagrama de caso de uso obtener datos 22 UCM Vamos a describir los casos de uso de este módulo. Figura 4.8: Caso de establecer saldo 23 UCM Figura 4.9: Caso de selección de activo 24 UCM Figura 4.10: Caso de uso realizar compra/venta Figura 4.11: Caso de uso visualizar datos técnicos 25 UCM 4.2.3. Historial de trading En esta sección el usuario podrá ver el listado de operaciones realizadas, se podrán clasificar por tipo, orden de compra u orden de ventas. Figura 4.12: Diagrama de caso de uso historial Figura 4.13: Caso de uso historial 26 UCM 4.2.4. Administrar datos de la aplicación La persona encargada de administrar la aplicación tendría la capacidad de añadir nuevos activos, nuevos componentes para el análisis técnico. También se encargará de la base de conocimiento por lo que podrá eliminar cuentas de usuarios que estén registrados en la base de datos. Figura 4.14: Diagrama de caso de uso administración de la aplicación Figura 4.15: Caso de uso administración de la aplicación 27 Capítulo 5 Arquitectura de la aplicación En este capítulo se explicará la estructura de la aplicación y el modelo de datos que se ha utilizado. 5.1. Arquitectura de la aplicación La aplicación implementa una arquitectura denominada ”sin servidor”(Serveless) La Arquitectura sin servidor proporciona una visión de diseño de aplicaciones en la que los desarrolladores no necesitan preocuparse por la gestión de servidores o infraestructuras en su lugar deben enfocarse fundamentalmente en escribir código que impelente la lógica de la aplicación. Los desarrolladores diseñan segmentos de código para que se puedan ejecutar de manera automática en respuesta a eventos específicos. Estas funcionalidades se ejecutan en infraestructuras de un proveedor de servicios en la nube. De esta forma los clientes delegan en MySQL los datos de autenticación y los datos referentes a su cuenta de usuario. 28 UCM Los clientes también obtienen información adicional a través de dos API REST de terceros. Un API (application programming interface), son un conjunto de reglas que definen como los dispositivos y aplicaciones se pueden conectar y comunicarse entre ellos. Un API REST es una API que se ajusta a los principios del REST (representational state transfer), el cual es un estilo arquitectónico. Se hace referencia a interfaz de programación de aplicaciones (API) de terceros ya que quien la proporciona es una entidad externa que no tienen nada que ver con los que están desarrollando la aplicación. En la figura 5.1 se muestra un esquema de la arquitectura empleado, como interactúa el cliente con el sistema. Figura 5.1: Esquema de la arquitectura 29 UCM 5.2. Modelo de datos La información que se guarda en la base de datos es: información personal de los usuarios, historial de cada uno de ellos en una tabla diferente la cual se relaciona por el nombre de usuario. La tabla asset es gestionada por el admin donde se guarda que activo se ha añadido y la temporalidad. Se ha elegido la base de datos phpMyAdmin como almacenamiento persistente ya que es un sistema sencillo de utilizar. Este sistema utiliza un sistema de base de datos SQL, lo cual permite guardar la información en tablas permitiendo que se relacionen entre si mediante un atributo en común. Figura 5.2: Diagrama UML del modelo de datos Para poder establecer el modelo de datos que se va a utilizar, primero se ha de decidir el tipo de base de datos que mejor se adapte. Para posteriormente hacer una selección de la información que es necesaria almacenar. De esta forma se obtiene un modelo de datos como el de la Figura 5.2. 30 UCM Figura 6.5: Fragmento de código de registrar Figura 6.6: Fragmento de código de la consulta SQL de registrar 37 UCM 6.1.3. Logout En la parte superior de la pantalla se encuentra el botón para poder hacer el logout, por un lado desde el botón izquierdo de cerrar la ventana y por otro desde el botón rojo de la derecha ambos cierran sesión y la aplicación simultáneamente. Estas acciones se configuran automáticamente, uno el sistema operativo y otro mediante Qt Designer respectivamente. Figura 6.7: Sección para hacer Logout 6.1.4. Modificar perfil Una vez se ha iniciado sesión, desde el menú izquierdo se puede acceder a la sección ”Perfil”. Desde aquí se puede acceder para poder cambiar los datos de la cuenta. En la figura 6.8 se puede cambiar el nombre de usuario, al igual que en el registro se comprueba que el nombre es único y no existe para poder permitir hacer el cambio. Por otro lado se debe hacer una comprobación para ello se solicita la contraseña si es correcta se procede a hacer el cambio, en caso contrario se muestra un mensaje de error. En la imagen 6.9 se puede ver la la función la cual recoge los datos vistos en la figura anterior. Esta función llama a la función que realiza la consulta en la base de datos realizando un consulta del tipo UPDATE 6.10. De la misma forma se hace con el cambio de contraseña y modificación del saldo. 38 UCM Figura 6.8: Pantalla de modificar datos Figura 6.9: Fragmento de código cambiar nombre 39 UCM Figura 6.10: Fragmento de código de la consulta SQL cambiar nombre Figura 6.11: Fragmento de código cambiar contraseña Figura 6.12: Fragmento de código de la consulta SQL eliminar cuenta 40 UCM 6.1.5. Darse de baja Desde esta pantalla 6.13 se permite al usuario eliminar su cuenta. Previamente se ha de indicar con el tick que se quiere borrar la cuenta además de introducir la contraseña para confirmar el proceso. Posteriormente se cierra la aplicación. La función de la figura 6.14 se encarga de comprobar que se cumplen los criterios mostrados en la interfaz para proceder a la eliminación de la cuenta. Por otro lado, esta función llama a la función 6.15 la cual hace una consulta del tipo DELETE en la base de datos. Figura 6.13: Pantalla de darse de baja Figura 6.14: Fragmento de código de eliminar cuenta 41 UCM Figura 6.15: Fragmento de código eliminar cuenta consulta SQL 42 UCM 6.2. Área de trading En esta pantalla el usuario interactúa con la aplicación. 6.2.1. Realizar compras/ventas La vista pasa toda la información que se recoge de la pantalla 6.16 a las funciones internas, encargadas de usar dichos datos. En la porción de código de la figura 6.17 se encarga de recopilar los datos necesarios para comenzar con el análisis, esta función es la intermediaria entre el usuario y la lógica de negocio. Por un lado recoge los datos enviados por el usuario mediante la interfaz y por otro abre para leer los datos históricos. Los datos que se devuelven están en formato de dataFrame el cual se pasa por parámetro para extraer los datos técnicos. Toda esta información es pasado como argumento de la función tradingResult 6.18, la cual se encarga de hacer la operativa, la compra y la venta respectivamente. Cada función devuelve lo referente al proceso de compra y venta. La función que se ve en la figura 6.19, recibe un dataFrame con las posibles entradas así como un porcentaje para promediar, el nombre del activo y el monto total de la posición. Un dato importe a tener en cuenta es que se descarta todas aquellas operaciones que se hagan después de las 16h por bajada de la volatilidad del mercado y evitar un exceso de exposición. Cabe destacar que en cada compra que se realiza se registra en la base de datos para poder tener un historial. Los datos se devuelven en un array para su posterior uso y además para que puedan ser visualizados por el usuario. Seguidamente está la función ventaDia 6.20, la cual determina el precio de venta en función de los datos devueltos por comporasDia. Dado que se sigue una operativa conservadora se establece en un 1,5% el precio de venta en función del precio medio de compra. Al igual que en la compra, en esta también se registra en la base de datos. En la figura 6.21, esta la función encargada de conectar con la base de datos y realizar una consulta SQL del tipo insert para añadir los datos de la operación en la tabla historial. 43 UCM Figura 6.16: Pantalla selección de datos Figura 6.17: Fracción de código donde se leen los datos 44 UCM Figura 6.18: Fragmento de código de realizar compra/venta Figura 6.19: Fragmento de código de realizar compra 45 UCM Figura 6.20: Fragmento de código de realizar las ventas Figura 6.21: Fragmento de código de consulta SQL para registrar en historial 6.2.2. Visualización de datos técnicos La figura 6.22 es lo que el usuario ve finalmente después del proceso descrito en el apartado anterior. Como se puede ver, en esta pantalla se visualizan los datos en formato de tabla la cual consta de ocho columnas. En las columnas de compras cuando aparece un cero es que no se ha realizado ninguna compra, del mismo modo en la columna de ventas si aparece un cero significa que no se ha alcanzado el precio de venta. Cuando no se alcanza el precio de venta se asume como perdida, el cual está en un 2% (valor predeterminado) del precio de compra medio. Por otro lado, en la figura 6.23 se puede ver el código que hace posible que se visualicen los datos. La función TradingResult descrita anteriormente es la que proporciona la información necesaria para poder mostrar la información al usuario. Esta información se almacena en forma de array de filas el cual se va recorriendo una a una. 46 UCM Figura 6.34: Fragmento de código de consulta SQL eliminar usuario 53 Capítulo 7 Conclusiones y trabajo futuro 7.1. Conclusiones Se ha desarrollado una aplicación de trading funcional que incorpora indicadores técnicos como el RSI y el Estocástico, así como reglas de compra y venta basadas en promedios y porcentajes de ganancias. Lo que se pretende con esta aplicación es realizar un proceso de automatización, permitiendo a los inversores a tomar decisiones basadas en reglas predefinidas en lugar de las emociones. Este tipo de operativa suele traer mejores resultados ya que es necesario seguir un planificación marcada y no salirse de ahí. Al establecer un porcentaje para el punto de venta permite establecer unos criterios para la gestión del riesgo. Esto es fundamental para proteger el capital y minimizar las perdidas. Por otro lado, el administrador juega un papel importante ya que es el encargado de añadir nuevos índices, esta acción hace que se comunique con la API y descargue los datos históricos para que los usuarios puedan acceder en forma de lectura de un documento, de esta forma se reduce en gran cantidad el tiempo de acceso a los datos. Los ficheros del proyecto se encuentran almacenados en el siguiente repositorio de GitHub: https://github.com/naadiee/TFG_qt 54 UCM 7.2. Trabajo futuro Aunque se han podido alcanzar y desarrollar la mayor parte de los objetivos planteados al principio del proyecto en la fase de toma de requisitos. Se han encontrado nuevas características que se proponen a continuación como trabajo futuro: Más datos técnicos. Permitir a los usuarios incorporar en los resultados mas datos técnicos según sus preferencias, para que en base a eso muestro los resultados. Esto permite hacer simulaciones de una operativa. Filtros de búsqueda en el historial. Dado que los resultados del historial son bastantes y muy variados. Hacer que el usuario pueda obtener unos resultados en concreto mediante unos filtros de búsqueda. Temporalidad de resultados. Hacer una selección más amplia te la temporalidad de análisis, actualmente es de un mes entero. Dar de alta a admin. Permitir que mediante la interfaz se pueda dar de alta un administrador para que sea una acceso más fácil, actualmente se hace de forma interna mediante una consulta en phpMyAdmin. Operativa con datos en tiempo real. Poder hacer un análisis a tiempo real, para ello es necesario una plataforma de pago que proporcione los datos. 55 Capítulo 7 Conclusions and future work 7.1. Conclusions A functional trading application has been developed that incorporates technical indicators such as RSI and Stochastic, as well as buying and selling rules based on averages and profit percentages. The goal of this application is to automate the trading process, allowing investors to make decisions based on predefined rules rather than emotions. This type of trading often yields better results since it requires following a predetermined plan and sticking to it. Setting a percentage for the selling point allows for risk management criteria to be established, which is crucial for protecting capital and minimizing losses. On the other hand, the administrator plays an important role as they are responsible for adding new indices. This action involves communicating with the API and downloading historical data so that users can access it in the form of a document, significantly reducing data access time. The project files are stored in the following GitHub repository: https://github.com/ naadiee/TFG_qt 56 UCM 7.2. Future work While most of the initially set project objectives have been achieved and developed during the requirements gathering phase, new features have been identified for future work: More technical data: Allow users to incorporate additional technical data into the results based on their preferences, enabling simulations of trading operations. Search filters in the history: Given the abundance and diversity of historical results, enable users to obtain specific results by implementing search filters. Result timeframes: Expand the selection of analysis timeframes, currently limited to one entire month. Admin registration: Enable user-friendly admin registration through the interface, as it currently requires internal setup via phpMyAdmin queries. Real-time data trading: Enable real-time analysis, requiring access to a paid platform that provides real-time data. 57 Bibliografía [1] AlphaVantage. «API Documentation.» (), dirección: https://www.alphavantage. co/documentation/. [2] Bukosabino. «Documentation.» (), dirección: https://technical-analysis-library-inpython.readthedocs.io/en/latest/ta.html#trend-indicators. [3] eToro. (), dirección: https://www.etoro.com/es/copytrader/. [4] Q. Group. «Documentation.» (), dirección: https://doc.qt.io/qt-6/qtwidgetsindex.html. [5] MetaTrader4. (), dirección: https://www.metatrader4.com/es/automated-trading. [6] J. J. Murphy, Análisis técnico de los mercados financieros. 1986. [7] PyCharm. «Documentation.» (), dirección: https://www.jetbrains.com/help/ pycharm/getting-started.html. [8] Pyside. «Documentation.» (), dirección: https://doc.qt.io/qtforpython-5/PySide2/ QtWidgets/index.html. [9] QuantConnect. (), dirección: https://www.quantconnect.com/docs/v2. [10] Thinkorswim. (), dirección: https://tlc.thinkorswim.com/center. [11] TradingView. (), dirección: https://www.tradingview.com. 58 Apéndice A Guía de uso A.1. Vista principal del administrador A.1.1. Añadir activos En esta pantalla A.1 el administrador puede añadir activos, es decir, se descarga los datos de los precios de un determinado activo en una temporalidad en concreto. De esta manera se genera una vez un csv con la información permitiendo a los usuarios leer este documento lo cual hace que no se tarde nada en la obtención de la información. Primero, el admin de la lista de activos disponibles selecciona cual quiere añadir A.2, posteriormente selecciona que temporalidad quiere que se generen los datos, como se ve en la figura A.3. Finalmente, le da al botón aceptar par que se genere. Dependiendo de la temporalidad se tardará mas o menos. 59 UCM Figura A.1: Pantalla añadir activo Figura A.2: Pantalla añadir activo selección 60 UCM Figura A.3: Pantalla añadir activo timeframe A.2. Área de trading En esta pantalla los usuarios eligen las opciones para poder obtener los resultados. Primero elige un activo en concreto de la lista de disponibles A.4. Posteriormente, elige la fecha del análisis que se realizará mediante un calendario desplegable A.5. La tercera opción es elegir la temporalidad mediante un menú desplegable A.6. Finalmente se elige el monto total de las operaciones que se harán, como se puede ver en la figura A.7. Para proceder a obtener los resultados se pulsa el botón aceptar. 61 UCM Figura A.4: Pantalla trading selección de activo Figura A.5: Pantalla trading elegir fecha 62