Fehler, Irrtümer, Fragen - Seite 2556

 
Igor Makanu:

hier hat@Vict geholfen, eine Ausnahme mit Ausgang zum OS über Makro-Ersatz zu machen https://www.mql5.com/ru/forum/318246/page10#comment_12651045

eine generell praktikable Lösung, aber... Aber es sieht gruselig und eklig aus! )))

Es ist ein echtes Durcheinander... Um Return in ein Makro zu packen, muss man viel über Perversionen wissen... Wie geht man dann mit solchem Code um? Wir sollten zumindest den Namen des Makros beschreibender machen, wie TRY_OR_RETURN
 
Alexey Navoykov:
Das ist wirklich etwas Schreckliches. Man muss schon sehr viel über Perversionen wissen, um Return in ein Makro zu packen :) Wie geht man dann mit solchem Code um... Wir sollten zumindest den Namen des Makros aussagekräftiger machen - TRY_OR_RETURN, etc.

)))

Ich habe gesehen, wie es aussieht und benutze es nicht, ich schreibe es auf die altmodische Art und Weise if(!myfunc()) return; in OnTick() - der Code ist voll von ifs ... sieht ziemlich niedlich und auch lustig aus ))))

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Neue Version von MetaTrader 5 build 2085: Integration mit Python und massive Verbesserungen im Strategietester

Andrey Barinov, 2019.09.06 06:25

Können Sie trotzdem erklären, warum es jetzt eine Warnung in diesem Code gibt?

Die Methoden haben unterschiedliche Signaturen...

class A
  {
   public:
                     A(void) {}
                    ~A(void) {}
      //===============
      void           Test(void) {}
      //===============
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+  
class B : public A
  {
   public:
                     B(void) {}
                    ~B (void) {}
      //===============
      void           Test(int a) {}
      //===============
  };
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   B b;

   b.Test(); //deprecated behavior, hidden method calling will be disabled in a future MQL compiler versions
   b.Test(5);
//---
   return(INIT_SUCCEEDED);
  }

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Neue Version von MetaTrader 5 build 2085: Integration mit Python und massive Verbesserungen im Strategietester

Andrey Barinov, 2019.09.06 06:11

Gebrochenes typename() in Build 2136

Bitte reparieren Sie es wieder.

enum eTest
  {
   TEST
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Alert(typename(eTest)); // eTest::eTest а правильно (и раньше так было) eTest
//---
   return(INIT_SUCCEEDED);
  }

typename


 
@Ilyas

Dieser Indikator bringt das System zum Absturz.
Und mit Änderung der Bildschirmauflösung und mit blinkenden Pixeln und notwendigem Neustart des Computers.
Und wenn Sie die scheinbar harmlose Funktion Crash() nicht aufrufen, werden Sie auch nicht abstürzen.
Wie folgt wiedergegeben:

  • den Indikator ausführen
  • beginnen, den Zeitrahmen zu ändern, bis es einige Verzögerungen gibt
  • danach versuchen, MT5 zu minimieren



Ich habe diesen Absturz jedes Mal gespielt (6-8 Mal)

Dateien:
AnyTF.mq5  10 kb
iCanvas.mqh  21 kb
 
es stürzte nicht auf LTSC ab, Logging-Fehler: MemoryException 4424265936 Bytes nicht verfügbar, 0 heapmin Ergebnis

es stürzte ab, nach ein paar weiteren TF-Änderungen und das System bootete gerade noch, das Boot-Rad machte 100 Umdrehungen, dachte, es würde nicht booten, am besten nicht überprüfen)
 
Fast235:
Es stürzte nicht auf LTSC, der folgende Fehler im Protokoll: MemoryException 4424265936 Bytes nicht verfügbar, 0 heapmin Ergebnis

ich bin nach ein paar weiteren TF-Änderungen immer noch abgestürzt und das System ist gerade noch so hochgefahren, das Laderad hat 100 Umdrehungen gemacht, ich dachte nicht, dass es hochfährt, besser, es nicht zu überprüfen)

Ja, der Absturz ist sehr hart. Am besten, Sie gehen kein Risiko ein.
Es geht natürlich um das Gedächtnis.
Wenn Sie den Speicher auf diese Weise aufräumen:

int OnInit()
  {
   ChartSetInteger(0,CHART_FOREGROUND,false);
   if(erase)
      ChartSetInteger(0,CHART_SHOW,false);
   Canvas.Erase();
   Canvas.Comm("Идет загрузка всех тиков. Подождите пожалуйста");
   Canvas.Update();
   N=CopyTicks(_Symbol,ticks,COPY_TICKS_ALL,(TimeCurrent()-Weeks*7*24*60*60)*1000,INT_MAX);
   Print("Скачено "+string(N)+" тиков");
   if(N>0) N=CalculateNewTF(ticks,bars,TF);
   ArrayFree(ticks);
   Print("Сформировано "+string(N)+" баров");
   if(N>0) ShowBars(bars);
   Crash();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason) 
  {
    ArrayFree(bars); 
    if(erase) ChartSetInteger(0,CHART_SHOW,true); 
  }

stürzt es auch nicht ab. Jedenfalls hat es bei mir nicht funktioniert.
Aber wenn die TF geändert wird, müssen die Arrays automatisch bereinigt werden!

Und ich verstehe nicht, was die Funktion Crash() ohne sie zu tun hat, denn sie liest nur Informationen über Indikatoren.
Möglicherweise verlangsamt die Ausführung dieser Funktion OnDeinit beim Wechsel der TF und deshalb hat MT5 keine Zeit, den Speicher zu leeren.
Wir haben schon lange Probleme mit asynchronem OnDeinit. Das ist nicht gut! Das System darf nicht aufgrund von Asynchronität abstürzen...

 

Warum lädt der Prozessor den Kern zu 100 %, wenn Sie das Diagramm mit Indikatoren scrollen?

Immerhin sind die Indikatoren berechnet und gezeichnet worden, nach der Idee, nur die Last aus dem Speicher sollte sein.

 
Aleksey Vyazmikin:

Warum lädt der Prozessor den Kern zu 100 %, wenn Sie das Diagramm mit Indikatoren scrollen?

Immerhin sind die Indikatoren berechnet und gezeichnet, nach der Idee, nur die Last aus dem Speicher sollte sein.

Die CPU-Belastung beim Rendern von Diagrammen hängt direkt von der Leistung der Grafikkarte ab.

Auf alten Laptops mit schwachen Karten oder auf Servern ohne Videokarten/Treibern kommt es unweigerlich zu einem sofortigen, aber kurzen Anstieg der CPU-Last.

Und die CPU selbst muss leistungsfähiger sein, um die gestiegenen Anforderungen spurlos zu verkraften.
 
Renat Fatkhullin:

Die CPU-Belastung beim Rendern von Diagrammen steht in direktem Zusammenhang mit der Leistung der Grafikkarte.

Bei älteren Laptops mit schwachen Karten oder bei Servern ohne Grafikkarten/Treibern kommt es zwangsläufig zu einem sofortigen, aber kurzen Anstieg der CPU-Last.

Und die CPU selbst muss leistungsfähiger sein, um die gestiegenen Anforderungen problemlos zu bewältigen.

Ich spreche von einem FX-8350 Prozessor und einer Radeon HD 7950 Grafikkarte. Ich habe nicht das Gefühl, dass die Grafikkarte von MT5 belastet wird.

Grund der Beschwerde: