Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1145

 
Artyom Trishkin:

Ich habe Ihnen bereits geantwortet:

Sie nehmen den letzten Auftrag auf der Liste:

Und Sie müssen zunächst herausfinden, wie sehr sich der Status der Auftragsliste geändert hat. Es war 12, wurde 8 - es hat sich um 4 Aufträge verändert. Dementsprechend müssen Sie alle vier Aufträge ausdrucken. Und Sie drucken immer nur den letzten Eintrag in der Liste.

Woher wissen Sie, wie sehr sie sich verändert hat? Wenn Sie den EA starten, sollten Sie die Anzahl der Aufträge in eine Variable schreiben, zum Beispiel int last_total. Vergleichen Sie dann bei jedem Tick die OrdersTotal() mit last_total. Wenn sie NICHT gleich sind, ist das eine Veränderung. Schreiben Sie die Differenz zwischen OrdersTotal() und last_total in eine Variable, z. B. num_changes, und speichern Sie den neuen Stand von OrdersTotal() in last_total.
Hier kann es einige Feinheiten geben, zum Beispiel, wenn ein schwebender Auftrag ausgelöst wird. Aber im Moment sollten Sie erst einmal das tun, was Sie tun müssen.
Wenn Sie die Anzahl der ausstehenden Aufträge kennen, können Sie diese in der Historie nachsehen. Sie können jedoch auch die Überwachung von Aufträgen in der Liste der historischen Aufträge einschränken - führen Sie alle oben genannten Schritte für die Liste der historischen Aufträge und nicht für die Liste der Marktaufträge durch. Der Unterschied zwischen dem, was war, und dem, was geworden ist - das ist die Menge der Aufträge, die Sie analysieren müssen. Sie analysieren immer nur den letzten Auftrag in der Liste.

Dies kann jedoch nicht garantieren, dass der letzte Auftrag in der Historienliste auch der letzte abgeschlossene Auftrag ist. Auch dies ist eine Nuance, die berücksichtigt werden muss. Aber dann.

Ich danke Ihnen vielmals. Das macht es viel klarer. Schlüsselwörter - Sie sollten nicht nur einen, sondern 4 Aufträge auf einmal drucken. Hättest du mir das im ersten Beitrag gesagt, hätte ich dich nicht gequält.

 
ANDREY:

Ich danke Ihnen vielmals. Das macht viel mehr Sinn. Das Schlüsselwort ist, nicht nur einen, sondern 4 Aufträge gleichzeitig zu drucken. Hättest du mir das im ersten Beitrag gesagt, hätte ich dich nicht gequält.

Bitte sehr. Solange Sie nicht selbst lernen, diese oder jene Handlung logisch zu begründen, werden Sie sich nicht vom toten Punkt bewegen - Sie werden im Forum fragen. Sie werden im Forum Fragen stellen. Sie muss nicht mit Bestellungen/Listen/Tickets usw. verknüpft sein.

Ich denke, wenn man Äpfel verwenden würde, könnte man leicht einen Algorithmus entwickeln, der festhält, wie viele Äpfel auf dem Tisch liegen, dann geht man eine Zigarette rauchen und kommt zurück - es sind weniger Äpfel...
Woher wissen Sie das? Einfach - 5 Äpfel, 3 Äpfel. Es fehlen zwei. Die Katze muss... Oder es waren fünf und jetzt sind es sechs. Einer erschien. Vielleicht wegen der Feuchtigkeit... In jedem Fall haben Sie die Differenz im Kopf gezählt.

Was ist der Unterschied zwischen dieser Aktion und dem Zählen von Aufträgen? Dieselben Äpfel... Anstelle von "im Kopf" schreiben Sie "in Funktion".

 

Wie kann man die Funktion aus dem Code entfernen(Dekomposition), wenn es bereits mehr als 200 Codezeilen gibt und es unbequem ist, sie alle zu durchsuchen? Ich interessiere mich für die "Mechanik": wie die Funktion "zerlegt" wird, wo sie geschrieben wird, um sie später im Hauptcode aufrufen zu können.

Wenn Sie ein Beispiel mit einer Beschreibung haben, wäre ich für einen Link dankbar
 
Alexey Kolybelnikov:

Wie kann man die Funktion aus dem Code entfernen(Dekomposition), wenn es bereits mehr als 200 Codezeilen gibt und es unbequem ist, sie alle zu durchsuchen? Ich interessiere mich für die "Mechanik": wie die Funktion "zerlegt" wird, wo sie geschrieben wird, um sie später im Hauptcode aufrufen zu können.

Wenn es ein Beispiel mit einer Beschreibung gibt, wäre ich für einen Link dankbar

Das war einmal:

double a = (b + c) / (d - e);


Wurde:

double a = Add(b,c) / Sub(d,e);

//---------

Add(const double v1,const double v2) { return v1 + v2; }

Sub(const double v1,const double v2) { return v1 - v2; }
 
Artyom Trishkin:

Bitte sehr. Solange Sie nicht lernen, die Logik einer Handlung zu formulieren, werden Sie sich nicht vom toten Punkt bewegen - Sie werden im Forum Fragen stellen. Und die Logik kann gar nicht einfacher werden - sie lässt sich in einfachen Worten zusammenfassen. Sie muss nicht an Optionsscheine/Listen/Fahrkarten usw. gebunden sein.

Ich denke, dass man bei Äpfeln leicht einen Algorithmus erstellen kann, um ihre Menge zu verfolgen - alles ist wie im wirklichen Leben: man erinnert sich, wie viele Äpfel auf dem Tisch liegen, man geht eine rauchen, und wenn man zurückkommt, sind weniger Äpfel da...
Woher wissen Sie das? Einfach - 5 Äpfel, 3 Äpfel. Es fehlen zwei. Die Katze muss... Oder es waren fünf und jetzt sind es sechs. Einer kam heraus. Vielleicht wegen der Feuchtigkeit... In jedem Fall haben Sie den Unterschied in Ihrem Kopf gezählt.

Was ist der Unterschied zwischen dieser Aktion und dem Zählen von Aufträgen? Dieselben Äpfel... Anstelle von "im Kopf" schreiben Sie "in der Funktion".

Verstanden. Danke für die Klarstellung. Diese Frage beschäftigt mich schon seit langem.... Mein Code geht davon aus, dassdie Funktion Print() häufig im Journal gedruckt wird. Automatisch im Journal wird jedes Mal gedruckt, wenn ein Auftrag eröffnet und jedes Mal, wenn ein Auftrag geschlossen wird. Ich habe eine Menge Aufträge. Dementsprechend gäbe es eine Vielzahl von Aufzeichnungen über die Aufträge. Diese Datensätze stören mich oft beim Betrachten der Daten in der Print()-Funktion, die ebenfalls zahlreich sein können.

Q: .

Wie kann ich es so einrichten, dass bei Bedarf die Informationen über offene und geschlossene Aufträge nicht im Journal, sondern nur in der Funktion Print() angezeigt werden.

Kann dies mit Hilfe einer MQL4-Funktion geschehen oder muss ich den Code des MT4-Terminals ändern?

Ich danke Ihnen.
 
ANDREY:

Verstanden. Danke für die Klarstellung. Diese Frage beschäftigt mich schon seit langem.... Mein Code geht davon aus, dass die Funktion Print() häufig im Journal gedruckt wird. Im Protokoll wird automatisch jeder offene Auftrag und jeder Abschluss eines jeden Auftrags ausgedruckt. Ich habe eine Menge Aufträge. Dementsprechend gäbe es eine Vielzahl von Aufzeichnungen über die Aufträge. Diese Einträge stören mich oft beim Betrachten der Daten in der Print()-Funktion, die ebenfalls zahlreich sein können.

Q: .

Wie kann ich es so einrichten, dass die Informationen über offene und geschlossene Aufträge nicht im Journal, sondern nur in der Funktion Print() angezeigt werden, wenn ich sie brauche?

Kann es mit einigen MQL4-Funktion getan werden, oder es erfordert Änderungen in der MT4-Terminal-Code?

Ich danke Ihnen.

Wenn Sie recherchieren, schreiben Sie das besser in eine Datei. Ich weiß nicht, wie man Aktionen mit Aufträgen in der Logdatei anzeigen kann und ich denke, dass es so etwas nicht gibt. Dies ist die Ebene der Einträge des Beginns und des Endes der EA-Operation. Dies sind Einträge in der Protokolldatei. Die Datei wird nur das enthalten, was Sie wollen, das Protokoll wird zusätzlich zu den von Ihnen eingegebenen Datensätzen auch Terminalsätze enthalten. Sie können Änderungen im Terminal vornehmen, Sie können sogar Ihre eigenen schreiben))), aber wie viel wird das kosten?

 
Alexey Kolybelnikov:

Wie kann man die Funktion aus dem Code entfernen(Dekomposition), wenn es bereits mehr als 200 Codezeilen gibt und es unbequem ist, sie alle zu durchsuchen? Ich interessiere mich für die "Mechanik": wie die Funktion "zerlegt" wird, wo sie geschrieben wird, um sie später im Hauptcode aufrufen zu können.

Wenn es ein Beispiel mit einer Beschreibung gibt, wäre ich für einen Link dankbar

https://www.mql5.com/ru/docs/runtime/imports

https://www.mql5.com/ru/docs/basis/preprosessor/include

und weiter zu den Links... Generell gilt: Legen Sie alles, was "extra" ist, in die *.mqh-Bibliothek am Anfang des Hauptcodes, damit der Compiler es "zusammenkleben" kann.

Aber im Allgemeinen sind 200 Zeilen nicht zu viel - mit den Schaltflächen von können Sie sich auch mit mehr als tausend Zeilen wohl fühlen.

 
Valeriy Yastremskiy:

Für Forschungszwecke ist es besser, in eine Datei zu schreiben. Ich weiß nicht, wie ich die Order-Aktionen in der Log-Datei anzeigen kann, und ich glaube auch nicht, dass es welche gibt; dies ist die Ebene der Start- und End-Datensätze des EA. Dies sind Einträge in der Protokolldatei. Die Datei wird nur das enthalten, was Sie wollen, das Protokoll wird zusätzlich zu den von Ihnen eingegebenen Datensätzen auch Terminalsätze enthalten. Sie können Änderungen im Terminal vornehmen, Sie können sogar Ihre eigenen schreiben))), aber wie viel wird das kosten?

Danke für den Hinweis. Aber ich glaube nicht, dass ich jemals einen EA in eine Datei geschrieben habe. Ich habe EAs immer in MetaEditor 4 geschrieben. Um zu sehen, was Pront() während des gesamten Testzeitraums getan hat, wähle ich Protokoll - Registerkarte öffnen. In Notepad wird eine Datei mit demselben Inhalt wie auf der Registerkarte Protokoll geöffnet. Für mich sieht es wie eine Protokolldatei aus.
Aber es scheint mir, dass ich nicht in der Lage bin, alle offenen und geschlossenen Aufträge aus dieser Notizblockdatei zu löschen. Um genau zu sein, Sie schon. Aber es ist eine sehr mühsame und zeitaufwändige Arbeit.
Ich wäre Ihnen sehr dankbar, wenn Sie mir sagen, das Geheimnis, wie mein Code geöffnet und geschlossen Aufträge zu machen, aber in der Datei, Informationen über das Öffnen und Schließen aller Aufträge waren nicht, und es gab nur Aufzeichnungen von pricip().
Vielen Dank für die Hilfe.

 
ANDREY:


Wissen Sie, wo ich mehr über die neuesten Updates von MQL4 lesen kann? Es gibt eine Menge Informationen, aber es ist schwer, das zu finden, was man braucht.

https://www.mql5.com/ru/forum/160683/page1109#comment_15711102

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2020.03.31
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
ANDREY:

Danke für den Hinweis. Aber ich glaube nicht, dass ich jemals EA in eine Datei geschrieben habe. Ich habe EA immer in MetaEditor 4 geschrieben. Um zu sehen, was die Funktion Pront() während des gesamten Testzeitraums ausgegeben hat, wähle ich die Registerkarte Protokoll - Öffnen. In Notepad wird eine Datei mit demselben Inhalt wie auf der Registerkarte Protokoll geöffnet. Für mich sieht es wie eine Protokolldatei aus.
Aber es scheint mir, dass ich nicht in der Lage bin, alle offenen und geschlossenen Aufträge aus dieser Datei in Notepad zu löschen. Um genau zu sein, Sie schon. Aber es ist eine sehr mühsame und zeitaufwändige Arbeit.
Ich wäre Ihnen sehr dankbar, wenn Sie mir das Geheimnis verraten, wie ich meinen Code geöffnet und geschlossen Aufträge, aber in der Datei, Informationen über das Öffnen und Schließen aller Aufträge waren nicht, und es gab nur Einträge der Pront() Funktion.
Vielen Dank für die Hilfe.

int OnInit()
  {   
//----------
   FileTest() // функция открытия файла записи данных
   point = 1/Point; // чтобы не делить на пойнт
   tx=TimeCurrent();// задание времени начала работы советника
//--- create timer
   EventSetTimer(60);

//---
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {

   FileClose( Handle );                // Закрываем файл
   Alert("Файл ",File_Name," закрыт.");// Сообщение
     
//--- destroy timer
   EventKillTimer();

  }

void OnTick()    // Функция start() раньше называлась
  {
.................
 Qnt_Symb=FileWrite(Handle,Symbol()," ТФ ",Period(),"Открыт ордер Buy по цене ",Ask,
            "Ticket = ",Ticket," ProfB=",ProfB," MxProfB=",MxProfB, " ProfS=",ProfS," MxProfS=",MxProfS);//Запись в файл
            if(Qnt_Symb<=0) // Если не получилось
              {
               Alert("Ошибка записи в файл ",GetLastError());// Сообщение
              };
.................
}
//-------------------------------------------------------------- 12 --

int FileTest()
  {
   Handle=FileOpen(File_Name,FILE_CSV|FILE_WRITE,";");//Открытие файла
   if(Handle==-1) // Неудача при открытии файла
     {
      Alert("Ошибка при открытии файла. ",// Сообщение об ошибке
            "Возможно, файл занят другим приложением");

     }

   return(Handle);
  }
//+------------------------------------------------------------------+

Im Testprogramm befindet sich die Datei im Ordner \tester\files, und wenn Sie sie im Fenster ablegen, befindet sie sich im Ordner \MQL4\Files. Und Kovalev hat es im Detail.

Grund der Beschwerde: