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

 
Dans le testeur, il n'est possible de connaître correctement l'heure actuelle que viaTimeTradeServer(), et non TimeCurrent().
 
fxsaber:
Dans le testeur, il n'est possible de connaître correctement l'heure actuelle que viaTimeTradeServer(), et non TimeCurrent().
C'est une déclaration très controversée.
 
Slava:
Déclaration tout à fait discutable.
void OnTick()
{
  Print(TimeCurrent());
  
  Sleep(3600 * 1000);
  
  Print(TimeCurrent());
  Print(TimeTradeServer());    
  
  ExpertRemove();
}

Résultat

2017.10.02 00:03:03   2017.10.02 00:03:03
2017.10.02 01:03:03   2017.10.02 01:02:59
2017.10.02 01:03:03   2017.10.02 01:03:03


TimeCurrent renvoie l'heure du dernier tick du personnage principal, et non du testeur (serveur). Il n'est pas possible de connaître l'heure exacte du serveur en millisecondes.

 

Bonjour, j'ai lu des informations sur les tableaux de service https://www.mql5.com/ru/docs/constants/objectconstants/enum_anchorpoint (dans le dernier exemple).

double Ups[],Downs[] ;
datetime Temps[] ;

Y a-t-il une liste de toutes les matrices de service quelque part ?

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов
  • www.mql5.com
Графические объекты Text, Label, Bitmap и Bitmap Label (OBJ_TEXT, OBJ_LABEL, OBJ_BITMAP и OBJ_BITMAP_LABEL) могут иметь один из 9 различных способов привязки своих координат, задаваемых свойством OBJPROP_ANCHOR. – объекты имеет ширину и высоту. Если указано "только для чтения", то это означает, что значения ширины и высоты вычисляются...
 
j'ai suivi ce signal une semaine de plus je suivrai

et puis voyons

fr/signaux/352123

 

Une technique de langage qui permet l'utilisation de méthodes/champs protégés.

Exemple

#include <Canvas\Canvas.mqh>

// Помещает картинку в ресурс
bool ToResource( const string Name, const uint &Data[], const uint Width )
{
  return(::ResourceCreate(Name, Data, Width, (Width == 0) ? ::ArraySize(Data) : ::ArraySize(Data) / Width, 0, 0, Width, ::COLOR_FORMAT_ARGB_NORMALIZE));
}

// Прием использования protected полей/методов
class CANVAS : public CCanvas
{
public:
  // Загрузка картинки из BMP-файла
  static bool BMPToArray( const string FileName, uint &Data[], int &Width )
  {
    CANVAS Canvas;
    
    const bool Res = Canvas.LoadFromFile(FileName);
    
    if (Res)
    {
      ArrayCopy(Data, Canvas.m_pixels);
      
      Width = Canvas.m_width;
    }
    
    return(Res);
  }
};

// Грузим BMP с альфаканалом не из ресурса, а из файла
void OnStart()
{     
  const string Resource = "::Resource";
         
  uint Data[], Width;   
  
  if (CANVAS::BMPToArray("Picture.bmp", Data, Width) &&
      ToResource(Resource, Data, Width))
  {
   ObjectCreate(0, __FILE__, OBJ_BITMAP_LABEL, 0, 0, 0);   
   ObjectSetString(0, __FILE__, OBJPROP_BMPFILE, Resource);
        
   // Сконвертировали BMP в PNG (без учета прозрачности)
   BitmapObjectToFile(0, __FILE__, "Picture.png"); // https://www.mql5.com/ru/forum/170952/page57#comment_5985505
  }
}
 
Les commentaires non liés à ce sujet ont été déplacés vers "Toutes les questions des débutants sur MQL4, aide et discussion sur les algorithmes et les codes".
 
En raison de cette particularité

le typage des paramètres des modèles est strict, la spécialisation avec conversion implicite est inacceptable

il est possible d'écrire des fonctions qui ne prennent que des pointeurs d'une classe de base comme paramètres d'entrée, et rejettent les descendants à la compilation.


Exemple

template <typename T>
void StrongCondition( T, T ) {}

class A
{
public:
  int i;
  
  template <typename T>  
  void SetStong( T Value )
  {
    StrongCondition(&this, Value);
    
    this.i = Value.i;
  }
  
  void Set( A* Value )
  {
    this.i = Value.i;
  }
};

class B : public A {};

void OnStart()
{
  A a;
  B b;
  
  a.Set(&b);   
  a.SetStong(&a);
  
  a.SetStong(&b);       // потомки в явном виде запрещены
  a.SetStong((A*)(&b)); // только явное приведение разрешено
}
 
Puis-je modifier les champsde la classe const-object ou appeler ses méthodes non-const ? -Tu peux !
template <typename T>
T GetMe( const T Ptr )
{
  return((T)Ptr);
}

class A
{
public:  
  int i;
};

void OnStart()
{
  const A a;

  GetMe(&a).i = 1;
  
  Print(a.i); // 1
}

Je n'aime pas ce tour moi-même. Je pensais être assuré contre les accès non autorisés. Mais c'est dommage ! Bien entendu, cela ne fonctionne pas avec les const-structures. Gardez donc cette échappatoire à l'esprit.

 
Raison: