Caractéristiques du langage mql5, subtilités et techniques - page 39

 
Vasiliy Sokolov:
Il n'a pas été question de remplacer complètement le casting.
Oui, ils ont coupé les possibilités.
 
Vasiliy Sokolov:

Coulage arbitraire par écriture/lecture binaire... Extinction des feux. Pas besoin de lire plus loin...

Vous avez une meilleure suggestion ?
 
Vasiliy Sokolov:

p.s. J'ai regardé votre code :

Coulage arbitraire par écriture/lecture binaire... Extinction des feux. Ne lisez pas plus loin...

Il y a le casting arbitraire via l'union - n'importe quelle structure simple sans constructeurs personnalisés et opérateurs de copie. Pour tous les articles de cette ressource, ce casting fonctionnera.

template <typename T>
class CASTING
{
public:
  template <typename T1>
  static const T Casting( const T1 &Value )
  {
    union CAST
    {
      T1 Value1;
      const T Value2;

      CAST( const T1 &Value)
      {
        this.Value1 = Value; // кастомный оператор может все испортить
      }
    };

    const CAST Union(Value);

    return(Union.Value2);
  }
};

#define _C(A, B) CASTING<A>::Casting(B)

void OnStart()
{
  MqlTick Tick = {0};
  
  Tick = _C(MqlTick, Tick); // Tick = (MqlTick)Tick;
}

Mais si vous voulez couvrir 100% du casting - via des fichiers. Il y a un choix à faire.

 
Combinateur:
Vous avez une meilleure suggestion ?
Il est évident qu'il ne faut pas utiliser les constructeurs personnalisés dans les structures et les opérateurs d'affectation. Écrire un code simple.
 
Vasiliy Sokolov:
Il est évident qu'il ne faut pas utiliser les constructeurs personnalisés dans les structures et les opérateurs d'affectation. Écrire un code simple.
Dans ce cas, vous ne devez pas utiliser les champs const des structures.
 

C'est un test populaire

if (ArrayResize(Array, NewSize) == NewSize)
// ....

n'est pas du tout la même chose que

if (ArrayResize(Array, NewSize) == ArraySize(Array))
// ....
 

En fait, ArrayResize() retourne

Valeur de retour

Si elle réussit, la fonction renvoie le nombre de tous les éléments contenus dans le tableau après le redimensionnement ; sinon, elle renvoie -1 et le tableau n'est pas redimensionné.


 
Roffild:

En fait, ArrayResize() retourne

Le comportement a été modifié il y a un an. Clarifié dans l'aide cette semaine.
 
CopyTicks asynchrone uniquement dans les indicateurs

Nous n'avons plus qu'une seule demande d'indicateurs et partons avec les données dont nous disposons. Et la pagination fonctionne pour elle-même.

Les experts et les scripts ont une approche légèrement différente. Là, plusieurs tentatives sont faites pour attendre les données nécessaires. Tant que les données arrivent, des tentatives sont faites. Dès qu'il y a des problèmes avec la connexion, nous la supprimons immédiatement.

 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Inscription au championnat MetaQuotes-Demo en mai

Vladimir Karputov, 2017.05.05 11:54

Ajouté. Oui, je dois parcourir toute la base de signaux dans le terminal :

SignalBaseTotal

Retourne le nombre total de signaux disponibles dans le terminal.


A propos, je recommande avant cette exécution (surtout lors du passage d'un autre serveur ou juste après le démarrage) de cliquer au moins une fois sur l'onglet "Signaux" du terminal - cela devrait activer la pagination de la base de données actuelle.