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

 

Buenas tardes, si no es muy difícil, por favor aconsejar a un novato:

1) ¿Cómo declarar un array de tamaño igual al valor de alguna variable? (si i=7 declarar array double Muss[7] y así sucesivamente);

2) ¿Por qué se considera que una matriz en una función definida por el usuario se declara y utiliza adecuadamente si la condición es siempre falsa?

while (false){

Alerta("aaaaaaaaaaa" );

static double Buf_max [9000000];

static double Buf_min [9000000];}

3) ¿Existe alguna diferencia en la función de usuario y en general entre un simple array y un array estático?

 
ALXIMIKS:

Buenos días, si no es muy difícil, por favor aconsejar a un novato:

1) ¿Cómo declarar un array de tamaño igual al valor de alguna variable? (Si i=7 declarar array double Muss[7] y así sucesivamente);

...

1) ArrayResize()

int i=7;
double Muss[]; // объявление динамического массива
//---
int init() 
{
  ArrayResize(Muss,i); // устанавливает новый размер массива
  return(0);
}
 

tal cosa:

si llama a MarketInfo(Symbol(),MODE_TRADEALLOWED), devuelve - 1=comercio permitido.

Pero si pasa el ratón por encima del símbolo en la visión general del mercado, aparecerá un tooltip con el texto - Trade: Close.

¿cuál es el truco aquí?

realmente no me deja comerciar, pero ¿por qué MODE_TRADEALLOWED devuelve un valor erróneo?

 
chief2000:

¿Cuántas veces has ejecutado el indicador? Parece que varias veces (la ciclicidad se nota en sus resultados).
Añade una impresión más a deinit con algún "separador", establece la condición de entrada o rehazlo en el script para que no se ejecute más de una vez, entonces estará más claro.


Gran idea))

Lo hice más simple, así:

//+------------------------------------------------------------------+
//|                                            massive_fffffffff.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

int start()
{ 

   int Array[4] = {1, 2, 3, 4};
   int x1, x2, x3, x4;
   int Array_Size = ArrayRange(Array, 0);
   
   for(int i=0; i<11; i++)
   {
      i++;
      Print("_i = ", i);
   }

   for(x1=0; x1<Array_Size; x1++)
   {
      Print("Combination = ", Array[x1]);

      for(x2=x1+1; x2<Array_Size; x2++)
      {
         Print("Combination = ", Array[x1] + "   " + Array[x2]);

         for(x3=x2+1; x3<Array_Size; x3++)
         {
            Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3]);

            for(x4=x3+1; x4<Array_Size; x4++)
            {
               Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3] + "   " + Array[x4]);
            }
         }
      }
   }
  for(int h=0; h<11; i++)
   {
      h++;
      Print("h = ", h);
   }


   return(0);
}

El comienzo en el cuaderno de bitácora es así:

2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 9
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 9
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 7
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 5
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 3
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 1
2013.09.10 17:09:07     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 11
2013.09.10 17:09:07     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 10
2013.09.10 17:09:07     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 7
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 5
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 3
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 1
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 11
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 10
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: Combination = 1
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 11
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 7
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 5
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 3
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 1
2013.09.10 17:09:06     massive_fffffffff test started
2013.09.10 17:09:04     TestGenerator: spread set to 2
2013.09.10 17:09:04     massive_fffffffff EURUSD.GI,M5: loaded successfully

Ni siquiera hay ciclos. No hay orden. La salida no es nada consistente.

 
hoz:


Gran idea))

Lo hice más simple, así:

El comienzo en el cuaderno de bitácora es así:

Ni siquiera hay ciclos. No hay orden. La salida no es nada consistente.


Has complicado un poco las cosas, en la fase de pruebas todo se puede hacer en 1-2 líneas, dependiendo de la variante. Es posible hacer todo en el Inite. No se ha estipulado el orden de salida.


bool Status_Run = true;


start() {

   if(Status_Run==true) {
      Status_Run  = false;

      Print("---START ---");
      ......

   }
}
 
chief2000:

Has complicado un poco las cosas, en la fase de comprobación todo se puede hacer en 1-2 líneas, dependiendo de la variante. Es posible hacer todo en el Inite. El orden de salida no estaba estipulado.





¿Te refieres a introducir una bandera para que los bucles se ejecuten una vez y ya está? No dejo de ejecutar... Así es como funciona:

//+------------------------------------------------------------------+
//|                                            massive_fffffffff.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

int start()
{ 

   bool Status_run = true;
   int Array[4] = {1, 2, 3, 4};
   int x1, x2, x3, x4;
   int Array_Size = ArrayRange(Array, 0);
   
   if (Status_run == true)
   {
      Status_run = false;

      for(x1=0; x1<Array_Size; x1++)
      {
         Print("Combination = ", Array[x1]);

         for(x2=x1+1; x2<Array_Size; x2++)
         {
            Print("Combination = ", Array[x1] + "   " + Array[x2]);

            for(x3=x2+1; x3<Array_Size; x3++)
            {
               Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3]);

               for(x4=x3+1; x4<Array_Size; x4++)
               {
                  Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3] + "   " + Array[x4]);
               }
            }
         }
      }
   }

   return(0);
}

Sin embargo, en esencia, el código debería funcionar como en INITA, de una vez por todas. Entonces la variable booleana Status_run se pondrá inmediatamente en falso y la condición if no se volverá a ejecutar... Pero mi registro no se queda sin salida por alguna razón.

 
hoz:


¿Te refieres a introducir una bandera para que los bucles se ejecuten una vez y ya está? No dejo de correr... Así es como funciona:

Aunque en esencia, el código debería funcionar como en INITE, una vez y ya está. Entonces la variable booleana Status_run se pondrá inmediatamente en falso y la condición if no se volverá a ejecutar... Pero por alguna razón no se me acaba la salida en el registro.


Afirmaste que los bucles daban resultados erróneos y te ofrecí una forma de comprobarlo. Si funciona como necesita, entonces debe seguir su algoritmo, y si no, debe cambiarlo durante la comprobación.

PS "Status_run" debe ser creado antes de start(), es una variable global.
 

Gurús, un consejo. He puesto la variable bool Flag=true; para empezar,

Abro un trato

si ( condición)

{

Opn_S = true;

Bandera=falsa;

}

Hay una pregunta sobre la bandera, si la bandera devuelvefalso cuando se abre y hay esta bandera en la condición de apertura. ¿Cuánto tiempo se mantiene la verdad o la falsedad pasada a la bandera, se pone a cero al día siguiente?

 
Forexman77:

Gurús, un consejo. He puesto la variable bool=true; para empezar,

Abro un trato

si ( condición)

{

Opn_S = true;

Bandera=falsa;

}

Hay una pregunta sobre la bandera, si la bandera devuelvefalso cuando se abre y hay esta bandera en la condición de apertura. ¿Cuánto tiempo se mantiene la verdad o la falsedad pasada a la bandera, se pondrá a cero al día siguiente?


No lo hará, con cada nuevo tick el valor de Flag será verdadero . https://book.mql4.com/ru/variables/types

O bien declarar la variable de forma global - por ejemplo, al principio de un programa, fuera de todas las funciones.

O hacer la variable estática - static bool flag=true; .

 
ALXIMIKS:

No lo hará, con cada nuevo tick el valor de Flag será verdadero . https://book.mql4.com/ru/variables/types

O bien declarar la variable globalmente - al principio del programa, fuera de todas las funciones.

O hacer la variable estática - static bool flag=true; .

Gracias.