Version bêta du livre en ligne sur la programmation MQL4 - par Sergey Kovalev (SK.) - page 10

 
Désolé, je l'ai trouvé !
Oui, le manuel est vraiment cool, mais pour en revenir à ma demande précédente - il doit être à portée de main pour pouvoir le consulter rapidement.
Idéalement, elle devrait remplacer l'aide standard dans les nouvelles versions de MT.
 

à SK

double mon_recherche_et_etc()
{ double summ[] ; //tableau dans la fonction
//.........
i=ArrayMinimum(summ,iter,0) ; // traceur : <incorrred start position 0 for ArrayMinimum function>

//deuxième variante d'erreur
statique double summ[] ; //
//.........
i=ArrayMinimum(summ,iter,0) ; // traceur : <incorrred start position 0 for ArrayMinimum function>
//c'est-à-dire erreur d'adressage dynamique de l'élément initial du tableau au deuxième tick.
//.......................

//........................
// bon moment
double summ[1000] ; //spécifier une taille explicite implique un type statique
//.........
i=ArrayMinimum(summ,iter,0) ; // O.k.
//deux droits
static double summ[1000] ; //réassurance à la taille explicite
//.........
i=ArrayMinimum(summ,iter,0) ; // O.k.
}

 
Non, vous n'avez pas besoin de remplacer l'aide standard. Gardez-le. Les développeurs de logiciels de langue normale séparent la description de la langue de tous les différents tutoriels pour celle-ci.
 
Korey:

à SK


Je ne sais pas vraiment quelle est votre question. L'ensemble de chaînes que vous représentez est-il un code complet (alors pourquoi l'initialisation est-elle répétée ?) ou des chaînes éparses (alors pourquoi y a-t-il des accolades ?). Soumettez le code terminé et formulez la question. Utilisez le bouton MQL (sur la ligne supérieure de la fenêtre d'édition) pour publier le code.
 
Renat:
Félicitations à Sergei Kovalev !

La sortie du Tutoriel MQL4 est prévue pour le 1er février, et il a déjà été intégré au site web MQL4.community. La traduction en anglais est en bonne voie.

Merci pour vos félicitations, Renat.

Je profite de cette occasion pour vous dire une fois de plus que c'est un grand honneur pour moi de publier le tutoriel MQL4 sur le site de MetaQuotes Software Corp. Je vous remercie sincèrement pour votre confiance, votre soutien et vos encouragements. Je remercie également Stanislav Starikov et Rashid Umarov de MetaQuotes Software Corp. pour leurs précieux conseils et leur aide dans la préparation du manuel.

 
à SK
L'article montre 4 variantes d'initialisation de tableaux avec un seul et même appel àArrayMinimum() ;
Il est démontré que l'initialisation d'un tableau dans un sous-programme sans spécifier la taille du tableau [] entraîne l'erreur "RunTime".
- Dans les deux premières variantes, l'erreur est citée, en traduction : "adresse incorrecte du début du tableau".
-Deuxièmement, les deux variantes fonctionnent, il est montré que spécifier une dimension de [1000] rend automatiquement le tableau statique.
Conclusions :
1) Les tableaux du MQL4 ne sont pas toujours statiques,
2) la définition de a[] statique, c'est-à-dire sans dimensionnalité explicite, ne fonctionnera pas, mais il n'y aura pas de message d'erreur. L'erreur s'affiche au moment de l'exécution sur le deuxième tick et les suivants dans la fenêtre Expert Advisor.
3) Les erreurs de statique/dynamique décrites apparaissent si le tableau est défini dans le sub/func, et ne sont détectées que par ceux qui regardent dans la fenêtre "Expert Advisors",
et seulement quand le deuxième tic arrive. Par exemple, l'erreur n'est pas détectée lors du débogage de l'indicateur pendant le week-end sans utiliser le testeur de stratégie.
4) La ligne du manuel "MQL4 arrays are always static" peut être liée à des versions antérieures.
 

