Erreurs, bugs, questions - page 712

 
Bonjour,

Merci pour votre réponse, elle permet de résoudre le problème de la déclaration.

Au fait, j'ai trouvé un bug lié au débogage :

Lorsque vous déboguez un indicateur, en étant en mode point d'arrêt, appuyez sur la liste des indicateurs dans MetaTrader.
L'application se fige et n'est arrêtée que par le gestionnaire de tâches (kill)


Veuillez prendre note.
 
speedy:


Veuillez prendre note.
Noté, merci.
 

La fonction OnTimer() dans le testeur de stratégie, ralentit beaucoup l'exécution, lorsqu'elle est demandée toutes les secondes. void OnInit() { EventKillTimer() ; EventSetTimer(1) ; } void OnTimer() { } Le conseiller expert, avec deux indicateurs externes et fonctionnant sur tous les ticks, fonctionne en 2012.04.11 14:32:07 Core 1 EURUSD,H1 : 8083516 ticks (4557 barres) générés en 70418 ms (total des barres dans l'historique 6270, temps total 70528 ms) Si OnTimer() est commenté, l'exécution est significativement accélérée 2012.04.11 14:36:22 Core 1 EURUSD,H1 : 8083516 ticks (4557 barres) générés en 22730 ms (total des barres dans l'historique 6270, temps total 22870 ms) Ces délais sont-ils causés par le testeur, ou pouvons-nous l'accélérer d'une manière ou d'une autre ?

P.S. Un aperçu du message aurait été mis en œuvre(

 
sion:

La fonction OnTimer() dans le testeur de stratégie, ralentit beaucoup l'exécution, lorsqu'elle est demandée toutes les secondes. void OnInit() { EventKillTimer() ; EventSetTimer(1) ; } void OnTimer() { } Le conseiller expert, avec deux indicateurs externes et fonctionnant sur tous les ticks, fonctionne en 2012.04.11 14:32:07 Core 1 EURUSD,H1 : 8083516 ticks (4557 barres) générés en 70418 ms (total des barres dans l'historique 6270, temps total 70528 ms) Si OnTimer() est commenté, l'exécution est significativement accélérée 2012.04.11 14:36:22 Core 1 EURUSD,H1 : 8083516 ticks (4557 barres) générés en 22730 ms (total des barres dans l'historique 6270, temps total 22870 ms) Ces délais sont-ils causés par le testeur, ou pouvons-nous l'accélérer d'une manière ou d'une autre ?

P.S. Un aperçu du message aurait été mis en œuvre(

Il est préférable d'insérer le code par le biais du bouton "SRC" du panneau de l'éditeur.
 
papaklass:

Que signifie cette entrée dans le testeur ?

Il s'agit d'un message système concernant la pagination de l'historique.
 

Pas drôle.

struct Test
  {
   double      data[];
   int         size;
   void        Init(int Size) {size=Size; ArrayResize(data,fmin(size,Max));}
   double &operator[] (int i) {return &data[i];} // ERROR :  '&' - reference cannot be used

private:
   static int  Max;
  };
//+------------------------------------------------------------------+

int Test::Max=1024;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   Test t;  
   t.Init(16);
   for(int i=0;i<t.size;i++)
     {
      t[i]=i*i; // ERROR :'=' - l-value required
     }
  }

Je comprends un peu que les liens dans le cas général dans mql5 ne sont pas retournés par les fonctions (d'ailleurs, pourquoi pas ?), mais alors il faut faire quelque chose pour rendre possible les indexeurs à valeur l. Par exemple, faire une exception syntaxique à la règle générale pour les indexeurs gauchers. Ou un mot-clé quelconque.

La claudication ne rend évidemment pas mql5.... agréable.

 
MetaDriver:

Limp clairement ne fait pas paraître mql5.... bien.

N'insultez pas mql5, il est encore "minuscule", mais il mûrit très rapidement de build en build.
 
MetaDriver:

La boiterie ne donne pas une bonne image de mql5.....

Vous devez construire des liens à part entière pour cela :)

ZS : il y a des fuites :)

 

Bug ?


Le code ci-dessous génère une sorte de boucle perpétuelle dans le compilateur. Cliquer sur Annuler

ne fonctionne pas immédiatement, mais quand il le fait, il reprend le contrôle de l'éditeur.

Le bouton d'annulation lui-même ne disparaît pas, mais il n'est pas accessible non plus.

Le bouton Compiler est perdu à jamais (vous devez recharger l'éditeur pour le récupérer).


#include <Object.mqh>.

classe B ;

classe A : B {
void a() ;
} ;

classe B : A {

CObject* a ;
void b() ;
} ;
 
MetaDriver:

Pas drôle.

Comme j'aime comprendre que les liens dans le cas général dans les fonctions mql5 ne retournent pas (d'ailleurs, pourquoi ne le pourraient-ils pas ?), mais je devrais faire quelque chose pour rendre les indexeurs de valeur l possibles à la place, par exemple faire une exception syntaxique à la règle générale pour les indexeurs gauchers. Ou un mot-clé quelconque.

La claudication ne rend pas mql5.... agréable.

"Transmettre à l'extérieur des éléments internes qui ne font pas partie de la classe de base (et dans cet exemple, pas l'attribut lui-même, mais seulement un élément de tableau ), surtout avec la possibilité de modifier sa valeur, n'est pas sûr.

En outre, cela contredit l'"esprit" de la programmation orientée objet : tout travail sur les données de l'objet doit être effectué à l'intérieur de l'objet, par ses propres méthodes...


Et si vous utilisiez simplement Setter pour l'attribut de données ?

Le code gagnerait en lisibilité. Finalement, cette "simplicité" avec l'indexeur de valeur l fera que personne ne comprendra comment ce code fonctionne...

Vous passerez plus de temps à chercher des erreurs qu'à écrire Setter.

Voici un exemple :

Si vous pouvez remplacer un code comme while ((double)date[++i -1] < 10) par quelque chose de plus long mais de plus digeste, il vaut mieux faire comme ça...

struct Test

{

double data[] ;

int taille ;

void Init(int Size) {size=Size ; ArrayResize(data,fmin(size,Max));}

void setDataElement (int index, double valeur)

{

données[index] = valeur ;

}


privé :

static int Max ;

} ;

//+------------------------------------------------------------------+


int Test::Max=1024 ;

//+------------------------------------------------------------------+

//| Fonction de démarrage du programme de script |

//+------------------------------------------------------------------+

void OnStart()

{

Test t ;

t.Init(16) ;

for(int i=0;i<t.size;i++)

{

//t[i]=i*i ; // ERREUR : '=' - valeur l requise

t.setDataElement(i, i*i) ;

}

}