Fehler, Irrtümer, Fragen - Seite 460

 
voix_kas:

Der EA benötigt Zugriff auf einen Indikator. Sie können ihn auf mindestens drei Arten erhalten: IndicatorCreate(...) oder iCustome(...) oder, wenn es sich um einen Standardindikator handelt, zum Beispiel iMA(...).

Soweit ich weiß, müssen Sie bei der Verwendung einer beliebigen Variante das resultierende Handle explizit freigeben (IndicatorRelease).

Es geht um die Wahl der Art und Weise, wie der Indikator aufgerufen wird. Was sind die Vor- und Nachteile der einzelnen Methoden? Vorrangiges Interesse an der Schnelligkeit der Bearbeitung.

IndicatorCreate - für die Standardindikatoren, so dass sie im Falle des Handgelenks die Analoga des iMA-Aufrufs sind. iCustom - für "benutzerdefinierte" benutzerdefinierte Indikatoren. D.h. im Wesentlichen unterschiedliche Dinge.

Die Aufrufgeschwindigkeit von iMA und IndicatorCreate(IND_MA) sollte vergleichbar sein, aber ich habe es nicht überprüft.

Was IndicatorRelease betrifft, so ist es sinnvoll, es aufzurufen, wenn Sie nach der Berechnung nicht zu diesem Indikator zurückkehren müssen. Ich habe solche Situationen nicht - wenn ein Indikator benötigt wird (mit einem bestimmten Satz von Parametern), dann wird er für zusätzliche Berechnungen/Neuberechnungen benötigt, und wenn sich die Eingangsparameter des Skripts ändern, dann wird alles neu initialisiert und neue Handles werden erstellt.

 

In der Tat ist der Aufruf von IndicatorRelease in 99 % der Fälle ein logischer Fehler des Programmierers.

Die Erstellung eines Indikators ist eine der teuersten Operationen, die sehr tiefe Mechanismen ihrer Berechnung auslöst. Der Versuch, einen Indikator-Handle zu schließen, ist ebenfalls ein sehr kostspieliger Vorgang, wenn man sich die tatsächlichen Abläufe seiner Implementierung vor Augen führt. Das häufige Erstellen und Schließen von Indikatoren zeigt, dass der Entwickler das Wesen der Vorgänge überhaupt nicht versteht.

Es ist sehr leicht zu verstehen.

Документация по MQL5: Доступ к таймсериям и индикаторам / IndicatorRelease
Документация по MQL5: Доступ к таймсериям и индикаторам / IndicatorRelease
  • www.mql5.com
Доступ к таймсериям и индикаторам / IndicatorRelease - Документация по MQL5
 
Renat:

Tatsächlich ist der Aufruf von IndicatorRelease in 99 % der Fälle ein logischer Fehler des Programmierers.

Die Erstellung eines Indikators ist eine der teuersten Operationen, die sehr tiefgreifende Mechanismen zur Berechnung auslöst. Der Versuch, einen Indikator-Handle zu schließen, ist ebenfalls ein sehr kostspieliger Vorgang, wenn man die tatsächlichen zugrunde liegenden Prozesse seiner Implementierung bedenkt. Das häufige Erstellen und Schließen von Indikatoren zeigt, dass der Entwickler das Wesen der Vorgänge überhaupt nicht versteht.

Es ist sehr leicht zu verstehen.

Lassen Sie mich in das Gespräch eingreifen und sagen: die Mechanismen der m-Programm, Terminal, Forex (in der Tat, warum sind wir hier versammelt)

Der Grund, warum wir hier sind, sind einfache Wahrheiten, also was hindert uns daran, sie zu verstehen und den Rubel zu mähen - oder die Software, die wir verkaufen wollen,

Und wenn es keine Möglichkeit gibt, dies zu tun, müssen wir schweigen, bis ein "Wunder" geschieht!

 
Im_hungry:

Lassen Sie mich in das Gespräch eingreifen und sagen: die Mechanismen des Programms, das Terminal, Forex (im Grunde, was wir hier sind für)

Wir müssen sie verstehen und Rubel verwenden - oder Software, die wir verkaufen werden,

Wir sollten schweigen, bis ein "Wunder" geschieht!

Ein schönes Beispiel für einen unverständlichen Gedankenstrom. Ich beneide Sie um diese Fähigkeiten.
 
Renat:
Ein schönes Beispiel für unverständlichen Gedankenfluss. Es ist beneidenswert, dies tun zu können.

Sicherlich ein Jedi der Stufe 80, Meister Yoda meditiert leise am Rande :)

Und es steht außer Frage, dass sie "obdachlosen Kindern in Notlagen helfen" (ab 12 Stühlen).

 

Vor nicht allzu langer Zeit wurde mein Arbeitscode nicht mehr kompiliert.

Es ist die Schuld des Codes in der Standardbibliothek:

'GetLastError' - ambiguous call to overloaded function with the same parameters SymbolInfo.mqh  718     10
'GetLastError' - ambiguous call to overloaded function with the same parameters	SymbolInfo.mqh	725	57
Offensichtlich wegen des Codes, der in meinem Code steht:
#import "kernel32.dll"
uint GetLastError();
#import
.....
kernel32::GetLastError() 
.... 

Wie kann ich das "verdauen", damit mein Programm wieder funktioniert? Ich bin mir nicht sicher, was sich in der neuen Version von MQL geändert hat.

Dürfen importierte Funktionen nicht den gleichen Namen haben wie die eingebauten? Wie soll man mit dem Leben weitermachen?

 
7134956:

Wie kann ich das "verdauen", damit mein Programm wieder funktioniert? Ich verstehe nicht ganz, was sich in der neuen Version von MQL geändert hat.

fügen Sie einfach einen Parameter in

#import "Kernel32.dll"
uint GetLastError(int);
#import
 
sergeev:

fügen Sie einen einfachen Parameter in

Ich danke Ihnen! Es scheint geholfen zu haben. Aber es ist eine Art Krücke, einen Parameter zu übergeben, der überflüssig ist.
 
Betrachten wir es als eine Funktion oder einen Auto-Bug.
 
sergeev:
Betrachten wir es als eine Funktion oder einen Auto-Bug.

Sie können sie herausnehmen und in eine separate Bibliothek packen, die Sie umbenennen.

Sie könnten auch versuchen, nach benannten Leerzeichen zu fragen, aber das ist wahrscheinlich nutzlos.