Fehler, Irrtümer, Fragen - Seite 2741

 
Ilyas:

Der Debugger in MT4 wird sich nicht ändern.

Wir sind dabei, das Debugging- und Profiling-System von MQL-Code komplett neu zu gestalten. Das neue System ist nicht mit MT4 kompatibel.

MT4 BILD 1262 Terminal stürzt ab


2020.05.13 18:05:09.335 Zugriffsverletzung schreiben auf 0x0335346E

2020.05.13 18:05:09.276 VR EURUSD,H4: 1 ausgelaufene Strings übrig

2020.05.13 18:11:11.126 Zugriffsverletzung beim Schreiben auf 0x033403B7

2020.05.13 18:37:13.585 Zugriffsverletzung beim Schreiben auf 0x03093648


Ich habe einen Mini-Quellcode erstellt, der das Problem reproduziert

 
Vladimir Pastushak:

MT 4 BILD 1262 Terminal-Crashs


2020.05.13 18:05:09.335 Zugriffsverletzung schreiben auf 0x0335346E

2020.05.13 18:05:09.276 VR EURUSD,H4: 1 ausgelaufene Strings übrig

2020.05.13 18:11:11.126 Zugriffsverletzung beim Schreiben auf 0x033403B7

2020.05.13 18:37:13.585 Zugriffsverletzung beim Schreiben auf 0x03093648


Ich habe einen Mini-Quellcode erstellt, um das Problem zu reproduzieren.

Schicken Sie mir den Quellcode per privater Nachricht und ich werde ihn überprüfen.

 
Ilyas:

Der Debugger in MT4 wird sich nicht ändern.

Wir sind dabei, das Debugging- und Profiling-System des MQL-Codes komplett neu zu gestalten, das neue System ist nicht mit MT4 kompatibel.

Cool. Sie können es vergessen, ernsthafte Indikatoren für MT4 zu entwickeln.

Danke, wir werden es wissen.

 
Andrey Khatimlianskii:

Indikatoren im Schnittstellenstrom, bis sie gezählt sind, zeichnet das Terminal nichts. Deshalb legt er auf.

Vier werden höchstwahrscheinlich nicht korrigiert werden.

In fünf ähnlichen Indikatoren arbeiten, aber alles ist normal, ohne Einfrieren.

 
MT5 (Build 2419) funktionierte mit dem Debugger, ging für ein paar Minuten zum Browser, ging dann zurück zu MT und es war aus irgendeinem Grund völlig leer:
- keine Fenster, keine Paneele, keine Werkzeuge, kein gar nichts...

 
MT5, wie kann ich die Preisskalierung über Strg + Mausrad programmatisch deaktivieren?
Ich mache ein Panel, fange programmatisch Strg + Mausrad und skaliere Panel-Elemente.
Das gleiche Ereignis löst jedoch die Preisskalierung aus und lädt die Beschriftung "Warten auf Aktualisierung", die das Panel auf unbestimmte Zeit völlig außer Kraft setzt.

Beispielcode, der kommentiert ist, wird auch im Projekt verwendet, hat aber keinen Einfluss auf das oben beschriebene Problem:
void HideChart(long achart, color BackClr){     
   //ChartSetInteger(achart, CHART_SHOW, false);
        //ChartSetInteger(achart, CHART_SHOW_OHLC, false);
        //ChartSetInteger(achart, CHART_SHOW_BID_LINE, false);
        //ChartSetInteger(achart, CHART_SHOW_ASK_LINE, false);
        //ChartSetInteger(achart, CHART_SHOW_LAST_LINE, false);
        //ChartSetInteger(achart, CHART_SHOW_PERIOD_SEP, false);
        //ChartSetInteger(achart, CHART_SHOW_GRID, false);
        //ChartSetInteger(achart, CHART_SHOW_VOLUMES, CHART_VOLUME_HIDE);
        //ChartSetInteger(achart, CHART_SHOW_OBJECT_DESCR, false);
        //ChartSetInteger(achart, CHART_SHOW_TRADE_LEVELS, false);
        //ChartSetInteger(achart, CHART_SHOW_DATE_SCALE, false);
        //ChartSetInteger(achart, CHART_SHOW_PRICE_SCALE, false);
        //ChartSetInteger(achart, CHART_FOREGROUND, false);
        //ChartSetInteger(achart, CHART_SHIFT, false);
        //ChartSetInteger(achart, CHART_MODE, CHART_LINE);

        //ChartSetInteger(achart, CHART_SCALE, 0);
        ChartSetInteger(achart, CHART_SCALEFIX, 0);
        ChartSetInteger(achart, CHART_SCALEFIX_11 , 0);
        ChartSetInteger(achart, CHART_SCALE_PT_PER_BAR, 0);
        ChartSetInteger(achart, CHART_EVENT_OBJECT_DELETE, 0);
        ChartSetInteger(achart, CHART_EVENT_OBJECT_CREATE, 0);

   	ChartSetInteger(achart, CHART_EVENT_MOUSE_WHEEL,1); 
        ChartSetInteger(achart, CHART_EVENT_MOUSE_MOVE, 0);
        ChartSetInteger(achart, CHART_MOUSE_SCROLL, 0);
        ChartSetInteger(achart, CHART_KEYBOARD_CONTROL, 0);
        ChartSetInteger(achart, CHART_QUICK_NAVIGATION, 0);
        
        //ChartSetInteger(achart, CHART_COLOR_BACKGROUND, BackClr);
        //ChartSetInteger(achart, CHART_COLOR_FOREGROUND, BackClr);
        //ChartSetInteger(achart, CHART_COLOR_CHART_LINE, BackClr);
        //ChartSetInteger(achart, CHART_COLOR_ASK, BackClr);
        //ChartSetInteger(achart, CHART_COLOR_BID, BackClr);
        //ChartSetDouble(achart, CHART_FIXED_MAX, 1);
        //ChartSetDouble(achart, CHART_FIXED_MIN, 1);
        //ChartSetString(achart, CHART_COMMENT, "");
        //ChartSetInteger(achart, CHART_CROSSHAIR_TOOL, 0);
        //ChartSetInteger(achart, CHART_SHOW_ONE_CLICK, 0);
        //ChartSetInteger(achart, CHART_CONTEXT_MENU, 0);
        ChartRedraw(achart);
}

void OnInit() {
   HideChart(0, clrWhite);
} 
 

scheint ein Fehler zu sein? die Dokumentation sagt, dass es lesbar ist, aber

Print(i," - ",ObjectGetInteger(0,name,OBJPROP_XDISTANCE)," - ",ObjectGetInteger(0,name,OBJPROP_XSIZE));

gibt aus

es gibt Text auf dem Diagramm:

vollständiger Code im Anhang

Dateien:
 
Igor Zakharov:

Scheint ein Fehler zu sein? In der Dokumentation steht, dass die Etikettenbreite lesbar ist, aber

Die Breite ist erst verfügbar, nachdem das Objekt vollständig gerendert wurde.
Auch ich habe in letzter Zeit mit diesem Problem zu kämpfen.

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Bugs, Fehler, Fragen

Sergey Dzyublik, 2020.05.12 19:32

Bei der Verwendung von OBJ_EDIT trat ein Problem auf - die Notwendigkeit, die Größe von OBJPROP_XSIZE und OBJPROP_YSIZE so einzustellen, dass der gesamte Text in die entsprechenden Objektabmessungen passt.

Frage: Wie bestimmt man die Größen OBJPROP_XSIZE und OBJPROP_YSIZE, damit der gesamte Text passt?
Ich habe zwei Möglichkeiten in Betracht gezogen:
1. das Objekt OBJ_LABLE erstellen, die Abmessungen ablesen, das Objekt OBJ_LABLE löschen.
Nicht geeignet, da die Bemaßung erst möglich ist, nachdem das Objekt tatsächlich erstellt wurde, und nicht möglich ist, wenn sich das Objekt in der ChartRedraw-Warteschlange befindet.

2. mit TextSetFont, gefolgt von TextGetSize.
Ungeeignet, weil das Ergebnis sich radikal von den Ergebnissen der Methode Nr. 1 unterscheidet, und zwar um das 2,5- bis 2,9-fache, je nach Größe der Schrift.
Wahrscheinlich ist der Grund 4K Monitor und 175% DPI.

#define  PRINT(x) ; Print(#x, ":", string(x))
          
void SetLabel(long achart, string name, int wnd, string text, color clr, int x, int y, int corn=0, int fontsize=8, string font="Tahoma")
{
   ObjectCreate(achart, name, OBJ_LABEL, wnd, 0, 0); 
   ObjectSetInteger(achart, name, OBJPROP_CORNER, corn); 
   ObjectSetString(achart, name, OBJPROP_TEXT, text); ObjectSetInteger(achart, name, OBJPROP_COLOR, clr); 
   ObjectSetInteger(achart, name, OBJPROP_FONTSIZE, fontsize); ObjectSetString(achart, name, OBJPROP_FONT, font);
   ObjectSetInteger(achart, name, OBJPROP_SELECTABLE, false); 
   ObjectSetInteger(achart, name, OBJPROP_BORDER_TYPE, 0);
   ObjectSetInteger(achart, name, OBJPROP_XDISTANCE, x); ObjectSetInteger(achart, name, OBJPROP_YDISTANCE, y);
}

void OnStart(){     
   string obj_name = "test_obj";   
   string text = "AAAA::BBBB";
   int font_size = 7;
   string font_name = "Tahoma";
   
   SetLabel(0, obj_name, 0, text, clrWhite, 100, 100, 0, font_size, font_name);
   ChartRedraw(0);
   Sleep(1000);
   
   uint dx_fixed_0 = int(ObjectGetInteger(0, obj_name, OBJPROP_XSIZE));
   uint dy_fixed_0 = int(ObjectGetInteger(0, obj_name, OBJPROP_YSIZE));
   ObjectDelete(0, obj_name);
   
   PRINT(dx_fixed_0);
   PRINT(dy_fixed_0);
   
   
   uint dx_fixed_1;
   uint dy_fixed_1;
   TextSetFont(font_name, -10 *  font_size);
   TextGetSize(text, dx_fixed_1, dy_fixed_1);
   
   PRINT(1.0 * dx_fixed_0 / dx_fixed_1);  	// Result: 1.0
   PRINT(1.0 * dy_fixed_0 / dy_fixed_1);  	// Result: 1.0
}  


Danke anGeess für die Lösung.
Ich sollte die Größe von shuffle mit -10 multiplizieren, wenn ich sie an TextSetFont übergebe.

 
Sergey Dzyublik:

Die Breite ist erst verfügbar, wenn das Objekt vollständig gerendert ist.
Ich habe in letzter Zeit auch mit diesem Problem zu tun.

Ich danke Ihnen! Die Lösung ist beigefügt.


Dateien:
 
Welche Flaggen und Fallstricke könnten auftreten, wenn ein MQL-Programm ständig etwas an die Datei (RAM-Drive) anhängen muss und das andere (und ein anderes Terminal) alle diese angehängten Daten daraus lesen muss?