Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1251

 

alguém pode sugerir um esquema de como obter de um conjunto como este

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

obter os dígitos dos quais há 3 ou mais em uma linha na matriz, ou seja, os valores "5" e "9" se encaixam

necessidade de obter o tipo de

valor1=9;

valor2=5;

ou valor da matriz[]={9,5};

Há dois dias que estou confuso e não consigo entender o esquema

 
Fast235:

Alguém pode sugerir um esquema de como obter de um conjunto como este

obter os dígitos dos quais há 3 ou mais em uma linha na matriz, ou seja, os valores "5" e "9" se encaixam

necessidade de obter o tipo de

valor1=9;

valor2=5;

ou valor da matriz[]={9,5};

segundo dia eu não consigo entender o esquema de enquanto faço

esboçou-o, mas o resolveu de frente, funciona em geral, mas não gostou da minha solução:

//+------------------------------------------------------------------+
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:

esboçada, mas decidida de frente, funciona em geral, mas não gostou da minha solução:

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

Obrigado, muita ação

Eu gostaria de encontrar uma solução no loop. Vou tentar continuar a usar; e quebrar; operadores

tem que ser retirado do buffer indicador em cada nova barra pré-calculada-100 aproximadamente

 
Fast235:

Muito obrigado, muita ação

Eu gostaria de encontrar uma solução no loop. Vou tentar continuar a usar; e quebrar; operadores

deve ser tirado do buffer indicador em cada nova barra pré-calculada-100 ou mais

não é incômodo, não gostei, pois não procurei outras variantes - sempre o faço dessa maneira

adicionar o laço da segunda função.... ao corpo da primeira função haverá menos esforço corporal


seja comou sem pausa - este problema será resolvido em 2 laços de qualquer forma.... mas não é exato! - decidir ;)

 
Igor Makanu:

não é incômodo, não gostei porque não procurei outras opções - sempre o faço desta maneira

introduzir o laço da segunda função.... no corpo da primeira função haverá menos esforço corporal


seja comou sem pausa - este problema será resolvido em 2 laços de qualquer forma.... mas não é exato! - decidir ;)

Tentarei me meter, escreverei se conseguir

 
Fast235:

Eu vou tentar e avisarei se funcionar

Tudo é resolvido em uma única passagem)))
 
Igor Makanu:

não é incômodo, não gostei porque não procurei outras opções - sempre o faço desta maneira

introduzir o laço da segunda função.... no corpo da primeira função haverá menos esforço corporal


seja comou sem pausa - este problema será resolvido em 2 laços de qualquer forma.... mas não é exato! - decidir ;)

erro, se houver quatro "9's" na fila, em vez de 3, o resultado será

5 9 9 2


 
Fast235:

erro, se houver quatro "9's" na fila em vez de 3, o resultado é

5 9 9 2


eu disse que não gostava da minha solução (((

Demasiado preguiçoso para escrever novamente.

Google "array find repetitions" - Acho que você vai encontrar algo

 
Fast235:

Alguém pode sugerir um esquema de como obter de um conjunto como este

obter os dígitos dos quais existem 3 ou mais em uma linha na matriz, ou seja, os valores "5" e "9" se encaixam

necessidade de obter o tipo de

valor1=9;

valor2=5;

ou valor da matriz[]={9,5};

não consigo descobrir o esquema para o segundo dia

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 - требуемое

acrescentar verificações adicionais sobre a permissibilidade dos elementos arr[] (que são dígitos) a gosto

 

Bom dia a todos!
Estou testando o algoritmo no testador MT-4 usando mql4. Preciso da função Print() para produzir o preço de licitação em log com 5 (cinco) casas decimais. Mas imprimiria apenas 4 (quatro) casas decimais. Eu usei a função NormalizeDouble(Bid,Digits) para adicionar o quinto dígito.

Por favor, me diga como corrigir meu erro se ele existir.
Aqui está meu código.

nulo OnTick()
{
Imprimir("=======Bid ======= ",NormalizeDouble(Bid,Digits) );

}


Ao mesmo tempo, se eu imprimir () o preço de abertura e fechamento de um pedido ( por SL e TP), Print() imprime o preço com 5 (cinco) dígitos, mesmo sem a ajuda de NormalizeDouble() e sem a ajuda de qualquer outra função.
Obrigado a todos por sua ajuda.

Razão: