Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 58

 
Im Tester ist es nur möglich, die aktuelle Zeit korrekt überTimeTradeServer() zu ermitteln, nicht über TimeCurrent().
 
fxsaber:
Im Tester ist es nur möglich, die aktuelle Zeit korrekt überTimeTradeServer() zu ermitteln, nicht über TimeCurrent().
Dies ist eine sehr fragwürdige Aussage.
 
Slawa:
Ziemlich fragwürdige Aussage.
void OnTick()
{
  Print(TimeCurrent());
  
  Sleep(3600 * 1000);
  
  Print(TimeCurrent());
  Print(TimeTradeServer());    
  
  ExpertRemove();
}

Ergebnis

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 liefert die Zeit des letzten Ticks der Hauptfigur, nicht des Testers (Servers). Es ist nicht möglich, die genaue aktuelle Serverzeit in Millisekunden zu erfahren.

 

Hallo. Ich habe über den Dienst Arrays https://www.mql5.com/ru/docs/constants/objectconstants/enum_anchorpoint (im letzten Beispiel) gelesen.

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

Gibt es irgendwo eine Liste mit allen Service-Arrays?

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов
  • www.mql5.com
Графические объекты Text, Label, Bitmap и Bitmap Label (OBJ_TEXT, OBJ_LABEL, OBJ_BITMAP и OBJ_BITMAP_LABEL) могут иметь один из 9 различных способов привязки своих координат, задаваемых свойством OBJPROP_ANCHOR. – объекты имеет ширину и высоту. Если указано "только для чтения", то это означает, что значения ширины и высоты вычисляются...
 
Ich habe dieses Signal verfolgt, eine weitere Woche werde ich folgen.

und dann sehen wir

de/signale/352123

 

Eine Sprachtechnik, die die Verwendung von geschützten Methoden/Feldern ermöglicht.

Beispiel

#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
  }
}
 
Kommentare, die sich nicht auf dieses Thema beziehen, wurden nach "Fragen von Neulingen zu MQL4, Hilfe und Diskussion über Algorithmen und Codes" verschoben.
 
Wegen dieser Besonderheit

die Typisierung von Vorlagenparametern ist streng, eine Spezialisierung mit impliziter Konvertierung ist inakzeptabel

ist es möglich, Funktionen zu schreiben, die nur Zeiger einer Basisklasse als Eingabeparameter annehmen und Nachkommen beim Kompilieren zurückweisen.


Beispiel

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)); // только явное приведение разрешено
}
 
Kann ich Felderder Klasse const-object ändern oder ihre Nicht-const-Methoden aufrufen? -Sie dürfen!
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
}

Ich selbst mag diesen Trick nicht. Ich dachte, ich sei gegen unbefugten Zugriff versichert. Trotzdem schade! Natürlich funktioniert das nicht mit const-Strukturen. Behalten Sie dieses Schlupfloch also im Hinterkopf.

 
Grund der Beschwerde: