Simulación de mercado (Parte 16): Sockets (X)
Introducción
En el artículo anterior, «Simulación de mercado (Parte 15): Sockets (IX)», expliqué y mostré la parte del código del servidor que debía escribirse en Python. No obstante, ese código por sí solo no es suficiente para poder usar un sistema de comunicación entre MetaTrader 5 y Excel. Necesitamos más elementos además de los mostrados en aquel artículo. Ahora bien, muchos podrían implementar toda la solución directamente en ese código de Python, y no estarían equivocados. Si lo hiciéramos así, nos limitaríamos a un sistema completamente cerrado. Es decir, no podríamos adaptarnos para realizar ciertas acciones o cubrir escenarios más específicos. Sin embargo, al dividir el sistema en partes, podemos hacerlo de una manera más flexible. De este modo, podremos aprovechar lo mejor que nos ofrece cada lenguaje o programa.
Probablemente pienses que esto es una tontería. Pero ten en cuenta que aquí solo estoy demostrando que es posible trabajar con MetaTrader 5 de una forma completamente inexplorada hasta ahora. Del mismo modo que estoy mostrando cómo usar Excel, podríamos usar cualquier otro programa. Además, podríamos crear nuestro propio método con programas desarrollados exclusivamente para ello, con el fin de disponer de un análisis y un modelo operativo específicos para un determinado tipo de operación. De este modo, MetaTrader 5 se encargaría únicamente de transferir las órdenes entre lo que nosotros crearíamos y el mercado, evitando así todo el trabajo que supondría desarrollar una plataforma de trading.
Entonces, considera todo lo que se está explicando como algo mucho más amplio de lo que muestro aquí. Hacer este tipo de cosas requiere mucho conocimiento y estudio. Pero, si realmente deseas que algo así llegue a existir, considera estos artículos como una pequeña muestra de lo que podemos hacer. Aunque nada de esto tendrá verdadero sentido hasta que veamos lo que aún falta por implementar para que el servidor en Python sea realmente útil. Por tanto, en este artículo veremos la parte que deberá implementarse en VBA, que está incluida en Excel.
Primeros pasos en Excel
El código que hay que implementar en VBA no es en absoluto complicado. En realidad, gran parte de lo que se mostrará ya forma parte de lo que suelen hacer quienes crean scripts en VBA. Sin embargo, hay uno o dos detalles que pueden resultar más o menos complicados, al menos para algunos. No obstante, quiero hacer hincapié en que aquí las cosas se han diseñado para que sean lo más simples y didácticas posible. Además, el código visto en el artículo anterior no sufrirá cambios. Todo lo que necesitas hacer es crear los elementos en VBA para que cubran las necesidades o ajustes pertinentes según lo que se pretende realizar u obtener.
Comencemos observando nuestra interfaz de Excel. Podemos verla en la siguiente imagen:

