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

 

¿Puede alguien sugerir un esquema de cómo obtener de una matriz como esta

int array[15]= {0,0,5,5,5,1,9,9,9,0,2,2,1,0,0};

obtener los dígitos de los que hay 3 o más en una fila en la matriz, es decir, los valores "5" y "9" encajan

necesita obtener el tipo de

valor1=9;

valor2=5;

o el array valor[]={9,5};

Llevo dos días con el "while do" y no consigo descifrar el esquema

 
Fast235:

¿Puede alguien sugerir un esquema de cómo obtener de una matriz como esta

obtener los dígitos de los que hay 3 o más en una fila en la matriz, es decir, los valores "5" y "9" encajan

necesita obtener el tipo de

valor1=9;

valor2=5;

o el array valor[]={9,5};

día dos no puedo entender el esquema while do

lo esbozó, pero lo resolvió de frente, funciona en general, pero no le gustó mi solución:

//+------------------------------------------------------------------+
void OnStart()
{
   int array[15] = {0, 0, 5, 5, 5, 1, 9, 9, 9, 0, 2, 2, 1, 0, 0};
   int arrrepeat[];
   getRepeatNumbers(array, arrrepeat);
   ArrayPrint(arrrepeat);
}
//+------------------------------------------------------------------+
void getRepeatNumbers(const int &inArr[], int &result[])
{
   ArrayFree(result);
   for(int i = 0; i < ArraySize(inArr) - 1; i++)
   {
      if(getRepeatCount(inArr, i) > 1)
      {
         int sz = ArraySize(result);
         ArrayResize(result, sz + 1);
         result[sz] = inArr[i];
      }
   }
}
//+------------------------------------------------------------------+
int getRepeatCount(const int &arr[], const int pos)
{
   int result = 0;
   for(int i = pos + 1; i < ArraySize(arr) - 1 && arr[i] == arr[pos]; i++)
   {
      result++;
   }
   return(result);
}
//+------------------------------------------------------------------+

2020.09.10 11:51:26.323 tst (EURUSD,M5) 5 9

 
Igor Makanu:

esbozado, pero decidido de frente, funciona en general, pero no le gustó mi solución:

2020.09.10 11:51:26.323 tst (EURUSD,M5) 5 9

Gracias, demasiada acción

Me gustaría encontrar una solución en el bucle. Intentaré utilizar los operadores continue; y break;.

tiene que ser tomado del buffer del indicador en cada nueva barra prev_calculate-100 aproximadamente

 
Fast235:

Gracias, demasiada acción

Me gustaría encontrar una solución en el bucle. Intentaré utilizar los operadores continue; y break;.

debe tomarse del buffer del indicador en cada nueva barra prev_calculate-100 más o menos

no es engorroso, no me gustó ya que no busqué otras variantes - siempre lo hago así

añadir el bucle de la segunda función.... al cuerpo de la primera función habrá menos esfuerzo corporal


yasea cono sin pausa - este problema se resolverá en 2 bucles de todos modos.... ¡pero no es exacto! - decidir ;)

 
Igor Makanu:

no es engorroso, no me gustó porque no busqué otras opciones - siempre lo hago así

introducir el bucle de la segunda función.... en el cuerpo de la primera función habrá menos esfuerzo corporal


yasea cono sin pausa - este problema se resolverá en 2 bucles de todos modos.... ¡pero no es exacto! - decidir ;)

Intentaré trastear, escribiré si lo consigo

 
Fast235:

Lo probaré y te diré si funciona

Todo se resuelve en una sola pasada)))
 
Igor Makanu:

no es engorroso, no me gustó porque no busqué otras opciones - siempre lo hago así

introducir el bucle de la segunda función.... en el cuerpo de la primera función habrá menos esfuerzo corporal


yasea cono sin pausa - este problema se resolverá en 2 bucles de todos modos.... ¡pero no es exacto! - decidir ;)

error, si habrá cuatro "9" en la cola, en lugar de 3, el resultado será

5 9 9 2


 
Fast235:

error, si hay cuatro "9" en la cola en lugar de 3, el resultado es

5 9 9 2


te dije que no me gustaba mi solución (((

Demasiada pereza para escribir de nuevo.

Busca en Google "array find repetitions" - creo que encontrarás algo

 
Fast235:

¿alguien puede sugerir un esquema de cómo obtener de una matriz como esta

obtener los dígitos de los que hay 3 o más en una fila en la matriz, es decir, los valores "5" y "9" encajan

necesita obtener el tipo de

valor1=9;

valor2=5;

o el array valor[]={9,5};

no puedo entender el esquema para el segundo día

int qty[10]; // счётчики по цифрам

int total; // всего элементов в исходном массиве arr[]

int code=arr[0]; // текущая цифра

int count=1; // кол-во повторов

for(int i=1;i<total;i++) {

if (arr[i]!=code) { if (count>qty[code]) qty[code]=count;  code=arr[i]; count=1;}

        else count++;

}

if (count>qty[code]) qty[code]=count; 

/// в массиве qty - требуемое

añadir comprobaciones adicionales sobre la permisibilidad de los elementos arr[] (que sean dígitos) al gusto

 

¡Buenos días a todos!
Estoy probando el algoritmo en MT-4 tester usando mql4. Necesito que la función Print() muestre el precio de la oferta en el registro con 5 (cinco) decimales. Pero sólo imprimiría 4 (cuatro) decimales. He utilizado la función NormalizeDouble(Bid,Digits) para añadir el quinto dígito.

Por favor, díganme cómo solucionar mi error si es que existe.
Aquí está mi código.

void OnTick()
{
Print("=======Bid ======= ",NormalizeDouble(Bid,Digits) );

}


Al mismo tiempo, si imprimo usando Print() el precio de apertura y cierre de una orden (por SL y TP), entonces Print() imprime el precio con 5 (cinco) dígitos, incluso sin la ayuda de NormalizeDouble() y sin la ayuda de ninguna otra función.
Gracias a todos por su ayuda.

Razón de la queja: