Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 982

 

Der folgende Code zeichnet ein Eingabefeld in das Diagramm, in dem der Text "Take Profit" mittig ausgerichtet ist:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   Edit();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   EditDel();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+ 
//| Создает объект "Поле ввода"                                      | 
//+------------------------------------------------------------------+ 
void EditCreate(ENUM_BASE_CORNER corner,string name,int x,int y,int width,int height,string text,
                int font_size,ENUM_ALIGN_MODE align,bool read_only,color back_clr)
  {
   long cid=ChartID();
   int subWind=0;
   string font="Consolas";
   color text_color=clrBlack;
   color border_clr=clrDimGray;
   bool back=false;
   bool selectable=false;
   bool selected=false;
   bool hidden=true;
   long zorder=0;
   if(ObjectFind(cid,name)==-1)
     {
      ObjectCreate(cid,name,OBJ_EDIT,subWind,0,0);
      ObjectSetInteger(cid,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(cid,name,OBJPROP_YDISTANCE,y);
      ObjectSetInteger(cid,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(cid,name,OBJPROP_YSIZE,height);
      ObjectSetString(cid,name,OBJPROP_TEXT,text);
      ObjectSetString(cid,name,OBJPROP_FONT,font);
      ObjectSetInteger(cid,name,OBJPROP_FONTSIZE,font_size);
      ObjectSetInteger(cid,name,OBJPROP_ALIGN,align);
      ObjectSetInteger(cid,name,OBJPROP_READONLY,read_only);
      ObjectSetInteger(cid,name,OBJPROP_CORNER,corner);
      ObjectSetInteger(cid,name,OBJPROP_COLOR,text_color);
      ObjectSetInteger(cid,name,OBJPROP_BGCOLOR,back_clr);
      ObjectSetInteger(cid,name,OBJPROP_BORDER_COLOR,border_clr);
      ObjectSetInteger(cid,name,OBJPROP_BACK,back);
      ObjectSetInteger(cid,name,OBJPROP_SELECTABLE,selectable);
      ObjectSetInteger(cid,name,OBJPROP_SELECTED,selected);
      ObjectSetInteger(cid,name,OBJPROP_HIDDEN,hidden);
      ObjectSetInteger(cid,name,OBJPROP_ZORDER,zorder);
      ChartRedraw(cid);
     }
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Edit()
  {
   long cid=ChartID();
   if(ObjectFind(cid,"edit tp")<0)
     {
      EditCreate(CORNER_LEFT_UPPER,"edit tp",50,50,150,20,"Take Profit",12,ALIGN_CENTER,true,clrBeige);
     }
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void EditDel()
  {
   long cid=ChartID();
   ObjectDelete(cid,"edit tp");
  }
//+------------------------------------------------------------------+

Bei der Ausführung in Echtzeit funktioniert sie korrekt:

Im Strategietester ist die Ausrichtung aus irgendeinem Grund auf der linken Seite.


In MT4 funktioniert der Code sowohl in Echtzeit als auch im Strategy Tester korrekt. Ich sehe solche Tricks nur im MT5...

Was könnte das Problem sein?

 
Oleg Remizov:

Der folgende Code zeichnet ein Eingabefeld in das Diagramm, in dem der Text "Take Profit" mittig ausgerichtet ist:

Bei der Ausführung in Echtzeit funktioniert sie korrekt:

Im Strategietester ist die Ausrichtung aus irgendeinem Grund auf der linken Seite.


In MT4 funktioniert der Code sowohl in Echtzeit als auch im Strategy Tester korrekt. Ich sehe solche Tricks nur im MT5...

Was könnte das Problem sein?

Im Tester von MT5 wurde es bereits mehrfach im Forum erwähnt.

 

Guten Tag an alle. Meine Herren, bitte beraten Sie mich, wie man das gleichzeitige Drücken von Tastatur- und Maustaste handhabt.Zum Beispiel, wenn man die Taste drückt, wird ein Objekt gezeichnet, und wenn man dieselbe Taste + linke Maustaste drückt, wird ein anderes Objekt gezeichnet.Aber es stellt sich heraus, dass wenn man die Tastatur- und Maustaste drückt, 2 Objekte gezeichnet werden.

if(lparam==49)
 {
 ObjectCreate(0,"line",OBJ_TREND,0,time1,price1,time1+86400,price1);
 ChartRedraw(0);
 }
if(lparam==49 &&В MouseK==1)
 {
 ObjectCreate(0,"Marg",OBJ_LABEL,0,0,0);
 ObjectSetInteger(0,"Marg",OBJPROP_XDISTANCE,280); 
 ObjectSetInteger(0,"Marg",OBJPROP_YDISTANCE,20); 
 ChartRedraw(0);
 }  
 

Ich stütze mich auf den folgenden Artikel:

https://www.mql5.com/ru/articles/4149

und es gibt ein paar Dinge im Code, die ich nicht verstehe, bitte erklären Sie die Bedeutung

1. Warum wird der Operator ::(Bereichsauflösung) verwendet?

void OnStart()
  {
//---
   Test();
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Test                                                             |
//+------------------------------------------------------------------+
bool Test()
  {

   string pStream;
   string sources_filename="Websorce.txt";

   int hFile,iStringSize;

// read file contents 
   hFile=::FileOpen(sources_filename,FILE_TXT|FILE_READ|FILE_UNICODE);
   if(hFile==INVALID_HANDLE)
     {
      ::Print("error opening file "+sources_filename);
      return(false);
     }

   while(!::FileIsEnding(hFile))
     {


2. Was bewirkt diese Codezeile "_errCode |= code"? (Ich weiß, dass dieser Operator ein bitweises "oder" ist, genauso wie "_errCode =_errCode |code")


class JSONParser {
    private:
        int _pos;
        ushort _in[];
        int _len;
        string _instr;
        int _errCode;
        string _errMsg;
      

        void setError(int code=1,string msg="unknown error") {
          string _str = NULL;
            _errCode |= code;
Создание пользовательской новостной ленты в MetaTrader 5
Создание пользовательской новостной ленты в MetaTrader 5
  • www.mql5.com
В терминале MetaTrader 5 есть множество полезных функций, которые могут пригодиться пользователю, независимо от его стиля торговли, включая и возможность доступа к ленте оперативных новостей. Это дает трейдеру торговый контекст, значимость которого сложно переоценить, ведь он может оказать влияние на рынки. Единственное ограничение — объем...
 
Hallo, es gibt einen Advisor in der Basis für mt4, der als manueller Handelssimulator im Tester verwendet werden kann. Es ist kein schlechter Simulator. Ich möchte eine Frage stellen: Ist es möglich, einen solchen Trainer EA multitime zu machen? Kann ich es auf MT4 oder auf MT5 verwenden?
 
bahtiyar:
Hallo, es gibt einen Advisor in der Basis für mt4, der als manueller Handelssimulator im Tester verwendet werden kann. Es ist kein schlechter Simulator. Ich möchte eine Frage stellen: Ist es möglich, einen solchen Trainer EA multitime zu machen ? Auf MT4 oder auf MT5?

Sie dürfen. Für MT5 ist es auch mehrwährungsfähig, aber mit einigen Einschränkungen. Leider funktioniert das Testgerät nicht mit Grafiken. Genauer gesagt, ist es nicht möglich, grafische Objekte manuell zu bearbeiten.

 
Alexey Viktorov:

Sie können. Und für mt5 ist es auch multicurrency, aber mit einigen Einschränkungen. Leider funktioniert das Testgerät nicht mit Grafiken. Genauer gesagt, können Sie grafische Objekte nicht manuell bearbeiten.

Vielen Dank für Ihre Antwort, Alexey, Sie haben beantwortet, was Sie tun können. Ich möchte meine Frage präzisieren. Ist es möglich, die Visualisierung so zu gestalten, dass ich mehrere Zeitrahmen analysieren kann, da der Tester als manueller Handelssimulator verwendet wird? Wenn ja, wie kann ich dies im Allgemeinen tun7
 
bahtiyar:
Vielen Dank für Ihre Antwort, Alexey, Sie haben beantwortet, was getan werden kann. Ich möchte meine Frage präzisieren: Ist es möglich, die Visualisierung so zu gestalten, dass ich mehrere Zeitrahmen analysieren kann, da der Tester als manueller Handelssimulator verwendet werden soll, und wenn ja, wie lässt sich dies generell bewerkstelligen7

Auf keinen Fall

 
bahtiyar:
Vielen Dank für Ihre Antwort, Alexey, Sie haben beantwortet, was getan werden kann. Ich möchte meine Frage korrigieren: Kann ich mehrere Zeitrahmen in der Visualisierung analysieren, da der Tester als manueller Handelssimulator verwendet werden soll?
Vitaly Muzichenko:

Auf keinen Fall

Auf MT4 ist dies nicht möglich. Sie können Diagramme so einstellen, dass Sie die Historie bis zur erforderlichen Tiefe durchsehen können.

Auf MT5 lädt der Tester alle Symbole und alle TFs, auf die vom Programm aus zugegriffen wird, zusammen mit den Indikatoren, wenn sie im Code verwendet werden.

Aber auf jeden Fall brauchen Sie einen speziellen Indikator, um über Charts zu "springen", damit Sie nicht handeln wollen. Oder die Geschwindigkeit muss so gewählt werden, dass sie sich nicht wesentlich von der tatsächlichen Geschwindigkeit unterscheidet.

 

Inwieweit trägt das Optimize-Flag in der Meta-Editor-Konfiguration zur Beschleunigung der Programmausführung bei? Ich habe so etwas wie einen langsamen Test... Wie viel Wirkung hat diese Optimierung?

Leider kann ich es nicht verwenden, weil es beim Hinzufügen von Instanzen zum CDictionary-Objekt zum Absturz kommt.

Grund der Beschwerde: