Implémentations alternatives de fonctions/approches standard - page 2

 
Renat Fatkhullin:

En 2016, la plupart des compilateurs C++ sont arrivés aux mêmes niveaux d'optimisation.

MSVC fait s'interroger sur les améliorations apportées à chaque mise à jour, et Intel C++ en tant que compilateur a fusionné - il ne s'est toujours pas remis de son "erreur interne" sur les grands projets.

Une autre de nos améliorations du compilateur dans la version 1400 est qu'il est plus rapide pour compiler des projets complexes.

Si ce dialogue n'avait pas eu lieu, nous ne l'aurions probablement jamais su. Des informations supplémentaires sur l'excellent travail que vous faites seraient appréciées.
 
fxsaber:

Sur le sujet. Vous devez créer des alternatives aux fonctions standard, car elles donnent parfois des résultats erronés. Voici un exemple d'alternative à SymbolInfoTick

Vous pouvez appeler SymbolInfoTick sur chaque événement NewTick dans le testeur et additionner le champ volume pour connaître la rotation des actions. Mais non, vous ne pouvez pas ! Je dois rendre beaucoup plus logique MySymbolInfoDouble.

Bienvenue dans la programmation, où vous êtes le créateur !

Nous vous donnons l'outil le plus complet, où vous pouvez faire tout ce que vous voulez.

 
Renat Fatkhullin:

Vous pouvez optimiser tout ce qui vous entoure.

C'est un processus sans fin. Mais 99% du temps, ce n'est pas économiquement viable.

Il ne s'agit pas ici d'optimisation, mais d'adapter l'ancienne fonction aux nouvelles réalités. Bien sûr, vous auriez pu ne pas écrire NormalizeDouble du tout. Et les gens auraient créé leur propre variante. Mais vous l'avez créé pour gagner du temps. Ce n'est pas encore suffisant. Et il serait bon de réparer le vieux vélo pour satisfaire les mêmes outils de stock.
 
fxsaber:
Il ne s'agit pas d'optimisation, mais d'adapter l'ancienne fonction à la nouvelle réalité. Il est clair que vous auriez pu ne pas écrire NormalizeDouble du tout. Et les gens auraient créé leur propre variante. Mais vous l'avez créé pour gagner du temps. Ce n'est pas encore suffisant. Et il serait bon de réparer le vieux vélo pour satisfaire les mêmes outils de stock.
Merci, nous allons vérifier et voir si nous pouvons changer la bibliothèque.
 

À propos, il n'y a pas si longtemps, @iliyas a suggéré d'insérer un grand nombre de fonctions système au moment de la compilation en tant que code source MQL5, afin qu'elles puissent participer à l'inlining et à l'optimisation maximale.

Je n'ai pas apprécié l'idée au début, mais maintenant je vois que ce serait brillant. Le même MSVC le fait.

 
Renat Fatkhullin:
Merci, nous allons vérifier et voir si nous pouvons changer la bibliothèque.

Vous avez mal compris. Pas les bibliothèques, mais NormalizeDouble. Pour ajouter une surcharge.

double NormalizeDouble( double Value, double TickSize );

Pour normaliser les prix et les lots lorsque TickSize = 25, VolumeStep = 0.5

Par exemple, la normalisation ressemblerait à ceci

NormalizeDouble(Price, 0.00001) // Нормализация до пятого знака
NormalizeDouble(Price, 10.0) // Нормализация цены для RTS-9.16
NormalizeDouble(Price, 25.0) // Нормализация цены для MIX-9.16
 
Renat Fatkhullin:

À propos, il n'y a pas si longtemps, @iliyas a suggéré d'insérer un grand nombre de fonctions système au moment de la compilation en tant que codes source MQL5, afin qu'elles puissent participer à l'inlining et maximiser l'optimisation.

Je n'ai pas apprécié l'idée tout de suite, mais maintenant je vois que ce serait génial. Le même MSVC le fait.

Il s'avère que #import ex5 est le mal de l'optimisation.

Veuillez prêter attention aux caractéristiques du préprocesseur

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Comment puis-je procéder à l'énumération de manière séquentielle ?

Alexey Navoykov, 2016.09.01 23:20

J'ai déjà mis en œuvre le principe ci-dessus dans MQL5, car les macros ont un nombre fixe d'arguments et le nombre d'arguments est limité à 8. Je n'ai donc que 3 valeurs pour l'enum.

Pour ce qui est de l'aspect théorique, il est probablement plus rapide de créer une fonction interne pour analyser les enum. Les développeurs ont déjà promis de créer quelque chose.


Il s'avère que des constructions très astucieuses et conviviales peuvent être créées.

 
fxsaber:

Vous avez mal compris. Pas les bibliothèques, mais NormalizeDouble. Pour ajouter une surcharge.

Pour normaliser les prix et les lots lorsque TickSize = 25, VolumeStep = 0.5

Par exemple, la normalisation ressemblerait à ceci

Vous ne pouvez pas surcharger de cette façon. Mêmes signatures de fonctions.

Mais l'idée est claire - la fonction de normalisation prenant en compte la granulation des tiques.

 
Renat Fatkhullin:

Vous ne pouvez pas surcharger de cette manière. Mêmes signatures de fonctions.

Il ne semble pas y avoir de problème. Dans une variante, le deuxième paramètre est int (était), dans l'autre il est double (apparaîtra).

Mais l'idée est claire - la fonction de normalisation prenant en compte la granulation des tics.

Exactement !
 

fxsaber

Il y a une erreur dans votre code

Raison: