Und auf dem Bild können Sie sehen, dass nach Destroy() Graphen hinzugefügt werden
mit Vorsilbe
Nun, meine Frage bezog sich aufCGrafic::Destroy(). Es funktioniert - ich habe es mit dem Debugger überprüft... Vielleicht ist etwas in Ihrem Code falsch?
Nun, die Frage bezog sich speziell aufCGrafic::Destroy(). Es funktioniert - ich habe es im Debugger überprüft... Vielleicht ist etwas in Ihrem Code falsch?
Der Einstieg in den Körper von Destroy() bedeutet nicht, dass er (die Prozedur) korrekt funktioniert.
Nach dertatsächlichen Zerstörung eines Objekts konnten wir keine neuen Graphen hinzufügen, und sie werden hinzugefügt!
Der Einstieg in den Körper der Destroy()-Prozedur bedeutet keineswegs, dass sie (die Prozedur) korrekt funktioniert.
Nach der eigentlichen Zerstörung eines Objekts konnten wir ihm keine neuen Graphen mehr hinzufügen, und sie tun es doch!
Was das Schlagen angeht, stimme ich zu. Aber trotzdem... Nun, zunächst einmal:voidCGrafic::Destroy(). Das heißt, die Methode ist uns nichts schuldig. Und zweitens, vielleicht ist es Sache des Programmierers, Kontrollen hinzuzufügen? Sie können SB nicht für alle Aufgaben konfigurieren...
Was das Schlagen angeht, stimme ich zu. Aber trotzdem... Nun, zunächst einmal,voidCGrafic::Destroy(). Das heißt, die Methode ist uns nichts schuldig. Und zweitens, vielleicht ist es Sache des Programmierers, Kontrollen hinzuzufügen? Sie können SB nicht für alle Aufgaben konfigurieren.
Ich zeichne die Diagramme und gebe den Text mit CGraphic aus. Wenn eine Instanz des EA ausgeführt wird, ist alles in Ordnung. Wenn ich denselben EA auf verschiedenen Charts laufen lasse, habe ich den Eindruck, dass die Ausgabe immer auf dem Chart erfolgt, der gerade auf dem Bildschirm ist. Und nicht auf dem Diagramm, das in der Methode Create angegeben ist. Hier ist der Code des EA zur Veranschaulichung des Problems:
#include <Graphics\Graphic.mqh>
CGraphic Graphic; // Для вывода графика.long ChartId;
intOnInit()
{
ChartId= ID_Grafika_S_Expertom(); // Узнаем Id графика на котором запущен советник.
Graphic.Create(ChartId,"CPrecieIdealnayFast ", 0, 10, 30, 500, 500);
Print("OnInit ",Symbol()," ChartId=",ChartId);
EventSetMillisecondTimer(1000);
return(INIT_SUCCEEDED);
}
voidOnTimer()
{
string Str;
StringConcatenate(Str,ChartId," ",Symbol()," ",TimeLocal());
Graphic.FontSet("Arial",20);
Graphic.TextAdd(20,30, Str, ColorToARGB(clrRed), TA_LEFT|TA_TOP);
Graphic.Update();
Graphic.Redraw(true);
}
voidOnDeinit( constint Reanson )
{
Graphic.Destroy();
}
long ID_Grafika_S_Expertom()
{
string MaskaNameExpert= MQLInfoString(MQL_PROGRAM_NAME);
int SekyndNaGrafikeSTekygemExpertom= PeriodSeconds();
string SimvolExpert= Symbol();
//--- 1. Настраиваемся на первый график. Если не получилось возращаем советник не найден. //--- В цикле.//--- 2. Получаем Имя эксперта.//--- --- 2.1 Если не удалось получить имя эксперта смотрим следующий график.//--- --- --- 2.2 Если не удалось получить слеюущий график выходим из цикла.//--- 3.A Если на графике есть эксперт И в его названии есть маска: Запоминаем Id и выходим из цикла.//--- 3.B Если Нет эксперта или НЕ нашли смотрим следующий график. //--- --- 3.B.A Если не удалось получить слеюущий график выходим из цикла. //--- --- 3.B.B Если Удалось получить слеюущий график ищем в начало цикла. long ID_Chart= -1;
string NameExpert="";
long IskomoeIdChart= -1;
int LimitChatr= 1000; // Наверняка ведь не 1000 графиков.int i=0; // Cчетчик графиков//--- 1. Настраиваемся на первый график. Если не получилось возращаем советник не найден.
ID_Chart= ChartFirst();
if( ID_Chart < 0 ) return -1;
string Simvol;
int KolichestvoSekynd;
while( i < LimitChatr )
{
//--- 2. Получаем Имя эксперта.
NameExpert= ChartGetString( ID_Chart, CHART_EXPERT_NAME );
Simvol= ChartSymbol(ID_Chart);
KolichestvoSekynd= PeriodSeconds( ChartPeriod(ID_Chart) );
// Print("На графике ",ChartSymbol(ID_Chart)," Period=",ChartPeriod(ID_Chart)," Расположен советник (",NameExpert,")");//--- 3.A Если на графике есть эксперт И в его названии есть маска: Запоминаем Id и выходим из цикла. if( NameExpert != "" &&
StringFind(NameExpert,MaskaNameExpert) > -1 &&
Simvol == SimvolExpert &&
KolichestvoSekynd == SekyndNaGrafikeSTekygemExpertom )
{
// Print("НАШЛИ На графике ",ChartSymbol(ID_Chart)," Period=",ChartPeriod(ID_Chart)," Расположен советник (",NameExpert,")");
IskomoeIdChart= ID_Chart; break;
}
//--- 3.B Если Нет эксперта или НЕ нашли смотрим следующий график. else
{
// Print("Не удалось найти маску (",MaskaNameExpert," в названии эксперта (",NameExpert,") ",ChartSymbol(ID_Chart)," Period=",ChartPeriod(ID_Chart)," ID=",ID_Chart);
ID_Chart= ChartNext(ID_Chart);
i++;
//--- --- 3.B.A Если не удалось получить слеюущий график выходим из цикла. if( ID_Chart < 0 ) {/*Print("Закончились графики.");*/break;}
//--- --- 3.B.B Если Удалось получить слеюущий график ищем в начало цикла. else {/* Print("Получили новое Id графика ",ChartSymbol(ID_Chart)," Period=",ChartPeriod(ID_Chart)," ID=",ID_Chart);*/continue;}
}
}
return IskomoeIdChart;
}
Wenn Expert Advisor 1 funktioniert, ist alles in Ordnung.
Wenn Sie jedoch den zweiten EA in einem anderen Diagramm öffnen, erhält das erste Diagramm gleichzeitig Informationen vom ersten und zweiten EA.
Das bedeutet, dass er zu flackern beginnt, weil mehrere Expert Advisors auf ein und demselben Chart arbeiten. In der Init-Funktion erhält jedoch jeder Expert Advisor die Id des Charts, in dem er gestartet wurde. Dann bekomme ich einen Aufruf zum Erstellen.
intOnInit()
{
ChartId= ID_Grafika_S_Expertom(); // Узнаем Id графика на котором запущен советник.
Graphic.Create(ChartId,"CPrecieIdealnayFast ", 0, 10, 30, 500, 500);
Print("OnInit ",Symbol()," ChartId=",ChartId);
EventSetMillisecondTimer(1000);
return(INIT_SUCCEEDED);
}
Bitte helfen Sie mir zu verstehen, wo das Problem liegt?
При исследовании и изучении закономерностей важную роль играет визуальное отображение с помощью графиков. В популярных среди научного сообщества языках программирования, таких как R и Python, для визуализации предназначена специальная функция plot. С её помощью можно рисовать линии, точечные распределения и гистограммы для наглядного представления закономерностей. В MQL5 вы можете делать всё то же самое с помощью класса CGraphics.
Ich zeichne die Diagramme und gebe den Text mit CGraphic aus. Wenn eine Instanz des EA ausgeführt wird, ist alles in Ordnung. Wenn ich denselben EA auf verschiedenen Charts laufen lasse, habe ich den Eindruck, dass die Ausgabe immer auf dem Chart erfolgt, der gerade auf dem Bildschirm ist. Und nicht auf dem Diagramm, das in der Methode Create angegeben ist. Hier ist der Code des EA zur Veranschaulichung des Problems:
Wenn Expert Advisor 1 funktioniert, ist alles in Ordnung.
Wenn Sie jedoch den zweiten EA in einem anderen Diagramm öffnen, erhält das erste Diagramm gleichzeitig Informationen vom ersten und zweiten EA.
Das bedeutet, dass er zu flackern beginnt, weil mehrere Expert Advisors auf ein und demselben Chart arbeiten. In der Init-Funktion erhält jedoch jeder Expert Advisor die Id des Charts, in dem er gestartet wurde. Dann bekomme ich einen Aufruf zum Erstellen.
Bitte helfen Sie mir zu verstehen, was das Problem ist?
In den Namen des Objekts, müssen nicht ChartId hinzufügen? Ich weiß nicht mehr, ob sie innerhalb der Funktion hinzugefügt wird.
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.
CGrafic::Destroy() - Funktioniert nicht!
CGrafic::Destroy() - Funktioniert nicht!
Wie haben Sie es entdeckt? Was sind die Symptome?
Wie haben Sie sie identifiziert? Was sind die Symptome?
Nun, der Code ist zum Abspielen beigefügt :)
Und auf dem Bild können Sie sehen, dass nach Destroy() Graphen hinzugefügt werden
mit Vorsilbe
_existsAber der Code für die Wiedergabe ist beigefügt :)
Und auf dem Bild können Sie sehen, dass nach Destroy() Graphen hinzugefügt werden
mit Vorsilbe
Nun, meine Frage bezog sich aufCGrafic::Destroy(). Es funktioniert - ich habe es mit dem Debugger überprüft... Vielleicht ist etwas in Ihrem Code falsch?
Nun, die Frage bezog sich speziell aufCGrafic::Destroy(). Es funktioniert - ich habe es im Debugger überprüft... Vielleicht ist etwas in Ihrem Code falsch?
Der Einstieg in den Körper von Destroy() bedeutet nicht, dass er (die Prozedur) korrekt funktioniert.
Nach dertatsächlichen Zerstörung eines Objekts konnten wir keine neuen Graphen hinzufügen, und sie werden hinzugefügt!
Der Einstieg in den Körper der Destroy()-Prozedur bedeutet keineswegs, dass sie (die Prozedur) korrekt funktioniert.
Nach der eigentlichen Zerstörung eines Objekts konnten wir ihm keine neuen Graphen mehr hinzufügen, und sie tun es doch!
Was das Schlagen angeht, stimme ich zu. Aber trotzdem... Nun, zunächst einmal:voidCGrafic::Destroy(). Das heißt, die Methode ist uns nichts schuldig. Und zweitens, vielleicht ist es Sache des Programmierers, Kontrollen hinzuzufügen? Sie können SB nicht für alle Aufgaben konfigurieren...
Was das Schlagen angeht, stimme ich zu. Aber trotzdem... Nun, zunächst einmal,voidCGrafic::Destroy(). Das heißt, die Methode ist uns nichts schuldig. Und zweitens, vielleicht ist es Sache des Programmierers, Kontrollen hinzuzufügen? Sie können SB nicht für alle Aufgaben konfigurieren.
Außerdem habe ich die Destroy-Methode geändert.
Und es fügt immer noch Karten hinzu!
Ich zeichne die Diagramme und gebe den Text mit CGraphic aus. Wenn eine Instanz des EA ausgeführt wird, ist alles in Ordnung. Wenn ich denselben EA auf verschiedenen Charts laufen lasse, habe ich den Eindruck, dass die Ausgabe immer auf dem Chart erfolgt, der gerade auf dem Bildschirm ist. Und nicht auf dem Diagramm, das in der Methode Create angegeben ist. Hier ist der Code des EA zur Veranschaulichung des Problems:
Wenn Expert Advisor 1 funktioniert, ist alles in Ordnung.
Wenn Sie jedoch den zweiten EA in einem anderen Diagramm öffnen, erhält das erste Diagramm gleichzeitig Informationen vom ersten und zweiten EA.
Das bedeutet, dass er zu flackern beginnt, weil mehrere Expert Advisors auf ein und demselben Chart arbeiten. In der Init-Funktion erhält jedoch jeder Expert Advisor die Id des Charts, in dem er gestartet wurde. Dann bekomme ich einen Aufruf zum Erstellen.
Bitte helfen Sie mir zu verstehen, wo das Problem liegt?
Ich zeichne die Diagramme und gebe den Text mit CGraphic aus. Wenn eine Instanz des EA ausgeführt wird, ist alles in Ordnung. Wenn ich denselben EA auf verschiedenen Charts laufen lasse, habe ich den Eindruck, dass die Ausgabe immer auf dem Chart erfolgt, der gerade auf dem Bildschirm ist. Und nicht auf dem Diagramm, das in der Methode Create angegeben ist. Hier ist der Code des EA zur Veranschaulichung des Problems:
Wenn Expert Advisor 1 funktioniert, ist alles in Ordnung.
Wenn Sie jedoch den zweiten EA in einem anderen Diagramm öffnen, erhält das erste Diagramm gleichzeitig Informationen vom ersten und zweiten EA.
Das bedeutet, dass er zu flackern beginnt, weil mehrere Expert Advisors auf ein und demselben Chart arbeiten. In der Init-Funktion erhält jedoch jeder Expert Advisor die Id des Charts, in dem er gestartet wurde. Dann bekomme ich einen Aufruf zum Erstellen.
Bitte helfen Sie mir zu verstehen, was das Problem ist?
In den Namen des Objekts, müssen nicht ChartId hinzufügen? Ich weiß nicht mehr, ob sie innerhalb der Funktion hinzugefügt wird.