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

 
AlexeyVik:

Bueno, mi hora local es 1 hora más que la del servidor.

Entonces, ¿puede explicar qué es lo que confunde a estos valores?

Estos valores no tienen nada de confusos, son correctos, pero no es de eso de lo que estamos hablando.

El problema del viernes en particular no es relevante si tu hora local es X horas más larga que la del broker.

Pero imagina que en tu ordenador local no hay +1, sino -1 hora de diferencia con el broker.

Y existe esta simple condición:

if(TimeDayOfWeek(TimeCurrent()) == 5 && TimeCurrent() >= StringToTime("21:30"))
   Print("Настала пятница и время больше чем 21:30");

En este caso:

1. el broker tendrá el primer tick del viernes, por ejemplo el de hoy, que tiene una hora de 2014.11.07 00:00

2. Tomar el número de segundos transcurridos desdeel 01.01.1970 00:00 hasta el tick en cuestión, es decir,2014.11.07 00:00

3. tomamos el número de segundos transcurridos desde el 01.01. 1970 00:00 hasta el06.11.2014 21:30 (es la fecha de ayer, porque tomamos la hora del PC local, que en el momento del tick no es viernes, sino jueves, que es el día 6, o para ser más precisos, 2014.11.06 23:00, la diferencia de 1 hora)

Voilà, el número de segundos en el punto 2 es mayor que en el punto 3.

Esto significa que el primer tick del viernes ejecutará la impresión especificada en el código, aunque si la funciónStringToTime() toma la fecha del servidor del broker, entonces todo funcionaría como estaba previsto, la impresión aparecería el viernes sólo después de que la hora supere las21:30

 
Leonid123456:

Hola.

Hay una tarea como esta. (no se puede adjuntar a una garrapata)

Si se activa una orden pendiente {entonces...}.

En mi EA, utilizo Terminal.mqh para calcular las órdenes.

Terminal // Mas_Tip[0] abierto Comprar

// si el número de órdenes de compraha aumentado en 1

si (Mas_Tip[0]+1)

{

función

}

Todo funciona. Pero se dispara en cada siguiente tic.

¿Cómo se puede fijar este caso a una garrapata? Y luego comparar el valor en el tick anterior y en el actual.

¿Y puedes traducir la cadena resaltada a nuestro lenguaje humano? Lo que debería ser y lo que se obtiene al ejecutar esta línea...
 
AlexeyVik:
¿Puede traducir la línea resaltada a nuestro idioma? Lo que debería ser y lo que se obtiene al ejecutar esta línea...

// si el número de órdenes decompra ha aumentado en 1 entonces...

{

función, por ejemplo, abre o cierra otras órdenes...

}

No tiene por qué ser así si (Mas_Tip[0]+1) podemos hacerif (Mas_Tip[0] >Mas_Tip[1]) // si hay más órdenes de Compra que de Célula. Abrir una pendiente, por ejemplo.

La cuestión es que en el siguiente tick estos datos vuelven a ser ciertos.

 
Leonid123456:

// si el número de órdenes decompra ha aumentado en 1 entonces...

{

función, por ejemplo, abre o cierra otras órdenes...

}

si (Mas_Tip[0]+1)

En el paréntesis de if debería haber un bool, es decir, verdadero o falso.

Aquí es obviamente int. Es un número entero.

Por supuesto, verdadero es 1 y falso es 0 (si no me equivoco). Pero aún así no está bien. ¿Qué devuelveMas_Tip[0]?

 
ikatsko:

si (Mas_Tip[0]+1)

en el paréntesis de if debe ser un bool, es decir, verdadero o falso.

Pero aquí es obviamente int. Es un número entero.

Por supuesto, verdadero es 1 y falso es 0 (si no me equivoco). Pero aún así no está bien. ¿Qué devuelveMas_Tip[0]?

Número de órdenes de compra abiertas.

 
Leonid123456:

// si el número de órdenes decompra ha aumentado en 1 entonces...

{

función, por ejemplo, abre o cierra otras órdenes...

}

No, eso es lo que quieres. En realidad no lo es. Hay algún valor en la matriz Mas_Tip[0], y si es mayor que cero, la condición if(Mas_Tip[0]) será verdadera. Y si añadimos 1 a este valor, siempre será cierto ya que el número de órdenes abiertas no puede ser igual a -1.

 
AlexeyVik:

No, así es como lo quieres. De hecho, no lo es. Hay algún valor en la matriz Mas_Tip[0] y si es mayor que cero, la condición if(Mas_Tip[0]) ya será verdadera. Y si añadimos 1 a este valor, siempre será cierto ya que el número de órdenes abiertas no puede ser igual a -1.


Intenté hacerlo de esta manera

   bool  Fact_1 = false;                    // Глобальная перемен.
       bool  Fact_2 = false;                    // Глобальная перемен.
//--------------------------------------------------------------------
int start()                                     // Спец. функция start
  {
                          // Локальная перемен.
   if (Fact_2==true)                            //Если сообщение уже..
      return;                                   //..было, то выходим
 
   if (Mas_Tip[0]+1)
      Fact_1 = true;                            // Произошло событие 1
 
   
 
   return;                                      // Выход из start()
  }
//--------------------------------------------------------------------
                               // Пользовательс. ф-ия
  {
             // Сообщение
   Fact_2 = true;                               // Произошло событие 2
   return;                                      // Выход из польз.ф-ии

}

Resulta ser un evento único.

 
ikatsko:

si (Mas_Tip[0]+1)

en el paréntesis de if debe ser un bool, es decir, verdadero o falso.

Pero aquí es obviamente int. Es un número entero.

Por supuesto, verdadero es 1 y falso es 0 (si no me equivoco). Pero aún así no está bien. ¿Qué devuelveMas_Tip[0]?

false es 0 y true si no es 0.

Prueba esta línea

bool b;
b = 7.40;
if(b) Print("b = ", b);
El compilador puede advertir de una posible pérdida de precisión, pero funcionará.
 

puedes descartarMas_Tip[0]

Cómo conseguir un evento. Se ha abierto un Buy.

 
Leonid123456:

puedes descartarMas_Tip[0]

Cómo conseguir un evento. Se ha abierto un Buy.

Recordar el antiguo recuento de compras en alguna variable y compararlo con el valor actual devuelto por la función de recuento de compras, ¿cómo si no?
Razón de la queja: