Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 100

 
ulong  HistoryDealGetTicket(
   int  index      // номер сделки
   );

¿Qué es un número de transacción?

¿Cómo selecciono la última operación? ¿Índice 0?

Tengo una cuenta con una posición abierta y un historial de operaciones. Quiero seleccionar la última operación:

#include <Trade\DealInfo.mqh>  

CDealInfo deal;  

   for(int n=20;n>=0;n--)
     {
      deal.SelectByIndex(n);
      Print("Тикет сделки=",deal.Ticket()," n=",n);
     }


Todas las garrapatas 0...
 
tor4en:
ulong  HistoryDealGetTicket(
   int  index      // номер сделки
   );

¿Qué es un número de transacción?

Véase la descripción de la función HistoryDealGetTicket(). También hay un ejemplo de cómo trabajar con una lista de ofertas.
 
Yedelkin:
Véase la descripción de la función HistoryDealGetTicket(). También hay un ejemplo de cómo trabajar con la lista de ofertas.
No está claro cómo trabajar con la función SelectByIndex() de la biblioteca estándar.
 
tor4en No está claro cómo manejar la función SelectByIndex() de la biblioteca estándar.
He intentado sugerir una respuesta a su pregunta "¿Qué es un número de transacción?". ¿Podemos suponer que se ha ocupado de esta cuestión?
 
Yedelkin:
He intentado sugerir una respuesta a su pregunta "¿Qué es un número de transacción? ¿Podemos suponer que se ha ocupado de esta cuestión?
Puede, gracias. ¿Pueden decirme si es posible seleccionar la última oferta de una posición sin tener que recorrer las ofertas y comparar los tiempos o sus entradas?
 
tor4en: ¿Sabes si es posible seleccionar la última operación de una posición sin tener que recorrer las operaciones y comparar tiempos o ticks?

1. Lamentablemente, trato de no utilizar la Biblioteca Estándar, por lo que no puedo sugerir correctamente cómo trabajar con el método SelectByIndex(). Sólo puedo observar que la propia clase CDealInfo se posiciona como una clase para trabajar con las propiedades de las transacciones, es decir, las cuestiones de obtener la lista de transacciones parecen quedar fuera.

2. Como sabe, el método SelectByIndex() simplemente utiliza la función HistoryDealGetTicket(). De la descripción de esta funciónse deduce que antes de acceder a la operación es necesario obtener la lista de todas las operaciones . En particular,

//--- запросим историр ю сделок в указанном интервале
   HistorySelect(from_date,to_date);
//--- общее количество в списке сделок
   int deals=HistoryDealsTotal();
//--- теперь обработаем каждую сделку
   for(int i=0;i<deals;i++)
     {
      deal_ticket=HistoryDealGetTicket(i);
      ...
     }

Hace aproximadamente un año, pregunté en el foro, si es posible considerar que la última oferta de la lista siempre tiene un índice de HistoryDealsTotal()-1, pero no recibí respuesta (o no me di cuenta, lo cual es poco probable). Utilizando el método de la prueba científica, no he encontrado una refutación de esta tesis. Así que, lógicamente, cada nueva operación, cuya información se recibe en el terminal base, debería simplemente aumentar la lista de operaciones en uno y, respectivamente, los índices de la lista de operaciones se asignarían a cada nueva operación en orden ascendente. Cómo es en realidad - no lo sé.

3. También sugiero leer el artículoÓrdenes, Posiciones y Operaciones en MetaTrader 5 y (no lo he leído yo) - Cómo utilizar las clases comerciales de la Biblioteca Estándar al escribir un Asesor Experto.

Eso es todo :)

 
HistoryDealsTotal()-1
Esto parece ser una buena idea. Si buscamos ofertas por posición específica, es mejor utilizar HistorySelectByPosition(position_ID). Gracias.
Документация по MQL5: Торговые функции / HistorySelectByPosition
Документация по MQL5: Торговые функции / HistorySelectByPosition
  • www.mql5.com
Торговые функции / HistorySelectByPosition - Документация по MQL5
 
tor4en: Si buscamos ofertas en una posición específica, es mejor utilizar HistorySelectByPosition().
Exactamente :)
 
¡¡¡Hola!!!

Expertos, ayuda, por favor. Construí dos EAs para, por así decirlo, hacer un efecto sinérgico, los más simples parecen conectarse, pero este no compila, aunque he hecho todo correctamente como con el anterior. Esto es lo que da de sí

'Supervisor' - la función sólo puede ser declarada en el ámbito global 20_200_pips_MQL5_v1.mq5 360 18

'Perceptron' - la función sólo puede declararse en el ámbito global 20_200_pips_MQL5_v1.mq5 418 8

'basicTradingSystem' - la función sólo puede declararse en el ámbito global 20_200_pips_MQL5_v1.mq5 434 6

La función sólo puede declararse en el ámbito global

Estoy muy confundido donde está el alcance global

 
chipo: He conectado dos EAs por algún efecto de sinergia, los más sencillos parecen conectarse, pero este no compila, aunque he hecho todo correctamente como con el anterior. Esto es lo que da

'Supervisor' - la función sólo puede ser declarada en el ámbito global 20_200_pips_MQL5_v1.mq5 360 18

'Perceptron' - la función sólo puede declararse en el ámbito global 20_200_pips_MQL5_v1.mq5 418 8

'basicTradingSystem' - la función sólo puede declararse en el ámbito global 20_200_pips_MQL5_v1.mq5 434 6

La función sólo puede declararse en el ámbito global

Estoy muy confundido donde está el alcance global

Estos mensajes aparecen, por ejemplo, cuando se declara una función dentro de otra. Mira si hay algo así en el código:

func_1()
   {
    void  func_2()...
   }
Razón de la queja: