Fehler, Irrtümer, Fragen - Seite 1851

 
kaus_bonus:

Ich danke Ihnen für Ihre Antwort.

Insgesamt sind die Ergebnisse so, wie ich sie in meinen Beiträgen dargestellt habe.

Ich habe einen regelmäßigen Test durchgeführt.

Das ist kein Betrug, die Bedingungen sind für beide Systeme gleich.


Und doch sind die Ergebnisse zwischen MT4 und MT5 fast 200-mal anders (aufgrund von -muss die vollständige Synchronisation mit Server-Daten zu kontrollieren?? und ping? ).

Über 0,6ms in MT4 werde ich es noch herausfinden. Offensichtlich sind die Daten dort bereits aufbereitet, so dass diese Zahl nicht die tatsächlichen Kosten widerspiegelt.

MT4 hat eine ganz andere Ideologie und tatsächlich kopiert das Terminal eine riesige Menge an Daten für jedes Skript/Experte auf Systemebene aus dem MQL4-Code. Daher zeigen die in MQL4 durchgeführten Messungen in der Regel nicht den tatsächlichen Verbrauch von Ressourcen für den Datenempfang. Die Kosten sind natürlich vorhanden, aber sie liegen auf einer anderen Ebene - das System ist für sie verantwortlich.

Es ist klar, dass der MT4-Mechanismus (Erstellung von Kopien der Marktdaten für jeden Roboter) nicht angewendet werden kann, wenn Ihre Aufgabe auf unendliche Datenströme (tiefe Historie, Zehntausende von Instrumenten) skaliert wird. Daher musste ich MQL5 drastisch ändern und verbessern, indem ich die Direktzugriffe Open/High/Low/Close abschaffte und zu CopyXXX-Funktionen wechselte. In Anbetracht des Umfangs der MT5-Daten ist es für einen Expert Advisor zu teuer, die EURUSD M1-Kopie für 6 Millionen Balken zu erstellen.

MT5/MQL5 verwendet die Strategie, Daten bei Bedarf zu laden, ohne sie im Voraus zu kopieren, was eine bessere Möglichkeit bedeutet, die tatsächlichen Kosten von MQL5-Code zu messen.

Die Datenbank in den Speicher zu bringen, die Synchronisierung zu überprüfen und den Cache eines komplexen Objekts in MT5 in 113 Millisekunden vorzubereiten, ist akzeptabel.

 
kaus_bonus:

Da MT zum Beispiel keinen Market Screener hat, habe ich ein kleines Skript geschrieben, das Symbole zur Marktbeobachtung hinzufügt, aber die Preise sind nur über CopyClose verfügbar, sie sind nicht über SymbolInfoDouble oder über MqlTick verfügbar, bis ein Symbol zur Marktbeobachtung hinzugefügt wird, so dass dieses Skript unendlich lange läuft, wenn es mit einer sehr großen Anzahl von Symbolen ausgeführt wird. Dies ist nur ein Beispiel.

Instrumente müssen nicht zur Marktübersicht hinzugefügt werden, um eine Historie über sie zu erhalten. Jeder Verweis auf die Symboldaten löst eine Synchronisierung der Hintergrunddaten aus.

Jetzt gibt es ein Problem, wenn wir ein übermäßiges Maß an Zwischenspeicherung verwenden und die gesamte Diagrammdatenbank auf ihre volle Tiefe angehoben wird, selbst wenn die neuesten Daten angefordert werden. Dies führt bei Screenern, die Hunderte von Diagrammen überprüfen, zu einem großen Speicherüberlauf.

Die Aufgabe wurde bereits so eingestellt, dass diese Strategie geändert wird und die Daten nicht weiter als 500 Balken vom entferntesten Datum der Anfrage entfernt abgeholt werden. Auf diese Weise können Sie mühelos ein Marktscreening erstellen.

 
fxsaber:

Was ist der richtige Weg?


Sie haben gefragt, Sie haben geantwortet:) Nun, ja, das stimmt.
 
Алексей Тарабанов:

Sie haben gefragt, Sie haben geantwortet:) Nun, ja, das stimmt.
Ich habe den abgekürzten Anruf des Schablonenbetreibers nie gesehen.
 
fxsaber:
Ich habe noch immer keinen verkürzten Anruf des Betreibers der Vorlage gesehen.

Ich habe schon lange nicht mehr mit Strukturen gearbeitet. Wenn Sie ein Integer-Element eines Arrays von Strukturen initiieren müssen, handelt es sich um eine String-Operation. Und das Integer-Element dieser konvertierten Zeichenkette haben Sie korrekt initiiert, was der Compiler auch gemeldet hat. Wenn Sie Arrays von Strukturen initiieren, vergleichen oder anderweitig behandeln wollen, fragen Sie, wie sie in MQL dargestellt/gespeichert werden. Es ist nicht kompliziert und beschleunigt die Dinge sehr.
 
Алексей Тарабанов:
Ich muss wissen, welcher Syntaxeintrag die abgekürzte Version von folgendem ist
Struct.operator[]<int>(0);
 
fxsaber:
Ich muss wissen, welcher Syntaxeintrag die abgekürzte Version von folgendem ist
Struktur[0]
 
Комбинатор:
Struct[0].

An wen wie
 
Комбинатор:
Struct[0].
Damit ich nicht durch die Seiten blättern muss, kopiere ich den Code

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

fxsaber, 2017.04.12 14:27

struct STRUCT
{
  template <typename T>
  void operator []( int ) {}
};

void OnStart()
{
  STRUCT Struct;
  
  Struct.operator[]<int>(0); // Нормально
  Struct[0]<int>;            // Ошибка
}

Diese beiden Anrufe sind unterschiedlich.

Struct.operator[]<int>(0);
Struct.operator[]<MqlTick>(0);

Für jeden Eintrag sollte eine entsprechende Abkürzung angegeben werden. Welcher ist es?

 
fxsaber:
Ich muss wissen, welcher Syntaxeintrag eine abgekürzte Version von folgendem ist

Kein Eintrag kann das bieten, was Sie wollen. Grundlegend. Semantisch.