Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1251

 

Quelqu'un peut-il suggérer un schéma pour obtenir d'un tableau comme ceci

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

obtenir les chiffres dont il y a 3 ou plus dans une rangée du tableau, c'est-à-dire que les valeurs "5" et "9" conviennent.

doivent obtenir le type de

valeur1=9 ;

valeur2=5 ;

ou tableau valeur[]={9,5} ;

Cela fait deux jours que je me pose des questions sur le "while do" et je n'arrive pas à comprendre le système.

 
Fast235:

Quelqu'un peut-il suggérer un schéma pour obtenir d'un tableau comme ceci

obtenir les chiffres dont il y a 3 ou plus dans une rangée du tableau, c'est-à-dire que les valeurs "5" et "9" conviennent.

doivent obtenir le type de

valeur1=9 ;

valeur2=5 ;

ou tableau valeur[]={9,5} ;

Deuxième jour, je n'arrive pas à comprendre le schéma "while do".

l'a esquissé, mais il l'a résolu de front, ça marche en général, mais il n'a pas aimé ma solution :

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

esquissé, mais décidé de front, fonctionne en général, mais n'a pas aimé ma solution :

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

Merci, trop d'action

Je voudrais trouver une solution dans la boucle. Je vais essayer d'utiliser les opérateurs continue; et break ;.

il doit être pris dans la mémoire tampon de l'indicateur à chaque nouvelle barre prev_calculate-100 environ

 
Fast235:

Merci, trop d'action

Je voudrais trouver une solution dans la boucle. Je vais essayer d'utiliser les opérateurs continue; et break ;.

il doit être pris dans la mémoire tampon de l'indicateur à chaque nouvelle barre prev_calculate-100 environ

il n'est pas encombrant, je n'ai pas aimé car je n'ai pas cherché d'autres variantes - je fais toujours comme ça

ajouter la boucle de la deuxième fonction.... au corps de la première fonction il y aura moins d'efforts corporels


avecou sans pause - ce problème sera résolu dans 2 boucles de toute façon.... mais ce n'est pas exact ! - décider ;)

 
Igor Makanu:

pas encombrant, je n'ai pas aimé parce que je n'ai pas cherché d'autres options - je fais toujours comme ça

introduire la boucle de la deuxième fonction.... dans le corps de la première fonction il y aura moins d'efforts corporels


avecou sans pause - ce problème sera résolu dans 2 boucles de toute façon.... mais ce n'est pas exact ! - décider ;)

J'essaierai de m'amuser, j'écrirai si j'y arrive.

 
Fast235:

Je vais essayer et je vous dirai si ça marche.

Tout est résolu en un seul passage))))
 
Igor Makanu:

pas encombrant, je n'ai pas aimé parce que je n'ai pas cherché d'autres options - je fais toujours comme ça

introduire la boucle de la deuxième fonction.... dans le corps de la première fonction il y aura moins d'efforts corporels


avecou sans pause - ce problème sera résolu dans 2 boucles de toute façon.... mais ce n'est pas exact ! - décider ;)

erreur, s'il y a quatre "9" dans la file d'attente, au lieu de 3, le résultat sera le suivant

5 9 9 2


 
Fast235:

erreur, s'il y a quatre "9" dans la file d'attente au lieu de 3, le résultat est le suivant

5 9 9 2


Je vous ai dit que je n'aimais pas ma solution ((()

Trop paresseux pour écrire à nouveau.

Google "array find repetitions" - Je pense que vous trouverez quelque chose.

 
Fast235:

Quelqu'un peut-il suggérer un schéma pour obtenir d'un tableau comme ceci

obtenir les chiffres dont il y a 3 ou plus dans une rangée du tableau, c'est-à-dire que les valeurs "5" et "9" conviennent.

doivent obtenir le type de

valeur1=9 ;

valeur2=5 ;

ou tableau valeur[]={9,5} ;

je n'arrive pas à comprendre le schéma pour le deuxième jour

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

ajouter des vérifications supplémentaires sur l'admissibilité des éléments arr[] (qu'ils soient des chiffres) à taste

 

Bonjour à tous !
Je teste l'algorithme dans le testeur MT-4 en utilisant mql4. J'ai besoin de la fonction Print() pour afficher le prix de l'offre dans un journal avec 5 (cinq) décimales. Mais il n'imprimerait que 4 (quatre) décimales. J'ai utilisé la fonction NormalizeDouble(Bid,Digits) pour ajouter le cinquième chiffre.

Veuillez me dire comment réparer mon erreur si elle existe.
Voici mon code.

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

}


En même temps, si j'imprime () le prix d'ouverture et de fermeture d'un ordre ( par SL et TP), Print() imprime le prix avec 5 (cinq) chiffres, même sans l'aide de NormalizeDouble() et sans l'aide d'aucune autre fonction.
Merci à tous pour votre aide.