Projekt des Beraters

 
Hallo.
Wenn die Menge des Codes wächst, wird es manchmal schwierig und verwirrend.
Ich habe EA-Code mit einer riesigen Anzahl von Codezeilen gesehen, ich frage mich, wie komplexe EAs entworfen werden, vielleicht gibt es einige Tools oder Techniken für den Umgang mit solchen komplexen Algorithmen?
 
Gregory Kovalenko:
Hallo.
Wenn die Menge des Codes wächst, wird es manchmal schwierig und verwirrend.
Ich habe EA-Code mit einer riesigen Anzahl von Codezeilen gesehen, ich frage mich, wie komplexe EAs entworfen werden, vielleicht gibt es einige Tools oder Techniken für die Arbeit mit solch komplexen Algorithmen?

Wie viel ist zu viel? Ist es so viel, dass es nicht in Dateien aufgeteilt werden kann?

 
Gregory Kovalenko:
Hallo.
Wenn die Menge des Codes wächst, wird es manchmal schwierig und verwirrend.
Ich habe EA-Code mit einer riesigen Anzahl von Codezeilen gesehen, ich frage mich, wie komplexe EAs entworfen werden, vielleicht gibt es einige Tools oder Techniken für den Umgang mit solchen komplexen Algorithmen?
Ja, das ist ganz einfach: Sie müssen die einzelnen Funktionen genau dokumentieren und sie einer separaten Datei zuordnen. Die Hauptdatei wird sofort verkleinert und besser lesbar gemacht
 

Zwei Grundprinzipien:

1. Unterteilen Sie den Code in Funktionen. Eine Funktion sollte mehr oder weniger logisch abgeschlossen sein und nicht mehr als einen Bildschirm umfassen, den man auf einen Blick erfassen kann.

2. Reduzieren Sie die Anzahl der globalen Variablen. Von den globalen Variablen sollten nur Parameter verwendet werden, die sich während des Programmablaufs nicht ändern.

...und mehr:

3. objektorientierte Programmierung.

4. Aufteilung des Codes in mehrere Dateien (dies erschwert die Fehlersuche ein wenig, hat aber einen Sinn).

 
STARIJ:
Es ist ganz einfach: Wir müssen die einzelnen Funktionen genau dokumentieren und sie in einer separaten Datei zuordnen. Die Hauptdatei wird sofort kleiner und besser lesbar

Ich habe immer eine mq4/mq5-Datei und eine Reihe von mqh-Dateien mit Klassen, für jede Klasse eine eigene Datei. Im Allgemeinen wird dies in der industriellen Entwicklung so gehandhabt. Keine kilometerlangen Dateien, in denen alles durcheinander ist.

Manchmal kann man ein Meisterwerk sehen, bei dem der gesamte EA in OnTick verpackt ist, mit den gleichen Codestücken für das Öffnen von Aufträgen, die jeweils 20 Mal in diesem hässlichen Blatt enthalten sind. Ich möchte sofort den Kotzbeutel herausnehmen ))

 
Gregory Kovalenko:
Hallo.
Wenn die Menge des Codes wächst, wird es manchmal schwierig und verwirrend.
Ich habe EA-Code mit einer riesigen Anzahl von Codezeilen gesehen, ich frage mich, wie komplexe EAs entworfen werden, vielleicht gibt es einige Tools oder Tricks für die Arbeit mit solch komplexen Algorithmen?

Schreiben Sie keine Funktionen, die immer konstant sind und sich nie ändern, in diesem Stil

void CloseOrders(int cmd)
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY && cmd==OP_BUY)
              {
               if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Blue))
                 {
                  Print("Order BUY not close! Error = ",GetLastError());
                 }
              }
            if(OrderType()==OP_SELL && cmd==OP_SELL)
              {
               if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Red))
                 {
                  Print("Order SELL not close! Error = ",GetLastError());
                 }
              }
           }
        }
     }
  }

Schreiben Sie sie kurz und bündig, dann sieht sie sowieso niemand an, und sie nehmen nur halb so viel Platz ein.

void CloseOrders(int cmd) {
 for(int i=OrdersTotal()-1;i>=0;i--) {
  if(OrderSelect(i,SELECT_BY_POS)) {
   if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
    if(OrderType()==OP_BUY && cmd==OP_BUY) {
     if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Blue)) Print("Order BUY not close! Error = ",GetLastError());
    }
     if(OrderType()==OP_SELL && cmd==OP_SELL) {
      if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Red)) Print("Order SELL not close! Error = ",GetLastError());
    }
}}}}


Kommentieren Sie den Code immer, wofür dieser Teil des Codes verantwortlich ist, das ist nicht schwer, und jetzt werden Sie immer wissen, was der Code ist, und reduzieren Sie die Zeit, ihn zu studieren

 
Vitaly Muzichenko:

Schreiben Sie keine Funktionen, die immer konstant sind und sich nie ändern, in diesem Stil

Schreiben Sie sie kurz und bündig, dann sieht sie sowieso niemand an, und sie nehmen nur halb so viel Platz ein.

Kommentieren Sie die ganze Zeit den Code, wofür dieser Teil des Codes verantwortlich ist, das ist nicht schwer, und jetzt werden Sie immer wissen, was der Code ist, und reduzieren Sie die Zeit, ihn zu studieren

Der Kommentar muss die Hälfte des Textes des Programms einnehmen

 
Vitaly Muzichenko:

Schreiben Sie keine Funktionen, die immer konstant sind und sich nie ändern, in diesem Stil

Schreiben Sie sie kurz und bündig, dann sieht sie sowieso niemand an, und sie nehmen nur halb so viel Platz ein.

Kommentar auf den Code die ganze Zeit, was dieses Stück Code verantwortlich ist, ist es nicht schwer, und hier in der Revision wird immer wissen, was der Code, und reduzieren die Zeit, um es zu studieren

Durch das Umstellen von Klammern wird der Rückstand nicht geringer. Bevor Sie Ratschläge erteilen, sollten Sie Ihr Niveau zumindest auf ein durchschnittliches Niveau anheben.

 
STARIJ:

Der Kommentar sollte die Hälfte des Programmtextes einnehmen

Nun, in diesem Fall sollten 90 % des Codes Kommentare enthalten. Und Sie brauchen so viel sinnlosen und schlecht lesbaren Code wie möglich, damit Sie mehr Kommentare einfügen können!
 
Vasiliy Sokolov:
Nein, dann sind 90 % des Codes Kommentare. Und Sie brauchen so viel sinnlosen und schlecht lesbaren Code wie möglich, damit Sie mehr Kommentare einfügen können!

Auch Ihre Ideen sind bemerkenswert. Sie sollten öfter über sie sprechen

 

Das wollte ich schon lange mal fragen. Wenn Sie in mcl5 Indikatordaten aus Include-Dateien und Klassen erhalten, wird die Optimierung dann schneller sein?

Das heißt, im Code des Expert Advisors selbst werden keine Indikator-Handles aufgerufen.