Discusión sobre el artículo "Desarrollando un EA comercial desde cero (Parte 19): Un nuevo sistema de órdenes (II)"

 

Artículo publicado Desarrollando un EA comercial desde cero (Parte 19): Un nuevo sistema de órdenes (II):

Aquí vamos a desarrollar un sistema gráfico de órdenes, del tipo «vea lo que está pasando». Cabe decir que no partiremos de cero, sino que modificaremos el sistema existente añadiendo aún más objetos y eventos al gráfico del activo que estamos negociando.

Hay varias formas de modelar los datos, y cada una tiene sus pros y sus contras.

  • Una primera forma sería utilizar una lista, ya sea enlazada simple circular, enlazada doblemente circular o incluso un sistema de hashing. La ventaja en utilizar cualquiera de estos enfoques es la simplicidad al implementar el sistema, la desventaja es que vamos a obstaculizar la manipulación de los datos o limitar el número de órdenes, pero de una manera u otra en este caso tendríamos que crear toda una lógica extra, solo para mantener la lista.
  • Una segunda forma sería crear un array de clase, donde la clase tendría y daría soporte a todos los nuevos objetos creados, en este caso el array funcionaría como una lista, solo que tendríamos que crear menos código, porque MQL5 ya da soporte a varias cosas que tendríamos que codificar en el caso de la lista, pero tendríamos otros problemas como el manejo de eventos, que en este caso sería algo bastante complicado.
  • Una tercera vía es la que utilizaremos, haremos que el código creado en MQL5 dé soporte a objetos dinámicos, parece surrealista, pero si hacemos un correcto modelado de los datos a utilizar, el lenguaje MQL5 nos dará el soporte para crear un sistema donde no habrá límites en el número de objetos en pantalla, y todos ellos podrán generar y recibir eventos, pero a pesar de ser individuales, la plataforma los verá a todos ellos conectados como si estuvieran en una lista o en un índice de array.

Si crees que esto no es fácil de lograr, mira el siguiente fragmento en la clase C_HLineTrade:

inline void SetLineOrder(ulong ticket, double price, eHLineTrade hl, bool select)
{
        string sz0 = def_NameHLineTrade + (string)hl + (string)ticket, sz1;
                                
        ObjectCreate(Terminal.Get_ID(), sz0, OBJ_HLINE, 0, 0, 0);

//... Restante do código da classe .... 

Este fragmento resaltado muestra exactamente eso, podemos crear tantas líneas horizontales como queramos, y ellas recibirán eventos de forma totalmente independiente, pero lo único que tenemos que hacer es implementar los eventos basados en el nombre que tendrá cada una de las líneas, ya que los nombres serán únicos, la plataforma MetaTrader 5 se encargará del resto por nosotros, así que el resultado será efectivamente como se ve a continuación:


Autor: Daniel Jose