Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 21

 
bablusut:

Gracias por la respuesta... Así, para buscar órdenes en el historial de operaciones, utilizamos la funciónOrdersHistoryTotal, que, tras descartar todo lo que no necesitamos, tiene el siguiente aspecto

for(int i=OrdersHistoryTotal()-1; i>=0; i--) // - la pregunta aquí es qué significa "accTotal"en la plantilla de la función que descartamos, y por qué tomó "i--" y no "i++" como en la plantilla.
- la segunda funciónOrderComment devuelve el comentario de la orden seleccionada si es seleccionada por la función anteriorOrdersHistoryTotal, toma la forma

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) //- donde "i", esto es "i>=0" de la función anterior, y "SELECT_BY_TICKET" fue reemplazado por "SELECT_BY_POS" y "MODE_HISTORY"fue añadido- ¿por qué?

- La tercera línea es la definición, en realidad no necesitamos comprobar la orden necesaria ya que sólo tenemos órdenes de mercado cerradas por TP y SL en este historial (podríamos tener una orden pendiente cerrada, pero será raro), todos los demás parámetros de la orden no son importantes para nosotros. Lo único importante es que la cantidad de pedidos cerrados en el historial aumentará constantemente, ¿es posible hacer que nuestro recálculo no tome todos los pedidos cerrados sino una cierta cantidad de los últimos, por ejemplo, 5-10?

- Las últimas cuatro líneas son bastante claras, la única duda es sobre la función PlaySound, cuyo código debe insertarse después de cada línea"Print("..." así



OrderComment devuelve el comentario de la orden seleccionada, si es seleccionada por la función anteriorOrdersHistoryTotal - esta función no selecciona nada - devuelve el número total de órdenes cerradas y eliminadas(El número de órdenes cerradas y eliminadas en el historial de la cuenta actual, cargado en el terminal del cliente.El tamaño de la lista del historial depende de la configuración actual de la pestaña "Historial de cuentas" del terminal. Cita del tutorial).


accTotal en el ejemplo del tutorial:

int i,accTotal=OrdersHistoryTotal(); - Se trata de una variable int - que toma el valor OrdersHistoryTotal
for(i=0;i<accTotal;i++)// La forma de recorrer la lista del historial no es importante del primer al último orden o viceversa, sigue recorriendo toda la lista en secuencia.

Pero en el caso anterior, hay 1 variable menos, pero la petición OrdersHistoryTotalse procesa en cada ciclo.

SELECT_BY_POS - el parámetro índice contiene el número de índice de la orden en la lista, la lista misma es el segundo operador - MODE_HISTORY es la lista de cerrados, MODE_TRADES - abiertos o pendientes. SELECT_BY_TICKET - el número de billete se pasa en el parámetro índice. Que debe ser tomado en algún lugar antes de seleccionar el pedido.


- Las

últimas cuatro líneas están en general claras, la única duda es sobre la función PlaySound, cuyo código debe insertarse después de cada línea "Print("..."

de

la siguiente

forma

:

bool PlaySound(

string payment // file name

)

; ...

¿O también se convierte de alguna manera

?

Declare

bool PlaySound( en la cabecera del programa - obtendrá la posibilidad de activar y desactivar el sonido en el archivo establecido extern bool Play = TRUE;

entonces, ¿qué imprimirá Print? ¿Y en qué condiciones?

¿Qué significa esta acción? ¿Reproducir un sonido cuando se cierra la orden y escribir el comentario (por TP o SL)?






 
bablusut:
Graciasa Vitalie Postolache por la ayuda, gracias por el consejo, y la información sobre estos libros de texto es probablemente un poco tarde para mí para estudiar en mi sexta década, probablemente no puedo hacer tanto, debería haber antes, pero no había tiempo. Realmente te estoy aburriendo aquí, lo siento si eso, no voy a seguir, me voy.
Prefiero tener un tema aparte, quiero que funcione así. Me interesará, por ejemplo, ver diferentes opciones y también entender cuál de ellas es más correcta desde el punto de vista de la lógica.
 

Por cierto, yo también tengo una pregunta.

Tengo que hacer un cheque de difusión.

He estado utilizando una simple petición de su valor y la prohibición de abrir una orden si el spread supera el valor especificado.

Pero lo que ha ocurrido es que cuando el spread está disminuyendo, el EA abre una orden y ese spread aumenta.

Ahora no encuentro la forma correcta de tenerlo en cuenta: si añadimos el spread al array cada tick, ¿qué tamaño tendrá el array? Entonces, ¿cuánto tiempo durará?

Por supuesto, podemos no utilizar valores similares o utilizar sólo valores menores y mayores, pero en este caso tenemos que ponerlo a cero de alguna manera.

Y lo más importante, no puedo entender si debo tener en cuenta el diferencial mínimo y máximo o una indicación de sus saltos.
 
struct MqlRates
  {
   datetime time;         // время начала периода
   double   open;         // цена открытия
   double   high;         // наивысшая цена за период
   double   low;          // наименьшая цена за период
   double   close;        // цена закрытия
   long     tick_volume;  // тиковый объем
   int      spread;       // спред
   long     real_volume;  // биржевой объем
  };
¿Puede decirme qué valor de Spread se guardará? ¿El estado al inicio de la apertura del bar?
 
A1exPit:
struct MqlRates
  {
   datetime time;         // время начала периода
   double   open;         // цена открытия
   double   high;         // наивысшая цена за период
   double   low;          // наименьшая цена за период
   double   close;        // цена закрытия
   long     tick_volume;  // тиковый объем
   int      spread;       // спред
   long     real_volume;  // биржевой объем
  };
¿Puede decirme qué valor de Spread se guardará? ¿Es el estado al principio de la apertura del bar?

int spread;// spread

es decir, no

 
A1exPit:
struct MqlRates
  {
   datetime time;         // время начала периода
   double   open;         // цена открытия
   double   high;         // наивысшая цена за период
   double   low;          // наименьшая цена за период
   double   close;        // цена закрытия
   long     tick_volume;  // тиковый объем
   int      spread;       // спред
   long     real_volume;  // биржевой объем
  };
¿Puede decirme qué valor de Spread se guardará? ¿Es el estado al principio de la apertura del bar?
Si solicita la barra actual, entonces el spread actual, si desde el historial, entonces en el momento del cierre.
 
Vitalie Postolache:
Si pide la barra actual, entonces el spread actual, si de la historia, entonces en el momento del cierre.
Gracias.
 

Entiendo correctamente, que para escribir datos en el array, hay que asignar a cada celda un valor diferente array1[i] = x; indicando un número de celda específico

¿o se puede llenar la matriz secuencialmente desde i=0 en adelante?

 
A1exPit:

Entiendo correctamente, que para escribir datos en el array, hay que asignar a cada celda un valor diferente array1[i] = x; indicando un número de celda específico

¿o se puede llenar la matriz secuencialmente desde i=0 en adelante?

¿Cuál es la diferencia? Me parece que son dos formas diferentes
 
Renat Akhtyamov:
¿Cuál es la diferencia? Creo que son dos caminos diferentes.
Me refería a que cuando pasas datos a un array, éste se llenará secuencialmente, es decir, array1[] = x; ¿en qué celda se escribirá el valor de x si no se especifica explícitamente el número de celda?