Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 13

 
Krokus:

Puede que sí:

Otros pensamientos no vienen...




Estás leyendo entre líneas. De todos modos, mira lo que has puesto en el bucle en primer lugar. El área de acción del bucle...
 
Hola, en mt4 android para tablet es necesario descargar el terminal para cada servidor por separado? iniciar sesión como en pc a través de archivo de inicio de sesión no es posible? Además, ¿sabéis si se puede instalar autoclick en una tablet android para operar en mt4?
 

¡Buenas tardes! No consigo que esta condición funcione:

OrderCloseTime()!=hora()

No quiero que se abra más de un pedido en una hora.

¡Se abren todos los mismos pedidos!

 
lowech:

¡Buenas tardes! No consigo que esta condición funcione:

OrderCloseTime()!=hora()

No quiero que se abra más de un pedido en una hora.

¡Pero se abren todos los mismos pedidos! ¿Qué puede ser?

En primer lugar: OrderCloseTime() - es la hora de cierre de la orden. Si la orden no está cerrada, es igual a cero. Hay que fijarse en la hora de apertura.

En segundo lugar: Hora() - es la hora de inicio del EA, y esta hora no cambia durante la ejecución del programa. Hay que compararlo con la hora de la última llegada de la cotización - TimeCurrent()

Esta función devuelve el número de segundos transcurridos desde que se abrió la última posición del símbolo actual:

//+----------------------------------------------------------------------------+
datetime SecondsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return(TimeCurrent()-t);
}
//+----------------------------------------------------------------------------+

Es decir, para comprobar el número de segundos después de la apertura de la última posición de compra con Magic, necesita

if (SecondsAfterOpenLastPos(OP_BUY, Magic)>3600) {
   // Можно открывать следующий
   }
 
Hola, al abrir el terminal de nuevo, después del fin de semana, todos los gráficos, incluidos los gráficos de trabajo con EAs, desaparecieron en una cuenta de céntimos. En lugar del gráfico hay un campo gris, aunque las posiciones abiertas, el saldo y los fondos se guardaron en la parte inferior. Tuve que volver a descargar el terminal y reinstalar los gráficos que funcionaban con los Asesores Expertos. Después de eso todo estaba bien. Por favor, dígame de qué se trata y cómo puedo eliminar este problema en el futuro de la manera más indolora posible.
 

Primero: OrderCloseTime() es la hora de cierre de la orden. Si la orden no está cerrada, es igual a cero. Tienes que ver el tiempo de apertura.

Segundo: Hora() - es la hora de inicio del Asesor Experto, y esta hora no cambia durante la ejecución del programa. Hay que compararlo con la hora de la última llegada de la cotización - TimeCurrent()

Esta función devuelve el número de segundos transcurridos desde que se abrió la última posición del símbolo actual:

//+----------------------------------------------------------------------------+
datetime SecondsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return(TimeCurrent()-t);
}
//+----------------------------------------------------------------------------+

Es decir, para comprobar el número de segundos después de la apertura de la última posición de compra con Magic, necesita

if (SecondsAfterOpenLastPos(OP_BUY, Magic)>3600) {
   // Можно открывать следующий
   }
gracias por la función! ¿no tienen otra? para que sólo se abra un pedido por bar?
 
lowech:
gracias por la función! ¿no tenéis otra? para que sólo se abra un pedido por bar?
//+----------------------------------------------------------------------------+
datetime BarsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return((TimeCurrent()-t)/60/Period());
}
//+----------------------------------------------------------------------------+

lo mismo, sólo comprueba el número de barras, no los segundos

 
//+----------------------------------------------------------------------------+
datetime BarsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return((TimeCurrent()-t)/60/Period());
}
//+----------------------------------------------------------------------------+

lo mismo, sólo comprueba el número de barras, no los segundos


Funciona, pero cuando cierro un pedido por TP, se abre uno nuevo inmediatamente.
 
¿Por qué no se muestran las capas de negociación en la plataforma y por qué no funciona el EA?
 
lowech:

lo mismo, sólo comprueba el número de barras, no los segundos


funciona! Pero cuando una orden se cierra en TP, se abre una nueva al instante! ¿Cómo podemos arreglarlo?

Así que tenemos que hacer otra comprobación: para el número de barras después del cierre de la última orden:

//+----------------------------------------------------------------------------+
int BarsAfterCloseLastPos (int fi_MG, int fi_Type = -1)
{
    datetime ldt_Time = 0;
    int      li_Total = OrdersTotal();
//----
    for (int li_pos = 0; li_pos < li_Total; li_pos++)
    {
        if (!OrderSelect (li_pos, SELECT_BY_POS, MODE_HISTORY)) continue;
        if (OrderSymbol() != Symbol()) continue;
        if (fi_Type >= 0) if (OrderType() != fi_Type) continue;
        if (OrderMagicNumber() != fi_MG) continue;
        if (ldt_Time >= OrderCloseTime()) continue;
        ldt_Time = OrderCloseTime();
    }
    //---- Обрабатываем событие - отсутствие своих ордеров
    if (ldt_Time == 0) return (-1);
//----
    return (iBarShift (NULL, 0, ldt_Time));
}
//+----------------------------------------------------------------------------+
Razón de la queja: