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

 
splxgf:
Su versión puede reducirse a estas dos líneas añadidas a la versión del autor, y con algunas alteraciones en las condiciones debería, en principio, acelerar bastante las cosas.
¿Está seguro?
 
MaxZ:
¿Está seguro?

Esencialmente su sugerencia es excluir de las comprobaciones y los cálculos las velas que no se encuentren dentro del rango de precio UPP/precio LOW... esto se excluye por dos líneas. Si no se sale del bucle, significa que el precio está en el rango que necesitamos y hacemos las comprobaciones habituales. Tu código puede ir más rápido sólo en detrimento de los resultados, porque la lógica de trabajo con INS es muy enrevesada para utilizar el valor de esta variable de la iteración anterior es un sinsentido.

 
splxgf:

Esencialmente su sugerencia es excluir de las comprobaciones y los cálculos las velas que no se encuentren dentro del rango de precio UPP/precio LOW... esto se excluye por dos líneas. Si no se sale del bucle, significa que el precio está en el rango que necesitamos y hacemos las comprobaciones habituales. Tu código puede ir más rápido sólo en detrimento de los resultados, porque la lógica de trabajo con INS es muy enrevesada para utilizar el valor de esta variable de la iteración anterior es un sinsentido.

¡Así que estás seguro! :))))


Antes has citado el código:

splxgf:
        if (LOWprice > iHigh(NULL,60,i)) continue;
        if (UPPprice < iLow (NULL,60,i)) continue;

Si el precio está por debajo del mínimo, ¿por qué debemos comprobar si el precio está por encima del máximo? En su versión no se excluye esta condición. Pero en mi sugerencia:

         if (UPP)
            ... // не выполнится
         if (LOW)
            if (LOWprice < iLow (NULL,60,i))
               continue;
            else
            ..

se excluye.

No niego que mi código pueda no ser el más óptimo.

Pero ¿cuántas veces más rápido crees que

         if (UPP)

funcionará que.

         if (LOWprice > iHigh(NULL,60,i))

?

De hecho:

UPP = LOWprice > iHigh(NULL, 60, i);

Sólo yo lo sé a ciencia cierta (excepto cuando se puja dentro de la barra histórica actual) y tú lo calculas...

 
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 ocurrió dividir el cheque iLow, iHigh, podías haberlo dividido enseguida:

Y no hagas bromas

¿Y has pensado alguna vez que un código retorcido y engorroso puede funcionar a veces más rápido que unas simples tres líneas? :)))
 
 INS = True;
   
   for (int i=1; i<=6000; i++)
   {
      if (INS)
      {
         if (LOWprice > iHigh(NULL,60,i))
         {
            INS = False;
            UPP = True;
            LOW = False;
            continue;

Considere esta sección del código

INS=Verdadero;

El bucle fue

si (INS) el vuelo está bien

si (LOWprice...) por ejemplo, la condición es verdadera, pero luego sale mal porque obtenemos INS=False y pasamos a la siguiente iteración

entonces si (falso) y ya está, como es otra barra, pues que...

En cuanto a mi código, no estoy comprobando el precio sino si la barra cae dentro del corredor de +300/300 pips del precio actual y si lo hace, debe ser considerado. Todas las demás optimizaciones no son tan críticas porque las dos primeras comprobaciones, por ejemplo, eliminan el 90% de las barras innecesarias.

 
splxgf:

entonces si (falso) y estamos jodidos, porque es un bar diferente, hay que preguntar que...

No se ha navegado, pero se ha navegado en otro { ... }.
 

y luego nadó de verdad...

Por qué crees que las variables booleanas se aceleran si a cada condición le sigue un if (LOWprice > iHigh(NULL,60,i)), es decir, los mismos huevos pero de lado más una condición y un montón de asignaciones...

 

¡Vaya!

Aquí es donde se calientan las discusiones.

Lo pondré así por ahora:

 extern int Distance = 3000;
 int CountH,NewCountH,CountL,NewCountL,CountB,NewCountB;
 
 double ResistH,ResistL,ResistB;
 
//======================================================================
int start(){


   double bid = Bid;
   double UPPprice = bid+Distance*Point;
   double LOWprice = bid-Distance*Point;
      NewCountH=0;
      NewCountL=0;
      NewCountB=0;
      ResistH=0;
      ResistL=0;
      ResistB=0;
  
   while(LOWprice<UPPprice)
    {
      CountH=0;
      CountL=0;
      for(int i=1; i<=6000; i++){  
          if(iHigh(NULL,60,i)>LOWprice) 
          if(LOWprice>iLow(NULL,60,i)) 
          if(LOWprice> bid) CountH++; else CountL++;
       }  
      if(CountH>NewCountH){NewCountH=CountH;ResistH=LOWprice;} 
      if(CountL>NewCountL){NewCountL=CountL;ResistL=LOWprice;}   
      LOWprice=LOWprice+25*Point;
    }
      CountB=0;
      for(i=1; i<=6000; i++){  
          if(iHigh(NULL,60,i)>=bid) if(bid>=iLow(NULL,60,i)) CountB++;
       }
      if(CountB>NewCountB){NewCountB=CountB;ResistB=bid;}  
 
     
   
    Comment("\n", 
      "\n",     
//      "\n", "     Spread                                ", MarketInfo(Symbol(), MODE_SPREAD),  
      "\n", "     Distance                             ", Distance, 
      "\n", "     CountH                               ", NewCountH, 
      "\n", "     CountB                               ", NewCountB, 
      "\n", "     CountL                                ", NewCountL, 
      "\n", "-------------------------------------------------- ",     
      "\n");
      

    if(ObjectFind("RH") == -1) {
      ObjectCreate("RH", OBJ_HLINE, 0, 0, ResistH);
      ObjectSet("RH", OBJPROP_COLOR, Magenta);
      ObjectSet("RH", OBJPROP_STYLE, STYLE_DOT);
     }else ObjectMove("RH", 0, iTime(NULL,0,0), ResistH);

    string text=DoubleToStr(NewCountH,0);
    ObjectDelete("RHtxt"); 
     if(ObjectFind("RHtxt") == -1) {
       ObjectCreate("RHtxt", OBJ_TEXT, 0, 0, 0);
       ObjectSetText("RHtxt", text , 8, "Arial", Aqua);
       ObjectMove("RHtxt", 0, iTime(NULL,0,0), ResistH);
      }else ObjectMove("RHtxt", 0, iTime(NULL,0,0), ResistH);
      
    string text3=DoubleToStr(NewCountB,0);
    ObjectDelete("RBtxt"); 
     if(ObjectFind("RBtxt") == -1) {
       ObjectCreate("RBtxt", OBJ_TEXT, 0, 0, 0);
       ObjectSetText("RBtxt", text3 , 8, "Arial", Aqua);
       ObjectMove("RBtxt", 0, iTime(NULL,60,0), ResistB);
      }else ObjectMove("RBtxt", 0, iTime(NULL,60,0), ResistB);

    if(ObjectFind("RL") == -1) {
      ObjectCreate("RL", OBJ_HLINE, 0, 0, ResistL);
      ObjectSet("RL", OBJPROP_COLOR, Magenta);
      ObjectSet("RL", OBJPROP_STYLE, STYLE_DOT);
     }else ObjectMove("RL", 0, iTime(NULL,0,0), ResistL);
     
    string text2=DoubleToStr(NewCountL,0);
    ObjectDelete("RLtxt");
    if(ObjectFind("RLtxt") == -1) {
      ObjectCreate("RLtxt", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("RLtxt", text2 , 8, "Arial", Aqua);
      ObjectMove("RLtxt", 0, iTime(NULL,0,0), ResistL);
     }else ObjectMove("RLtxt", 0, iTime(NULL,0,0), ResistL);

 return (0);}            //====== THE END ======================

Es muy interesante observar el movimiento de los precios. Siempre va en la dirección de la menor resistencia.

Incluso puede predecir su movimiento futuro. Observa.

El precio es como el agua que fluye en un arroyo.

Gracias a todos.

 

Por favor, díganme cómo encontrar el número de barra con el valor más alto de la alta.


Search_High=MathMax( High[i],High[1])

 
001:

¿Puedes decirme cómo encontrar el número de la barra con el valor más alto de chai?


Search_High=MathMax( High[i],High[1])

Puede ir a https://docs.mql4.com/ru/array/ArrayMaximum

a través del array High.