Erreurs, bugs, questions - page 1439

 

И таскать телегу классов из кода в код, при том что в каждом коде из неё используются %10..20 функций.

Vous n'avez pas entendu parler des fichiers include mqh ?
 

Pas besoin d'écrire des classes de "tableau intelligent", elles sont déjà dans la bibliothèque standard de MetaQuotes, voir la famille de classes Arry.

 
Bonjour, j'essaie d'utiliser MT5 pour travailler avec les futures via le courtier "Otkritie".
En accédant à la fonction SymbolInfoTick, il s'est avéré que les deux derniers paramètres de la structure MqlTick
- time_msc, flag sont manquants. Est-il possible de résoudre ce problème ? Par exemple, prenez MT5 sur ce site,
essayez de le connecter au serveur du courtier. Ou bien il est possible d'obtenir les informations requises d'une autre manière.
Je suis intéressé : qui a initié la transaction, le vendeur ou l'acheteur ?
 
Alexander Puzanov:

C'est moi, ou vous n'avez pas travaillé avec les langues en question ? Vous n'avez pas à spécifier d'index pour l'élément ajouté, il est attribué automatiquement et la taille du tableau est également augmentée. Le programmeur n'a aucune chance de faire une erreur avec l'index pendant cette opération.

Uhhhh... Quelles sont les chances du programmeur de faire une erreur ? Vous avez tort de penser que vous pouvez prendre en compte toutes les variantes d'un programme complexe.

Toutes ces "actions par défaut" doivent être des propriétés d'objets complexes. Les objets simples, tels que les variables, les tableaux et les structures simples, doivent avoir le moins de propriétés "par défaut" possible.

Par exemple, à la création - ils doivent stocker une valeur indéfinie, et non zéro.

Vous pouvez implémenter un comportement similaire avec des classes, ajouter des fonctions connexes : pop, shift, unshift, etc. Et faire glisser un wagon de classes d'un code à l'autre, avec chaque code utilisant %10...20 fonctions de celui-ci. Cela vous semble-t-il être la bonne solution ?

C'est la bonne solution en termes de logique. Lorsque vous travaillez avec de telles classes, leur comportement est transparent.

Et qu'en est-il du "déplacement d'une charrette de classes" - lors du codage, vous ne les déplacez pas, vous vous contentez de brancher la bibliothèque. Et lors de la compilation, un linker normal ne devrait pas mettre dans un exécutable toutes les méthodes de la bibliothèque, mais seulement celles qui sont utilisées.

Exemple de bonne solution à mon avis - ajouter à la fonction ObjectsDeleteAll la suppression par préfixe - c'est un autre micron vers la programmation de niveau supérieur - et la plupart des codeurs ont mis à la poubelle cette fonction créée par eux-mêmes. Hélas, cela a peu de chances de se produire avec des tableaux...

À mon avis, c'est également une mauvaise approche, pour la même raison. La fonction est chargée de tâches qui ne lui sont pas propres et ne suivent pas la logique de son application.

La solution correcte, me semble-t-il, est d'avoir un gestionnaire d'objets de classe sur le graphe qui en conserve la liste et supprime les objets nécessaires au fur et à mesure que les fonctions sont appelées. Les préfixes des noms, me semble-t-il, ne devraient servir qu'à rendre claires certaines informations sur l'objet pour une personne. Et la suppression - ne doit en aucun cas être basée sur le nom de l'objet, mais sur la sauvegarde de ce nom dans un tableau.

 
Demal:
Bonjour, j'essaie d'utiliser MT5 pour travailler avec les futures via le courtier "Otkritie".
En accédant à la fonction SymbolInfoTick, il s'est avéré que les deux derniers paramètres de la structure MqlTick
- time_msc, flag sont manquants. Est-il possible de résoudre ce problème ? Par exemple, prenez MT5 sur ce site,
essayez de le connecter au serveur du courtier. Ou bien il est possible d'obtenir les informations requises d'une autre manière.
Je suis intéressé : qui a initié la transaction, le vendeur ou l'acheteur ?
  1. Quelle version du terminal avez-vous actuellement ?
  2. Vous connectez-vous à un serveur de démonstration ou réel ?
 
version 5.0 build 1150, démo
 
Demal:
version 5.0 build 1150, démo

Mettez à jour votre terminal (vous devez vous connecter au serveur MetaQuotes-Demo). Construction actuelle :

Terminal        MetaTrader 5 build 1210 started (MetaQuotes Software Corp.)

Voici le script :

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                              Copyright © 2015, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   MqlTick last_tick;
//--- 
   if(SymbolInfoTick(Symbol(),last_tick))
     {
      Print("time = ",last_tick.time,"; bid = ",last_tick.bid,
            "; ask = ",last_tick.ask,"; volume = ",last_tick.volume,
            "; time_msc = ",last_tick.time_msc,"; flag = ",last_tick.flags);
     }
   else Print("SymbolInfoTick() failed, error = ",GetLastError());
  }
//+------------------------------------------------------------------+

Donne ce résultat :

Test (RTS-12.15,H1)     time = 2015.11.26 09:42:57; bid = 88360.0; ask = 88400.0; volume = 2; time_msc = 1448530977000; flag = 0

Dossiers :
Test.mq5  2 kb
 
Karputov Vladimir:

Mettez à jour votre terminal (vous devez vous connecter au serveur MetaQuotes-Demo). Construction actuelle :

Voici le script :

Donne ce résultat :

Merci, savez-vous pourquoi le drapeau a une valeur de 0, comme si rien n'avait changé ?
 
Demal:
Merci, savez-vous pourquoi le drapeau a une valeur de 0, comme si rien n'avait changé...
UtilisezCopyTicks et vous serez heureux. EtSymbolInfoTick ne sait probablement pas encore comment travailler avec la nouvelle structure de tick.
Dossiers :
CopyTicks.mq5  4 kb
 

MT 4. Générateur de nombres aléatoires MathRand() dans OnTick(). Lors du test du hibou, des résultats différents sont obtenus lorsqu'il est exécuté à nouveau avec les mêmes paramètres. Cela est naturel si le nombre généré affecte l'algorithme.

Lors de l'optimisation, j'obtiens, pour une raison quelconque, des résultats identiques lors d'une deuxième exécution avec les mêmes paramètres. Donc MathRand() ne fonctionne pas en mode optimisation ?