Si sabes utilizar Excel, habrás notado que los botones que se ven en la imagen anterior son shapes (formas). Permiten crear una interfaz con esquinas redondeadas. Sin embargo, su funcionamiento no difiere mucho del de los controles normales, ya que es posible vincularlos a una macro. Así, cuando haces clic en uno de esos shapes, Excel lo interpreta como si estuvieras interactuando con un botón convencional y realiza la llamada correspondiente para ejecutar la macro asociada al evento de clic en dicho shape o botón.
Pero, la cuestión que realmente nos interesa aquí, al observar únicamente la interfaz mostrada en la imagen, es el contenido de las celdas. Observa que en la celda B2 hay una información que indica que el servidor está sin conexión. Igualmente, en la celda B5 hay otra información que, en este caso, indica el nombre del símbolo sobre el que queremos obtener información desde MetaTrader 5. Es en este punto donde la idea empieza a tomar forma. Aunque todavía falte la parte referente a lo que se programará en MQL5, ya podemos hacernos una idea de lo que necesitamos y de lo que podemos hacer.
¿Recuerdas que, en la explicación del código del servidor, mencioné que este capturaría la información de una celda y la enviaría a MetaTrader 5 para obtener algún dato? Pues bien, es justamente en esta celda donde tenemos el valor WDON23 donde deberemos actuar. Sin embargo, cuando vayamos a modificar manualmente la información de esta celda, primero debemos detener el servidor, cambiar el valor de la celda B5 y, justo después, iniciar nuevamente el servidor. Así, MetaTrader 5 recibirá los nuevos parámetros que deberá analizar.
Dichos cambios son bastante sencillos de realizar y se pueden hacer en cualquier momento, sin que el servidor llegue a saber lo que está ocurriendo, ya que todo sucederá entre MetaTrader 5 y Excel. Pero, como ya indiqué y vuelvo a repetir, la idea aquí es ser didáctico. No obstante, nada te impide crear tu propio protocolo para obtener más información o acceder a más datos de otros símbolos. Todo lo que necesitas hacer es colocar los datos en esta celda específica de Excel. Pero quizá te estés preguntando: ¿por qué esta celda específicamente? ¿Por qué no usar otra? El detalle es que, en el código del servidor, se hace uso de un índice y, en función de ese índice, la celda que debe utilizarse es precisamente la B5. No obstante, a lo largo de este artículo, mostraré cómo puedes usar otra celda sin necesidad de modificar el código del servidor que se mostró en el artículo anterior.
Suponiendo que hayas entendido esta parte inicial, podemos pasar a la siguiente etapa. Entonces, veamos cómo se hará todo en VBA.
Iniciamos el código en VBA
Para tener algo realmente útil en funcionamiento y que el usuario no perciba lo que ocurre bajo el capó, debemos hacer algunas cosas en VBA. Por lo tanto, lo primero que debemos hacer es crear un módulo. El objetivo de este módulo es alojar todo el código que será necesario implementar y que no encajaría en otro lugar. Lo primero que debe codificarse se puede ver justo a continuación:
01. Private Const szMSG_START_SERVER As String = "Start Server" 02. Private Const szMSG_STOP_SERVER As String = "Stop Server" 03. Private Const szSERVER_SHUTDOWN As String = """/Force Server ShutDown""" 04. Private Const szMSG_MT5_OFFLINE As String = "MetaTrader 5 is offline." 05. Private Const szMSG_MT5_ONLINE As String = "MetaTrader 5 is online." 06. Private Const szMSG_MT5_BUY As String = """Buy in Market >""" 07. Private Const szMSG_MT5_SELL As String = """Sell in Market >""" 08. Private Const iPort As Integer = 9090 09. Private gl_ServerInExec As Boolean 10. Public Const CELL_MT5 As String = "$B$4" 11. 12. Public Sub SwapStatusMT5() 13. Dim c1, c2, c3 As Long 14. 15. If Sheets("System").Range(CELL_MT5).Value = szMSG_MT5_ONLINE Then 16. c1 = RGB(217, 238, 16) 17. c2 = RGB(51, 153, 102) 18. c3 = RGB(255, 80, 80) 19. Else 20. c1 = RGB(132, 130, 122) 21. c2 = c1 22. c3 = c1 23. End If 24. With Sheets("System") 25. .Shapes("Btn_MT5").Fill.ForeColor.RGB = c1 26. .Shapes("Btn_BUY").Fill.ForeColor.RGB = c2 27. .Shapes("Btn_SELL").Fill.ForeColor.RGB = c3 28. End With 29. End Sub 30. 31. Private Sub SwapMsgBtnServer(text As String) 32. Dim c As Long 33. If text = szMSG_START_SERVER Then 34. c = RGB(213, 87, 99) 35. gl_ServerInExec = False 36. Else 37. c = RGB(84, 130, 53) 38. gl_ServerInExec = True 39. SwapStatusMT5 40. End If 41. With Sheets("System").Shapes("Btn_Server") 42. .TextFrame2.TextRange.text = text 43. .Fill.ForeColor.RGB = c 44. End With 45. End Sub 46. 47. Public Sub BtnServer_Click() 48. If gl_ServerInExec Then 49. StopServer 50. Else 51. InitServer 52. End If 53. End Sub 54. 55. Public Sub InitServer() 56. Dim szScript, szCmd As String 57. 58. szScript = Chr$(34) & Application.ActiveWorkbook.Path & "\Server.py" & Chr$(34) 59. szCmd = " ""127.0.0.1""" & Str(iPort) & " ""System"" ""B$2""" 60. VBA.CreateObject("WScript.shell").Run """Python""" & szScript & szCmd, vbHide 61. SwapMsgBtnServer szMSG_STOP_SERVER 62. End Sub 63. 64. Public Sub StopServer() 65. szPath = Chr$(34) + Application.ActiveWorkbook.Path + "\MsgFromExcel.py" + Chr$(34) 66. VBA.CreateObject("WScript.shell").Run """Python""" & szPath & " " & Str(iPort) & " " & szSERVER_SHUTDOWN, vbHide, True 67. SwapMsgBtnServer szMSG_START_SERVER 68. End Sub 69. 70. Public Sub MT5_BuyInMarket() 71. szPath = Chr$(34) + Application.ActiveWorkbook.Path + "\MsgFromExcel.py" + Chr$(34) 72. VBA.CreateObject("WScript.shell").Run """Python""" & szPath & " " & Str(iPort) & " " & szMSG_MT5_BUY, vbHide, True 73. End Sub 74. 75. Public Sub MT5_SellInMarket() 76. szPath = Chr$(34) + Application.ActiveWorkbook.Path + "\MsgFromExcel.py" + Chr$(34) 77. VBA.CreateObject("WScript.shell").Run """Python""" & szPath & " " & Str(iPort) & " " & szMSG_MT5_SELL, vbHide, True 78. End Sub
Código fuente en VBA
Este módulo contiene todo lo que necesitaremos después. Como puedes ver, aquí se declaran varias constantes y algunos procedimientos. Las constantes nos ayudan a ajustar el código más rápidamente. Cada procedimiento tiene su propia razón de ser y todos ellos son importantes dentro del código general. Presta atención a los detalles que explicaré para poder modificar adecuadamente este módulo en VBA.
Para empezar, veamos la línea 55. En realidad, no seguiremos el proceso de la forma convencional. Veremos las funciones y los procedimientos según su importancia para que Excel pueda controlar el servidor en Python. En la línea 55 tenemos el procedimiento que inicializará el servidor. Presta mucha atención al siguiente hecho: el script de Python debe estar en la misma carpeta que el archivo de Excel. Esto se debe a que, en la línea 58, estamos capturando mediante VBA el directorio donde se encuentra el archivo de Excel. Así, construimos la ruta completa junto con el nombre del script de Python.
Bien, ahora en la línea 59 declaramos los parámetros que se pasarán al script. Para entender correctamente esta línea, vuelve al artículo anterior y revisa el orden adecuado de los parámetros que el script debe recibir. En la línea 60 es donde ocurre parte de la magia, ya que esta línea llamará y comenzará a ejecutar el script de Python. Pero, surge una cuestión principal: esta línea no espera a que el código retorne; es decir, VBA llama al script del servidor y lo ejecuta como si fuera un hilo independiente. Ten en cuenta que esto no es una afirmación literal, sino una observación. Si consultas el administrador de tareas, verás que el script de Python aparecerá dentro del mismo bloque que la aplicación de Excel. Esto se puede observar en la siguiente imagen.

Este comportamiento indica que, al cerrar Excel, el script de Python también se cerrará. Si en el administrador de tareas se observara que el script está fuera del bloque de la aplicación de Excel, al cerrar Excel el script seguiría ejecutándose y habría que cerrarlo manualmente. Al final del procedimiento, en la línea 61, llamamos al procedimiento de la línea 31. En este procedimiento, realizamos los cambios en el objeto que representa el botón que inicializa y finaliza el servidor. Como dicho procedimiento es bastante simple y está directamente vinculado al shape, no hay mucho más que comentar al respecto.
Sin embargo, debes tener en cuenta lo siguiente: ni este procedimiento de la línea 31 ni el de la línea 55 están directamente vinculados al shape que inicia o detiene el servidor. Esa tarea la realiza, de hecho, otro procedimiento situado en la línea 47. Por tanto, el botón de inicio y parada del servidor ejecutará el procedimiento BtnServer_Click. De esta manera, tenemos un control sencillo y eficaz de lo que se mostrará en Excel. No obstante, explicar esta parte solo ha sido el principio; todavía quedan por comprender otros cuatro procedimientos más dentro de este mismo módulo.
Así que continuemos entendiendo lo que está vinculado al shape del botón de control del servidor. Observa que, en la rutina BtnServer_Click, además de la llamada para iniciar el servidor, tenemos también la llamada para finalizarlo. Esta se encuentra en la línea 49 y hace referencia a la línea 64. En este procedimiento StopServer, estamos haciendo las cosas de una manera un poco diferente. ¿Y por qué digo esto? El motivo es que, si estudias la interacción entre Excel y Python, verás que existen formas de leer, ejecutar o escribir, utilizando Python, procedimientos o variables declaradas en VBA. Entonces, podríamos simplemente escribir en una variable aquí en VBA, indicando que el servidor debe finalizarse. Así, cuando el script en Python accediera a esa variable, sabría que el servidor tendría que ser detenido.
Sin embargo, del mismo modo que podemos colocar el servidor en el mismo host que Excel, también podemos hacer esto colocando ambos en máquinas distintas. Y la comunicación se establecerá mediante sockets. Por esta razón es que estamos usando un procedimiento ligeramente diferente. Así, en la línea 65 indicamos dónde está el script en Python que enviará un mensaje al servidor. Dicho mensaje es, en realidad, un comando. En la línea 66 tenemos la información del comando que se pasará al servidor. Por ahora, no te preocupes por este script en Python; lo veremos después, pero hacia el final de este mismo artículo.
El siguiente procedimiento que tenemos es el de la línea 70, cuyo objetivo es enviar una solicitud a MetaTrader 5, al igual que el de la línea 75. Ambos procedimientos deberán vincularse a sus respectivos botones, de modo que el usuario pueda interactuar con ellos directamente desde Excel. Pero, si te fijas, tanto el procedimiento StopServer como los procedimientos MT5_BuyInMarket y MT5_SellInMarket utilizan el mismo script en Python. Sin embargo, a diferencia de StopServer, que ya es un procedimiento completamente funcional, los procedimientos MT5_BuyInMarket y MT5_SellInMarket no están realmente finalizados. El motivo es que estos procedimientos tienen un propósito meramente didáctico. Es decir, no hacen absolutamente nada; simplemente imprimirán un mensaje en el terminal de MetaTrader 5, pero esto lo veremos en el próximo artículo.
Para que estos dos procedimientos funcionen, tendrás que implementar un protocolo de comunicación que indique a MetaTrader 5 cuál es el símbolo y defina aspectos como el Stop Loss y el Take Profit de la posición. Creo que para la mayoría de los entusiastas esta será una tarea bastante agradable e incluso desafiante. Pero no es algo complicado de realizar. Solo será necesario indicar a VBA cómo construir un mensaje que pueda interpretar MetaTrader 5 para que las operaciones se ejecuten directamente desde esta plataforma. En el próximo artículo, explicaré este proceso con más detalle. Por ahora, no te preocupes por estos aspectos.
Para finalizar este módulo, tenemos otro procedimiento en la línea 12. El objetivo de este procedimiento es garantizar que los botones de interacción y control de Excel correspondan al estado actual de MetaTrader 5. Dicho de otro modo, cuando MetaTrader 5 esté sin conexión, los botones de interacción aparecerán en gris; cuando esté con conexión, se mostrarán en color. Así, el usuario final sabrá cuándo puede enviar comandos a MetaTrader 5.
Muy bien, hemos concluido la parte correspondiente al módulo en VBA. Pero esto no significa que hayamos terminado de programar lo esencial en Excel. Aún necesitamos realizar algunas tareas más para mejorar el soporte y la interacción. La siguiente acción que debemos llevar a cabo se puede ver en la siguiente imagen:

Y, para que no queden dudas sobre el código que se debe usar, justo debajo tienes el mismo código que aparece en la imagen.
1. Private Sub Worksheet_Change(ByVal Target As Range) 2. If Target.Address = CELL_MT5 Then 3. SwapStatusMT5 4. End If 5. End Sub
Código fuente en VBA
Pero, ¿qué hace exactamente este código? Bien, si no estás familiarizado con la programación en VBA y, especialmente, si no sueles crear código para Excel, esto podría resultarte algo confuso. Sin embargo, este código simplemente ajusta el estado de los botones que envían comandos a MetaTrader 5. Para lograrlo, se verifica constantemente el valor de una celda determinada por el servidor. Cuando el valor de esta celda cambia por cualquier motivo, se llama a la línea tres. Esto hará que los colores de los botones cambien automáticamente según el estado de MetaTrader 5 en relación con el servidor.
De este modo, ni tú ni el usuario final tendrán que leer el contenido de una celda específica; bastará con observar el color de los botones para saber si MetaTrader 5 está en línea o sin conexión. Un detalle importante, especialmente para quienes no saben cómo realizar este tipo de tareas en Excel: fíjate en la imagen anterior para saber en qué hoja debe colocarse el código para que cumpla su función. Si colocas este mismo código en la hoja incorrecta, no obtendrás el resultado esperado. Así que presta atención a este detalle.
Del mismo modo que hicimos en este punto, hay otra tarea que también debe realizarse. Al igual que fue necesario observar dónde colocar el código, aquí también deberá ubicarse en un lugar específico. Por tanto, el siguiente código debe insertarse tal como se muestra en la siguiente imagen.

Si tienes dudas sobre qué se debe colocar allí, mira el mismo código que aparece en la imagen anterior.
1. Private Sub Workbook_BeforeClose(Cancel As Boolean) 2. ThisWorkbook.Save 3. StopServer 4. End Sub 5. 6. Private Sub Workbook_Open() 7. InitServer 8. End Sub
Código fuente en VBA
Este es aún más sencillo, ya que solo tenemos dos manejadores de eventos bastante simples. El primero, Workbook_BeforeClose, se llamará cuando el usuario solicite cerrar el libro de Excel. Cuando esto ocurra, sucederán dos cosas. La primera se ve en la línea dos, donde se indica a Excel que guarde el libro. Así, aunque hayas modificado el libro, Excel no te pedirá confirmación para guardarlo, ya que se guardará automáticamente al cerrar el programa. La segunda acción se ve en la línea tres, donde llamamos al procedimiento visto en el módulo. Su objetivo es finalizar el servidor.
Muy bien, en la línea seis tenemos algo todavía más simple. En esta línea, donde tenemos el manejador de eventos Workbook_Open, simplemente hacemos, en la línea siete, la llamada al procedimiento del módulo que inicializa el servidor. Esta llamada a Workbook_Open se realizará cuando el libro se abra en Excel. Así, cuando tú o el usuario final pidan abrir el libro, este iniciará automáticamente el servidor, que quedará a la espera de empezar a recibir datos de MetaTrader 5.
Todo esto funciona perfectamente. Puedes crear el servidor en Python con exactamente el mismo código que se mostró en el artículo anterior, crear una hoja de cálculo sencilla, añadir algunos botones o shapes para la interacción y, por supuesto, asegurarte de que los nombres de las formas que se utilizarán en el código VBA son exactamente los mismos. Después, puedes probar el sistema. Verás que podrás inicializar el servidor sin ningún problema. Pero aún falta algo: el código de interacción de Excel con el servidor en Python.
Si has seguido toda la explicación, habrás visto que necesitamos otro código en Python. Este deberá llamarse MsgFromExcel.py. Para finalizar esta parte en Excel y en VBA, tenemos que revisar este último script. Antes de que empieces a desesperarte y a sentir que no entiendes nada, vamos a detenernos y a pensar un poco.
Cuando se inicializa Excel, se llama a la rutina Workbook_Open. Al hacerlo, llamará al procedimiento InitServer, que está presente en el módulo de VBA. Este procedimiento buscará en la misma carpeta donde se encuentra el libro un archivo llamado Server.py. Se trata del script del servidor en Python, que se puede ver en el artículo anterior. Cuando esta parte haya finalizado, Excel pasará a responder a los comandos y a las interacciones con el usuario de la forma habitual.
Si al intentar poner en marcha el sistema el servidor no se inicia, vuelve atrás y repite los pasos que acabo de explicar. Esto se debe a que el servidor debe inicializarse automáticamente. Si no es así, busca el fallo en tu código antes de continuar.
La siguiente etapa ocurre cuando finalizamos el servidor. Esto sucede cuando solicitamos que la aplicación de Excel se cierre o cuando realizamos una acción que hace la llamada al procedimiento StopServer. Cuando se realiza cualquiera de estas acciones, se ejecuta la línea 65 del módulo. Hasta ahora, no has visto el código que se ejecuta en ese punto. Para satisfacer esta curiosidad y mantener las cosas organizadas, veremos esto en otro tema.
Un cliente para Excel
Sí, es exactamente eso que acabas de leer. El script MsgFromExcel.py es, en realidad, un cliente. Se comunicará con el servidor, que también se ha abierto, y permanecerá activo en la sesión de Excel. Para facilitar la comprensión, a continuación se muestra el código de este archivo:
01. import socket as sock 02. import sys 03. 04. if sys.argv[2]: 05. conn = sock.socket(sock.AF_INET, sock.SOCK_STREAM) 06. try: 07. msg = '<mt5 with excel>:' + sys.argv[2] 08. conn.connect(('localhost', int(sys.argv[1]))) 09. conn.send(msg.encode()) 10. conn.close() 11. except: 12. sys.exit(1)
Código fuente en Python
Si tienes algo de experiencia en Python, al analizar este código probablemente ya habrás notado algo y estarás pensando lo siguiente: «Pero esto es un cliente que se abre, envía algo y luego cierra la conexión. ¿Cuál es el sentido de eso?». Efectivamente, el código mostrado anteriormente es un cliente TCP hecho en Python que hace exactamente eso. Se abre, envía algo al servidor y luego cierra la conexión, quedando listo para ser llamado nuevamente.
La razón de hacerlo así es que este cliente no necesita mantenerse conectado al servidor todo el tiempo. A diferencia del cliente en MQL5, que se ejecuta en MetaTrader 5, este solo tiene como finalidad enviar algún tipo de comando al servidor, ya sea para que ejecute algo o para que envíe información. Por eso, puedes ver cómo este mismo código se llama desde los procedimientos StopServer, MT5_BuyInMarket y MT5_SellInMarket. La idea es que realice una acción que no podríamos llevar a cabo si el servidor y Excel estuvieran en máquinas distintas.
Por este motivo, en este script se reciben dos parámetros. El primero indica el puerto que se utilizará. El segundo parámetro es el comando o mensaje que el servidor ejecutará o reenviará a MetaTrader 5. Una vez hecho esto, podemos cerrar la conexión que este cliente acaba de abrir.
En este punto de la explicación, me gustaría comentar algunas cosas que pueden ser importantes e incluso motivo de duda. Si estás empezando a programar, ya sea en Python o en VBA, y te ha parecido interesante lo que se ha mostrado, quiero que sepas que esta es solo una forma que he encontrado para ser didáctico. Gran parte de lo que se ha hecho aquí puede mejorarse, y mucho. Sobre todo, porque no hice ni incluí muchas pruebas en el código. Pero lo que quiero destacar es que este cliente en concreto, el que está hecho en Python, podría convertirse muy fácilmente en un código en VBA.
Así pues, el único módulo que estaría en Python sería el que crea el servidor. Sin embargo, como el código en Python es considerablemente más sencillo y fácil de entender que una implementación del mismo cliente en VBA, preferí dejar el código en Python. Pero, si quieres intentar hacer lo mismo con VBA, prepárate, porque el proceso que hay que seguir para hacer lo mismo que aquí, pero con VBA, es mucho más complicado.
Consideraciones finales
Aunque en este artículo aún no hayamos finalizado la explicación de cómo promover la comunicación entre Excel y MetaTrader 5. Estamos a punto de concluir este desafío. Sin embargo, antes de pasar al siguiente, quiero que tú, querido lector, procures comprender estos dos artículos, tanto este como el anterior. Así podrás entender realmente el próximo artículo, en el que abordaré exclusivamente la parte referente a la programación en MQL5. Aunque en él también procuraré que sea fácil de entender. Si no comprendes estos dos últimos artículos, con toda seguridad tendrás grandes dificultades para entender el siguiente. El motivo es simple: los contenidos se van acumulando. Cuantas más cosas haya que hacer, más cosas será necesario crear y comprender para alcanzar el objetivo.
Espero que, antes de intentar leer e implementar lo que se verá en el próximo artículo, hayas entendido y practicado lo visto hasta ahora. En caso de duda, te recomiendo que estudies los artículos anteriores, ya que, como mencioné al principio, el tema de los sockets es bastante denso y tiene muchos detalles. Algunos de estos detalles son más sencillos y otros bastante complicados. Sin embargo, es muy importante entender este asunto para otras cosas que puedan surgir en el futuro.
Y aunque puedas pensar que este tema de los sockets no forma parte del sistema de repetición o simulador, quiero que reconsideres esa idea. Si en algún momento deseas crear un sistema de repetición o simulador que no dependa de algo que se esté ejecutando dentro de MetaTrader 5, como se ha hecho hasta ahora, necesitarás comprender cómo funcionan los sockets. Así, podrás simular las cosas no de la manera que he mostrado, sino simulando el servidor de trading e indicando simplemente a MetaTrader 5 que se conecte a ese servidor que tú mismo estarás emulando.
Pero, como el propósito aquí es otro, hablaremos de este tipo de cuestiones en otro momento. Entonces, nos vemos en el próximo artículo.
| Archivo | Descripción |
|---|---|
| Experts\Expert Advisor.mq5 | Demuestra la interacción entre Chart Trade y el Asesor Experto (es necesario el Mouse Study para la interacción) |
| Indicators\Chart Trade.mq5 | Crea la ventana para configurar la orden a ser enviada (es necesario el Mouse Study para la interacción) |
| Indicators\Market Replay.mq5 | Crea los controles para la interacción con el servicio de reproducción/simulador (es necesario el Mouse Study para la interacción) |
| Indicators\Mouse Study.mq5 | Permite la interacción entre los controles gráficos y el usuario (necesario tanto para operar el sistema de repetición como en el mercado real) |
| Servicios\Market Replay.mq5 | Crea y mantiene el servicio de reproducción y simulación de mercado (archivo principal de todo el sistema) |
| Código VS C++\Server.cpp | Crea y mantiene un socket servidor desarrollado en C++ (versión MiniChat). |
| Code in Python\Server.py | Crea y mantiene un socket en Python para la comunicación entre MetaTrader 5 e o Excel |
| Scripts\CheckSocket.mq5 | Permite realizar una prueba de conexión con un socket externo |
| Indicators\Mini Chat.mq5 | Permite implementar un minichat mediante un indicador (requiere el uso de un servidor para funcionar) |
| Experts\Mini Chat.mq5 | Permite implementar un mini chat mediante un Asesor Experto (requiere el uso de un servidor para funcionar) |
Traducción del portugués realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/pt/articles/12828
Advertencia: todos los derechos de estos materiales pertenecen a MetaQuotes Ltd. Queda totalmente prohibido el copiado total o parcial.
Este artículo ha sido escrito por un usuario del sitio web y refleja su punto de vista personal. MetaQuotes Ltd. no se responsabiliza de la exactitud de la información ofrecida, ni de las posibles consecuencias del uso de las soluciones, estrategias o recomendaciones descritas.
Automatización de estrategias de trading en MQL5 (Parte 4): Creación de un sistema de recuperación de zonas multinivel
Desarrollamos un asesor experto multidivisas (Parte 23): Ordenando la cadena de etapas de optimización automática de proyectos (II)
Gestión de capital en el trading y programa de contabilidad doméstica del tráder con base de datos
Añadimos un LLM personalizado a un robot comercial (Parte 5): Desarrollar y probar la estrategia de negociación con LLMs (IV) - Probar la estrategia de trading
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso