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

 
igrok333:
¿Existe una función que devuelva el tipo de variable?

Por ejemplo, usted escribe.

int a=10;

y luego escribes:

functia(a);

y dice: ¡INT!

:)
string functia(int a) { devuelve "¡INT!"; } // de repente
string functia(double a) { devuelve "¡DABLE!"; } // también inesperadamente
 
igrok333:
¿Hay alguna función que devuelva un tipo de variable?

Por ejemplo, usted escribe.

int a=10;

y luego escribes:

functia(a);

y dice: ¡INT!

:)

De la ayuda:

void OnStart() 
  { 
//---  
   CTrade trade;    
   double d_value=M_PI; 
   int i_value=INT_MAX; 
   Print("d_value: type=",GetTypeName(d_value), ",   value=", d_value); 
   Print("i_value: type=",GetTypeName(i_value), ",   value=", i_value); 
   Print("trade: type=",GetTypeName(trade)); 
//---  
  } 
//+------------------------------------------------------------------+ 
//| Возвращает в строковом виде тип                                  | 
//+------------------------------------------------------------------+ 
template<typename T> 
string GetTypeName(const T &t) 
  { 
//--- вернем тип в виде строки 
   return(typename(T)); 
//--- 
  }
 
WinProject:

Es mucho más sencillo. Cree un botón de visualización (o utilice uno de los botones existentes). Más adelante - todos los objetos necesarios están marcados con la bandera de visibilidad en todos los TFs. Cuando se suelta el botón, todos los objetos se fijan para mostrar la propiedad en todos los TFs (o es necesario si es necesario). No es necesario borrar/reorganizar nada. Lo único que hay que hacer es volver a dibujar el gráfico después de esta operación.

Propiedad del objeto OBJPROP_TIMEFRAMES.

 

¿Me pueden decir cómo obtener los datos del indicador en un array? Es decir, está claro que tengo que declarar un array

doble matriz_de_números[];

No sé muy bien qué hacer a continuación...

num_array[0] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i); // la matriz con el índice [0] es igual a MA, pero si cambiamos el índice a [1], entonces resulta que num_array[1] es igual

los mismos datos del indicador que num_array[0]. Este no debería ser el caso. La matriz debe llenarse secuencialmente. Lo único que se me ocurre es dividir el día en 24

horas, declare una matriz bidimensional y asigne un índice a cada hora con su propia cadena etc....

¿Quizás haya una forma más sencilla o menos engorrosa?

 
Corvin85:

¿Me pueden decir cómo obtener los datos del indicador en un array? Es decir, está claro que tengo que declarar un array

doble matriz_de_números[];

No sé muy bien qué hacer a continuación...

num_array[0] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i); // la matriz con el índice [0] es igual a MA, pero si cambiamos el índice a [1], entonces resulta que num_array[1] es igual

los mismos datos del indicador que num_array[0]. Este no debería ser el caso. La matriz debe llenarse secuencialmente. Lo único que se me ocurre es dividir el día en 24

horas, declare una matriz bidimensional y asigne un índice a cada hora con su propia cadena etc....

¿Quizás haya una forma más sencilla o menos engorrosa?


Yo lo veo así:

double num_array[];  

ArrayResize(num_array,24);

for(int i=0;i<24;i++)

{

 num_array[i] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);

}
 
Vladislav Andruschenko:

Yo lo veo así:

double num_array[];  

ArrayResize(num_array,24);

for(int i=0;i<24;i++)

{

 num_array[i] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);

}
Ah, resulta que hay que establecer el número máximo de índices en el array a través deArrayResize y pasarlos por un bucle. Muchas gracias, pero entonces hay una pregunta, cuando todos los índices se llenan con los datos del indicador, deben ser borrados a través deArrayFree, o se reescribirá a sí mismo? O después de 24x todo se detendrá en absoluto? Perdón por la pregunta tonta, pero los arrays son una especie de caballo negro con funciones desconocidas.
 
Corvin85:
Oh, puedo establecer el número máximo de índices en el array a través deArrayResize y pasarlos por el bucle. Muchas gracias, pero entonces me surge una duda, cuando todos los índices estén llenos de datos del indicador, ¿debo borrarlos a través deArrayFree, o se reescribirá solo? o después del 24 se detendrá todo? Perdón por la pregunta tan contundente, pero los arrays son una especie de caballo negro con funciones desconocidas.
Bueno, depende del objetivo que persigas. Escribí el código para llenar el array con los datos mA de las últimas 24 barras. Se actualizará continuamente.
 
Corvin85:
Oh, puedo usarArrayResize para establecer el número máximo de índices en el array y pasarlos por el bucle. Muchas gracias, pero entonces me surge una duda, cuando todos los índices estén llenos de datos del indicador, ¿debo borrarlos a través deArrayFree, o se reescribirá solo? o después del 24 se detendrá todo? Perdón por la pregunta tan contundente, pero los arrays son una especie de caballo negro con funciones desconocidas.

Array = un conjunto de variables simples alineadas en una fila para una conveniente referencia de índice. El índice es una variable entera para acceder a los elementos del array por número para organizar un bucle. Índice = contador de números. ArrayFree = destrucción de arrays - como arrasar con casas destartaladas. Pero se puede restaurar de nuevo con ArrayResize. Bueno ,ArrayResize es una valla alrededor de un array residencial. El nuestro está aquí, pero los extraños están detrás de la valla, y está prohibido entrar allí. Puedes introducir cada casa muchas veces (asignar un nuevo valor a un elemento del array). Una matriz es muy simple y conveniente para muchos propósitos. Y los que tienen miedo de las matrices - los ... Por lo tanto, es mejor que los conozcas.

 
//+------------------------------------------------------------------+ 
//| Проверка массива                                                 | 
//+------------------------------------------------------------------+ 
#property strict
int m[10];
int n;

void OnStart() 
{ 
  ArrayInitialize(m,7);          Вывод();  // Заполнить семерками
  ArrayResize(m,7);              Вывод();  // Удалить 3 последних элемента
  ArrayResize(m,9);              Вывод();  // Увеличить размер
  m[1]=1;  m[7]=1;               Вывод();  // Изменить 2 элемента
  for(n=0; n<9; n++) m[n]=n*n;   Вывод();  // Заполнить квадратами номеров
  ArrayCopy(m,m,0,2,7);          Вывод();  // Копирование со сдвигом
  ArrayResize(m,ArraySize(m)-2); Вывод();  // Удалить 2 последних элемента
} 

void Вывод()
{
  string s="";
  for(n=0; n<ArraySize(m); n++)
  s+="  " + string(m[n]);
  Alert(ArraySize(m), ":", s);
}
Pruebe a ejecutar un script como este - y practique
 
Artyom Trishkin:

De la referencia:

cp
Razón de la queja: