Nicht für MT-Entwickler! Wodurch soll INIT_PARAMETERS_INCORRECT ersetzt werden? - Seite 5

 
Сергей Таболин:

Nun zum Inhalt. Ich habe eine Datei mit legitimen Ketten erstellt. Wie verwende ich es jetzt? Ich vermute, es sollte durch onTester, Frames... Ich habe mir die Dokumentation angeschaut, aber irgendetwas passt nicht zusammen. Ich weiß nicht, wie ich damit umgehen soll.

Ich denke daran, es in ein Array zu lesen und Daten daraus zu entnehmen...

Ich denke, dieses Problem lässt sich besser analytisch lösen. Sie müssen eine Kette im Handumdrehen erzeugen und ihren Index kennen. Googeln Sie "Combinatorics". Zumindest habe ich dieses Problem für die Suche nach Kombinationen gelöst, ich denke, dass es etwas Ähnliches für die Platzierung geben wird.

Im Allgemeinen ist mir der Zweck Ihres Problems nicht ganz klar. Warum können die Funktionen nicht in der Kette wiederholt werden?

 
Alexey Navoykov:

Im Allgemeinen ist mir der Zweck Ihrer Aufgabe nicht ganz klar. Warum können die Funktionen nicht in einer Kette wiederholt werden?

Nun, wenn das so ist:

  • 11
  • 22

warum dann?

Und wenn es so ist:

  • 121
dann wäre die Gesamtzahl etwa 21. Und eine Kette von 21 würde dieses Ergebnis wiederholen. Doppelarbeit, zusätzliche Zeit für im Prinzip nutzlose Läufe...

 
Сергей Таболин:

Wenn das der Fall ist:

  • 11
  • 22

was ist dann der Sinn?

Und wenn es so ist:

  • 121
dann wäre die Gesamtzahl etwa 21. Und eine Kette von 21 würde dieses Ergebnis wiederholen. Doppelarbeit, zusätzliche Zeit für im Prinzip nutzlose Läufe...

Ich dachte, die Verarbeitung von Funktionen erfolgt sequentiell, d.h. das Ergebnis der Berechnung der ersten Funktion wird an den Eingang der zweiten Funktion weitergegeben usw. Und es stellt sich heraus, dass alles unabhängig voneinander funktioniert? Dann ist es noch unklarer, was Sie da optimieren wollen.

 
Сергей Таболин:

Es wurde eine Datei mit den rechtmäßigen Ketten erstellt. Wie verwende ich es jetzt? Ich vermute, Sie müssen onTester, Frames verwenden...

Die Rahmen haben damit nichts zu tun. Verwenden Sie entweder tester_file oder COMMON. Hier ein praktisches Beispiel.

 
Сергей Таболин:

Es geht nicht um Architektur. Es geht um die Gesamtheit der Funktionen und ihre Anwendung.

Geben Sie mehr Informationen über die Rolle dieser Funktionen in Ihrem Programm (dies ist die fragliche Architektur).

 

Funktionen zur Festlegung von Markteintrittsbedingungen.

Erstellt Leseketten aus einer Datei nach Eintragsnummer. Begonnene Genetik. Es scheint zu funktionieren und flucht nicht.

Die einzige Frage ist: Ketten sind in keiner Weise systematisiert und wird die Genetik die beste Variante finden? Es werden nicht alle von ihnen berücksichtigt. Sollten wir nicht damit beginnen, die resultierende Datei zu sortieren? Wie kann man das tun?

 

Ich habe eine Textdatei sortiert. Jetzt muss ich die Zeichenkette mit chain lesen, sie in Komponenten zerlegen und das Array füllen.

Aber beim Kompilieren wird sofort eine Warnung ausgegeben, und ich verstehe nicht, warum...

//+------------------------------------------------------------------+
void OnTick()
{
//---
//--- считать цепочки из файла
   int chain[6];
   string   filenameF   = "KR\\func_KrL_sort.txt";
   string   filename    = "KR\\func_KrL_sort.bin";
   string   str, str_chain[];
   if(FileIsExist(filenameF,FILE_COMMON))
   {
      int filehandleF = FileOpen(filenameF,FILE_READ|FILE_TXT|FILE_COMMON);
      if(filehandleF != INVALID_HANDLE)
      {
         for(int f = 0; f <= 1953; f++)
         {
            ArrayInitialize(chain,0);
            FileReadString(filehandleF,str); // implicit conversion from 'string' to 'number'
            Print(str);
            StringSplit(str,",",str_chain);  // implicit conversion from 'string' to 'number'
            for(int i = 0; i <= 5; i++)
            {
               ArrayInitialize(chain,0);
               chain[i] = (int)StringToInteger(str_chain[i]); // array out of range
               Print(string(chain[0])+","+string(chain[1])+","+string(chain[2])+","+string(chain[3])+","+string(chain[4])+","+string(chain[5]));
            }
         }
         
         FileClose(filehandleF);
         ExpertRemove();
      }
   }
}
//+------------------------------------------------------------------+

Beim Start wird der FehlerArray außerhalb des Bereichs angezeigt

Inhalt der Textdatei:

1,0,0,0,0,0
1,2,0,0,0,0
1,2,3,0,0,0
1,2,3,4,0,0
1,2,3,4,5,0
1,2,3,4,5,6
1,2,3,4,6,0
1,2,3,4,6,5
1,2,3,5,0,0
1,2,3,5,4,0
...........
 

Nachgearbeitet:

//+------------------------------------------------------------------+
void OnTick()
{
//---
//--- считать цепочки из файла
   int chain[6];
   string   filenameF   = "KR\\func_KrL_sort.txt";
   string   filename    = "KR\\func_KrL_sort.bin";
   string   str, str_chain;
   if(FileIsExist(filenameF,FILE_COMMON))
   {
      int filehandleF = FileOpen(filenameF,FILE_READ|FILE_TXT|FILE_COMMON);
      if(filehandleF != INVALID_HANDLE)
      {
         for(int f = 0; f < 1953; f++)
         {
            ArrayInitialize(chain,0);
            str = FileReadString(filehandleF);
            //Print(str); // этот рисует всё как надо
            for(int i = 0, p = 0; i <= 5; i++, p += 2)
            {
               str_chain   = StringSubstr(str,p,1);
               chain[i]    = (int)StringToInteger(str_chain);
            }
         }
         
         FileClose(filehandleF);
         ExpertRemove();
      }
   }
}
//+------------------------------------------------------------------+
 
Сергей Таболин:

Aber die Frage ist: Die Ketten sind in keiner Weise systematisiert, wird die Genetik die beste Option finden? Es wird nicht auf alle Varianten eingegangen. Sollten wir nicht damit beginnen, die Datei zu sortieren? Wie können wir das tun?

Natürlich nicht. Man muss zunächst den genetischen Algorithmus verstehen und wissen, was Gene sind.

Ihr im ersten Beitrag geäußerter Ansatz ("Ich, als Nutzer, möchte ein Ergebnis erhalten, und es ist mir egal, wie es funktioniert") ist in diesem Fall absolut falsch.

 
Alexey Navoykov:

Ihr Ansatz, wie er im ersten Beitrag dargelegt wurde ("Ich als Nutzer will Ergebnisse, und es ist mir völlig egal, wie es funktioniert"), ist in diesem Fall völlig falsch.

Das ist nicht der Fall. Solange es keine klare Dokumentation und Anleitung von MK über ihre Genetik gibt, ist es ein Hohn, von den Nutzern ein tiefes Wissen über Genetik zu verlangen.