Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 527

 
novichok2018: Gracias. Entiendo las convenciones, las tendré en cuenta. Pero para entender el script sugerido, por desgracia, mis conocimientos de mcl4 no son suficientes. Lo siento :( .

Hago todos mis experimentos con guiones. Ejecute el script en su terminal. Cambia algunas líneas o deséchalo. Ver lo que sucede

 

Quiero encontrar el Min Max de los datos del indicador, he hecho "todo según el manual", pero parece que los datos del indicador no se escriben en un array. MQL pro dígame dónde me he equivocado.

     
int limit=40000;
     
      double ArrayGreen[];  
      ArrayResize(ArrayGreen,limit);
      for (int i=0;i>=limit;i++)
         {
            ArrayGreen[i] =iCustom(NULL,0,"Kolier_SuperTrend_Indi",ATR_Period,ATR_Multiplier,0,1);
         }
      int max=ArrayMaximum(ArrayGreen,Quant,0); 
      double iMaximum = ArrayGreen[max];
      Print("Max = ",ArrayGreen[max]," at index=",max); 

      
     
      double ArrayRad[];  
      ArrayResize(ArrayRad,limit);
      for (int i=0;i>=limit;i++)
         {
            ArrayRad[i] = iCustom(NULL,0,"Kolier_SuperTrend_Indi",ATR_Period,ATR_Multiplier,1,1);
         }
     int min=ArrayMinimum(ArrayRad,Quant_Bars,0); 
     double iMinimum = ArrayRad[min];
     Print("Min= ",ArrayRad[min]," at index=",min); 
 
Corvin85:

Quiero encontrar el Min Max de los datos del indicador, he hecho "todo según el manual", pero parece que los datos del indicador no se escriben en un array. Si usted es un profesional de MQL, por favor, aconséjeme dónde me he equivocado.

El valor de la variable límite es mayor que cero. Por lo tanto, ninguno de los bucles se ejecutará. En consecuencia, ArrayGreen y ArrayRad quedarán sin cubrir.

Si ponemos el límite a cero o menos, el programa volverá al primer bucle.

Por lo tanto, tenemos que modificar la condición de los bucles. Lo más probable es que se haga así:

 for (int i = 0; i < limit; i++)
 
Corvin85:

Quiero encontrar el Min Max de los datos del indicador, he hecho "todo según el manual", pero parece que los datos del indicador no se escriben en un array. Tengo un buen MQL pro, por favor, aconséjeme dónde me he equivocado.

Además, en iCustom(...........); el último parámetro pasado i

 for (int i=0;i<limit;i++)
         {
            ArrayGreen[i] =iCustom(NULL,0,"Kolier_SuperTrend_Indi",ATR_Period,ATR_Multiplier,0,i);
         }

algo así.

 
¡Gracias! ¡Funciona!
 

¡Buenas tardes!


Para la comodidad de las pruebas, quiero quitar el botón para activar y desactivar la condición, para no tener que entrar en el código cada vez y no tener que cambiar la condición en texto, para que no tenga efecto.

En otras palabras, ahora mismo lo hago así:

if ((Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
{

Apagándolo así:

//if ((Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
//{

Intenté sacar la habilitación y la deshabilitación en la configuración de entrada bool Y=True; (Donde Y es la condición), asignar Y a la condición, y dividir las ramas si la condición funciona o no mediante else if. Pero algo no funcionó.

¿Puede aconsejar cómo proceder en estos casos?

 
YanSay:

¡Buenas tardes!


Para la comodidad de las pruebas, quiero quitar el botón para activar y desactivar la condición, para no tener que entrar en el código cada vez y no tener que cambiar la condición en texto, para que no tenga efecto.

En otras palabras, ahora mismo lo hago así:

Apagándolo así:

Traté de tirar de la habilitación y deshabilitación en la entrada bool Y=True; (Donde Y es la condición), asignar Y a la condición, y dividir las ramas si la condición está o no está en efecto vía else if. Pero algo no funcionó.

Por favor, aconseje qué hacer en estos casos.

Se puede hacer lo siguiente

input bool FLAG =True;


if (FLAG && (Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
{
 
Vitaly Muzichenko:

Podrías hacer esto.

La razón es que el algoritmo ignora la condición de Falso y pasa a las siguientes condiciones.

input bool FLAG =False;

El algoritmo no irá más allá, mientras que debería ignorar esta condición cuando el código es Falso e ir a las siguientes condiciones.

En mi caso, la única opción es especificar 2 ramas?

input bool FLAG =True;

if (FLAG=True)
{(Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
 {//следующие условия
 }
}

if (FLAG=False)
 {//следующие условия
 }

¿O hay una manera más fácil?

 
YanSay:

En su versión resulta que si el valor

El algoritmo no irá más allá, mientras que debería ignorar esta condición si es Falso y pasar a las siguientes condiciones.

En mi caso, la única opción es escribir 2 ramas?

¿O hay una manera más fácil?

//+------------------------------------------------------------------+
input bool FLAG =True;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  if(FLAG) {
    if(Close[1]<=High[2]) && (Close[1]>=Low[2]) && (Open[1]<=High[2]) && (Open[1]>=Low[2])
    //...
  } else {
    //следующие условия
  }
//+------------------------------------------------------------------+
 
YanSay:

En su versión resulta que si el valor

El algoritmo no irá más allá, mientras que debería ignorar esta condición si es Falso y pasar a las siguientes condiciones.

En mi caso, la única opción es escribir 2 ramas?

¿O hay una manera más fácil?

Sólo así

if(!FLAG || (Close[1]<=High[2] && Close[1]>=Low[2] && Open[1]<=High[2] && Open[1]>=Low[2]))
Razón de la queja: