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

 

Ven y ayúdame.

La tarea consiste en encontrar el elemento mínimo en el array[].

//+------------------------------------------------------------------+ 
//| Получим Lowest для заданного промежутка                          | 
//+------------------------------------------------------------------+ 
double iLowMin(int ot,int bands,double &buffer[])
  {
   double result=-1;
   result=buffer[ArrayMinimum(buffer,ot,bands)];
   return(result);
  }
//+------------------------------------------------------------------+ 
//| Получим High для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iHighMax(int ot,int bands,double &buffer[])
  {
   double result=-1;
   result=buffer[ArrayMaximum(buffer,ot,bands)];
   return(result);
  }

El problema se resuelve, pero lo mínimo me mata. Lo he intentado todo, las matrices de entrada están llenas - miré a través de la depuración, ¿qué hacer?

Print("DwMin  ",iLowMin(rates_total-50,49,ExtLowerBuffer));

¿Quizás haya algunos matices?

declarado a través de

   SetIndexBuffer(1,ExtLowerBuffer,INDICATOR_DATA);
 
Top2n:

Ven y ayúdame.

La tarea consiste en encontrar el elemento mínimo en el array[].

El problema se resuelve, pero lo mínimo me mata. Lo he intentado todo, las matrices de entrada están llenas - miré a través de la depuración, ¿qué hacer?

¿Quizás haya algunos matices?

declarado a través de

Prueba con ArraySort y comprueba lo que muestra el primer índice.

 

Hasta aquí la noosfera, en cuanto dejé la pregunta, se me ocurrió una corazonada: tengo 0 en el array, por lo que da min = 0. Pero aún hay tramos con valores distintos de cero, y el min sigue siendo 0, bueno, Dios no lo quiera, la pregunta está resuelta)) Gracias a los que simplemente leen, la noosfera te dio

 

Atención a la pregunta))

¿Cómo se establece la barra del indicador a partir de la cual se empieza a procesar?

if(prev_calculated>rates_total-Bmax)

{ ... то что нужно обрабатывать начиная с бара[rates_total-Bmax]

}

Probado esto, el resultado es que el indicador hace un solo movimiento.

 

Hola de nuevo, ¿podríais decirme si conozco el índice de un elemento del array y qué función se utiliza para averiguar su valor?

int Total=Total de pedidos();

double Precio; // Precio de la orden seleccionada

double Mas[]; //array para ordenar todos los pedidos

for(int i=0; i<OrdersTotal(); i++) /bucle de pedidos

{

if(OrderSelect(i,SELECT_BY_POS)) // if(OrderSelect(i,SELECT_BY_POS))

{Price=OrderOpenPrice(); //Rellenar la matriz con los precios

Mas[i] = Precio;

}

}

ArraySort (Mas,WHOLE_ARRAY,0,MODE_ASCEND); // Ahora los precios de apertura están ordenados de forma descendente

int Blizko2=ArrayBsearch(Mas,Ask,WHOLE_ARRAY,0,MODE_DESCEND) // Se determina el índice del elemento más cercano en valor al precio actual

 
Nauris Zukas:

Como he encontrado antes de estudiar las clases, de nuevo hay matices que no se describen en los artículos o en algún lugar tan oculto que no es posible encontrar a través de un motor de búsqueda. Todo un día en vano buscando explicaciones. Por ejemplo, qué significa este símbolo y cómo afecta si no. Como se ve a continuación en el ejemplo de stati, primero está y luego no: &

Además, no está claro qué significa este símbolo: ~

*

Las funciones mql4, mql5 siempre pasan un array por referencia solamente (& == ampersand)

En primer lugar - en los parámetros formales de una función - hay un ampersand que indica que no es la propia matriz la que se pasa a la función, sino un enlace a ella. Y entonces -dentro de la función- ya estás trabajando con la referencia, lo que significa que no tienes que especificarla de nuevo.

La tilde (~) se escribe antes del nombre del destructor de la clase - el constructor y el destructor tienen el mismo nombre que la propia clase, pero el destructor tiene ~.

Lee este artículo sobre cuándo usar referencias y cuándo usar punteros.

Aunque, de todos modos, hay que leer lo básico.

 
vikzip:

Hola de nuevo, ¿podríais decirme si conozco el índice de un elemento del array y qué función se utiliza para averiguar su valor?

int Total=Total de pedidos();

double Precio; // Precio de la orden seleccionada

double Mas[]; //array para ordenar todos los pedidos

for(int i=0; i<OrdersTotal(); i++) /bucle de pedidos

{

if(OrderSelect(i,SELECT_BY_POS)) // If(OrderSelect(i,SELECT_BY_POS)) // Si hay un siguiente

{Price=OrderOpenPrice(); //Rellenar la matriz con los precios

Mas[i] = Precio;

}

}

ArraySort (Mas,WHOLE_ARRAY,0,MODE_ASCEND); // Ahora los precios de apertura están ordenados de forma descendente

int Blizko2=ArrayBsearch(Mas,Ask,WHOLE_ARRAY,0,MODE_DESCEND) // Se determina el índice del elemento más cercano en valor al precio actual

Matriz_de_valores = Matriz[índice];

 

Por favor, aconsejadme, tengo un EA y lo he estado probando en el trabajo en un ordenador normal, windows hp. Todo funciona bien y así sucesivamente.

Llego a casa, en el macbook de los portátiles de casa, y absolutamente con los mismos parámetros en la misma herramienta con el mismo marco de tiempo muestra un resultado completamente diferente en el probador, cualquier sugerencia o ideas por qué así?

 
Artyom Trishkin:

Array_elemento_valor = Array[índice];


Gracias, ahora hay un nuevo problema. Al escribir la siguiente condición se produce un error 'PriceBlizko1' - identificador no declarado. Explique por qué, por favor.

doble precio; // Precio de la orden seleccionada

doble Mas[]; //array para ordenar todos los pedidos

for(int i=0; i<OrdersTotal(); i++) // Bucle de pedidos

{

if(OrderSelect(i,SELECT_BY_POS)) // if(OrderSelect(i,SELECT_BY_POS))

{


Precio=Precio de apertura del pedido(); //Llenar la matriz con los precios

Mas[i] = Precio;

}

}

ArraySort (Mas,WHOLE_ARRAY,0,MODE_ASCEND); // Ahora los precios de apertura están ordenados de forma descendente

int Blizko1=ArrayBsearch(Mas,Bid,WHOLE_ARRAY,0,MODE_ASCEND); //Se determina el índice del elemento más cercano en valor al precio actual

double PrecioBlizko1=Mas[Blizko1];

}

if (PriceBlizko1-Bid>=30*Point) //si la orden inferior está más allá de 30 puntos !!!!!! EN ESTA CALLE!!!!!

OrderSend(Symbol(),OP_SELL,LtsS,Bid,2,0,Bid+30*Point); //Abrir orden de venta

Alerta (GetLastError()); /Mensaje de error.



 
vikzip:

Utilice el botón para insertar el código.

Razón de la queja: