Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 39

 
Vasiliy Sokolov:
Es war nicht die Rede davon, das Casting vollständig zu ersetzen.
Ja, sie haben die Möglichkeiten abgeschnitten.
 
Vasiliy Sokolov:

Beliebiges Casting durch Schreiben/Lesen von Binärdateien... Lichter aus. Sie brauchen nicht weiter zu lesen...

Haben Sie einen besseren Vorschlag?
 
Vasiliy Sokolov:

p.s. Ich habe mir Ihren Code angesehen:

Beliebiges Casting durch Schreiben/Lesen von Binärdateien... Lichter aus. Lesen Sie nicht weiter...

Es gibt ein beliebiges Casting über Union - beliebige einfache Strukturen ohne eigene Konstruktoren und Kopieroperatoren. Für alle Artikel in dieser Ressource wird dieser Guss funktionieren.

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;
}

Wenn Sie jedoch 100 % des Castings abdecken wollen - über Dateien. Sie haben die Wahl.

 
Kombinator:
Haben Sie einen besseren Vorschlag?
Verwenden Sie natürlich keine benutzerdefinierten Konstruktoren in Strukturen und Zuweisungsoperatoren. Schreiben Sie einfachen Code.
 
Vasiliy Sokolov:
Verwenden Sie natürlich keine benutzerdefinierten Konstruktoren in Strukturen und Zuweisungsoperatoren. Schreiben Sie einfachen Code.
Dann sollten Sie keine const-Felder von Strukturen verwenden.
 

Es ist ein beliebter Test

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

ist überhaupt nicht dasselbe wie

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

Eigentlich gibt ArrayResize() zurück

Rückgabewert

Bei Erfolg gibt die Funktion die Anzahl aller im Array enthaltenen Elemente nach der Größenänderung zurück; andernfalls gibt sie -1 zurück und das Array wird nicht in der Größe geändert.


 
Roffild:

Eigentlich gibt ArrayResize() zurück

Das Verhalten wurde vor einem Jahr geändert. Diese Woche in der Hilfe geklärt.
 
CopyTicks asynchron nur in Indikatoren

Jetzt haben wir nur noch eine Anfrage für Indikatoren und scheitern mit den uns vorliegenden Daten. Und das Paging funktioniert von selbst.

Experten und Skripte haben einen etwas anderen Ansatz. Dort werden mehrere Versuche unternommen, um auf die erforderlichen Daten zu warten. Solange die Daten eintreffen, werden Versuche unternommen. Sobald es Probleme mit der Verbindung gibt, brechen wir sie sofort ab.

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Anmeldung für die MetaQuotes-Demo-Meisterschaft im Mai

Wladimir Karputow, 2017.05.05 11:54

Hinzugefügt. Ja, ich muss die gesamte Signalbasis im Terminal durchlaufen:

SignalBaseTotal

Gibt die Gesamtzahl der im Terminal verfügbaren Signale zurück


Übrigens empfehle ich, vor diesem Lauf (vor allem beim Wechsel von einem anderen Server oder kurz nach dem Start) mindestens einmal auf die Registerkarte "Signale" des Terminals zu klicken - das sollte das Paging der aktuellen Datenbank aktivieren.