Fehler, Irrtümer, Fragen - Seite 541

 
220Volt:

Um nicht unbegründet zu sein, habe ich die Situation, die ich oben erwähnt habe, simuliert (ich kann sie nicht zitieren, da ich nicht aus dem Zitat herauskomme :) ).

Ich habe den folgenden Code auf M15 ausgeführt:

Während das Skript lief, habe ich mich mit dem Internet verbunden und die Verbindung getrennt. Die Bilder zeigen das Ergebnis.

Ich verstehe. Wir werden sie korrigieren.
 

Liegt es an Servicedesk oder an einem Fehler im Code?

Der Indikator sollte 5 Punkte vom Schlusskurs abwärts in Rot bilden.

Aber es werden nur zwei Puffer angezeigt (obwohl alle gezählt werden) und nicht rot, sondern grün (nach der Kompilierung schwarz).

Bitte prüfen Sie, ob es nur an mir liegt oder ob es generell nur an mir liegt...?


#define  N      5
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_plots   5
#property indicator_color1 clrRed
#property indicator_color2 clrRed
#property indicator_color3 clrRed
#property indicator_color4 clrRed
#property indicator_color5 clrRed

#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 3
#property indicator_width4 3
#property indicator_width5 3

#property indicator_type1 DRAW_COLOR_ARROW
#property indicator_type2 DRAW_COLOR_ARROW
#property indicator_type3 DRAW_COLOR_ARROW
#property indicator_type4 DRAW_COLOR_ARROW
#property indicator_type5 DRAW_COLOR_ARROW

//------------------------------------------------------------------    class CClrHist
class CClrHist
{
public:
        double buf[];
        CClrHist() { };
};

CClrHist bufs[N]; // массив буферов

//------------------------------------------------------------------    OnInit
int OnInit()
{
        for (int i=0; i<N; i++) SetIndexBuffer(i, bufs[i].buf, INDICATOR_DATA);
        return(0);
}
//------------------------------------------------------------------    OnCalculate
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
        for (int i=0; i<N; i++) for (int j=rates_total-1; j>=0; j--)
        {
                bufs[i].buf[j]=close[j];
                bufs[i].buf[j]-=i*100*Point();
        }
        return(rates_total);
}
 
sergeev:

Liegt es an Servicedesk oder an einem Fehler im Code?

Der Indikator sollte 5 Punkte vom Schlusskurs abwärts in Rot bilden.

Aber es werden nur zwei Puffer angezeigt (obwohl alle gezählt werden) und nicht rot, sondern grün (nach der Kompilierung schwarz).

Bitte prüfen Sie, ob es nur an mir liegt oder ob es generell nur an mir liegt...?

#property indicator_type1 DRAW_ARROW
#property indicator_type2 DRAW_ARROW
#property indicator_type3 DRAW_ARROW
#property indicator_type4 DRAW_ARROW
#property indicator_type5 DRAW_ARROW
 
masharov:

...Ich glaube, dass Standardbibliotheken idealer Code sind, der anderen als Vorbild dienen sollte.

Ich kann nur sagen, dass es wünschenswert wäre, solche Ideen so schnell wie möglich loszuwerden.

Ich habe nichts gegen Standardbibliotheken, aber dem Code eines anderen zu vertrauen, "um das Schreiben von Programmen zu erleichtern", ohne ihn zu überprüfen? - Außer in der Phase der ersten Ausarbeitung eines Sachverständigengutachtens. Sozusagen zur Beschleunigung von Routineprozessen.

 

Ich erhalte in meinem Logbuch ziemlich oft die Meldung: Abnormal termination. Ist jemandem aufgefallen, wann es zu einem solchen Konflikt kommen könnte?

Ich kann die Ursache noch nicht finden. Das Einzige, was ich sagen kann, ist, dass, wenn ich das Terminal für eine Weile im Leerlauf lasse oder in diesem Moment ein anderes Programm (z. B. Excel) benutze, der Expert Advisor, den ich teste, nicht mehr richtig funktioniert, wenn ich zum Terminal zurückkehre. Das heißt, die Handelsoperationen werden ohne Probleme durchgeführt. Das einzige Problem besteht in der Interaktion mit den Handels- und Informationspanels. Es scheint, dass OnChartEvent() fehlerhaft ist. Das Umschalten zwischen den Panels verlangsamt sich stark, als ob der Prozess mit etwas anderem beschäftigt wäre. Ich verwende keine Endlosschleifen. Auch die CPU-Belastung in diesem Moment zeigt nicht an, dass etwas aktiv genutzt wird. Die Neukompilierung des Expert Advisors hilft. Zum Zeitpunkt der Neukompilierung, bevor der EA deinitialisiert wird, erscheint die MeldungAbnormal termination im Journal. Dann wird das Programm erfolgreich initialisiert und alles läuft wie am Schnürchen.

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - Документация по MQL5
 
tol64:

Ich erhalte in meinem Logbuch ziemlich oft die Meldung: Abnormal termination. Ist jemandem aufgefallen, wann es zu einem solchen Konflikt kommen könnte?

Ich kann die Ursache noch nicht finden. Das Einzige, was ich sagen kann, ist, dass der Expert Advisor, den ich teste, nicht mehr richtig funktioniert, wenn ich das Terminal für eine Weile im Leerlauf lasse oder gerade ein anderes Programm verwende (z. B. Excel), nachdem ich zum Terminal zurückgekehrt bin. Das heißt, die Handelsoperationen werden ohne Probleme durchgeführt. Das einzige Problem besteht in der Interaktion mit den Handels- und Informationspanels. Es scheint, dass OnChartEvent() fehlerhaft ist. Das Umschalten zwischen den Panels verlangsamt sich stark, als ob der Prozess mit etwas anderem beschäftigt wäre. Ich verwende keine Endlosschleifen. Auch die CPU-Belastung in diesem Moment zeigt nicht an, dass etwas aktiv genutzt wird. Die Neukompilierung des Expert Advisors hilft. Zum Zeitpunkt der Neukompilierung, bevor der EA deinitialisiert wird, erscheint die MeldungAbnormal termination im Journal. Dann wird das Programm erfolgreich initialisiert und alles läuft wie am Schnürchen.

Verwenden wir IsStopped() in Schleifen?

Sie können über solche Probleme hier, hier und hier lesen. Sie sollten auch darüber nachdenken, wo es im Code "Engpässe" gibt...

Soweit ich verstanden habe, tritt dieser Fehler bei einer "vorzeitigen" Beendigung des Programms auf (wenn das Diagramm/Terminal geschlossen wird oder wenn EA neu kompiliert wird), und während dieses Prozesses wird einige Arbeit von EA erledigt.

 
Interesting:

Verwenden wir IsStopped() in Schleifen?

Lesen Sie über ähnliche Probleme hier, hier und hier. Denken Sie auch an Engpässe im Code...

Soweit ich weiß, tritt dieser Fehler bei einer "vorzeitigen" Beendigung eines Programms auf (wenn das Diagramm/Terminal geschlossen oder der Expert Advisor neu kompiliert wird), während der Expert Advisor eine Arbeit ausführt.

Ich danke Ihnen. Die Links zeigen die gleiche Situation. Ich verwende IsStopped() nie in Schleifen, sondern nur break, continue und return.

Bisher habe ich noch keinen Zusammenhang zwischenIsStopped() und der Verlangsamung des Programms gesehen. Denn wenn das Programm einfrieren würde, könnten keine weiteren Operationen durchgeführt werden. Oder täusche ich mich?

Noch eine Sache.IsStopped() ist nützlich, wenn Sie die Ausführung eines Programms zwangsweise stoppen müssen, z.B. um das Terminal zu schließen oder den Expert Advisor aus dem Chart zu löschen. Und ich muss weiterhin den Expert Advisor verwenden.

 
tol64:

Ich danke Ihnen. Ich verwende IsStopped() nirgends in Schleifen, nur break, continue und return.

Bislang habe ich noch keinen Zusammenhang zwischenIsStopped() und der Verlangsamung des Programms gesehen. Wenn das Programm einfrieren würde, würden keine weiteren Operationen ausgeführt werden. Oder täusche ich mich?

Noch eine Sache.IsStopped() ist nützlich, wenn Sie die Ausführung eines Programms zwangsweise stoppen müssen, zum Beispiel um das Terminal zu schließen oder den Expert Advisor aus dem Chart zu löschen. Und ich muss weiterhin den Expert Advisor verwenden.

IsStopped(), geht es um den Fehler. Warum das Terminal/Expert langsamer wird, wird nicht einmal vermutet (es sind keine Laufzeitbedingungen bekannt, auch nichts über den Expert Advisor).
 
tol64:

Ich erhalte in meinem Logbuch ziemlich oft die Meldung: Abnormal termination. Ist jemandem aufgefallen, wann es zu einem solchen Konflikt kommen könnte?

Ich kann die Ursache noch nicht finden. Das Einzige, was ich sagen kann, ist, dass der Expert Advisor, den ich teste, nicht mehr richtig funktioniert, wenn ich das Terminal für eine Weile im Leerlauf lasse oder gerade ein anderes Programm verwende (z. B. Excel), nachdem ich zum Terminal zurückgekehrt bin. Das heißt, die Handelsoperationen werden ohne Probleme durchgeführt. Das einzige Problem besteht in der Interaktion mit den Handels- und Informationspanels. Es scheint, dass OnChartEvent() fehlerhaft ist. Das Umschalten zwischen den Panels verlangsamt sich stark, als ob der Prozess mit etwas anderem beschäftigt wäre. Ich verwende keine Endlosschleifen. Auch die CPU-Belastung in diesem Moment zeigt nicht an, dass etwas aktiv genutzt wird. Die Neukompilierung des Expert Advisors hilft. Zum Zeitpunkt der Neukompilierung, bevor der EA deinitialisiert wird, erscheint die MeldungAbnormal termination im Journal. Dann wird das Programm erfolgreich initialisiert und alles läuft wie am Schnürchen.

Abnormaler Abbruch bedeutet, dass Sie unnatürlich in das Programm eingegriffen haben, nämlich durch Neukompilierung zur Laufzeit, was zu einer Programmunterbrechung und Neuinitialisierung führt.

Das Gleiche passiert, wenn Sie eine Division durch Null durchführen oder das Programm zur Laufzeit unterbrechen, aber wenn das Programm neu gestartet wird, erhalten Sie keinen solchen Eintrag. Deshalb ist es ratsam, auf IsStopped zu prüfen, damit das Programm bei seiner eigenen Rückkehr beendet werden kann, anstatt dazu gezwungen zu werden.

 

Gibt es Pläne, die folgenden Punkte hinzuzufügen?

Doppelklicken Sie auf eine Position im Diagramm , um das Menü zur Positionsverwaltung aufzurufen.

Hervorhebung mehrerer Positionen zum gleichzeitigen Schließen

????

Ich danke Ihnen.