[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 307

 
drknn:

Como la condición no es una disyunción estricta (y siempre es verdadera si al menos 1 elemento es verdadero), la forma más lógica de manejar esta condición sería dividir primero la molécula(a>b || c>d) en átomos "a>b" y "c>d", y luego hacer un bucle a través de los átomos secuencialmente para comprobar la verdad. Y si el siguiente átomo es verdadero, entonces rompe inmediatamente el bucle, permitiendo que el programa haga la acción que está justo después de los corchetes - es decir, no buscar a través del resto de los átomos, porque no es necesario. Y no importa si buscamos desde el principio hasta el final o desde el final hasta el principio de la lista de átomos creada. Sólo el desarrollador puede mostrarle la dirección de búsqueda (metacitas). Pero, ¿por qué lo necesitas?¿Está escribiendo su propio compilador?
Se me ocurrió: si en la lógica TC la condición a>b es verdadera mucho más a menudo que c>d==true, entonces puede importar el orden de comprobación de la verdad de estas dos condiciones para acelerar el programa
 
artmedia70:
Se me ocurre: si en la lógica TC la condición a>b es verdadera mucho más a menudo que c>d==true, entonces puede importar cómo se comprueban estas dos condiciones para acelerar el programa

En realidad, la expresión es la siguiente: if(a>b || (a<=b && c>d)). Si la comprobación de la verdad se realiza de izquierda a derecha, la expresión a<=b será superflua desde el punto de vista de la velocidad del programa. La pregunta era exactamente si es de izquierda a derecha o viceversa, o de forma diferente en distintos casos.
 
AndEv:

En realidad, la expresión es la siguiente: if(a>b || (a<=b && c>d)). Si la comprobación de la verdad se realiza de izquierda a derecha, la expresión a<=b será superflua desde el punto de vista de la aceleración del programa. La pregunta era sólo si es de izquierda a derecha o viceversa, o de manera diferente en distintos casos.

¿Puedes explicar la razón por la que el EA no abre órdenes y escribe error 133
 
paladin80:

Es necesario comparar el tiempo de apertura de la posición con el tiempo de apertura de la barra actual Time[0]. Si la hora de apertura de una posición es mayor o igual a la hora de apertura de la barra - el Asesor Experto no abre nuevas posiciones. Cuando aparezca una nueva barra, Time[0] cambiará su valor a un tiempo posterior y esta comparación mostrará que la posición aún no se ha abierto en la barra actual (nueva) y podemos operar.

Por cierto, su pregunta también se puede dividir en 2 subpreguntas:
1. En la barra actual se abrió una posición y se logró cerrar, pero seguimos esperando una nueva barra.
2. En la barra actual se abrió una posición y se logró cerrar, entonces podemos abrir una posición de nuevo en la misma barra (es decir, se puede abrir una posición en la misma barra simultáneamente).

es decir, en una misma barra la condición de abrir una posición se convierte en True durante unos minutos y se abre la posición. luego se convierte en False y luego en True de nuevo y se abre una segunda posición. ¿cómo se hace? sólo he pensado en abrir una posición una vez por barra tal vez haya otras opciones?
 
¿Qué es el detrending? ¿Es como "dejar de hablar"?
 
GarKain:
tengo un problema con esto: en una misma barra durante unos minutos la condición para abrir una orden se hace verdadera y la orden se abre. luego falla y vuelve a abrir una segunda orden. ¿cómo puedo combatir esto? sólo he intentado abrir una orden una vez por barra tal vez haya otras opciones?

Veo que está utilizando una bandera que permite/no permite abrir una posición. Sin conocer la condición de la bandera, es imposible decirle nada. En mi EA utilizo 2 enfoques al abrir una posición y puedo ofrecer el siguiente código:

if (OrdersTotal()>0)
{  for (i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  if (OrderSymbol()==Symbol())
         {  if (OrderMagicNumber()==MagNum) // Проверка соответствия позиции по магик-номеру
            {  Closed_bar=OrderOpenTime();
               if (Closed_bar>=iTime(NULL,PERIOD_H1,0))
               return(0);
         }  }
}  }  }
 
moskitman:
¿Qué es el detrending? ¿Es como "dejar de hablar"?

Aplicar un filtro de paso bajo a una serie == restar el componente de tendencia (pendiente). el ejemplo más sencillo: aplicar un muwing al precio, y luego mostrar la diferencia en una ventana aparte.
 
paladin80:

Veo que está utilizando una bandera que permite/no permite abrir una posición. Sin conocer la condición de la bandera, es imposible decirle nada. En mi EA utilizo 2 enfoques al abrir una posición y puedo ofrecer el siguiente código:



if (OrdersTotal()>0)
{  for (i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  if (OrderSymbol()==Symbol())
         {  if (OrderMagicNumber()==MagNum) // Проверка соответствия позиции по магик-номеру
            {  Closed_bar=OrderOpenTime();
               if (Closed_bar>=iTime(NULL,PERIOD_H1,0))
               return(0);
         }  }
}  }  }

No entiendo muy bien qué va a dónde y desde dónde.

 
Lo tengo escrito así:

si esto y aquello, entonces es "igual a".

Si es igual a "True", la orden se abre.



Si escribo si esto y lo otro, la orden se abre. ¿Solucionará eso el problema?

 
AndEv:
En realidad, la expresión es la siguiente: if(a>b || (a<=b && c>d)). Si la comprobación de la verdad se realiza de izquierda a derecha, la expresión a<=b será superflua desde el punto de vista de la aceleración del programa. La pregunta era exactamente si es de izquierda a derecha o viceversa, o de forma diferente en distintos casos.
En ese caso, hay que crear ifs anidados. En MQL4, el orden no está claro. En MQL5, es de izquierda a derecha como debe ser.