Caractéristiques du langage mql5, subtilités et techniques - page 130
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
Merci. L'utilisation de la fonction ArraySwap ne m'aurait pas effleuré.
Je comprends que votre fonction fonctionnera à la fois en augmentant et en diminuant la taille, c'est-à-dire comme un analogue complet de ArrayResize.
N'est-il pas préférable d'appeler simplement la fonction standard ArrayResize lorsqu'un tableau est agrandi, plutôt que d'appeler les trois fonctionsArraySwap,ArrayResize,ArrayCopy?
p.s J'ai testé votre version et la mienne avec deux copies en réduisant le tableau MqlTick de 1.000.000 à 500.0000. Votre version le fait en 22 millisecondes. Le mien le fait en 37-38.N'est-il pas préférable d'appeler simplement la fonction standard ArrayResize lorsqu'un tableau est étendu, plutôt que d'appeler les trois fonctionsArraySwap,ArrayResize,ArrayCopy
J'y ai pensé, mais je ne l'ai pas fait, car il y a en fait plus de subtilités. C'est pourquoi j'ai décidé de m'en tenir à la version laconique.
Une des subtilités est la suivante. Si vous prenez un tableau de structures avec des constructeurs/destructeurs, ArrayResize les appellera dans les deux sens dans une quantité égale à la différence de valeurs.
Mais l'application de ArrayCopy appelle tous les constructeurs. La suppression de ArrayTmp est un appel à tous les destructeurs. Donc ArrayResize2 n'est pas vraiment ArrayResize.
Après l'optimisation, vous verrez ce qui suit
Si vous désactivez le conseiller expert en mode cadre et que vous l'exécutez en mode standard, il affichera les mêmes données que celles obtenues pendant l'optimisation.
Cette approche vous permet de revenir plusieurs fois sur les résultats de l'optimisation.
SZY Sur le graphique qui est ouvert dans le Terminal pour le mode frame, vous ne pouvez pas exécuter d'EA. Donc, si vous voulez l'exécuter en mode standard, vous devez l'exécuter sur un graphique qui n'a pas été ouvert pour les cadres.
fxsaber:
extern теперь является жестко заданным макросом
Par conséquent, il ne sera pas toujours possible de faire fonctionner le code MT5 mq4 sans modifications.
Il n'y a pas de changement dans la documentation. Pouvez-vous expliquer cela plus en détail ?
Il n'y a pas de changement dans la documentation. Pouvez-vous expliquer cela plus en détail ?
Un tel code
générera toujours un avertissement. Je suis un peu dur avec le mot "impossible". Il est possible de passer outre, de sorte qu'un simple avertissement sera toujours affiché dans de telles situations.
Une des nuances est la suivante. Si vous prenez un tableau de structures avec des constructeurs/destructeurs, alors ArrayResize dans un sens ou dans l'autre les appelle en un nombre égal à la différence de valeurs.
Mais l'application de ArrayCopy appelle tous les constructeurs. La suppression de ArrayTmp est un appel à tous les destructeurs. Donc ArrayResize2 n'est pas vraiment ArrayResize.
Dans ce cas, il serait probablement plus correct de l'appeler ArrayReallocate, bien que je ne voie pas l'intérêt d'une telle recopie forcée. Freinage inutile.
Libérer de la mémoire est la seule raison.