Fehler, Irrtümer, Fragen - Seite 1669
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Führt das MQ5-Programm nach Beendigung der Ausführung immer automatisch IndicatorRelease für alle von ihm erstellten Handles durch?
Oder ist es möglich, den Indikator über IndicatorCreate durch ein Skript auszuführen und dann sein Handle über globale Variablen für die weitere Arbeit mit dem Indikator zu übergeben?
https://www.mql5.com/ru/docs/basis/preprosessor/compilation
Konstante
Typ
Beschreibung
tester_indikator
String
Name des benutzerdefinierten Indikators im Format "indicator_name.ex5".Die zum Testen erforderlichen Indikatoren werden automatisch beim Aufruf der FunktioniCustom() ermittelt, wenn der entsprechende Parameter als konstanter String angegeben wird. In anderen Fällen (Verwendung der FunktionIndicatorCreate() oder Verwendung eines nicht konstanten Strings im Parameter, der den Indikatornamen angibt) sollte diese Eigenschaft
IndicatorCreate - fast (keine Einschränkungen bei der Anzahl der Eingabeparameter) rudiment?
Was ist der Zähler?
Wenn Sie versuchen, einen Code zu erstellen, der IndicatorRelease enthält, aber den Indikator selbst nicht aufruft, werden Sie ihn nicht kompilieren können, da Sie ein Handle an IndicatorRelease übergeben müssen, aber wenn Sie den Indikator nicht aus dem Programm heraus aufrufen, erhalten Sie kein Handle.
BlackTomcat:
Вчера обсуждали, страница 1687. :) Но читать лучше вот с этого сообщения на 1686-й странице: https://www.mql5.com/ru/forum/1111/page1686#comment_2790746 Кстати, человек на Ваш же вопрос отвечал. Просто получается, что схема такая. Запрос на вызов индикатора попадает в Терминал. Т.е. советник или скрипт не вызывают индикатор напрямую, терминал выступает посредником. В терминале происходит проверка, существует ли уже такой индикатор с указанными параметрами. Если да, то он возвращает программе, вызвавшей индикатор, хэндл (ссылку) на уже существующий индикатор. А в своих терминальных недрах помечает в счётчике, что был ещё один вызов на данный индикатор. Т.е. он ведёт учёт, сколько хэндлов на данный индикатор вернул. Когда кто-то делает IndicatorRelease, это не значит, что остальным, кто вызвал этот же индикатор с такими же параметрами, этот индикатор больше не нужен. Поэтому Терминал уменьшает счётчик на единицу, но оставляет индикатор активным, потому-что им ещё кто-то пользуется.
Ich danke Ihnen! Dies ist eine große Ersparnis.
Wenn Sie versuchen, einen Code zu erstellen, der IndicatorRelease, aber keinen Aufruf des Indikators selbst enthält, werden Sie ihn nicht kompilieren können, da Sie das Handle an IndicatorRelease übergeben müssen, und wenn der Indikator nicht vom Programm aus aufgerufen wurde, werden Sie das Handle nicht erhalten.
Ich kann den Handle über globale Variablen übergeben. Daher ist es durchaus möglich, sie zu verwenden.Und das tun Sie nicht. :) Oder rufen Sie zumindest nicht IndicatorRelease() für ein auf diese Weise erhaltenes Handle auf. Wenn Sie das tun, ist das Ihr Fehler, aber kein Fehler der Sprache, meinen Sie nicht auch?
Und ich werde eine schlechte Registerkarte für den freien Markt schreiben, die zu einem bestimmten Zeitpunkt einfach durch den gesamten positiven int-Bereich geht und IndicatorRelease für jeden versucht.
Ein solches Skript wird alle Expert Advisors und Indikatoren des Terminals abdecken, die iCustom ohne ChartIndicatorAdd verwendet haben.
Auch das wäre Ihre bewusste Handlung und kein Sprachfehler. Warum haben Sie das geschrieben?
Übrigens begann dieses Gespräch mit Ihrer Frage, wie man den Blinkerhebel vor der Benutzung überprüft. Nun, Sie können es nicht überprüfen, aber bei dem Versuch, ein Handle eines geschlossenen Indikators zu verwenden, erhalten Sie den Fehler 4807 - also sollten Sie es nach jedem Aufruf von CopyBuffer() überprüfen, wenn es -1 zurückgibt.
Ich kann den Handle über globale Variablen übergeben. Es ist also durchaus möglich, sie zu verwenden.
Ausführungsfehler: 'ungültiger Zeigerzugriff' (*)