Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
je ne sais pas ce qu'est mt4, il ne fonctionne même pas sur win10, je pense que c'est une bonne chose
J'ai modifié le tableau.
J'ai dû utiliser ArrayCopy , carMQL5 jurait que le tableau était statique.
Si c'est un concours de rapidité, je vais proposer ma propre variante...
Votre variante est effectivement la plus rapide, mais elle contient un bug : si tous les éléments d'un tableau sont égaux à un filtre, votre fonction sortira du tableau.
Je vais proposer ma propre variante, elle est un peu plus lente que la vôtre :
2018.11.13 17:16:38.618 massiv v1 (EURUSD,M1) test my=1512090
2018.11.13 17:16:40.083 massiv v1 (EURUSD,M1) test alien=1464941
Cela fait plusieurs années que vous posez ce genre de questions. Avez-vous appris beaucoup de choses ? Désolé, mais il est évident que vous en êtes encore au niveau des octets et des tableaux élémentaires.
La question elle-même est formulée de manière incorrecte. La tâche n'est pas de supprimer les valeurs répétitives (tâche de niveau GCE) mais dans quelque chose de beaucoup plus grand, vous devez mettre à jour la liste des éléments valides. Si c'est le cas, la question devrait être complètement différente. Vous confondez et trompez les participants et, avant tout, vous-même : imposez aux participants la mauvaise solution de principe et demandez de la rendre effective.
Je ne fais pas de la programmation pour le plaisir de programmer, je n'ai pas pour objectif de devenir un méga-programmeur et de faire le malin sur les forums.
Qu'est-ce que vous ne comprenez pas dans la question : Effacer un tableau d'éléments définis ?
Votre variante est effectivement la plus rapide, mais elle contient un bug : si tous les éléments d'un tableau sont égaux à un filtre, votre fonction sortira du tableau.
Je vais proposer ma variante, elle est un peu plus lente que la vôtre :
2018.11.13 17:16:38.618 massiv v1 (EURUSD,M1) test my=1512090
2018.11.13 17:16:40.083 massiv v1 (EURUSD,M1) test alien=1464941
Oui, merci. Corrigé.
Seulement, vous avez aussi une erreur quelque part, car la somme de contrôle ne coïncide pas parce qu'il manque un élément quelque part. On ne sait pas où.
Ajusté en supprimant les passages inutiles
Dans les deux cas, chaque élément est traîné au maximum une fois.
Oui, désolé, une seule fois en effet. J'espérais que quelqu'un serait intéressé par l'approche SGBD et vérifierait, je n'ai pas attendu. J'ai dû le faire moi-même.
J'ai inséré ArrayDeleteValue.mq5 dans ton vérificateur, il est deux fois plus mauvais que le tien. J'ai réfléchi à la raison et j'ai corrigé deux lignes pour qu'un tiers des éléments soit supprimé au lieu de 0,1%.
C'est comme ça que ça s'est passé :
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) variant Pastushak : Somme de contrôle = 333586 ; éléments - 667421 ; temps d'exécution = 108521 microsecondes
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) variant Korotky : Somme de contrôle = 333586 ; éléments - 667421 ; temps d'exécution = 5525 microsecondes
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) variant Fedoseev : Somme de contrôle = 333586 ; éléments - 667421 ; temps d'exécution = 4879 microsecondes
2018.11.13 19:45:22.164 Del (GBPUSD.m,H1) variant Semko : Somme de contrôle = 333586 ; éléments - 667421 ; temps d'exécution = 14479 microsecondes
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) variant Pavlov : Somme de contrôle = 998744 ; éléments - 667421 ; temps d'exécution = 0 microsecondes
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) variant Nikitin : Somme de contrôle = 333586 ; éléments - 667421 ; temps d'exécution = 5759 microsecondes
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) variante Vladimir : Somme de contrôle = 333586 ; éléments - 667421 ; temps d'exécution = 1542 microsecondes
La variante de Pavlov comportait une erreur, j'ai dû la commenter.
Conclusion : calculer des adresses dans un tableau avec une distance arbitraire entre leurs numéros est toujours pire que de traiter des éléments dans une rangée, à une étape donnée, et encore moins à l'étape 1, le compilateur peut l'optimiser.
P.S. Les compilateurs Pascal et Delphi de Borland font en sorte qu'au moment de l'exécution, la variable de la boucle n'a pas d'importance (en mémoire), elle est placée quelque part dans les registres du CPU.
Oui, désolé, une seule fois en effet. J'espérais que quelqu'un serait intéressé par l'approche SGBD et vérifierait, je n'ai pas attendu. J'ai dû le faire moi-même.
J'ai inséré ArrayDeleteValue.mq5 dans ton vérificateur, il est deux fois plus mauvais que le tien. J'ai réfléchi à la raison et j'ai corrigé deux lignes pour qu'un tiers des éléments soient supprimés au lieu de 0,1%.
C'est comme ça que ça s'est passé :
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) variant Pastushak : Somme de contrôle = 333586 ; éléments - 667421 ; temps d'exécution = 108521 microsecondes
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) variant Korotky : Somme de contrôle = 333586 ; éléments - 667421 ; temps d'exécution = 5525 microsecondes
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) variant Fedoseev : Somme de contrôle = 333586 ; éléments - 667421 ; temps d'exécution = 4879 microsecondes
2018.11.13 19:45:22.164 Del (GBPUSD.m,H1) variant Semko : Somme de contrôle = 333586 ; éléments - 667421 ; temps d'exécution = 14479 microsecondes
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) variant Pavlov : Somme de contrôle = 998744 ; éléments - 667421 ; temps d'exécution = 0 microsecondes
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) variant Nikitin : Somme de contrôle = 333586 ; éléments - 667421 ; temps d'exécution = 5759 microsecondes
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) variante Vladimir : Somme de contrôle = 333586 ; éléments - 667421 ; temps d'exécution = 1542 microsecondes
La variante de Pavlov comportait une erreur, j'ai dû la commenter.
Conclusion : calculer des adresses dans un tableau avec une distance arbitraire entre leurs numéros est toujours pire que de traiter des éléments dans une rangée à une étape donnée, d'autant plus à l'étape 1, le compilateur peut l'optimiser.
P.S. Les compilateurs Pascal et Delphi de Borland font en sorte qu'au moment de l'exécution, la variable de la boucle n'a pas d'importance (en mémoire), elle est placée quelque part dans les registres du CPU.
La version de Pavlov a été corrigée.
Vos valeurs sont étranges. Peut-être avez-vous exécuté le script après le profilage ou le débogueur sans recompiler le code ?
C'est comme ça que ça marche pour moi :
Et dans votre version, il génère une somme de contrôle incorrecte. Et la création d'un tableau supplémentaire n'est d'aucune utilité, au contraire, elle ralentit le processus et consomme des ressources supplémentaires.
Seulement dans mon cas, il est fait en blocs en utilisant ArrayCopy, donc il y a un avantage de vitesse.