Fragen von einem "Dummy" - Seite 7

 
kPVT:

Ich habe einen Experten, mit dem ich versuche, die Ereignisse zu verarbeiten.

Ich erhalte Ereignisse, die nicht mit Aktionen übereinstimmen.

Entspricht genau einem Klick auf das Diagramm und einem Klick auf eine Schaltfläche

Ein umstrittenes Ereignis id=9(CHARTEVENT_CUSTOM), das erzeugt wird, wenn z.B. das Diagramm verschoben wird und es etwa 10 ähnliche Ereignisse gibt.

Das EreignisCHARTEVENT_OBJECT_ENDEDIT wurde nicht geprüft.

Alles andere ist unklar. Entweder stimmt die Beschreibung nicht mit der Ereignisnummer überein oder das Ereignis zum Erstellen eines Objekts wird beim manuellen Erstellen des Objekts falsch generiert.

Alles in allem: Bitte helfen Sie.

Es wäre besser, wenn Sie so vorgehen würden:

//+------------------------------------------------------------------+
//| Expert chart event function                                      |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // идентификатор события  
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam) // параметр события типа string
  {
   string str_id="";
   switch(id)
     {
      case CHARTEVENT_KEYDOWN:          str_id="KEYDOWN";        break;
      case CHARTEVENT_OBJECT_CREATE:  str_id="OBJECT_CREATE";  break;
      case CHARTEVENT_OBJECT_CHANGE:  str_id="OBJECT_CHANGE";  break;
      case CHARTEVENT_OBJECT_DELETE:  str_id="OBJECT_DELETE";  break;
      case CHARTEVENT_CLICK:            str_id="CLICK";          break;
      case CHARTEVENT_OBJECT_CLICK:      str_id="OBJECT_CLICK";   break;
      case CHARTEVENT_OBJECT_DRAG:       str_id="OBJECT_DRAG";    break;
      case CHARTEVENT_OBJECT_ENDEDIT:    str_id="OBJECT_ENDEDIT"; break;
      case CHARTEVENT_CHART_CHANGE:      str_id="CHART_CHANGE";   break;
      default:
         if(id>CHARTEVENT_CUSTOM)       str_id="CUSTOM+"+IntegerToString(id-CHARTEVENT_CUSTOM);
         else                         str_id="UNKNOWN";
     }
//--- для отладки
   printf("ChartEvent :id=%s, l=%d d=%f s=%s",str_id,lparam,dparam,sparam);
//---
   ExtExpertPrg.ChartEvent(id,lparam,dparam,sparam);
  }
 

Wahrscheinlich mache ich etwas falsch, aber ich werde versuchen, genauer zu beschreiben, warum ich ein Missverständnis habe.

AlexSTAL:

Sie ordnen zunächst numerische Korrespondenzen zu bereits zugeordneten numerischen Konstanten CHARTEVENT_XXXXXXXXXXX...

Wo kann ich sehen, welchen numerischen Wert die CHARTEVENT_XXXXXXXXXXX-Konstanten haben?

Ich konnte sie nicht finden, also habe ich experimentiert und herausgefunden, dassCHARTEVENT_KEYDOWN = 0 und CHARTEVENT_CLICK = 4 ist, was der Reihenfolge der Beschreibung dieser Konstanten in der Hilfe entspricht.

Ich habe den anderen Ereignissen entsprechend Nummern zugewiesen, so dass es ein Array event[10] gibt.

Rosh:

Leider verstehe ich Ihre Frage nicht. Was genau läuft schief?

Basierend auf meiner Nummerierung der Ereignisse und der Verwendung des Expert Advisors aus meinem vorherigen Beitrag:

Ich zeichne zum Beispiel eine Trendlinie -> EreignisCHARTEVENT_OBJECT_CHANGE,

verschieben Sie diese Zeile -> das EreignisCHARTEVENT_OBJECT_CHANGE,

Eigenschaften über das Menü ändern -> 2 EreignisseCHARTEVENT_CHART_CHANGE und CHARTEVENT_CUSTOM,

Entfernen Sie es durch Drücken von Entf -> Ereignis nur CHARTEVENT_KEYDOWN, (wenn die Ereignisnummerierung falsch ist, sollte es immer noch 2 Ereignisse geben, Entfernen und Tastendruck).

All dies basiert auf meiner Nummerierung.

Nächste...

Ich verwende einen Expert Advisor:

Zeichnen einer Trendlinie -> ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=H1 Trendlinie 40716

diese Linie verschieben -> ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=H1 Trendlinie 40716

Ich ändere die Eigenschaften über Menü -> ChartEvent :id=OBJECT_CHANGE, l=0 d=0.000000 s=H1 Trendline 40716 und ChartEvent :id=CHART_CHANGE, l=0 d=0.000000 s=

Ich lösche es durch Drücken von Entf -> ChartEvent :id=KEYDOWN, l=46 d=0.000000 s=

Die Situation hat sich nicht geklärt.

Für den Fall der Fälle:

MT5 64x - Build 458.

System ist W7 64x Home Extended.

Vielen Dank für Ihr Entgegenkommen ))




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

Wahrscheinlich mache ich etwas falsch, aber ich werde versuchen, genauer zu beschreiben, warum ich ein Missverständnis habe.

Wo kann ich den numerischen Wert der CHARTEVENT_XXXXXXXXX-Konstanten finden?

Ich konnte sie nicht finden, also habe ich experimentiert und herausgefunden, dassCHARTEVENT_KEYDOWN = 0 und CHARTEVENT_CLICK = 4 ist, was der Reihenfolge der Beschreibung dieser Konstanten in der Hilfe entspricht.

Ich habe die übrigen Ereignisse entsprechend nummeriert, und so ist das Array event[10] entstanden.

Dies darf auf keinen Fall geschehen!

Numerische Werte werden vom Entwickler zugewiesen und können jederzeit geändert werden.

Es können nur Zeichenkonstanten verwendet werden

--------------

uncleVic gab Ihnen ein Beispiel für die korrekte Verwendung (oder mein Hilfesnippet)

--------------

Was machen Sie da? Warum brauchen Sie eine numerische Darstellung?

 
AlexSTAL:

Dies darf unter keinen Umständen geschehen!

Numerische Werte werden vom Entwickler zugewiesen und können jederzeit geändert werden.

Es können nur Zeichenkonstanten verwendet werden

GUT. Ich stimme zu, dass Sie das nicht tun dürfen.

Vergessen Sie meine praktische Arbeit).

Weiter geht's...

AlexSTAL:

uncleVic hat Ihnen ein Beispiel für die richtige Verwendung gegeben (oder meine Hilfe)

Wie ich oben geschrieben habe, erhält man mit dem Beispielvon uncleVic auch Ereignisse, die nicht mit der Aktion übereinstimmen.

kPVT:

Zeichnen einer Trendlinie -> ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=H1 Trendlinie 40716 Anstelle vonCHARTEVENT_OBJECT_CREATE.

.....

entfernen Sie es durch Drücken von Entf -> ChartEvent :id=KEYDOWN, l=46 d=0.000000 s=StattCHARTEVENT_OBJECT_DELETE und dann CHARTEVENT_KEYDOWN

AlexSTAL:

Was machen Sie da? Warum brauchen Sie eine numerische Darstellung?

Das ist eine lange Erklärung, und sie ist auch nicht wichtig. Vergessen wir meine Nummerierung.

Die Hauptsache ist, dass ich versuche, den Ereignissen einen Sinn zu geben, aber selbst mit dem Beispielvon uncleVic verstehe ich die Inkonsistenz zwischen den erzeugten Ereignissen und den durchgeführten Aktionen nicht.

 
kPVT:

GUT. Ich stimme zu, dass man das nicht tun kann.

Vergessen Sie mein Ringen mit den Händen).

Weiter geht's...

Wie ich oben geschrieben habe, erhält man mit dem Beispielvon uncleVic auch Ereignisse, die nicht mit der Aktion übereinstimmen.

kPVT:


Fügen Sie es der Initialisierung hinzu:

   ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, true);
   ChartSetInteger(0, CHART_EVENT_OBJECT_DELETE, true);

Es wird alles gut:

Создание:
DS      0       _err (EURUSD,M30)       17:13:18        ChartEvent :id=OBJECT_CREATE, l=0 d=0.000000 s=M30 Horizontal Line 58241
DG      0       _err (EURUSD,M30)       17:13:18        ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=M30 Horizontal Line 58241
Удаление кл. Del:
EH      0       _err (EURUSD,M30)       17:13:21        ChartEvent :id=OBJECT_DELETE, l=0 d=0.000000 s=M30 Horizontal Line 58241
QD      0       _err (EURUSD,M30)       17:13:21        ChartEvent :id=KEYDOWN, l=46 d=0.000000 s=
 

Alex, vielen Dank, du hast das Problem gelöst.

AlexSTAL:

Zur Initialisierung hinzufügen:

....

Zum Expertenblock hinzugefügt

void OnInit()
{
 ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, true);
 ChartSetInteger(0, CHART_EVENT_OBJECT_DELETE, true);
}

Alles ist an seinem Platz.

In der Hilfe steht nirgends geschrieben, dass diese beiden Ereignisse "initialisiert" werden müssen, damit alle anderen Ereignisse korrekt ablaufen.

Ich habe sie auskommentiert und alles funktioniert.

Es stellt sich heraus, dass, wenn Expert Advisor/Indikator nicht über OnInit-Block, es mit den Ereignissen durcheinander bringt.

Vielleicht ist es die Idee, aber mql5-Programmierer sollten es wissen, nur für den Fall.

 
Ich habe einen Expert Advisor in Wizard generiert, aber der Tester generiert einen Core 1 Tester gestoppt, weil OnInit kritischen Fehler, hat jemand diese begegnet? Wie ist es gelöst? Immerhin, Wizard, OK, würde ich einen Fehler gemacht haben, da ...
 
Europa:
Ich habe einen Expert Advisor in Wizard generiert, aber Tester gibt Fehler Core 1 Tester gestoppt, weil OnInit kritischen Fehler, hat jemand begegnet? Wie ist es gelöst? Nach allem, Wizard, würde ich etwas dort durcheinander gebracht haben...
Bitte fügen Sie den Quellcode bei. Und Testparameter.
 
uncleVic:
Hängen Sie den resultierenden Quellcode an. Und Testparameter.
Dateien:
TheFirst.mq5  7 kb
 
Europa:

Es hat sich nicht reproduziert.

Ich habe um weitere Testparameter gebeten. Das habe ich:

Sowohl Version als auch Bitrate von MT5.