Fehler, Irrtümer, Fragen - Seite 2754

 
fxsaber:

Es geht darum, dass die Übergabe per Referenz möglich ist.

Wie auch bei Strings haben die Entwickler die Möglichkeit (falls noch nicht geschehen), alles per Referenz zu übergeben, ohne die Variable tatsächlich zu kopieren.

void f()
{
        MqlTick tick;
        SymbolInfoTick( NULL, tick );
        g( tick );
}
inline void SymbolInfoTick( string symbol, MqlTick& tick )
{
      tick = _LastTick; //л енивое программирование: а не будем ничего копировать,
                        //пока _LastTick не изменится
}


Und es wird eine Lösung nicht für eine bestimmteMqlTick-Struktur sein, sondern für alle Fälle

 
A100:

Dies bestätigt einmal mehr, dass es keinen Sinn macht,_Digits,_Point , _Period, _LastError usw.direkt zu verwenden(und selbst _Symbol kann durch NULL ersetzt werden). Tatsächlich müssen sie als konstant flüchtig deklariert werden

Und Sie schlagen im Gegenteil vor, diesen Bereich zu erweitern

Sie haben Recht, aber sie sindfast flüchtig, mit Ausnahme des Flags IsStopped - es ist 100% flüchtig, d.h. jedes Lesen von IsStopped ist 100% Speicherlesen.
Für andere bedeutetfastvollatylе, dass der Compiler den Wert einer Variablen in einem Register beim ersten Aufruf zwischenspeichern und den zwischengespeicherten Wert beim nächsten Zugriff auf diese Variable verwenden KANN, aber nur innerhalb einer Funktion oder eines Zweigs von Aufrufen, wenn sie in einer Funktion eingefügt sind.
Dies ist möglich (und notwendig), weil die Änderung vordefinierter Variablen (außer IsStopped) nicht innerhalb eines MQL-Einstiegspunkts (OnXXX-Funktion) erfolgen kann.

Was denVARIABLE VARIABLE MODIFICATOR betrifft, so wird er von Programmierern für Programmierer verwendet.
Wie wir wissen, kann man die Konstante einer Variablen durch Konvertierung ändern, so dass man dem Compiler mit dem const-Modifikator nicht trauen kann.
Wenn der Compiler sieht, dass die Variable ihren Wert nicht geändert hat und als Konstante initialisiert ist, wird er eine solche Variable auch ohne den const-Modifikator in einen sofortigen Wert (ImmediateValue) umwandeln

. In Bezug auf _LastTick diskutieren wir aber...
Es handelt sich um eine Struktur, nicht um einen einfachen atomaren Typ, und sie kann an jeder Stelle des MQL-Programms plötzlich geändert werden, auch zum Zeitpunkt des Abrufs des Wertes.
Es hat sich herausgestellt, dass man einen Synchronisierer einführen muss, um diese Struktur anzugehen.

Wir arbeiten ständig an der Leistung, vor allem wegen der hohen Release-Rate der Builds.
Wir planen eine Menge Arbeit, um den MQL-Code zu beschleunigen

Документация по MQL5: Предопределенные переменные
Документация по MQL5: Предопределенные переменные
  • www.mql5.com
Для каждой выполняющейся mql5-программы поддерживается ряд предопределенных переменных, которые отражают состояние текущего ценового графика на момент запуска программы - эксперта, скрипта или пользовательского индикатора. Значение предопределенным переменным устанавливает клиентский терминал перед запуском mql5-программы на выполнение...
 
Ilyas:

Was _LastTick betrifft, so diskutieren wir, aber...

Es handelt sich um eine Struktur, nicht um einen einfachen atomaren Typ, und sie kann an jedem Punkt des MQL-Programms plötzlich geändert werden, auch zum Zeitpunkt des Abrufs des Wertes.
Es stellt sich heraus, dass wir einen Synchronisator einführen müssen, um diese Struktur zu berücksichtigen.

aber in Tester _LastTick kann nicht an jedem Punkt der MQL-Programm ändern?

wenn ja, dann geben Sie eine solche Lösung nur für Tester, bei denen die Geschwindigkeit der Berechnungen am wichtigsten ist

 
Igor Makanu:

aber in Tester _LastTick kann nicht an jedem Punkt der MQL-Programm ändern?

wenn ja, dann geben Sie eine solche Lösung nur für den Prüfer, bei dem die Geschwindigkeit der Berechnung am wichtigsten ist

Was hindert Sie also daran, diesen Tick einmal im OnTick-Handler anzufordern und dann mit den erhaltenen Daten zu arbeiten? Das kostet praktisch nichts. Warum sollte ich ihn 100 Mal anfordern (wie in den obigen Tests), wodurch künstlich Bremsen an einer geraden Stelle erzeugt werden? Es wird also vorgeschlagen, das Problem eines krummen EA-Codes zu lösen, indem die interne Arbeit von MT erschwert wird. Oder haben Sie ein paar normale Maße?
 
Alexey Navoykov:
Was hindert Sie also daran, diesen Tick einmal im OnTick-Handler anzufordern und dann mit den empfangenen Daten zu arbeiten?

Die geringe Qualifikation der EA-Ersteller, mit der Market und Cloud belastet sind, ist ein Hindernis.

 
Alexey Navoykov:
Was hindert also daran, den Tick einmal im OnTick-Handler anzufordern und mit den empfangenen Daten weiter zu arbeiten? Das kostet praktisch nichts. Warum sollte man ihn 100 Mal neu anfordern (wie in den obigen Tests) und damit künstlich Bremsen erzeugen? Das Problem eines krummen EA-Codes soll also dadurch gelöst werden, dass man die interne Arbeit von MT erschwert. Oder haben Sie ein paar normale Maße?

Die von "OnTick" zu behandelnden Ereignisse werden von außen in einer Warteschlange mit Prioritäten empfangen. Bei anderen Handlern ist es sinnvoll, sich zu vergewissern, dass keine solchen neuen Ereignisse aufgetreten sind, da sonst die Daten des vorherigen Ticks ungültig/veraltet sind.

 
Alexey Navoykov:
Was hindert Sie also daran, diesen Tick einmal im OnTick-Handler anzufordern und dann mit den daraus resultierenden Daten zu arbeiten? Es ist praktisch wertlos. Warum sollten Sie sich die Mühe machen, ihn 100 Mal anzufordern (wie in den obigen Tests) und so künstlich eine Bremse auf der Stelle zu erzeugen.

Das ist genau das, was ich im Testprogramm mache

Alexey Navoykov:
D.h. das Problem eines krummen EA-Codes soll dadurch gelöst werden, dass das Innenleben von MT verkompliziert wird. Oder haben Sie ein paar normale Maße?

Nun, der Code wird durch gängige Kodierungspraktiken bestimmt, siehe QB und die Verwendung von Safelines in diesen Beispielen

Ich benutze SB nicht, ich habe monatelang mit einem Profiler gemessen und nach Lösungen gesucht, es gab einen Thread über Geschwindigkeitstests, in dem teilweise alternative Lösungen vorgestellt wurden

die Normalität der Messung? es ist ein rutschiger Hang, der ernsthaft angegangen werden muss, ich bin zufrieden mit meinem EA für die Optimierung, gab es einen Pass bei 18 Monaten 6 sec, jetzt 2,5 sec , imho habe ich einen guten Job auf mich )))) getan

 
Laut den Materialien von .... haben sich folgende Überlegungen ergeben:
Da UninitializeReason() in jedem Teil eines Programms aufgerufen werden kann, insbesondere in OnInit() (und wenn ein solcher Aufruf nicht beabsichtigt war, könnte der Anwendungsbereich erweitert werden)
Es wird vorgeschlagen:

Wenn der Wert der Variablen _UninitReason erzeugt wird, bevor OnDeinit() aufgerufen wird,
und wenn der Grund für die vorherige Deinitialisierung des EA nicht definiert werden kann (REASON_PROGRAM, REASON_REMOVE, usw.)
sollte vor diesem Aufruf undefiniert (-1) sein. Dies ist jetzt 0, d.h. effektiv REASON_PROGRAM

Wenn der EA komplett neu gestartet wird(REASON_RECOMPILE, REASON_ACCOUNT, REASON_CLOSE, etc.), dann
scheint es möglich zu sein, die Variable _UninitReason auf einen geeigneten Wert (REASON_RECOMPILE, REASON_ACCOUNT, REASON_CLOSE, etc.) zu setzen, wenn eine neue Instanz eines Programms gestartet wird,

nicht 0 wie bisher, d.h. effektiv REASON_PROGRAM

Wird ein Expert Advisor teilweise neu gestartet (REASON_CHARTCHANGE, etc.), ist die Variable _UninitReason in OnInit() weiterhin gleich dem entsprechenden Wert (REASON_CHARTCHANGE, etc.),
und keine Änderung erforderlich ist
 
MT5-Fehler (Build 2450) Kompilierungsfehler bei der Vorwärtsdeklaration einer Template-Klassenmethode.

template<typename T>
class A{};


class B{
public:
   template<typename T>
   void test(A<T> &a);
};

template<typename T>
void B::test(A<T> &a){}   // 'test' - member function already defined with different parameters 


void OnStart(){ 
   B b;
} 
 

Wenn das Terminal neu gestartet wird, schreibt es kontinuierlich und ohne Unterbrechung in das Aufzeichnungsprotokoll

2020.05.24 03:36:03.342 HistoryBase     'GBPUSD' 1 invalid bars removed

Die Zeit des Verlaufsbalkens im Protokoll nimmt ständig zu. GBPUSD Daily Chart ist geöffnet und zappelt - Null, erster und zweiter Balken werden gelöscht/erzeugt. Und so geht es immer weiter und weiter.

Ich warte hier. Wird es alle SSD mit diesen Protokollen füllen oder wird es endlich aufhören...

Das Logbuch von gestern ist im Trailer.

Dateien:
20200523.zip  304 kb
Grund der Beschwerde: