Erreurs, bugs, questions - page 512

 
Neofit:
Définitla taille du tableau. ArrayResize
 
Neofit:

Veuillez m'indiquer comment travailler correctement avec un tableau dont les éléments sont des structures Mqlrates.

C'est exactement ce que je veux savoir :

MqlRates AdaptedRates[];

ArraySetAsSeries(AdaptedRates,true); 

AdaptedRates[300].open=1;

Le débogueur donne une erreur - Accès invalide au tableau.

Je comprends qu'avec cette forme d'enregistrement, on ne peut lire que les éléments d'une structure qui est un élément d'un tableau.

La question est de savoir comment écrire correctement les éléments de structure. Je ne suis pas intéressé par tous ces éléments, l'important étant le prix de .open .high .low .close.

Je m'excuse par avance pour cette question probablement très triviale (je ne suis pas le programmeur), mais dans l'aide je n'ai pas trouvé la réponse. Je vous serai reconnaissant de toute aide.

Vous utilisez un tableau dynamique AdaptedRates[]. Autant que je me souvienne, lorsque l'on travaille avec des tableaux dynamiques, leur taille doit être définie à l'aide de la fonction ArrayResize(). Mais jusqu'à présent, le compilateur s'est plaint de l'index 300 spécifié dans la troisième ligne.
 
Swan:
Définit la taille du tableau. ArrayResize
D'après ce que je comprends, si je définis la taille, par exemple
MqlRates AdaptedRates[302];  
, je ne peux pas définir le type d'indexation comme série.
 
Neofit:
D'après ce que je comprends, si je définis la taille, par exemple
MqlRates AdaptedRates[302];  
, je ne pourrai pas définir le type d'indexation comme série.

:) Vous ne définissez pas le tableau statique, mais la taille du tableau dynamique avec ArrayResize().

Eh bien, comme : ArrayResize(AdaptedRates,302) ; etc.

 
Yedelkin:
Vous utilisez un tableau dynamique AdaptedRates[]. Autant que je me souvienne, lorsque vous travaillez avec des tableaux dynamiques, vous devez définir leur taille à l'aide de la fonction ArrayResize(). Et jusqu'à présent, le compilateur se bloque sur l'index 300 spécifié dans la troisième ligne.
Les tableaux statiques ne peuvent pas être représentés comme des séries temporelles, c'est-à-dire que la fonction ArraySetAsSeries(), qui permet d'accéder aux éléments du tableau de la fin du tableau à son début, ne leur est pas applicable. Si vous voulez donner accès à un tableau, comme dans les séries chronologiques, utilisez un objet tableau dynamique.

C'est une citation de l'aide.

Swan, Yedelkin, merci pour cette réponse rapide.

 
Neofit:
D'après ce que je comprends, si je définis une taille, par exemple
MqlRates AdaptedRates[302];  
, je ne peux pas définir le type d'indexation comme série.

oui.

MqlRates AdaptedRates[];//pour laisser le tableau dynamique.

ArrayResize(AdaptedRates,302);//et définir la bonne taille

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных - Документация по MQL5
 
Yedelkin:

:) Vous ne définissez pas un tableau statique, mais un tableau dynamique en utilisant ArrayResize().

Eh bien, comme ArrayResize(AdaptedRates,302) ; etc.

Merci pour l'explication vulgarisée, d'après ce que j'ai compris il est conseillé de l'ArrayResize aux limites requises avant toute référence à une cellule de tableau dynamique, je vais essayer.
 
pusheax:

Un pépin dans le testeur de stratégie.

Il s'arrête soudainement, alors que tous les agents locaux et distants ont terminé et qu'ils sont donc suspendus.

Pouvez-vous me dire comment le relancer, c'est dommage de tout recommencer ?
Je le fais régulièrement :-) Je n'arrive pas à le relancer, je désactive les nuages puis je les relance. Pire encore, lorsque cela se produit la nuit, il reste allumé jusqu'à mon réveil :-)
 
Neofit:
Merci pour l'explication populaire, d'après ce que j'ai compris il est souhaitable de l'ArrayResize aux limites requises avant toute référence à une cellule de tableau dynamique , je vais essayer.

Note. Ce n'est que pour les tampons indicateurs qu'il ne sera pas nécessaire de le faire. Le sous-système exécutif du terminal s'en charge lui-même.

Note 2 :Il est préférable d'appliquer ArrayResize() uniquement lorsqu'il est nécessaire de modifier la taille d'un tableau dynamique, et non avant tout accès à ses éléments. Il se peut que la taille d'un tableau dynamique soit donnée une fois, puis que le programme accède simplement à ses éléments.

 
Yedelkin:

Note. Ce n'est que pour les tampons indicateurs qu'il ne sera pas nécessaire de le faire. Le sous-système exécutif du terminal s'en charge lui-même.

Note 2 :Il est préférable d'appliquer ArrayResize() uniquement lorsqu'il est nécessaire de modifier la taille d'un tableau dynamique, et non avant tout accès à ses éléments. Il se peut très bien qu'un tableau dynamique soit dimensionné une fois et que le programme accède ensuite simplement à ses éléments.

Eh bien, je suis bête de dire cela, en fait je comprends que si j'ai déjà étendu un tableau dynamique à 302, je peux accéder à n'importe quel élément de 0 à 301 sans ArrayResize.
Raison: