Discusión sobre el artículo "Biblioteca para el desarrollo rápido y sencillo de programas para MetaTrader (Parte VII)"
Me gustaría ver la implementación de varios CTs utilizando esta biblioteca y alternativas.
Y análisis comparativos, por supuesto. En particular, el rendimiento en el Probador/Optimizador, el tamaño del código y la velocidad de su escritura.
Todavía es pronto. De momento no hemos preparado la funcionalidad necesaria para hacer realidad la declarada sencillez de crear nuestros propios programas. Todavía se está creando la base necesaria. En la octava parte se implementa y describe la funcionalidad para el seguimiento de otros eventos, como la modificación de órdenes y posiciones, sus niveles de stop. Se está preparando el siguiente artículo, que iniciará la finalización para la compatibilidad con MQL4. El siguiente paso será crear clases comerciales completas, luego trabajar con símbolos y cuentas. Y luego crearemos funciones de caso de usuario para un acceso fácil y rápido a cualquier dato recogido y controlado por la biblioteca. Y esta no será la etapa final, ya que se está preparando un conjunto de posibilidades de uso de nuevos objetos gráficos integrados en la biblioteca, con acceso a ellos como estándar. Es decir, la biblioteca tendrá la capacidad de crear sus propios objetos gráficos, y disponer de su propio caparazón gráfico en el lienzo + la posibilidad de crear a partir de este conjunto sus propios elementos gráficos para sus programas. Esto es de lo previsto anteriormente, pero todavía hay planes para su aplicación.
Y la realización de TC - será posible, en particular, después de la creación de casos de usuario-funciones. Aunque, por supuesto, es posible hacer algo incluso ahora, pero no rápida y fácilmente - porque requiere acceso directo a listas y objetos de biblioteca por punteros, y esto no es "tomar y obtener" - sin embargo, tal acceso está parcialmente organizado en los ejemplos de asesores adjuntos a los artículos.
... Y esta no será la etapa final, ya que se está preparando un conjunto de posibilidades para utilizar nuevos objetos gráficos integrados en la biblioteca, con el acceso habitual a ellos - como a los estándar. Es decir, la biblioteca tendrá la capacidad de crear sus propios objetos gráficos, y tener su propio caparazón gráfico en el lienzo + la capacidad de crear a partir de este conjunto de sus propios elementos gráficos para sus programas....
¿Escribirás una biblioteca gráfica en canvas?
Sí, por supuesto. No sólo sobre él. Algunos objetos "compuestos" del conjunto de objetos gráficos estándar estarán disponibles para su creación, además se ofrecerán formularios para crear tu propia GUI con acceso completo a todos los datos recogidos y controlados por la librería - algún conjunto de objetos listos, más la posibilidad de construir tu propia GUI a partir de ellos. Naturalmente, todo se hace para que el usuario tenga acceso completo a cualquier necesidad de una biblioteca - "out of the box" por así decirlo. Conecta una librería y tendrás toda la funcionalidad necesaria para crear cualquiera de tus deseos - sin buscar las soluciones necesarias escritas y publicadas en algún sitio.
Sí, claro. No sólo en ella. Habrá disponibles para su creación algunos objetos "compuestos" a partir del conjunto de objetos gráficos estándar, además se ofrecerán formularios para crear tu propia GUI con acceso completo a todos los datos recogidos y controlados por la librería - algún conjunto de objetos listos, más la posibilidad de construir tu propia GUI a partir de ellos. Naturalmente, todo se hace para que el usuario tenga acceso completo a cualquier necesidad de una biblioteca - "out of the box" por así decirlo. Conecte una librería, y tendrá toda la funcionalidad necesaria para crear completamente cualquiera de sus deseos - sin buscar las soluciones requeridas escritas y publicadas en alguna parte.
Es decir, creará un entorno de software multiplataforma con todas las posibilidades para crear cualquier EA. Librería universal para ambas plataformas con gráficos sobre lienzo.
...sin encontrar las soluciones necesarias escritas y publicadas en alguna parte.
¿Significa eso que la biblioteca se convertirá en una biblioteca de personal?
No. Esto significa que una biblioteca será suficiente.
Artem, ¡gracias!
En el método:
//+------------------------------------------------------------------+ //|| Actualiza la lista de pedidos| //+------------------------------------------------------------------+ void CMarketCollection::Refresh(void)
Una "orden de mercado" se crea dinámicamente
#else //--- Posiciones int total_positions=::PositionsTotal(); for(int i=0; i<total_positions; i++) { ulong ticket=::PositionGetTicket(i); if(ticket==0) continue; CMarketPosition *position=new CMarketPosition(ticket); if(position==NULL) continue; //--- Añadir un objeto de posición a la lista de órdenes de mercado y posiciones if(!this.AddToListMarket(position)) continue; //--- Obtener el índice de orden de control por ticket e identificador de posición int index=this.IndexControlOrder(ticket,position.PositionID()); //--- Si el pedido no está en la lista de pedidos de control - añádalo if(index==WRONG_VALUE) { if(!this.AddToListControl(position)) { ::Print(DFUN_ERR_LINE,TextByLanguage("Fallo al añadir posición de control","Failed to add a control position "),position.TypeDescription()," #",position.Ticket()); } } //--- Si el pedido ya existe en la lista de pedidos de control - compruebe si hay cambios en sus propiedades else if(index>WRONG_VALUE) { this.OnChangeEvent(position,index); } } //--- Pedidos int total_orders=::OrdersTotal(); for(int i=0; i<total_orders; i++) { ulong ticket=::OrderGetTicket(i); if(ticket==0) continue; ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)::OrderGetInteger(ORDER_TYPE); //--- Orden de mercado if(type<ORDER_TYPE_BUY_LIMIT) { CMarketOrder *order=new CMarketOrder(ticket); if(order==NULL) continue; //--- Añadir objeto de orden de mercado a la lista de órdenes de mercado y posiciones if(!this.AddToListMarket(order)) continue; } //--- Orden pendiente else { CMarketPending *order=new CMarketPending(ticket); if(order==NULL) continue; //--- Añadir un objeto de orden pendiente a la lista de órdenes de mercado y posiciones if(!this.AddToListMarket(order)) continue; //--- Obtener el índice de orden de control por ticket e identificador de posición int index=this.IndexControlOrder(ticket,order.PositionID()); //--- Si el pedido no está en la lista de pedidos de control - añádalo if(index==WRONG_VALUE) { if(!this.AddToListControl(order)) { ::Print(DFUN_ERR_LINE,TextByLanguage("Fallo al añadir orden de control","Failed to add a control order "),order.TypeDescription()," #",order.Ticket()); } } //--- Si el pedido ya existe en la lista de pedidos de control - compruebe si hay cambios en sus propiedades else if(index>WRONG_VALUE) { this.OnChangeEvent(order,index); } } } #endif
Luego se pasa por referencia al método :
//--- Añadir objeto de orden de mercado a la lista de órdenes de mercado y posiciones if(!this.AddToListMarket(order)) continue;
En el método"AddToListMarket" la orden de mercado no se tiene en cuenta en la suma hash "hash_sum" entonces ¿por qué necesitamos introducirla y controlarla?
Por favor, explique por qué lo necesitamos, si podemos averiguar toda la información de la posición o de la orden pendiente?
- 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
Artículo publicado Biblioteca para el desarrollo rápido y sencillo de programas para MetaTrader (Parte VII): Eventos de activación de órdenes StopLimit, preparación de la funcionalidad para los eventos de modificación de órdenes y posiciones:
En anteriores artículos comenzamos a crear una gran biblioteca multiplataforma cuyo objetivo es simplificar la creación de programas para las plataformas MetaTrader 5 y MetaTrader 4. En la sexta parte, enseñamos a la biblioteca a trabajar con posiciones en las cuentas de compensación. En esta parte, implementaremos el seguimiento de los eventos de activación de órdenes StopLimit y prepararemos la funcionalidad necesaria para monitorear la modificación de órdenes y posiciones.
Para comprobar las mejoras realizadas, vamos a usar el asesor del artículo anterior. Solo tenemos que cambiar el nombre de TestDoEasyPart06.mq5 de la carpeta \MQL5\Experts\TestDoEasy\Part06 a TestDoEasyPart07.mq5 y guardarlo en la nueva subcarpeta \MQL5\Experts\TestDoEasy\ Part07.
Lo compilamos, lo iniciamos en el simulador, colocamos una StopLimit y esperamos a que se active:
Autor: Artyom Trishkin