Probieren Sie dieses primitive Beispiel aus. Sie werden die "Einzigartigkeit" verstehen, wenn Sie die TF wechseln.
In diesem Beispiel wird in OnInit ein Objekt mit den Koordinaten der aktuellen Zeit und des Preises erstellt. Bei OnCalculate bewegt sich dieses Objekt zusammen mit dem Preis.
Bei OnDeinit wird sie einfach (logischerweise) entfernt.
Wenn Sie die TF umschalten, erscheint das Objekt und verschwindet dann wieder. Warum ist das so? Denn manchmal löscht OnDeinit der alten TF das, was bereits in OnInit der neuen TF erstellt wurde. Es ist kein Fehler! Was sollte der Programmierer denken, der dieses Beispiel erstellt hat und diesen Zweig nicht gelesen hat?
Welchen Sinn hat es, ein primitives Beispiel für einen Zweizeitler zu verwenden?
Verwenden Sie stattdessen ein Beispiel für einen SEHR korrekten Code.
//+------------------------------------------------------------------+//| ProjectName |//| Copyright 2012, CompanyName |//| http://www.companyname.net |//+------------------------------------------------------------------+#property copyright"Copyright 2016, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#property indicator_chart_window#property indicator_plots0//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+intOnInit()
{
datetime t = TimeCurrent();
double pr = SymbolInfoDouble(Symbol(),SYMBOL_BID);
if(ObjectFind(0, "InitDeinit") < 0) // ПРОВЕРКА СУЩЕСТВОВАНИЯ ОБЪЕКТА ПЕРЕД ЕГО СОЗДАНИЕМ ОБЯЗАТЕЛЬНА!!!
{
ObjectCreate(0,"InitDeinit",OBJ_ARROW_THUMB_UP,0,t,pr);
Print(__FUNCTION__, " создан InitDeinit");
}
ObjectSetInteger(0,"InitDeinit",OBJPROP_WIDTH,50);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
if(UninitializeReason() != REASON_CHARTCHANGE) // ПРОВЕРКА ПРИЧИНЫ ДЕИНИЦИАЛИЗАЦИИ РЕШАЕТ ТВОЮ ПРОБЛЕМУ НА РАЗ...
{
ObjectDelete(0,"InitDeinit");
ChartRedraw(0); // ЭТО НУЖНО ТОЛЬКО НА ВЫХОДНЫЕ. В РАБОЧИЕ ДНИ НЕ БУДЕТ ЛИШНИМ, НО С ПРИХОДОМ НОВОГО ТИКА ОБЪЕКТ БУДЕТ НЕДОСТУПЕН.
Print(__FUNCTION__, " InitDeinit удалён");
}
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+intOnCalculate (constint rates_total, // размер массива price[]constint prev_calculated, // обработано баров на предыдущем вызовеconstint begin, // откуда начинаются значимые данныеconstdouble& price[]) // массив для расчета
{
datetime t = TimeCurrent();
double pr = SymbolInfoDouble(Symbol(),SYMBOL_BID);
ObjectMove(0,"InitDeinit",0,t,pr);
return(rates_total);
}
//+------------------------------------------------------------------+
Verwenden Sie lieber ein Beispiel für praktisch korrekten Code.
Es ist das Gleiche. Das Objekt kann über Deinit der irrelevanten Indikatorkopie gelöscht werden. Und OnInit des eigentlichen wird VOR diesem Ereignis ausgeführt.
Aber es ist viel besser, die Übertragung von Informationen von OnDeinit der alten Kopie zu OnInit der neuen Kopie zu zeigen. Genau das ist der Punkt.
fxsaber: Das ist dasselbe. Das Objekt kann über Deinit der irrelevanten Indikatorkopie gelöscht werden. Und OnInit des eigentlichen wird VOR diesem Ereignis ausgeführt.
if(UninitializeReason() != REASON_CHARTCHANGE)
{
// Если причина деинициализации смена периода графика сюда не попадаем и объекты не удаляются.
}
In allen anderen Fällen, mit Ausnahme des Ziehens des Netzsteckers des Computers, wird das Objekt gelöscht.
In allen anderen Fällen, mit Ausnahme des Ziehens des Netzsteckers des Computers, wird das Objekt gelöscht.
Sie haben eine Lösung für ein Problem der privaten Diskussion aufgezeigt. Die allgemeine Formel lautet wie folgt
fxsaber:
VerlässlicheWeitergabe von Informationen von OnDeinit der alten Kopie an OnInit der neuen Kopie.
Folglich ist eine eindeutige OnDeinit/OnInit-Ausführungsfolge erforderlich. Ich habe das nie gebraucht, aber ich habe die Lösungsidee ohne Probleme umgesetzt.
fxsaber: Sie haben die Lösung für ein privates Diskussionsproblem aufgezeigt. Ein allgemeines Beispiel kann wie folgt formuliert werden
Folglich ist eine eindeutige OnDeinit/OnInit-Ausführungsfolge erforderlich. Ich habe das nie gebraucht, aber ich habe die Lösungsidee ohne Probleme umgesetzt.
Nun, ich bin nicht dagegen. Aber mein rechtes Ohr mit dem linken kleinen Finger zu kratzen, ist nichts für mich. Anstatt so einen einfachen Test zu schreiben, "es" ... Ich weiß nicht einmal, wie ich es nennen soll. Es soll für den Amateur sein, denn der Masochismus hat seine Daseinsberechtigung. Bei allem Respekt vor Ihrer Professionalität bei der Programmierung.
fxsaber: Sie haben also nicht verstanden, worum es bei dem in diesem Thread erörterten Problem geht.
Ich verstehe, aber Sie haben die Diskussion des Problems auf Ihre (nicht geringen) Fähigkeiten übertragen.
Und schließlich war meine Antwort auf ein konkretes Beispiel eines Codes eines Colts, und nicht als Antwort auf Ihre Fähigkeiten und ein Beispiel der Datenübertragung mit Regelung der Reihenfolge der Ausführung On_Init und On_Deinit.
Welchen Zweck hat die Fortsetzung des Dialogs? Wollen Sie mich davon überzeugen, dass das Kratzen am rechten Ohr mit dem linken kleinen Finger sehr angenehm ist? Oder einen anderen Zweck?
Das Beispiel, das Sie nachgebessert haben, entsprach nicht genau dem Problem, das Sie erörtert haben. Sie könnten ein anderes Beispiel zeigen, für das es keine Lösung durchUninitializeReason gibt.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Im Prinzip könnte man mit einer einzigen Zeile auskommen.
Wo ist sie eindeutig?
Probieren Sie dieses primitive Beispiel aus. Sie werden die "Einzigartigkeit" verstehen, wenn Sie die TF wechseln.
In diesem Beispiel wird in OnInit ein Objekt mit den Koordinaten der aktuellen Zeit und des Preises erstellt. Bei OnCalculate bewegt sich dieses Objekt zusammen mit dem Preis.
Bei OnDeinit wird sie einfach (logischerweise) entfernt.
Wenn Sie die TF umschalten, erscheint das Objekt und verschwindet dann wieder.
Warum ist das so?
Denn manchmal löscht OnDeinit der alten TF das, was bereits in OnInit der neuen TF erstellt wurde. Es ist kein Fehler! Was sollte der Programmierer denken, der dieses Beispiel erstellt hat und diesen Zweig nicht gelesen hat?
Welchen Sinn hat es, ein primitives Beispiel für einen Zweizeitler zu verwenden?
Verwenden Sie stattdessen ein Beispiel für einen SEHR korrekten Code.
Verwenden Sie lieber ein Beispiel für praktisch korrekten Code.
Es ist das Gleiche. Das Objekt kann über Deinit der irrelevanten Indikatorkopie gelöscht werden. Und OnInit des eigentlichen wird VOR diesem Ereignis ausgeführt.
Aber es ist viel besser, die Übertragung von Informationen von OnDeinit der alten Kopie zu OnInit der neuen Kopie zu zeigen. Genau das ist der Punkt.
Das ist dasselbe. Das Objekt kann über Deinit der irrelevanten Indikatorkopie gelöscht werden. Und OnInit des eigentlichen wird VOR diesem Ereignis ausgeführt.
In allen anderen Fällen, mit Ausnahme des Ziehens des Netzsteckers des Computers, wird das Objekt gelöscht.
Aber es ist viel besser, die Weitergabe von Informationen von OnDeinit der alten Kopie an OnInit der neuen Kopie zu zeigen. Genau das ist der Punkt.
In allen anderen Fällen, mit Ausnahme des Ziehens des Netzsteckers des Computers, wird das Objekt gelöscht.
VerlässlicheWeitergabe von Informationen von OnDeinit der alten Kopie an OnInit der neuen Kopie.
Folglich ist eine eindeutige OnDeinit/OnInit-Ausführungsfolge erforderlich. Ich habe das nie gebraucht, aber ich habe die Lösungsidee ohne Probleme umgesetzt.
Sie haben die Lösung für ein privates Diskussionsproblem aufgezeigt. Ein allgemeines Beispiel kann wie folgt formuliert werden
Folglich ist eine eindeutige OnDeinit/OnInit-Ausführungsfolge erforderlich. Ich habe das nie gebraucht, aber ich habe die Lösungsidee ohne Probleme umgesetzt.
Nun, ich bin nicht dagegen. Aber mein rechtes Ohr mit dem linken kleinen Finger zu kratzen, ist nichts für mich. Anstatt so einen einfachen Test zu schreiben, "es" ... Ich weiß nicht einmal, wie ich es nennen soll. Es soll für den Amateur sein, denn der Masochismus hat seine Daseinsberechtigung. Bei allem Respekt vor Ihrer Professionalität bei der Programmierung.
Anstelle eines solchen einfachen Schecks, schreiben Sie"es" ...
Sie haben also nicht verstanden, worum es bei dem in diesem Thread erörterten Problem geht.
Ich verstehe, aber Sie haben die Diskussion des Problems auf Ihre (nicht geringen) Fähigkeiten übertragen.
Und schließlich war meine Antwort auf ein konkretes Beispiel eines Codes eines Colts, und nicht als Antwort auf Ihre Fähigkeiten und ein Beispiel der Datenübertragung mit Regelung der Reihenfolge der Ausführung On_Init und On_Deinit.
Welchen Zweck hat die Fortsetzung des Dialogs? Wollen Sie mich davon überzeugen, dass das Kratzen am rechten Ohr mit dem linken kleinen Finger sehr angenehm ist? Oder einen anderen Zweck?
Oder ist es ein anderes Ziel?