[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 169

 

splxgf:

DhP:

¿Cómo se puede "aligerar" este ciclo? Se necesita mucho tiempo para contar.
 if(iHigh(NULL,60,i)>LOWprice && LOWprice>iLow(NULL,60,i)) if(LOWprice> bid) CountH++ else CountL++;

O mejor aún, así:

 if(iHigh(NULL,60,i)>LOWprice) if(LOWprice>iLow(NULL,60,i)) if(LOWprice> bid) CountH++ else CountL++;

También está la idea de generar una matriz de valores altos y bajos. ¿Tal vez esto acelere un poco las cosas?

 
abolk:


el pedido se selecciona https://docs.mql4.com/ru/trading/OrderSelect - bucle o selección por ticket

entonces la función Order*() busca el parámetro de orden correspondiente

Perdón por las preguntas tan contundentes, pero:

Si utilizamos MODE_HISTORY como fuente de datos para la selección en la función OrderSelect , es decir, la orden se selecciona entre las órdenes cerradas y eliminadas, entonces ¿cómo encontramos el número de la orden que se cerró por última vez? ¿Cómo se numeran estos pedidos en el programa? ¿Es del último al primero o viceversa?

 
Xaoss1990:

Lo siento, por supuesto, por las preguntas estúpidas, pero:

si la fuente de datos en la función OrderSelect es MODE_HISTORY, es decir, la orden se selecciona entre las órdenes cerradas y eliminadas, ¿cómo puedo encontrar el número de la orden que se cerró por última vez? ¿Cómo se numeran estos pedidos en el programa? ¿Es del último al primero o viceversa?


hay muchas preguntas de este tipo en internet

http://forum.alpari.ru/showthread.php?t=27708

 
Xaoss1990:

Perdón por las preguntas tontas, pero:

si se utiliza MODE_HISTORY en la función OrderSelect como fuente de datos para la selección, es decir, la orden se selecciona entre las órdenes cerradas y eliminadas, ¿cómo puedo encontrar el número de la orden que se cerró por última vez? ¿Cómo se numeran estos pedidos en el programa? ¿Es del último al primero o viceversa?


La función para encontrar la última de las cerradas es similar a la función para encontrar la orden con el máximo tiempo de cierre
 
LazarevDenis:


muchas de estas preguntas ya se han formulado en Internet

http://forum.alpari.ru/showthread.php?t=27708

¡О! Lo he encontrado, gracias:

OrderSelect(HistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);

Así es, ¿no?

 
DhP:

¿Cómo "aliviar" este ciclo? Se necesita mucho tiempo para calcular.

Spellbound:

   INS = True;
   
   for (int i=1; i<=6000; i++)
   {
      if (INS)
      {
         if (LOWprice > iHigh(NULL,60,i))
         {
            INS = False;
            UPP = True;
            LOW = False;
            continue;
         }
         if (LOWprice < iLow (NULL,60,i))
         {
            INS = False;
            UPP = False;
            LOW = True;
            continue;
         }
      }
      else
      {
         if (UPP)
            if (LOWprice > iHigh(NULL,60,i))
               continue;
            else
            if (LOWprice < iLow (NULL,60,i))
            {
               // INS = "False"
               UPP = False;
               LOW = True;
               continue;
            }
         if (LOW)
            if (LOWprice < iLow (NULL,60,i))
               continue;
            else
            if (LOWprice > iHigh(NULL,60,i))
            {
               // INS = "False"
               UPP = True;
               LOW = False;
               continue;
            }
         
         INS = True;
      }
      
      if (LOWprice > Bid)
         CountH++;
      else
         CountL++;
   }

La lógica es que el precio está más a menudo fuera de las barras históricas que dentro.

INS = Interior.

He comprobado la exactitud del código en un folleto. No he comprobado la velocidad del código. Pero estoy seguro de que las variables booleanas dan una buena ventaja.

 
MaxZ:

Spellbound:

La lógica es que el precio está más a menudo fuera de las barras históricas que dentro.

INS = "Inside".

P.D.: He comprobado la corrección del código en un papel. No he comprobado la velocidad del código. Pero estoy seguro de que las variables booleanas dan una buena ventaja.


Sí.

Hay que ser muy retorcido para convertir tres líneas claras de código en un código difícil de entender.

Si se te ocurrió dividir el cheque iLow, iHigh, podías haberlo dividido enseguida:

          if(LOWprice> bid)if(iHigh(NULL,60,i)>LOWprice)if( LOWprice>iLow(NULL,60,i))CountH++;  
          if(LOWprice<=bid)if(iHigh(NULL,60,i)>LOWprice)if( LOWprice>iLow(NULL,60,i))CountL++;
y no toques nada
 
      int HourPrices[20000];     
      for(int i=1; i<=6000; i++)
	 for (double cPrice=iLow(NULL,60,i);cprice<=iHigh(NULL,60,i);cPrice+=Point)
	  HourPrices[cPrice/Point]+=1;

Encontrar los niveles de resistencia de un conjunto así no es un problema. Añade nuevas barras y elimina las antiguas al mismo tiempo. Y la obtención de información de la misma es de dos ciclos con una condición o ArrayMaximum dará el valor requerido a la vez.

 
abolk:


Sí.

Hay que ser tan retorcido como para convertir tres líneas de código claras en un código difícil de entender.

Si se te ocurriera separar el cheque iLow, iHigh, podrías haberlo dividido enseguida:

y no te metas con nada

Una variante similar a la que sugerí más arriba (separando los si).

Y ni siquiera intentaste entender mi idea (aunque describí brevemente la lógica)... Cuando el precio es alto, hacemos una comprobación en lugar de dos. Lo mismo para el caso de que el precio sea bajo. Y cuando el precio está dentro de las barras históricas (lo cual es bastante raro - ¡esa es la lógica y la idea!), hacemos dos comprobaciones (no hay otra manera).

El cheque es para el precio fuera del bar, no dentro. Antes buscaban una aguja en un pajar, mientras que yo, si no veo otra aguja, tampoco la buscaré... La aguja se mostrará cuando sea necesario. :)))

 
MaxZ:

Una variante similar a la que propuse anteriormente (separando los si).

Y ni siquiera intentaste entender mi idea (aunque describí brevemente la lógica)... Cuando el precio es alto, en lugar de dos cheques hacemos uno. Lo mismo para el caso de que el precio sea bajo. Y cuando el precio está dentro de las barras históricas (lo cual es bastante raro - ¡esa es la lógica y la idea!), hacemos dos comprobaciones (no hay otra manera).

         if (LOWprice > iHigh(NULL,60,i)) continue;
        if (UPPprice < iLow (NULL,60,i)) continue;
Su versión puede reducirse a estas dos líneas añadidas a la versión del autor, y con algunas modificaciones de las condiciones debería ser en principio bastante rápida.
Razón de la queja: