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

 
evillive:
recordar el antiguo número de Byes y compararlo con el actual, ¿cómo si no?
Eso es exactamente lo que no funciona.
 
Leonid123456:
Eso es exactamente lo que no puedo hacer.
crear una variable entera, asignarle el número de compras y luego volver a contar las compras y comparar con el valor de esa variable ¿no es posible?
 
evillive:
¿crear una variable entera, asignarle el número de compras y luego volver a contar las compras y comparar con el valor de esa variable no funciona?
Gracias.
 
tuner:

Estos valores no tienen nada de malo, son todos correctos, pero no se trata de eso.

El problema del viernes, en particular, no es relevante si su hora local es X horas más larga que la de su corredor.

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

Y existe esta simple condición:

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.

Si la funciónStringToTime() toma la fecha del servidor del broker, entonces todo funcionaría como estaba previsto, la impresión se realizaría el viernes sólo cuando la hora superara las21:30

Sí... No entendí inmediatamente el problema. Yo siempre tengo la local más grande que la del servidor y no me encontré con este problema. La única salida es tener en cuenta el día y no utilizar la representación del tiempo reducido.
 
AlexeyVik:
Sí... No entendí el problema de inmediato. Mi local siempre es más grande que el del servidor y no me he encontrado con ese problema. La única salida es tener en cuenta el día y no utilizar la representación del tiempo reducido.

Pues sí, como opción para alimentar la función con la hora correcta, junto con la fecha extraída de TimeCurrent(), en este caso el problema no debería parecer

Por cierto, mi hora local es siempre mayor que la del broker, pero sin embargo este problema de la forma descrita apareció el viernes pasado a la misma hora en dos brokers diferentes (uno demo, el segundo real). El por qué de lo sucedido sigue siendo un misterio. Sin embargo, el código ya ha sido sustituido por otro, por lo que este problema no debería repetirse

 
tuner:

Pues sí, como opción para alimentar la función con la hora correcta, junto con la fecha extraída de TimeCurrent(), en este caso el problema no debería parecer

Por cierto, mi hora local es siempre mayor que la del broker, pero sin embargo este problema de la forma descrita apareció el viernes pasado a la misma hora en dos brokers diferentes (uno demo, el segundo real). El por qué de lo sucedido sigue siendo un misterio. Sin embargo, el código ya ha sido sustituido por otro, por lo que este problema no debería repetirse

Sí, hay varias variantes. Por ejemplo, puede comprobar el viernes por la noche la hora local en lugar de la hora del servidor. Pero en ese caso, si te equivocas con la hora del ordenador, puedes tener muchos problemas.
 
evillive:
crear una variable entera, asignarle el número de compras y, a continuación, volver a contar las compras y compararlas con el valor de esa variable, ¿no es posible?

¿Puede darme un ejemplo del código?

Después de la comparación la variable debe ser reescrita, de lo contrario el mismo código se ejecutará infinitamente. (digamos que era 6 y se convirtió en 7, tengo que escribir en la variable que se convirtió en 7 después de la comparación)

 
Leonid123456:

¿Podría darnos un ejemplo del código?

Después de la comparación la variable debe ser reescrita, de lo contrario el mismo código se ejecutará infinitamente. (digamos que había 6 y ahora hay 7, debemos escribir en la variable que hay 7 después de la comparación).


No te molestes, aquí está la función de Kim que estoy utilizando y funciona en todas las construcciones:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает количество позиций.                                 |
//+----------------------------------------------------------------------------+
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;
  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) kp++;
  } } } } }
  return(kp);
}
//+----------------------------------------------------------------------------+

Y esto es además:

  int BuyPos = NumberOfPositions(Symbol(),OP_BUY, Magic);
  int SellPos = NumberOfPositions(Symbol(),OP_SELL,Magic);

Sólo tiene que comprobarlo según sus objetivos:

if(BuyPos >= n) 
 
borilunad:

No te molestes, aquí hay una función de Kim que uso y funciona en todas las construcciones:

Y eso es además:

Sólo tiene que comprobarlo según sus objetivos:

¡Muchas gracias!
 
borilunad:

No te molestes, aquí hay una función de Kim que uso y funciona en todas las construcciones:

Y eso es además:

Sólo tiene que comprobarlo según sus objetivos:

Lo conecté. Funciona indefinidamente...

Pude resolver el problema utilizando el último método de este artículo https://www.mql5.com/ru/articles/1399