Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1251

 

qualcuno può suggerire uno schema per come ottenere da un array come questo

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

ottenere le cifre di cui ci sono 3 o più in una riga nell'array, cioè i valori "5" e "9" si adattano

bisogno di ottenere il tipo di

value1=9;

valore2=5;

o array value[]={9,5};

Sono due giorni che mi sto arrovellando con il while do e non riesco a capire lo schema

 
Fast235:

qualcuno può suggerire uno schema per come ottenere da un array come questo

ottenere le cifre di cui ci sono 3 o più in una riga nell'array, cioè i valori "5" e "9" si adattano

bisogno di ottenere il tipo di

value1=9;

valore2=5;

o array value[]={9,5};

il secondo giorno non riesco a capire lo schema while do

abbozzato, ma l'ha risolto di petto, funziona in generale, ma non ha gradito la mia soluzione:

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

abbozzato, ma deciso di testa, funziona in generale, ma non piaceva la mia soluzione:

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

Grazie, troppa azione

Vorrei trovare una soluzione nel ciclo. Proverò a usare gli operatori continue; e break;

deve essere preso dal buffer dell'indicatore ad ogni nuova barra prev_calculate-100 circa

 
Fast235:

Grazie, troppa azione

Vorrei trovare una soluzione nel ciclo. Proverò a usare gli operatori continue; e break;

deve essere preso dal buffer dell'indicatore su ogni nuova barra prev_calculate-100 o giù di lì

non è ingombrante, non mi è piaciuto perché non ho cercato altre varianti - faccio sempre così

aggiungere il ciclo della seconda funzione.... al corpo della prima funzione ci sarà meno sforzo corporeo


sia cono senza pausa - questo problema sarà risolto in 2 cicli comunque.... ma non è esatto! - decidere ;)

 
Igor Makanu:

non ingombrante, non mi è piaciuto perché non ho cercato altre opzioni - faccio sempre così

introdurre il ciclo della seconda funzione.... nel corpo della prima funzione ci sarà meno sforzo corporeo


sia cono senza pausa - questo problema sarà risolto in 2 cicli comunque.... ma non è esatto! - decidere ;)

Cercherò di fare un po' di confusione, scriverò se mi viene

 
Fast235:

Ci proverò e vi farò sapere se funziona

È tutto risolto in un solo passaggio)))
 
Igor Makanu:

non ingombrante, non mi è piaciuto perché non ho cercato altre opzioni - faccio sempre così

introdurre il ciclo della seconda funzione.... nel corpo della prima funzione ci sarà meno sforzo corporeo


sia cono senza pausa - questo problema sarà risolto in 2 cicli comunque.... ma non è esatto! - decidere ;)

errore, se ci saranno quattro "9" in coda, invece di 3, il risultato sarà

5 9 9 2


 
Fast235:

errore, se ci sono quattro "9" nella coda invece di 3, il risultato è

5 9 9 2


Ti ho detto che non mi piaceva la mia soluzione (((

Troppo pigro per scrivere di nuovo.

Cerca su Google "array trova ripetizioni" - penso che troverai qualcosa

 
Fast235:

qualcuno può suggerire uno schema per come ottenere da un array come questo

ottenere le cifre di cui ci sono 3 o più in una riga nell'array, cioè i valori "5" e "9" si adattano

bisogno di ottenere il tipo di

value1=9;

valore2=5;

o array value[]={9,5};

Non riesco a capire lo schema del secondo giorno

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

aggiungere ulteriori controlli sulla ammissibilità degli elementi arr[] (che siano cifre) al gusto

 

Buona giornata a tutti!
Sto testando l'algoritmo in MT-4 tester usando mql4. Ho bisogno della funzione Print() per emettere il prezzo dell'offerta in log con 5 (cinque) cifre decimali. Ma stamperebbe solo 4 (quattro) cifre decimali. Ho usato la funzione NormalizeDouble(Bid,Digits) per aggiungere la quinta cifra.

Per favore, ditemi come risolvere il mio errore, se esiste.
Ecco il mio codice.

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

}


Allo stesso tempo, se stampo () il prezzo di apertura e di chiusura di un ordine (per SL e TP), Print() stampa il prezzo con 5 (cinque) cifre, anche senza l'aiuto di NormalizeDouble() e senza l'aiuto di altre funzioni.
Grazie a tutti per il vostro aiuto.