Leinwand ist cool! - Seite 82

 
Vitaliy Kuznetsov #:

Es stellt sich heraus, dass die Methode der üblichen Indikatorcode-Verbesserung den Konflikt mit EAs in geschlossenem Code, die Objekte verwenden, nicht global lösen kann.

Ich hoffe, dass die Verbesserung der Expert Advisor wird global den Konflikt mit allen Dashboard-Indikatoren (die meine Aufgabe ist) zu lösen.

Ich habe im MT4 Build 1353 Thread geschrieben, vielleicht werden die Terminal-Programmierer darauf achten.

P.S. Ich habe Änderungen in den Eulen und etwas Skis nicht gehen ...

Schauen Sie durch den gesamten Code (Indikator und Expert Advisor), um herauszufinden, wo und warum ObjectGetXXX, ObjectFind, ObjectsTotal, ObjectName, etc. aufgerufen werden - sie sind synchron und kann ernsthaft verlangsamen alles. Versuchen Sie, sie nach Möglichkeit loszuwerden.

Vergessen Sie nicht, ChartRedraw()!!!! aufzurufen...

 

Meine Herren Moderatoren, mir wird allerlei Unsinn unterstellt und ich darf nicht darauf antworten? Erstaunlich!

 
Maxim Kuznetsov #:

Schauen Sie sich den gesamten Code (Indikator und EA) an, um herauszufinden, wo und warum ObjectGetXXX, ObjectFind, ObjectsTotal, ObjectName usw. aufgerufen werden - sie sind synchron und können alles erheblich verlangsamen. Versuchen Sie, sie loszuwerden, wenn möglich.

Vergessen Sie nicht, ChartRedraw()!!!! aufzurufen...

Sie müssen nur OnChartEvent() klug gestalten und nicht auf alle Ereignisse hintereinander reagieren. Oder ich weiß nicht, was da ist... Und warum hier sitzen und denken für den Kerl, der nicht einmal herablassen, um den Code mit dem Problem zu zeigen?

Jetzt habe ich eine Schleife mit 1000000 Wiederholungen von ObjectFind() und ObjectGet() eingefügt - alles ist normal.

 
Dmitry Fedoseev #:

Meine Herren Moderatoren, mir wird allerlei Unsinn unterstellt und ich darf nicht darauf antworten? Erstaunlich!

Sie sind nicht der Einzige, der einer solchen Selektivität unterworfen worden ist.

 
Dmitry Fedoseev #:

Sie müssen nur OnChartEvent() klug einsetzen und nicht auf alle Ereignisse hintereinander reagieren. Oder ich weiß nicht, was es ist.... Und warum hier sitzen und für den Typen denken, der sich nicht einmal die Mühe macht, den Code mit dem Problem zu zeigen?

Jetzt habe ich eine Schleife mit 1000000 Wiederholungen von ObjectFind() und ObjectGet() eingefügt - alles ist normal.

Nun, ich schreibe es zum vierten Mal, es ist nicht schwer für mich.

https://www.mql5.com/ru/forum/379526/page9#comment_25865481


Wenn Sie den Link öffnen, finden Sie einen Anhang mit dem Code am Ende des Beitrags. Dann können Sie die Beiträge lesen, von wem und wie sich die Diskussion dort entwickelt hat.

Das Problem liegt nicht speziell im vorgeschlagenen Code (Sie können jeden Expert Advisor mit einem Objekt selbst schreiben), sondern in einem globalen Fehler, der alle Expert Advisors mit Objekten betrifft (mit einer einzigen Ausnahme), wenn sie mit der Funktion des Chartwechsels über einen Indikator arbeiten.

Nikolay bot seine Lösung an, aber ich habe Fehler bei der Arbeit mit solchem Code, ich beschäftige mich weiter mit dem Problem.

Новая версия платформы MetaTrader 4 build 1350 - Если у вас проблемы с дешбордами, то придется удалять объекты чарта.
Новая версия платформы MetaTrader 4 build 1350 - Если у вас проблемы с дешбордами, то придется удалять объекты чарта.
  • 2021.11.10
  • www.mql5.com
точнее в очередностях OnInit удалении своих объектов чарта. Тут ремонт терминала не имеет смысла не создавайте объектов по крайней мере до первого OnChartEvent. И удалять объекты пачкой лучше по ChartObjectsDelete
 
Dmitry Fedoseev #:

Sie müssen nur OnChartEvent() klug einsetzen und nicht auf alle Ereignisse hintereinander reagieren. Oder ich weiß nicht, was es ist.... Und warum hier sitzen und für den Typen denken, der sich nicht einmal die Mühe macht, den Code mit dem Problem zu zeigen?

Jetzt habe ich eine Schleife mit 1000000 Wiederholungen von ObjectFind() und ObjectGet()eingefügt - alles ist normal.

Ich habe einen vagen Zweifel: haben Sie jemals etwas Komplizierteres als eine Schleife geschrieben?

 
Vitaliy Kuznetsov #:

Nun, ich werde zum vierten Mal schreiben, das ist kein Problem für mich.

https://www.mql5.com/ru/forum/379526/page9#comment_25865481


Wenn Sie den Link öffnen, finden Sie einen Anhang mit dem Code am Ende des Beitrags. Dann können Sie nachlesen, welche Beiträge, von wem und wie sich die Diskussion dort entwickelt hat.

Das Problem liegt nicht speziell in dem vorgeschlagenen Code (Sie können jeden Expert Advisor mit einem Objekt selbst schreiben), sondern in einem globalen Fehler, der alle Expert Advisors mit Objekten (mit einer einzigen Ausnahme) betrifft, wenn sie mit der Funktion des Chartwechsels über einen Indikator arbeiten.

Nikolay bot seine Lösung an, aber ich habe Fehler bei der Arbeit mit solchem Code, ich beschäftige mich weiter mit dem Problem.

Hier sind die Änderungen:

   if(sparam=="Win_Ea_"){ // вот тут надо поцивильней сделать, из класса брать имя... но уж сами как-нибудь 
      if(id == CHARTEVENT_OBJECT_CLICK){
         if(win.BtnClickUP()){
         
            win.Process();
            
            ChartPeriodSet(true);
            
         }
         if(win.BtnClickDN()){
         
            win.Process();
            
            ChartPeriodSet(false);
            
         }
      }
   }
   if(id == CHARTEVENT_MOUSE_MOVE){
      MouseX=(int)lparam;
      MouseY=(int)dparam;
      
   }

Ich habe es geschafft, die schrecklichen Hänger loszuwerden. Und wenn man die Tasten in einem gemäßigten Tempo drückt, ist alles in Ordnung.

Aber wenn man anfängt, wie ein Specht zu hämmern, hängen die Tasten wieder, nur sind sie anders und kürzer. Ich glaube nicht, dass

dass man sie nicht loswerden kann. Vielleicht hängt es mit der Konstruktion des Zeitrahmens zusammen.

Ich muss die Knöpfe so bearbeiten, dass es gedrückte/ungedrückte Positionen gibt und eine Trägheit einführen, damit der Knopf nicht sofort gedrückt wird.

Eine Verzögerung von 0,1 Sekunden würde die Situation beheben und der Benutzer würde es nicht bemerken.

--

Ohne einen Experten kann man die Knöpfe in einem rasenden Tempo drücken....

 

Und siehe da, ich bin die Hänger komplett losgeworden.

Es mag schief sein, aber der Punkt ist die Hauptsache:

void windows_class::~windows_class(){
   //Canvas.Destroy();
}
int OnDeinit(const int r){
   if(r==REASON_REMOVE){
      Canvas.Destroy();
   }
}

Es geht darum, ein Objekt nicht zu löschen, wenn man das Diagramm wechselt.

Wir sollten sehen, was passiert, wenn Destroy()... wenn es möglich ist, es so zu lassen...

 

Hallo an alle!)

Ich entschuldige mich, aber wenn wir über mq4 sprechen, dann kann es vielleicht so gelöst werden :?)

void OnChartEvent(const int     id,
                  const long   &lparam,
                  const double &dparam,
                  const string &sparam)
{
   if(id == CHARTEVENT_CLICK
   || id == CHARTEVENT_CHART_CHANGE)
   {ChartSetSymbolPeriod(0,NULL,0);}
}
 

Das ist es, was sonst noch Bremsen erzeugen kann:

void OnTick(void){
  win.Process();
}

Warum?