Erreurs, bugs, questions - page 2879
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 l'ai retravaillé un peu
(il est donc préférable de ne pas utiliser de macro ;)
Lors des tests, je brouille le code autant que possible pour éviter que l'optimiseur ne lance des boucles vides.
vous avez
// for(int i = 0; i < 5; i++) sum += u.param[i];
L'optimisation de l'exécution MQL peut mettre fin à la première boucle avant, puisque les valeurs calculées ne sont pas utilisées, donc quelque chose doit être fait après le SpeedTest() avec les résultats - cette boucle
j'ai vérifié avec la boucle commentée, je ne l'ai pas jetée, mais dans l'autre test je peux me planter
la macro est une question de goût, je l'ai testé plusieurs fois et ça marche, je ne vois pas l'intérêt d'écrire la même chose à la main
UPD : j'ai trouvé l'endroit où j'ai lu comment les compilateurs modernes fonctionnent maintenant, c'est assez instructif.
https://habr.com/ru/post/431688/
https://habr.com/ru/post/47878/
le code donne la valeur iRSI des handles et tps toujours seulement 10, mais les prix et le graphique changent aussi.
iRSI(_Symbole,PERIOD_H1,14,PRICE_CLOSE)
construire 2652
le code donne la valeur iRSI des handles et tps toujours seulement 10, mais les prix et le graphique changent aussi.
iRSI(_Symbole,PERIOD_H1,14,PRICE_CLOSE)
construire 2652
Vous avez la poignée de l'indicateur, c'est 10
Ensuite, vous devez obtenir les valeurs sur la barre de droite
Lisez l'aide, ou cherchez des réponses sur le forum - elles sont nombreuses.
Vous avez la poignée de l'indicateur, c'est 10
Ensuite, vous devez obtenir les valeurs sur la barre de droite
Lisez l'aide, ou cherchez des réponses sur le forum - il y en a beaucoup.
Je l'ai. Je vais étudier les tampons. C'est étrange, j'avais l'impression que tout devait fonctionner comme ça, j'ai peut-être confondu avec mql4.
Ce qui est étrange, c'est que je l'ai cherché sur Google et que je n'ai pas trouvé dans mql5 le moyen d'obtenir les données de l'indicateur.
Aha, selon votre exemple tel que je l'ai compris la valeur de l'indicateur RSI est à la fin dans une variable de la forme suivante
vérifié :
2020.10.15 21:48:01.401 SpeedTst (EURUSD,H1) tst 1 : : boucles=10000000000 ms=10864370
2020.10.15 21:48:12.264 SpeedTst (EURUSD,H1) tst 2 : : boucles=10000000000 ms=10862287
la différence n'est pas significative, il est très probable que si nous inversons les tests dans l'ordre inverse, les résultats seront inversés.
non critique
il n'est guère judicieux d'inclure rand() dans le test, car cette fonction consomme beaucoup plus de ressources que les autres commandes.
Je pense que ce serait un test plus correct :
Résultat :
Heureusement, je l'ai mis sur le mauvais cheval après tout. Les syndicats sont un peu plus rapides. Ils sont plus pratiques à utiliser et le code est plus lisible.
il n'est guère correct d'inclure rand() dans le test, car cette fonction est un ordre de grandeur plus gourmand en ressources que les autres commandes.
pas du tout critique
Le temps d'exécution de rand() est constant, il s'agit probablement d'une fonction C++ commune, recherchez dans Google "rand c++ source code".
vous devez l'initialiser, mais si vous l'initialisez avec des constantes, vous pouvez rencontrer des problèmes d'optimisation.
en général, je ne comprends pas l'aversion pour rand()
une option est d'initialiser avec quelque chose comme ceci :
serait rapide.
J'ai exécuté votre script, mais il n'est pas correct.
Le temps principal est le chargement du code dans le cache, puis dans le processeur.
et ajoutez le caractère discret du temporisateur du système
nous obtenons... presque un nombre aléatoire.
vous devez le tester pendant longtemps, environ 100500 fois, imho
Il est peu probable qu'il soit correct d'inclure rand() dans le test, car cette fonction consomme un ordre de grandeur plus important de ressources que les autres commandes.
Je pense que ce serait un test plus correct :
Résultat :
Heureusement, j'ai parié sur le mauvais cheval après tout. Les syndicats sont un peu plus rapides. Ils sont plus pratiques à utiliser et le code est plus lisible.
Une fois pour toutes, et à une distance de la première victoire, (comme si la première méthode avait supprimé la ligne de conversion de court à quelque chose)
pas du tout critique
Le temps d'exécution de rand() est constant, il s'agit probablement d'une fonction C++ commune, recherchez dans Google "rand c++ source code".
vous devez l'initialiser, mais si vous l'initialisez avec des constantes, vous pouvez rencontrer des problèmes d'optimisation.
en général, je ne comprends pas l'aversion pour rand()
comme une variante à initialiser avec quelque chose comme ceci :
sera rapideL'idée est que vous devez mesurer exactement ce que vous devez mesurer, sans aucun élément superflu.
Il s'agit de mesurer exactement ce qui est nécessaire, sans supplément.
pas de
S'il y a des fragments de code répétés, vous obtiendrez des tests d'optimisation !
Quelle différence cela fait-il de savoir combien de temps rand() est exécuté ?
laissez-le s'exécuter aux 2/3 du temps de test, l'essentiel étant que le temps de rand() soit constant.
Votre code MQL utilisera les fonctions MQL du système, n'est-ce pas ? - Quel est l'intérêt de tester un code parfait ?
pas de
s'il y a des sections de code répétitives, vous obtiendrez des tests d'optimisation !
Quelle différence cela fait-il de savoir combien de temps rand() est exécuté ?
Laissez-le s'exécuter aux 2/3 du temps de test, l'essentiel étant que le temps de rand() soit constant.
Votre code MQL utilisera les fonctions MQL du système, n'est-ce pas ? - Quel est l'intérêt de tester un code parfait ?
)) la différence de vitesse pourrait être 4 fois en faveur d'une des méthodes (1 à 4), mais comme l'opération rand est 10 fois plus lente que le reste du code, cette différence ne serait pas visible (11 à 14)