J'aimerais avoir un ensemble de tutoriels vidéo en plus des tutoriels texte. Disposez d'un ensemble de tutoriels vidéo. Il manque surtout une toute première leçon : comment télécharger, installer le programme et effectuer la première transaction d'achat ou de vente.

 
Korey:
à SK
L'article montre 4 versions d'initialisation d'un tableau avec un seul et même appel àArrayMinimum() ;
Il est démontré que l'initialisation d'un tableau dans un sous-programme sans spécifier la taille du tableau [] entraîne l'erreur "RunTime".
- Dans les deux premières variantes, l'erreur est citée, en traduction : "adresse incorrecte du début du tableau".
-Deuxièmement, les deux variantes fonctionnent, il est montré que spécifier une dimension de [1000] rend automatiquement le tableau statique.
Conclusions :
1) Les tableaux du MQL4 ne sont pas toujours statiques,
2) la définition de a[] statique, c'est-à-dire sans dimensionnalité explicite, ne fonctionnera pas, mais il n'y aura pas de message d'erreur. L'erreur s'affiche au moment de l'exécution sur le deuxième tick et les suivants dans la fenêtre Expert Advisor.
3) Les erreurs de statique/dynamique décrites apparaissent si le tableau est défini dans le sub/func, et ne sont détectées que par ceux qui regardent dans la fenêtre "Expert Advisors",
et seulement quand le deuxième tic arrive. Par exemple, l'erreur n'est pas détectée lors du débogage de l'indicateur pendant le week-end sans utiliser le testeur de stratégie.
4) La ligne du manuel "MQL4 arrays are always static" peut être liée à des versions antérieures.


Votre raisonnement n'est pas très clair. On déclare un tableau sans dimension (en fait, le programme ne dispose que du nom du tableau, dont les éléments ne sont pas définis et pour lequel aucune mémoire n'est allouée), et on essaie, à l'aide de la fonction ArrayMinimum(), de trouver la valeur minimale parmi les éléments qui n'existent pas. Bien sûr, l'erreur se produira indépendamment du fait que le tableau soit déclaré comme statique ou non, et l'erreur d'exécution sera interprétée comme une indication de la propriété du tableau d'être statique ou non.

Les tableaux dans MQL4 sont statiques par définition. Cela signifie (à moins, bien sûr, qu'il y ait au moins un élément dans le tableau) que les éléments du tableau sont stockés à partir de la dernière fois que la fonction (qui a déclaré le tableau) a été terminée jusqu'à la prochaine fois qu'elle est appelée, indépendamment du fait que l'identifiant du tableau ait ou non le mot clé static devant lui.

 
à SK
Qu'importe, nous utilisons ces astuces d'allocation de mémoire depuis longtemps.
J'ai écrit non pas sur le contenu du tableau, mais sur son adressage, qu'il n'y a pas d'erreur de compilation, ni d'erreur de liaison, mais qu'il y a une ERREUR D'ADRESSE PRINTY.
C'est-à-dire que le compilateur m'a permis de définir un tableau [] dans une sous-routine pour le faire croître plus tard, - c'est bien ( !),
c'est de l'allocation dynamique de mémoire par tableau.
Cependant, tous les pointeurs vers ce tableau sont liés en tant que pointeurs directs (mais pas en tant que pointeurs vers des pointeurs),
ce qui entraîne un décalage entre les adresses statiques liées et l'adresse du tableau nouvellement alloué lorsque l'allocation dynamique de la mémoire suit.
C'est-à-dire que la référence au tableau (pointeur) dans MQL4 est maintenant statique, et cela ne fonctionne correctement que lorsque le tableau est vraiment statique.
Le compilateur ne comprend pas que le tableau sera déplacé dans le futur sans la taille explicite dans la sous-routine.
Le programmeur met statique et pense que tout est correct, mais s'il ne spécifie pas une taille explicite - pas de tableau statique, et le tableau s'avérera en fait être dynamique (pas d'erreurs de compilation/chargement).
Le problème n'est pas si important, en général tout le monde garde les tableaux au niveau global.
Mais il est souhaitable d'écrire dans le tutoriel non pas que tous les tableaux sont supposés être déjà statiques, mais que vous devriez écrire des tableaux locaux statiques avec une taille explicite.
 
Korey:
à SK
Le programmeur met statique et pense que tout est correct, mais s'il ne spécifie pas une taille explicite - pas de tableau statique, et le tableau s'avérera en fait dynamique (sans erreur de compilation/chargement).

Un programmeur qui sait que tous les tableaux dans MQL4 sont statiques ne mettra pas static, simplement parce que ce n'est pas nécessaire.

Mais il est souhaitable d'écrire dans le tutoriel non pas que tous les tableaux sont supposés être déjà statiques, mais que les tableaux locaux doivent être spécifiés comme statiques avec une taille explicite.

Vous avez peut-être confondu les deux concepts. Dans ce cas, "statique" signifie la propriété de stocker les valeurs des éléments du tableau dans l'intervalle entre les exécutions de la fonction dans laquelle il est déclaré. Les tableaux conservent toujours leurs valeurs pendant cette période, même si leur nom est précédé de static (ce n'est pas le cas des variables locales, qui doivent être explicitement déclarées static).

Il est toutefois possible de redimensionner un tableau dans la première dimension avec ArrayResize().