Effacement forcé des tableaux dans MT5 ? - page 4

 
Je ne savais pas qu'en 4, l'initialisation avec des zéros se fait pendant le redimensionnement. Il ne s'agit pas d'une commodité, mais d'une sorte de non-sens, entraînant une baisse de la vitesse des programmes. Par exemple, si je dois initialiser le tableau avec la valeur -1, alors une double initialisation se produit.
Et se demander ensuite pourquoi MT4 est plus lent.
 
Vasiliy Sokolov:

... MQL5, contrairement à MQL4, n'essaie pas de comprendre ce que veut un utilisateur et c'est correct.

Je suggère de le mettre sur un poster. :) (je plaisante)

Vasily, je comprends qu'il existe certaines nuances qui justifient une telle approche de MT5 à la convenance du programmeur. Et ça ne me dérange pas. Qu'il en soit ainsi.

 
Реter Konow:

1. La logique nous dit que la procédure d'effacement des tableaux est effectuée par le compilateur une fois au moment de la compilation.

Oui, vous avez un problème de logique :)

 
Nikolai Semko:
Je ne savais pas que dans 4ka l'initialisation par des zéros se produit pendant le redimensionnement. Il ne s'agit pas d'une commodité, mais d'une absurdité qui entraîne une baisse de la vitesse des programmes. Par exemple, si je dois initialiser le tableau avec la valeur -1, une double initialisation se produit.
Et ils se demandent ensuite pourquoi MT4 est plus lent.

En principe, nous pourrions ajouter un drapeau lors de la déclaration d'un tableau, qui indiquerait au compilateur d'effacer le tableau. Ce serait soit pratique, soit rapide - à vous de choisir.

 
Реter Konow:

En principe, nous pourrions ajouter une sorte d'indicateur lors de la déclaration d'un tableau qui indiquerait au compilateur d'effacer le tableau. Ce serait soit pratique, soit rapide - à vous de choisir.

Quelle différence cela fait-il ? Vous faites l'initialisation après le redimensionnement, c'est tout le drapeau.
En particulier lors de la déclaration d'un tableau dynamique, la taille n'est pas connue.
 
Nikolai Semko:
Quelle est la différence ? Vous faites l'initialisation après le redimensionnement, c'est le drapeau entier.
En particulier lors de la déclaration d'un tableau dynamique, la taille n'est pas connue.

Oui, après chaque déclaration de tableau global et après chaque redimensionnement de tableau. Et que faire si vous avez 20 à 30 tableaux globaux, dont certains changent de taille dans certaines circonstances ? Faut-il écrire l'initialisation dans les boucles partout ? (les tableaux peuvent être bidimensionnels). N'est-ce pas une source potentielle d'erreurs ?

 
Реter Konow:

Oui, après chaque déclaration de tableau global et après chaque redimensionnement de tableau. Mais que faire si vous avez 20 à 30 tableaux globaux, dont certains changent de taille dans certaines circonstances ? Faut-il écrire l'initialisation dans les boucles partout ? (les tableaux peuvent être bidimensionnels). N'est-ce pas un terrain propice aux erreurs ?

Cette opération chirurgicale se fait très simplement. Remplacez le mot"ArrayResize" par quelque chose d'autre - ce sera le nom de votre fonction de redimensionnement. Vérifiez dans celle-ci, si le redimensionnement est en place, alors passez par les nouveaux éléments dans la boucle et attribuez-leur un zéro.

De plus, dans l'inite, initialiser tous les tableaux qui ont une taille (s'il y en a).

Il peut aussi y avoir des tableaux d'une taille donnée dans les fonctions - ceux-là aussi. Recherchez-les en utilisant des crochets.

 
Dmitry Fedoseev:

Cette opération chirurgicale se fait très simplement. Remplacez le mot "ArrayResize" par quelque chose d'autre - ce sera le nom de votre fonction de redimensionnement. Il vérifie si le redimensionnement est vers le haut, puis passe par les nouveaux éléments dans la boucle et leur attribue zéro.

De plus, dans l'inite, initialiser tous les tableaux qui ont une taille (s'il y en a).

Il peut aussi y avoir des tableaux d'une taille donnée dans les fonctions - ceux-là aussi. Vous les trouverez entre crochets.

Au fait, oui.
Pyotr, Dmitry dit une chose sensée.
Une définition bien écrite vous évitera de réécrire l'ensemble du code.
 
Nikolai Semko:
Au fait, oui.
Peter, Dimitri dit une chose sensée.
Une définition bien écrite vous évitera de réécrire l'ensemble du code.

Je vais essayer. C'est un hack intéressant.

 

Je soutiendrai le topicstarter, bien qu'il y ait beaucoup de questions à sa création )))).

Les développeurs de MQL5, à la recherche de la rapidité des calculs (ou d'autres beaux chiffres ?) ont supprimé tous les "petits plus" qui rendaient MQL4 plus convivial,

S'il existe une règle empirique dans MQL5, les indicateurs utilisés dans MQL4 deviendront une "amorce" dans MQL5, et cette "amorce" doit être lue dans le contexte du terminal de trading :

1. lors de l'appel à OnInit(), les tampons des indicateurs ne sont pas initialisés automatiquement

2. j'ai regardé une centaine d'indicateurs dans la kodobase, hélas, sous couvert de programmation en MQL5, ils écrivent des indicateurs dans le style de MQL4 - ils étendent la numérotation des tableaux et des séries chronologiques.

3. iHighest / iLowest ne fonctionnent pas correctement - ils recherchent les barres avec les valeurs les plus élevées / les plus basses dans le sens de la numérotation croissante des timeseries... C'est-à-dire que si nous utilisons le schéma standard des indicateurs dans MQL4 - calcul à partir des données précédentes jusqu'au présent, ce problème n'est pas résolu avec iHighest et iLowest, car la barre la plus à gauche est 0, et quand iLowest est appelé, nous recherchons des valeurs dans le futur.....

4. le même problème avec ArrayMaximum() - il est difficile à utiliser dans les indicateurs... il est difficile de ne pas augmenter la numérotation des timeseries, nous prenons et soustrayons constamment de l'el-ta de départ un certain nombre de barres et obtenons ArrayMaximum(high[i], i -Period,Period)

5. hélas, même les experts de MQL5 utilisent des constructions douteuses..... Disons qu'une certaine base de béquilles épargnée lors de la transition de MT4 est toujours en circulation.


Quel est l'intérêt ? - MQL ne prétend pas être un pur С++, pourquoi ils ont supprimé les implémentations plus simples pour les utilisateurs... Je révise Python depuis environ un mois, pourquoi tant de travaux dans ce langage.... Ce n'est que maintenant que je comprends que Python permet aux gens d'ignorer les petites choses et a une interface plus conviviale ;) - pour un programmeur expérimenté, tout cela semble faux, mais les gens l'utilisent et Python est assez populaire