Gemeinsam lernen und schreiben in MQL5 - Seite 14

 

Aus Neugierde habe ich nachgesehen. Das Ergebnis lautet wie folgt

2011.04.15 15:50:34     123 (EURUSD,D1) time for 'd = a + b + c' = 84453 milliseconds, i = 10000000
2011.04.15 15:51:54     123 (EURUSD,D1) time for 'StringAdd()' = 80906 milliseconds, i = 10000000
2011.04.15 15:53:22     123 (EURUSD,D1) time for 'StringConcatenate(d,a,b,c)' = 87359 milliseconds, i = 10000000
2011.04.15 15:55:11     123 (EURUSD,D1) time for 'd = a + b + c' = 83266 milliseconds, i = 10000000
2011.04.15 15:56:39     123 (EURUSD,D1) time for 'StringAdd()' = 88390 milliseconds, i = 10000000
2011.04.15 15:58:12     123 (EURUSD,D1) time for 'StringConcatenate(d,a,b,c)' = 93391 milliseconds, i = 10000000

Aber es scheint mir, dass hier etwas nicht stimmt (ich meine den Prüfalgorithmus)...

 

Yedelkin:

Es hat sich herausgestellt, dass StringConcatenate langsamer ist als String-Binding mit Additionsoperationen. Wo liegt der Haken?

Die Besonderheit von Saiten.
Im ersten Durchgang erhalten Sie die richtige Puffergröße, um das Ergebnis der String-Addition und -Transformation zu speichern, d. h. es gibt keine Pufferverlagerung für die Strings d,(string)b und(string)c.
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы ввода/вывода / Использование кодовой страницы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы ввода/вывода / Использование кодовой страницы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы ввода/вывода / Использование кодовой страницы - Документация по MQL5
 
mql5:
Feature Strings.
Im ersten Durchgang erhalten Sie die richtige Puffergröße, um das Ergebnis der Addition und Umwandlung von Zeichenketten zu speichern, d. h. eine Pufferverlagerung für die Zeichenketten d,(string)b und(string)c findet nicht statt.

Ich habe verschiedene Vergleichsmöglichkeiten ausprobiert, aber ich erhalte nicht das gewünschte Ergebnis. Am Ende habe ich einen Code wie diesen erhalten:

   uint   start,stop;
   long   i,length=1000000;
   string a1[1000000]; for(i=0;i<length;i++) a1[i]="Пример";
   string a2[1000000]; for(i=0;i<length;i++) a2[i]="Пример";
   string a3[1000000]; for(i=0;i<length;i++) a3[i]="Пример";

   double b1[1000000]; ArrayInitialize(b1,1.26);
   double b2[1000000]; ArrayInitialize(b2,1.26);
   double b3[1000000]; ArrayInitialize(b3,1.26);

   double c1[1000000]; ArrayInitialize(c1,1.27);
   double c2[1000000]; ArrayInitialize(c2,1.27);
   double c3[1000000]; ArrayInitialize(c3,1.27);

   string d1[1000000]; for(i=0;i<length;i++) d1[i]=NULL;
   string d2[1000000]; for(i=0;i<length;i++) d2[i]=NULL;
   string d3[1000000]; for(i=0;i<length;i++) d3[i]=NULL;


////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------//
//Work variables
//----------------------------------------------------------------------------//
   start=GetTickCount();
   for(i=0;i<length;i++)
     {
      d1[i]=a1[i]+(string)b1[i]+(string)c1[i];
     }
   stop=GetTickCount();
   Print("time for 'd = a + b + c' = ",(stop-start)," milliseconds, i = ",i);

//Второй способ
   start=GetTickCount();
   for(i=0;i<length;i++)
     {
      StringAdd(d2[i],a2[i]);
      StringAdd(d2[i],(string)b2[i]);
      StringAdd(d2[i],(string)c2[i]);
     }
   stop=GetTickCount();
   Print("time for 'StringAdd()' = ",(stop-start)," milliseconds, i = ",i);

//Третий способ
   start=GetTickCount();
   for(i=0;i<length;i++)
     {
      StringConcatenate(d3[i],a3[i],b3[i],c3[i]);
     }
   stop=GetTickCount();
   Print("time for 'StringConcatenate(d,a,b,c)' = ",(stop-start)," milliseconds, i = ",i);

Ergebnisse:

KL 0 DoubleToString (EURGBP,M1)      23:53:01        time for 'd = a + b + c' = 15766 milliseconds, i = 1000000
HD 0 DoubleToString (EURGBP,M1)      23:53:26        time for 'StringAdd()' = 25390 milliseconds, i = 1000000
FK 0 DoubleToString (EURGBP,M1)      23:54:03        time for 'StringConcatenate(d,a,b,c)' = 36516 milliseconds, i = 1000000
KS 0 DoubleToString (EURGBP,M1)      23:54:56        time for 'd = a + b + c' = 15781 milliseconds, i = 1000000
FL 0 DoubleToString (EURGBP,M1)      23:55:21        time for 'StringAdd()' = 25375 milliseconds, i = 1000000
OR 0 DoubleToString (EURGBP,M1)      23:55:57        time for 'StringConcatenate(d,a,b,c)' = 35828 milliseconds, i = 1000000
 
Frage. Die Funktion OrdersTotal() gibt die Gesamtzahl der aktiven Aufträge für ein Handelskonto zurück. Gibt es eine einfache Möglichkeit, die Anzahl der aktiven Aufträge für ein bestimmtes Symbol zu ermitteln?
 
Yedelkin:
Frage. Die Funktion OrdersTotal() gibt die Gesamtzahl der aktiven Aufträge für ein Handelskonto zurück. Gibt es eine einfache Möglichkeit, die Anzahl der aktiven Aufträge für ein bestimmtes Symbol zu ermitteln?
Informieren Sie sich über den gesamten Verlauf und treffen Sie eine Auswahl.
 
Urain:
Informieren Sie sich über die ganze Geschichte und machen Sie eine Stichprobe.
GUT. Es gibt also keinen einfachen Weg.
 

Frage. Die Funktionen HistorySelect() und HistorySelectByPosition() fragen die Historie der Aufträge und die Historie der Geschäfte ab. Ich habe das erläuternde Skript aus dem Leitfaden ausgeführt, und die Liste der Angebote ist in aufsteigender Reihenfolge angeordnet. Ist das zufällig so, oder sind die Funktionen HistorySelect() und HistorySelectByPosition() so programmiert, dass sie Listen in aufsteigender Reihenfolge zurückgeben?

 
Yedelkin:

Frage. Die Funktionen HistorySelect() und HistorySelectByPosition() fragen die Historie der Aufträge und die Historie der Geschäfte ab. Ich habe das erläuternde Skript aus dem Leitfaden ausgeführt, und die Liste der Angebote ist in aufsteigender Reihenfolge angeordnet. Ist das zufällig so, oder wurden die Funktionen HistorySelect() und HistorySelectByPosition() so programmiert, dass sie die Listen in aufsteigender Reihenfolge zurückgeben?

Wie oft ich auch experimentiert habe, das Ergebnis ist immer dasselbe: Es wird eine Liste zurückgegeben, die auf eine bestimmte Weise geordnet ist.

Einmal wollte ich sogar eine Anfrage für einen zusätzlichen Parameter schreiben, der genau angibt, wie die Einträge sortiert werden sollen.

Aber dann habe ich sorgfältig nachgedacht und beschlossen, dass es sich nicht lohnt (sie mögen diese Art von Antworten selbst geben und all das), obwohl es vielleicht einen guten Grund gibt, warum ich nicht geschrieben habe...

 
Interesting:

... sich sortieren und so weiter

Wenn es eine voreingestellte Zwangssortierung gibt, ist das eine Sache, aber eine zusätzliche Sortierung manuell zu erstellen, ist eine andere.
 
Yedelkin:
Wenn es eine voreingestellte Zwangssortierung gibt, ist das eine Sache, aber eine zusätzliche Sortierung manuell zu erstellen, ist eine andere.

Ich habe gerade manuell in MT4 sortiert (und auch gefiltert), wenn ich mich nicht irre, habe ich nach "Blasen" sortiert.

Ich habe dort den Sortiercode aus der Datenbank, damit das geklärt werden kann.

Und ich habe nicht auf den besten Weg, um in MQL5 sortieren entschieden, da ich verstanden habe, dass Geschichte Abfragen jetzt nicht auf Geschichte Registerkarte gebunden sind (Sortierung und Inhalt hängen nicht davon ab, was der Benutzer auf der Registerkarte getan hat).