Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 147

 

EA soll aus einer Datei ein Array von Daten in der Form: Datum integer1 integer2 integer3 integer4, kann von jedem Dateityp sein, außer bin.

файл скопировал в папку C:\Users\Михаил\AppData\Roaming\MetaQuotes\Tester\1B9501BF48F2354A4685940A72752910\Agent-127.0.0.1-3000\MQL5\Files\qqq.scv

wird es aus diesem Ordner gelöscht.

Hier ist der Code.


int File()
{
int P=0;

int filehandle=FileOpen("qqq.csv",FILE_READ|FILE_CSV,","); 
if(filehandle!=INVALID_HANDLE) 
     { 
     datetime d = FileReadDatetime(filehandle);
   int I=FileReadNumber(filehandle);
     FileClose(filehandle);
     Comment(d+" "+I);
     }
     else {Comment("qqq.csv");}
return P;

}

Können Sie den Pfad zu dem Ordner angeben, aus dem die Datei vom Prüfer nicht gelöscht werden soll? Ich habe verstanden, dass alle Dateien während des Tests aus diesem Ordner gelöscht werden, aber wenn die Datei programmatisch erstellt wird, wird sie in diesem Ordner abgelegt

 
Mikhail Simakov:

EA soll aus einer Datei ein Array von Daten in der Form: Datum integer1 integer2 integer3 integer4, kann von jedem Dateityp sein, außer bin.

файл скопировал в папку C:\Users\Михаил\AppData\Roaming\MetaQuotes\Tester\1B9501BF48F2354A4685940A72752910\Agent-127.0.0.1-3000\MQL5\Files\qqq.scv

wird es aus diesem Ordner gelöscht.

Hier ist der Code.

Vielleicht sollten Sie den Pfad zu dem Ordner angeben, aus dem die Datei nicht vom Prüfer gelöscht werden soll? Ich habe verstanden, dass alle Dateien beim Testen aus diesem Ordner gelöscht werden, aber wenn ich eine Datei programmatisch erstelle, wird sie in diesem Ordner abgelegt

Vielleicht sollten wir FileCopy mit dem Flag FILE_COMMON verwenden. Der neue Test funktioniert von Anfang an, es könnte sich um einen Fehler handeln.

 
Konstantin Nikitin:

Vielleicht sollten Sie FileCopy mit dem Flag FILE_COMMON verwenden. Der neue Test funktioniert von Anfang an, es könnte sich um eine Störung handeln.

es funktioniert, wenn Sie die Datei in einen Ordner kopieren, während Sie testen )) jetzt, um herauszufinden, das Trennzeichen

 

Ich habe angefangen, ein Handels-Panel in MQL4 zu schreiben und hier ist das Paradoxon. Alles sieht gut aus, aber jedes Mal, wenn ich TF ändere, werden Linien und Text von anderen Indikatoren oben auf meinem Panel gezeichnet.

Ich habe Folgendes überprüft: Beim Ändern der TF ist der Parameter OBJPROP_BACK = false. Das bedeutet, dass auf dieser Seite alles in Ordnung ist.

Haben Sie eine Idee zu diesem Thema?

P.S. Tatsächlich habe ich es jetzt überprüft und der Quellcode (den ich als Prototyp genommen habe) verhält sich genauso. Nachdem ich TF geändert habe, zeichnet es normale Linien über dem Panel und die Linien, die von Indikatoren erzeugt werden, die kein OOP verwenden.
https://www.mql5.com/ru/code/19220
Infopanel
Infopanel
  • www.mql5.com
Пример создания простого и быстрого меню с поддержкой нескольких языков. В примере выводится информация о цене, времени до следующего бара, балансе счета, количестве ордеров. Данный пример можно использовать в качестве шаблона для создания своих разработок. Минус данного метода при добавлении, удалении или редактировании объектов необходимо...
 
Goya7:

Ich habe angefangen, ein Handels-Panel in MQL4 zu schreiben und hier ist das Paradoxon. Alles sieht gut aus, aber jedes Mal, wenn ich die TF ändere, werden die Linien und der Text anderer Indikatoren oben auf meinem Panel gezeichnet.

Ich habe Folgendes überprüft: Beim Ändern der TF ist der Parameter OBJPROP_BACK = false. Auf dieser Seite ist also alles in Ordnung.

Haben Sie eine Idee zu diesem Thema?

P.S. In der Tat habe ich es jetzt überprüft, der Quellcode (den ich als Prototyp genommen habe) verhält sich genau so. Nachdem ich TF geändert habe, zeichnet es normale Linien über dem Panel und die Linien, die von Indikatoren erzeugt werden, die kein OOP verwenden.
https://www.mql5.com/ru/code/19220

Beim Wechsel des Zeitrahmens werden die von anderen Programmen erstellten Objekte gelöscht und neue sofort erstellt. Im Panel werden die Objekte nicht gelöscht, sie sind also "alt". In der Tabelle gilt der Grundsatz "Wer zuletzt kommt, mahlt zuerst".

Sie müssen die Objekte im Panel mit DeInit() löschen und wieder neue erstellen

 
Goya7:

Ich habe angefangen, ein Handels-Panel in MQL4 zu schreiben und hier ist das Paradoxon. Alles sieht gut aus, aber jedes Mal, wenn ich die TF ändere, werden die Linien und der Text anderer Indikatoren oben auf meinem Panel gezeichnet.

Ich habe Folgendes überprüft: Wenn die TF geändert wird, ist der Parameter OBJPROP_BACK = false. Auf dieser Seite ist also alles in Ordnung.

Haben Sie eine Idee zu diesem Thema?

P.S. In der Tat habe ich es jetzt überprüft, der Quellcode (den ich als Prototyp genommen habe) verhält sich genau so. Nachdem ich TF geändert habe, zeichnet es normale Linien über dem Panel und die Linien, die von Indikatoren erzeugt werden, die kein OOP verwenden.
https://www.mql5.com/ru/code/19220
Vitaly Muzichenko:

Beim Wechsel des Zeitrahmens werden die von anderen Programmen erstellten Objekte gelöscht und neue sofort erstellt. Im Panel werden die Objekte nicht gelöscht, sie sind also "alt". In der Tabelle gilt der Grundsatz "Wer zuletzt kommt, mahlt zuerst".

Sie müssen die Objekte im Panel mit DeInit() löschen und wieder neue erstellen

es ist besser, die Erstellung eines neuen Objekts in Events abzufangen und das Panel neu zu zeichnen

 
Vitaly Muzichenko:

Bei der Zeitumstellung werden die von anderen Programmen erstellten Objekte gelöscht und neue sofort erstellt. Im Panel werden die Objekte nicht gelöscht, sie sind also "alt". In der Grafik gilt der Grundsatz "Wer zuletzt kommt, mahlt zuerst".

Sie müssen die Objekte im Panel mit DeInit() löschen und wieder neue erstellen

Vielen Dank für diese Gedanken. In DeInit() werden sie natürlich gelöscht. Beim Wechsel von TF wird die Init()-Prozedur ausgeführt, aber irgendetwas sagt mir, dass das Panel nicht neu gezeichnet wird. Ich habe nämlich experimentiert und ein anderes Panel installiert, das territorial an meiner Stelle liegt, und es dann gelöscht. Meiner ist auch weg (vor der TF-Änderung) - also wird er nicht neu gezeichnet. ((
Können Sie mir etwas mehr darüber sagen, wie ich es neu zeichnen kann?


Taras Slobodyanik:

es ist besser, die Erstellung eines neuen Objekts in Events abzufangen und das Panel neu zu zeichnen

Sagen Sie mir, wie man es macht, ich bin nur eine halbe Stunde Programmierer. :)
 
int OnInit()
{
ChartSetInteger(0,CHART_EVENT_OBJECT_CREATE,true);
}


void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
//событие создания нового объекта на чарте
if(id==CHARTEVENT_OBJECT_CREATE && StringFind(sparam, prefix, 0)<0)
   {
   //удаляем панель и рисуем заново

   ChartRedraw();
   }
}

P.S.: Das erinnert mich daran, dass Sie auch den Namen des erstellten Objekts überprüfen müssen, um sicherzustellen, dass es nicht "Ihr" Objekt ist (den Namen Ihrer Objekte vorangestellt).
oder anstelle des Namens den Typ des Objekts vergleichen.

 
Bürger, sagt mir, ob ich es richtig mache!!! Ich brauche den Expert Advisor, um zu handeln, wenn er nicht in die 30- oder 70-Zone eingetreten ist, und wenn er es getan hat, wird er nicht handeln!!! Ist das der richtige Weg?

RSI3 = iRSI(_Symbol, _Periode, RSIPeriode, PRICE_CLOSE, 1);
RSI4 = iRSI(_Symbol, _Periode, RSIPeriode, PRICE_CLOSE, 2);

bool RSItf = RSI3 > 30 && 30 > RSI4;
if(RSItf == true)
{
}
else
{
ordersend(_Symbol, OP_SELL, lot, Bid, Slippage, 0, 0, NULL, Magic, 0, clrRed);
}
bool RSItf = RSI3 > 70 && 70> RSI4;
if(RSItf == true)
{
}
else
{
ordersend(_Symbol, OP_BUY, lot, Ask, Slippage, 0, 0, NULL, Magic, 0, clrBlue);
}
 
ponochka:
Bürger, sagt mir, ob ich es richtig mache!!! Ich brauche den Expert Advisor, um zu handeln, wenn er nicht in die 30- oder 70-Zone eingetreten ist, und wenn er es getan hat, wird er nicht handeln!!! Ist das der richtige Weg?

Soweit ich das verstanden habe, müssen Sie Folgendes tun

int RSIPeriod = 0, Slippage = 5, Magic = 1234;
double lot = 0.1;

void OnStart()
{
     double RSI3 = iRSI(_Symbol, _Period, RSIPeriod, PRICE_CLOSE, 1),
            RSI4 = iRSI(_Symbol, _Period, RSIPeriod, PRICE_CLOSE, 2);
     int ticket = 0;
     
     if(RSI3 <= 30 && RSI4 <= 30)
          ticket = OrderSend(_Symbol, OP_SELL, lot, Bid, Slippage, 0, 0, NULL, Magic, 0, clrRed);
     
     if(RSI3 >= 70 && RSI4 >= 70)
          ticket = OrderSend(_Symbol, OP_BUY, lot, Ask, Slippage, 0, 0, NULL, Magic, 0, clrBlue);
}
Grund der Beschwerde: