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

 
Alexey Kozitsyn:
Suponiendo que el último orden por tiempo no sea el último de la lista, tu ejemplo no es correcto, porque no tiene en cuenta el primer orden (#0).

Primero se encuentra el billete de la última orden en el tiempo y luego se hace un ciclo con modificaciones. Cuando en el bucle se encuentra un billete del último orden encontrado anteriormente, se salta.

Para encontrar el ticket del último pedido, no necesitamos buscar en todo el historial de todos los pedidos - podemos establecer el tamaño del historial buscado - un día, dos, tres, una semana... "Y salta todas las órdenes con la hora, que es anterior al rango de búsqueda. Por ejemplo: el tamaño del historial de búsqueda se establece en 1 día - todos los pedidos, que fueron anteriores a la hora actual - un día, se saltan. Pero seguimos necesitando el ciclo. Si tomamos sólo la última orden de la lista, puede ser Comprar, y necesitamos Vender. Es el penúltimo. Por lo tanto, no obtendremos sus datos.

 
Artyom Trishkin:

Primero se encuentra el billete de la última orden en el tiempo y luego se realiza un ciclo con modificaciones. Cuando se encuentra en el bucle un billete encontrado previamente del último orden, se salta.

Para buscar el ticket del último pedido, no es necesario recorrer todo el historial de todos los pedidos - se puede establecer el tamaño del historial buscado - un día, dos, tres, una semana... "Y salta todas las órdenes con la hora, que es anterior al rango de búsqueda. Por ejemplo: el tamaño del historial de búsqueda se establece en 1 día - todos los pedidos, que fueron anteriores a la hora actual - un día, se saltan. Pero seguimos necesitando el ciclo. Si tomamos sólo la última orden de la lista, puede ser Comprar, y necesitamos Vender. Es el penúltimo. Por lo tanto, no obtendremos sus datos.

Artem, gracias por la explicación, por supuesto, pero sé cómo encontrar el orden en la lista. Y mi respuesta no era para ti, sino para Alexei sobre su ejemplo (en particular, que la condición "> 0" no funcionará).

Será mejor que escribas de la manera correcta (sólo con código). Me da pereza :)

 
Alexey Kozitsyn:
Si suponemos que la última orden no es la última de la lista, tu ejemplo es incorrecto porque no considera la primera orden (orden 0).

¿Cómo no va a ser así?

Alexey Viktorov:

Una variante adicional: Antes del bucle, escriba en la variable _1 un billete, por ejemplo, de orden cero, y luego

/********************Script program start function********************/
void OnStart()
{
  int i, t1, t2, modTicket , total = OrdersTotal();
   datetime d1, d2;
    if(OrderSelect(0, SELECT_BY_POS))
     {
      t1 = OrderTicket();
       d1 = OrderOpenTime();
     }    
    for(i = 1; i < total; i++)
     {
      if(OrderSelect(i, SELECT_BY_POS))
       {
        t2 = OrderTicket();
         d2 = OrderOpenTime();
          modOrder((d1 < d2) ? t1 : t2);
         t1 = d1 < d2 ? t2 : t1;
        d1 = d1 < d2 ? t2 : t1;
       }
     }
}/********************************************************************/

void modOrder(int ticket);
{
// здесь код модификации ордера.
}/********************************************************************/
Espero no haber estropeado nada más.
 
Alexey Viktorov:

¿Cómo no va a ser así?

/********************Script program start function********************/
void OnStart()
{
  int i, t1, t2, modTicket , total = OrdersTotal();
   datetime d1, d2;
    if(OrderSelect(0, SELECT_BY_POS))
     {
      t1 = OrderTicket();
       d1 = OrderOpenTime();
     }    
    for(i = 1; i < total; i++)
     {
      if(OrderSelect(i, SELECT_BY_POS))
       {
        t2 = OrderTicket();
         d2 = OrderOpenTime();
          modOrder((d1 < d2) ? t1 : t2);
         t1 = d1 < d2 ? t2 : t1;
        d1 = d1 < d2 ? t2 : t1;
       }
     }
}/********************************************************************/

void modOrder(int ticket);
{
// здесь код модификации ордера.
}/********************************************************************/
Espero no haberme equivocado en nada más, no lo he vuelto a comprobar...
Si lo tomas como un comienzo, está bien, pero es mejor hacerlo desde el final... Aunque, si no borras los pedidos, tampoco pasa nada.
 
Alexey Kozitsyn:
Si lo tomas como variante de partida, te servirá, pero es mejor hacerlo desde el final... Aunque, si no tenemos que suprimir pedidos, también estaremos bien.

De hecho, para modificar varios pedidos, hay que recorrerlos en bucle. Así que resulta que los microsegundos adicionales se gastarán sólo en comparar el tiempo de apertura de la orden. Esta será una variante óptima.

La dirección del ciclo ... Realmente no importa porque no se trata de cerrar órdenes. Me confundí en mi versión anterior y escribí "cerrar", por lo que el bucle se correspondía allí también...

 

¡Buenas tardes!

Estoy intentando escribir un indicador. Quiero obtener visualmente lo que he querido, pero quiero que el indicador envíe la información requerida, por ejemplo, información textual, o de tipo int. ¿Cómo puedo hacerlo, teniendo en cuenta que tengo 10 topes, según los cuales se dibujan las líneas? Gracias.

 

Buenas tardes, no me echéis, pero he encontrado este epígrafe y he decidido hacer unas preguntas... tengo un terminal... me he descargado de un broker MT4 (1)... he ejecutado la demo... después de un tiempo me he registrado en otro, también

Me ofrecieron para descargar el terminal ... descargado (2) como resultado, 2 terminal no va ... y 1 apareció perfil 2 corredor ... en general, todo confundido ... luego de binario viene una carta que se mueven a MT5 ... instalado y, a primera vista, todo mucho mejor que el MT4 . Mi pregunta es si es posible abrir una cuenta con diferentes brokers en un mismo terminal. ¿y puedo transferirlos todos a mt5? ¿y si los indicadores de MT4 se adaptan a 5?

Gracias...

 

Una ayuda tan activa, muchas gracias.

Ya está luchando con un nuevo problema)

Por favor, ayúdenme a averiguar el hecho de la nueva aparición de vértices en zigzag.

Intenté almacenar en una variable el precio del primer vértice, luego compararlo, si el precio ha cambiado levantar una bandera, hay un nuevo vértice.
if(newZZH1_PR!=GetExtremumZZPrice(Symbol(),T_F_,1))
{
   newZZH1_PR=GetExtremumZZPrice(Symbol(),T_F_,1);
   newZZH1=true;
}

Pero resultó que la función, a lo largo del tiempo, devuelve de forma caótica, luego el precio del primer vértice, luego el segundo.

Resulta que la nueva cima no está formada y la bandera está levantada.
double GetExtremumZZPrice(string sy="", int tf=0, int ne=0)
{

  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=1; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", ExtDepth,ExtDeviation,ExtBackstep, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(zz);
    }
  }
  Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден");
  return(0);
}
Lo ideal sería retocar la función para que siempre devuelva el precio del primer vértice, pero me conformaría con cualquier solución.
 
mila.com:

Una ayuda tan activa, muchas gracias.

Ya está luchando con un nuevo problema)

Por favor, ayúdenme a averiguar el hecho de la nueva aparición de vértices en zigzag.

Traté de recordar en una variable el precio del primer vértice, a continuación, comparar, si el precio ha cambiado levantar una bandera, hay un nuevo vértice.
if(newZZH1_PR!=GetExtremumZZPrice(Symbol(),T_F_,1))
{
   newZZH1_PR=GetExtremumZZPrice(Symbol(),T_F_,1);
   newZZH1=true;
}

Pero resultó que la función, a lo largo del tiempo, devuelve de forma caótica, luego el precio del primer vértice, luego el segundo.

Resulta que no se forma ningún vértice nuevo, pero se levanta la bandera.
double GetExtremumZZPrice(string sy="", int tf=0, int ne=0)
{

  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=1; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", ExtDepth,ExtDeviation,ExtBackstep, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(zz);
    }
  }
  Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден");
  return(0);
}
Lo ideal sería retocar la función para que siempre devuelva el precio del primer vértice, pero me conformaría con cualquier solución.

El zigzag tiene en realidad tres topes - 0 total, 1 - el extremo superior, 2 - el extremo inferior.

En la barra de cero, siempre hay un valor en alguno de los búferes, ya sea en el primero (si la rodilla está arriba) o en el segundo (si está abajo). En consecuencia, el búfer cero de la vela actual siempre tiene un valor, ya sea del primer búfer o del segundo.

Pues bien, para encontrar un extremo superior claro, debemos buscar el primer valor no vacío del primer buffer, a partir de la barra 1. Para el extremo inferior, necesitamos encontrar el primer valor no en blanco del segundo búfer, a partir del compás 1.

Para saber si se trata de un nuevo máximo o mínimo, tenemos que recordar el momento del anterior máximo/top encontrado, y compararlo con lo que hemos encontrado hasta ahora.

Es una divagación, pero espero que lo entiendas...

 
Hay dos terminales MT5. Problema: ¿puedo escribir scripts para permitir sólo operaciones largas en un terminal y sólo operaciones cortas en el otro?
Razón de la queja: