Souhaits pour le MQL5 - page 117

 
HideYourRichess писал(а) >>
Échanger contre un ipod ? ! - Désolé pour l'amour de Dieu, j'aurais dû vous prévenir tout de suite. S'il vous plaît, écrivez, dites n'importe quoi - je ne dirai pas un mot. Maintenant que tout est éclairci, je vais le prendre avec compréhension et patience. Échanger contre un iPod ! - aaaaaghit....

Merci pour votre sympathie et bonne chance à vous, au moins ne progressez pas

 

Je viens de rencontrer un problème dans MT4, veuillez vous assurer que cela ne se produira pas dans MT5 (je n'ai pas vérifié).


Au tout début (avant init), des tableaux ont été mis en place :

xsell[3] ;

xbuy[3] ;


Avant cela, une variable externe :

extern int Max_Array_Size = 13 ;


Dans la boucle start() :

ArrayResize(xsell, Max_Array_Size) ;

ArrayResize(xbuy, Max_Array_Size) ;


Et ensuite la boucle for() :


for(int kss= Max_Array_Size ; kss>0 ; kss--) {

xbuy[kss] = . . . ;

. . .

}


Le même schéma a été utilisé dans le module des ventes(indicateur personnalisé) et des achats - c'est-à-dire que les variables sont différentes,

mais le principe est le même. Au début, j'ai tout écrit pour les ventes, je l'ai compilé - tout est cool, pas de problèmes. Puis j'ai copié

La compilation a pris beaucoup plus de temps et le passage entre

Le changement de cadre temporel a également pris beaucoup plus de temps. Ventes aux handicapés - rien n'a changé, le freinage.

Il ne reste que les ventes - il court vite. Le compilateur ne s'est pas plaint, il a seulement pris beaucoup plus de temps pour s'exécuter.

J'ai revu tout ce qui me semblait suspect, réécrit certaines parties dans les achats - lags ....

Il s'est avéré que le problème était dans la dimension du tableau : 13 => 0-12, et dans la boucle for, j'essayais de lui donner 13 également !


Après la fixation :

ArrayResize(xsell, Max_Array_Size+1) ;

ArrayResize(xbuy, Max_Array_Size+1) ;


les ventes et les achats ont été compilés comme il se doit et le changement d'échéancier est devenu plus rapide.

Mais l'erreur aurait dû apparaître pendant la compilation. Trouver la cause dans de tels cas

Il n'est pas du tout facile de trouver la raison (il se peut même que vous ne soyez pas conscient du problème).

Et on ne sait pas pourquoi tout se passait bien dans le module de vente.

 
chief2000 писал(а) >>

Mais l'erreur aurait dû être découverte lors de la compilation. Dans de tels cas, il n'est pas du tout facile de trouver la cause (vous ne saviez peut-être pas qu'il y avait un problème).

Le compilateur ne peut et ne doit pas suivre les valeurs des variables par définition.

Et on ne sait pas non plus pourquoi tout se passait bien dans le module de vente.

Parce qu'une erreur est plus rapide à traiter que deux ou plus.

 
fwiq >> :

Le compilateur ne peut et ne doit pas garder la trace des valeurs des variables par définition.

C'est mauvais si ça l'est vraiment.

Après tout, c'est pratiquement la même chose que d'accéder à une variable qui n'a pas été prédéfinie.

fwiq a écrit >>

Parce qu'une erreur est plus rapide à traiter que deux ou plus.

Non, c'est autre chose - je vous ai dit que lorsqu'il ne restait que le module de vente, il n'y avait pas de problème,

et quand j'ai supprimé les ventes pour ne laisser que les achats, il y a eu un problème. La différence était très perceptible, même si les deux modules

sont absolument identiques, à l'exception de certaines opérations inversées (>/<, High[]/Low[] etc.).

 
chief2000 писал(а) >>

Non, c'est autre chose - je vous ai dit que lorsqu'il ne restait que le module des ventes, il n'y avait pas de problème, mais lorsque j'ai supprimé les ventes et laissé uniquement les achats, il y a eu un problème. La différence était très sensible, et les deux modules sont absolument identiques, à l'exception de certaines opérations modifiées en sens inverse (>/<, High[]/Low[] etc.).

Peut-être, ce n'est pas la définition des variables ou des tableaux. Dans les indicateurs MT4, vous devez surveiller attentivement les moments où vous commencez à ajouter des lignes de manière programmatique, et à changer les noms des tableaux reflétés. Parfois, il y a confusion et la ligne peut ne pas être reflétée ou le calcul peut raccrocher, comme dans ce cas. Il n'y a qu'un seul remède, comme dans la blague "Il suffit de sortir et de rentrer et tout fonctionnera".

 

Si littéralement, la surcharge n'a pas aidé non plus.

Quoi qu'il en soit, c'est la distinction entre vente et achat qui m'a permis de savoir qu'il y avait un problème...

Le bonheur était une bénédiction déguisée :)

 
J'ai une autre question. Je ne peux pas exécuter le débogueur MQL5 sur les indicateurs. Il fonctionne sur les scripts et les Expert Advisors mais il ne s'arrête sur aucun indicateur et ne peut pas suivre les étapes. Je ne suis pas sûr qu'il existe des particularités non documentées, si vous les connaissez, faites-le moi savoir.
 
fwiq >> :
J'ai une autre question. Je ne peux pas exécuter le débogueur MQL5 sur les indicateurs. Tout fonctionne sur les scripts et les Expert Advisors, mais il ne s'arrête sur aucun indicateur et ne peut pas suivre les étapes. Je n'ai pas travaillé avec ce genre de choses, j'ai commencé à travailler avec ce genre de choses.

Il y a une semaine, les manipulateurs ont écrit que c'était l'idée et que le débogage sur les indices de débogage fonctionnera plus tard

 

Dans MT4 il y avait toujours des erreurs parce que Ask ou Bid ou autre (Close, Open, etc.) collecté après la virgule

une quantité énorme de chiffres (comme 1,43231111111111111111). Par conséquent, nous avons dû ajouter "NormalizeDouble(Bid,Digits);".

Et cela peut être résolu une fois au niveau de MT.

 

Veuillez ajouter aux fonctions ObjectFind et ObjectDelete la possibilité de travailler avec des masques tels que : *, ?

Enprincipe, bien sûr, seul ObjectFind peut être utilisé .S'il est nécessaire de conserver la compatibilité ascendante, alors la première fonction doit être laissée inchangée, et l'ensemble doit être complété, par exemple, par ObjectFindM (recherche multiple).

Exemple : nous devons trouver les étiquettes de texte qui commencent par "Signal".

Implementation : Renvoie le nom du premier objet trouvé (ou le handle, mais cela nécessite d'autres fonctions qui peuvent le gérer).

Notation : ObjectFindM("Signal* ");

Exemple : vous devez supprimer de la fenêtre "0" uniquement les étiquettes de texte qui commencent par "Signal".

Notation : ObjectDelete(0,"Signal*");