Erreurs, bugs, questions - page 548

 
ivandurak:

Bonne nuit. Je commence à peine à y voir clair. Il semble que ce soit un bug clair. Je cite le code ci-dessous, si je commente une ligne (elle est marquée) il semble fonctionner, quel est le problème - je ne comprends pas. Je n'ai rien trouvé dans la documentation à ce sujet.

Vous n'avez pas alloué le tableau Raznica. Il est déclaré mais on ne lui alloue pas de mémoire, en même temps ce n'est pas un tampon indicateur (la mémoire pour les tampons est allouée automatiquement).

Ici :

   SetIndexBuffer(0,BaseMaBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,MaForMaBuffer,INDICATOR_DATA);

vous indiquez au compilateur que les tableaux BaseMaBuffer et MaForMaBuffer sont des tampons indicateurs. Les autres tableaux doivent être alloués par

ArrayResize()
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 
ivandurak:

Bonne nuit. Je viens de commencer à m'y intéresser. Cela semble être un bug évident. Je cite le code ci-dessous, si je commente une ligne en dessous (elle est marquée) cela semble fonctionner - je ne comprends pas quel est le problème. Cette situation peut être évitée en spécifiant une taille explicite pour le tableau Raznica[]. Je n'ai rien trouvé dans la documentation à ce sujet.

Il n'y a pas de bogue. Vous devez spécifier la taille des tableaux dynamiques à l'aide de l'attribut

int  ArrayResize(
   void  array[],              // массив, переданный по ссылке
   int   new_size,             // новый размер массива
   int   reserve_size=0        // резервное значение размера (избыточное)
   );

La fonction ne peut être appliquée qu'aux tableaux dynamiques, mais vous devez garder à l'esprit que les tableaux dynamiques affectés comme tampons d'indicateurs par la fonction SetIndexBuffer() ne peuvent pas être redimensionnés. Pour les tampons indicateurs, toutes les opérations de redimensionnement sont effectuées par le sous-système d'exécution du terminal.


 
Je l'ai. Merci pour le coup de pied au cul. Autre question : si un tableau est redimensionné, qu'advient-il des données ? Et le changement de direction de l'indexation, comme dans les séries temporelles, n'est possible que pour les tableaux dynamiques?
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
ivandurak:
J'ai compris, merci pour le coup de pied au cul. Autre question : si le tableau est redimensionné, qu'adviendra-t-il des données ? Est-il possible de changer la direction de l'indexation, comme dans les séries chronologiques, uniquement dans un tableau dynamique?

Les données resteront en place, si vous réduisez puis restaurez, c'est incertain (le résultat est indéfini).

De cette façon, la direction de l'indexation ne change que la référence de l'index, le tableau est distribué dans la même direction.

En d'autres termes, les données ne peuvent pas être déplacées par un nouveau partitionnement du tableau.

 

Cela a déjà été signalé, mais le testeur continue de réinitialiser la valeur du dépôt initial définie par l'utilisateur de 10 000 $.

L'ensemble des valeurs initiales disponibles est assez tordu. Ça lui ajouterait au moins 1000 $.

construire 523

Win XP

 
C'était comme ça, ou quelque chose s'est cassé... En général, l'accès libre à la méthode protégée par les non-descendants est autorisé.
#include <Arrays/List.mqh>
//---------------------------------------
class CBasket;

class CFruit: public CObject {
private:
        double _weight;
protected:
        double GetWeight(){return _weight;}     
public:
        CFruit(double weight){_weight = weight;};
        ~CFruit(){};
};
//---------------------------------------
class CBasket {
private:
        CList _fruits;
protected:
public:
        CBasket(){};
        ~CBasket(){};
        double Weight() {
                double weight = 0;
                for(CFruit* f = _fruits.GetFirstNode(); f != NULL; f = _fruits.GetNextNode()) {
                        weight += f.GetWeight(); //свободный вызов protected метода другого класса
                }
                return weight;
        }
        
        void Attach(CFruit* f) {
                _fruits.Add(f);
        }
};
//---------------------------------------
int OnInit() {
        CBasket* b = new CBasket();
        
        CFruit* f1 = new CFruit(3.5);
        CFruit* f2 = new CFruit(6.5);
        b.Attach(f1);
        b.Attach(f2);
        Print(b.Weight());
      
   return(0);
}
//---------------------------------------
 

Après l'optimisation, le fichier de résultats ne peut pas être ouvert,

Build 527 + Office 2007

Le journal des erreurs contient les données suivantes


Erreur XML dans "Tableau
Cause : Valeur erronée.
Fichier : C:\Users\Dragon\Desktop\ReportOptimizer-957640.xml
Groupe : Cellule
Tag : Données
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

Erreur XML dans "Table".
Cause : Valeur erronée
Fichier : C:\Users\Dragon\Desktop\ReportOptimizer-957640.xml
Groupe : Cellule
Tag : Données
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

Erreur XML dans "Table".
Cause : Valeur erronée
Fichier : C:\Users\Dragon\Desktop\ReportOptimizer-957640.xml
Groupe : Cellule
Tag : Données
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

Erreur XML dans "Table".
Cause : Valeur erronée
Fichier : C:\Users\Dragon\Desktop\ReportOptimizer-957640.xml
Groupe : Cellule
Tag : Données
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

Erreur XML dans "Table".
Cause : Valeur erronée
Fichier : C:\Users\Dragon\Desktop\ReportOptimizer-957640.xml
Groupe : Cellule
Tag : Données
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

etc.

 

Je pense que vous obtenez une valeur vide.

Vous pouvez lire

https://www.mql5.com/ru/docs/constants/namedconstants/otherconstants

EMPTY_VALUE

Valeur vide dans le tampon de l'indicateur

DBL_MAX

DBL_MAX

Valeur maximale pouvant être représentée par le type double

1.7976931348623158e+308

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы - Документация по MQL5
 
Vigor:
C'était comme ça, ou quelque chose s'est cassé... De toute façon, il est permis d'accéder librement à la méthode protégée dans les non-descendants.

Merci pour le post, le bug est corrigé, la correction sera intégrée dans la prochaine version.
 
Karlson:

Je pense que vous obtenez une valeur vide.

Vous pouvez lire

https://www.mql5.com/ru/docs/constants/namedconstants/otherconstants

EMPTY_VALUE

Valeur vide dans le tampon de l'indicateur

DBL_MAX

DBL_MAX

Valeur maximale pouvant être représentée par le type double

1.7976931348623158e+308

Et comment des valeurs vides peuvent-elles se retrouver dans le fichier ? Dans la fenêtre du testeur, il y a des résultats d'optimisation normaux.
Raison: