Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1013

 

¿Cómo puedo controlar las órdenes pendientes en MQL5?


El problema es que necesito las siguientes funciones: "No confundir posiciones y órdenes pendientes".


Entonces, ¿cómo puedo obtener información sobre esos pedidos pendientes?

 
Alexandr Sokolov:

¿Cómo puedo controlar las órdenes pendientes en MQL5?


El problema es que necesito las siguientes funciones: "No confundir posiciones y órdenes pendientes".


Entonces, ¿cómo puedo obtener información sobre esos pedidos pendientes?

Sólo tengo que leer los pedidos pendientes. Por ejemplo, esta función es sólo para las órdenes de stop pendientes:

//+------------------------------------------------------------------+
//| Calculate all pending orders                                     |
//+------------------------------------------------------------------+
void CalculateAllPendingOrders(int &count_buy_stops,int &count_sell_stops)
  {
   count_buy_stops   = 0;
   count_sell_stops  = 0;

   for(int i=OrdersTotal()-1; i>=0; i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==InpMagic)
           {
            if(m_order.OrderType()==ORDER_TYPE_BUY_STOP)
               count_buy_stops++;
            else
               if(m_order.OrderType()==ORDER_TYPE_SELL_STOP)
                  count_sell_stops++;
           }
  }
 
Vladimir Karputov:

Sólo hay que leer las órdenes pendientes. Por ejemplo, esta función es sólo para las órdenes de stop pendientes:

¡Muchas gracias!


Estaba mirando el ejemplo y todo es a través de Position...

 
Alexandr Sokolov:

¡Muchas gracias!


Es que he mirado el ejemplo y es todo a través de Position...

Aquí hay un ejemplo que compila:

//+------------------------------------------------------------------+
//|                                    CalculateAllPendingOrders.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
#property script_show_inputs
//---
#include <Trade\SymbolInfo.mqh>
#include <Trade\OrderInfo.mqh>
//---
CSymbolInfo    m_symbol;                     // object of CSymbolInfo class
COrderInfo     m_order;                      // object of COrderInfo class
//--- input parameters
input ulong    InpMagic             = 200;         // Magic number
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   if(!m_symbol.Name(Symbol())) // sets symbol name
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: CSymbolInfo.Name");
      return;
     }
//---
   int count_buy_stops=0,count_sell_stops=0;
   CalculateAllPendingOrders(count_buy_stops,count_sell_stops);
  }
//+------------------------------------------------------------------+
//| Calculate all pending orders                                     |
//+------------------------------------------------------------------+
void CalculateAllPendingOrders(int &count_buy_stops,int &count_sell_stops)
  {
   count_buy_stops   = 0;
   count_sell_stops  = 0;

   for(int i=OrdersTotal()-1; i>=0; i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==InpMagic)
           {
            if(m_order.OrderType()==ORDER_TYPE_BUY_STOP)
               count_buy_stops++;
            else
               if(m_order.OrderType()==ORDER_TYPE_SELL_STOP)
                  count_sell_stops++;
           }
  }
//+------------------------------------------------------------------+
Archivos adjuntos:
 
Alexandr Sokolov:

¿Cómo puedo controlar las órdenes pendientes en MQL5?


El problema es que necesito las siguientes funciones: "No confundir posiciones y órdenes pendientes".


Entonces, ¿cómo puedo obtener información sobre esos pedidos pendientes?

La diferencia es que en mql4 la función OrdersTotal() devuelve el número total de órdenes de mercado y pendientes. Y en mql5 sólo devuelve el número de órdenes pendientes. Y para obtener el número de posiciones, en términos de órdenes de mercado mql4, función PositionsTotal()

 
Alexey Viktorov:

No he visto el hilo en el foro, pero después de mirar unas cuantas instrucciones, me parece más comprensible esta. Lo he probado, ha funcionado, pero no veo la necesidad de aplicarlo todavía. Aunque creo que sería una buena idea combinar el historial de todos los terminales en una sola carpeta.

He leído el artículo en el enlace. Es brillante. Y es una súper solución, para los que tienen muchos terminales. Ahora puede haber una carpeta mql4 para diferentes terminales, sin tener que copiar constantemente los archivos de un lado a otro.

¡¡¡muchas gracias!!!

 
Sergey Likho:

He leído el artículo en el enlace. Es brillante. Y es una súper solución, para los que tienen muchos terminales. Ahora puede haber una carpeta mql4 para diferentes terminales, sin tener que copiar constantemente los archivos de un lado a otro.

¡¡¡muchas gracias!!!

No soy yo quien tiene que dar las gracias. He prestado atención a los posts de Sergei Tabolin y he hecho coincidir algunas de las palabras de los mismos con el deseo de Seric29, bueno lo he buscado yo mismo.

 

Hola.

Por favor, ayúdenme a resolver el código.

Intenté poner la parrilla en el mercado y empezaron a insultarme:2016.04.01 00:02:00 1111111113241135454356146 EURUSD,H1: cantidad de lotes no válida para lafunción FreeMarginCheck

archivo adjunto del Asesor Experto.

Gracias de antemano.

Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
  • www.mql5.com
//| Expert initialization function                                   | //| Expert deinitialization function                                 | //| Expert tick function                                             | //| test1                                                            |...
Archivos adjuntos:
123.mq4  87 kb
 
Dmitriy Prigodich:

Hola.

Por favor, ayúdenme a resolver el código.

Intenté poner la parrilla en el mercado y empezaron a insultarme:2016.04.01 00:02:00 1111111113241135454356146 EURUSD,H1: cantidad de lotes no válida para la función FreeMarginCheck

archivo adjunto del Asesor Experto.

Gracias de antemano.

También dice: cantidad de lotes no válidos

La función FreeMarginCheck no comprueba los argumentos del Asesor Experto y no añade un tamaño de lote normalizado.

PS - bueno, no poner todo en una fila en el mercado, más cosa que ellos mismos no utilizan. Necesita calificación, llenar mejor la codobase

 

Quería hacer un vídeo, pero no tengo cámara, y tengo un viejo teléfono de la época de los Guisantes del Zar. Así que creé un experto y lo llamé 111.mq4

Este es su código primitivo.

#property strict
#import "111б.ex4"//111б.mq4
int Funi(string Soob);
#import

int OnInit(){Funi(Symbol());return(INIT_SUCCEEDED);}
void OnDeinit(const int reason){}
void OnTick(){Funi(Symbol());}


y luego creé una biblioteca y la llamé 111b.mq4 con el código primitivo

#property library
#property strict
 string  st_mas[]; //export
 int Funi(string Soob)export
 {st_mas[(ArrayResize(st_mas,ArrayRange(st_mas,0)+1))-1]=Soob;
 Print("Размер массива = ",ArrayRange(st_mas,0));
 for(int i=0;i<ArrayRange(st_mas,0);++i)
 Print("Вывод массива ",st_mas[i]);
 return 2;}

. Declaré un array de cadenas dentro de la librería, pero resultó que después, los desarrolladores no proporcionaron la posibilidad de exportar e importar arrays y variables. Resulta que no hay manera de conseguir un array global que recuerde la información. Pero no importa, tomé otro camino. He creado la funciónFuni(). Luego he creado enlaces duros por terminales de teclas H se establecen así

Los archivos originales están en Forex4you, y los enlaces en Forex4you1 lancé el robot original y el enlace al gráfico, los primeros cálculos se obtuvieron, pero cuando las garrapatas se fue sólo original Forex4you actualiza la información y la matrizst_mas aumentó de tamaño, pero cuando las garrapatas se fue a Forex4you1 no pasa nada sólo cuando el archivo manualmente llega a la tabla. Entonces tomé otro camino. Hice un Asesor Experto llamado 333.mq4 y lo instalé en MT4 Forex4you1 y conecté la biblioteca 111b.mq4 a ella y lancé el programa en un gráfico. El robot 333.mq4 fue capaz de conectarse al enlace de la biblioteca y esta cosa comenzó a funcionar en línea, pero como resultó más tarde la biblioteca era un prototipo y la matriz declarada en ella funciona dentro de un solo gráfico

El ejemplo muestra que aunque el robot esté conectado a una biblioteca con un array global, ese array funciona como una imagen y todavía no puede proporcionar comunicación, necesitamos crear variables compartidas que estén disponibles desde todos los lados. Quién sabe si es posible exportar arrays y variables. Creo que la segunda opción es escribir la información en un archivo, porque el archivo no será un proxy y será leído desde ambos lados y así los terminales y los robots podrán comunicarse entre sí. Quien sepa trabajar con archivos que compruebe esta teoría ya que no tengo esa experiencia todavía.

¿Sabéis si se pueden exportar arrays y variables?