Algorithmen, Lösungsmethoden, Vergleich ihrer Leistung - Seite 15

 
fxsaber:

Es gibt ein klares Muster der wiederholten Missachtung der Gemeinschaft und ein klares Muster der Provokation.

Es ist nicht immer möglich, sie (die Beiträge einer Person in verschiedenen konstruktiven Threads) nicht zu lesen, und sie danach zu entwickeln und zu vergessen, ist noch weniger möglich.

Schleppangeln und Spucken in den Händen der Hilfe, deren Anzahl diese Ressource stark von der positiven Seite unterscheidet.


Könnte falsch sein.

Kontrollieren Sie bitte Ihre Gefühle. Wenn Sie den Standpunkt eines anderen nicht akzeptieren, können Sie sich nicht an der Diskussion beteiligen. Keiner zwingt Sie dazu.

 
Vladimir Karputov:

Korrigieren Sie mich, aber ist die Länge einer Zeichenkette nicht endlich?

https://msdn.microsoft.com/ru-ru/library/sx08afx2.aspx

Ich kann diese Einschränkung für MQL5 nicht finden...

Eine Zeichenkette ist im Grunde ein uchar-Array mit eigenen Besonderheiten, wie z. B. der automatischen Neupartitionierung. Aus diesem Grund ist die Länge der Zeichenkette zumindest nicht explizit begrenzt, ebenso wenig wie die Größe des Arrays. Bei sehr langen Zeichenketten kann jedoch der Speicher knapp werden, was durch einen speziellen Fehlercode wie ERR_STRING_RESIZE_ERROR (Unzureichender Speicher für die Neuzuweisung von Zeichenketten) angezeigt wird.


 
Vasiliy Sokolov:

Ein String ist im Wesentlichen ein uchar-Array, mit seinen eigenen Vorteilen, wie z.B. der automatischen Neuaufteilung. Daher ist die Länge der Zeichenkette zumindest nicht explizit begrenzt, ebenso wenig wie die Größe des Arrays. Bei sehr langen Zeichenketten kann jedoch der Speicher knapp werden, was durch einen speziellen Fehlercode wie ERR_STRING_RESIZE_ERROR (Unzureichender Speicher für die Neuzuweisung von Zeichenketten) angezeigt wird.


Wertvolle Informationen auch für mich. Ich danke Ihnen.
 
fxsaber:

Nur Speicherbeschränkung

offensichtlich eine Längenbeschränkung, d. h. neben INT_MAX
 
Реter Konow:

1. Das heißt, die Geschwindigkeit des Algorithmus ist nicht wichtig. Die Lösung ist "konzeptionell leistungsfähig", und das reicht aus. Gut.

2) Sie schließen sich also einfach über das Plug-in an und das war's? Gut.

//--------------------------------------------------------------------

Wenn das Hauptkriterium für die Bewertung des Algorithmus"konzeptionell überzeugend" ist, dann habe ich verloren.

Wenn das Hauptkriterium für die Beurteilung des Algorithmus - Einfachheit, Schnelligkeit und Komfort - gewinne ich.

Wir können das Thema an dieser Stelle schließen.


Sie können "Ihren Algorithmus" immer noch beschleunigen und vereinfachen (und das wird Ihnen auch ständig gesagt), wenn Sie die Zeichenkette durch zwei int[] der gleichen Größe ersetzen und die Anzahl der Transaktionen in der einen und in der anderen Magierin speichern und den benötigten Index der Magierin bei der entsprechenden Suche im Array der Transaktionen suchen. Es wird schneller gehen. Dies ist natürlich ein Sonderfall, der sich aus Ihrem Beispiel ergibt.

Peter lernte Arrays und verstand, dass sie universelle und mächtige Werkzeuge sind, dann begann er, Strings zu lernen... Können Sie sich vorstellen, was passieren wird, wenn er etwas über Strukturen lernt?)

Piotr ersetzt diese Funktionen in seinem Beispiel:

struct SDealMagic {int deal,magic;} array[];
//
void Trading()
{
   Random_orders_of_strategy=MathRand();
   ArrayResize(array,Random_orders_of_strategy);
   for(int i=0; i<Random_orders_of_strategy; i++)
   {
      array[i].deal=i;
      array[i].magic=MathRand()
   }
}
//
int Get_magic(int deal_number)
{
   for(int i=0; i<Random_orders_of_strategy; i++)
      if(array[i].deal==deal_number) return(array[i].magic);
   return(-1);
}

Und Geschwindigkeit wird das Muster nehmen :)

 
Реter Konow:

1. Das heißt, die Geschwindigkeit des Algorithmus ist nicht wichtig. Die Lösung ist "konzeptionell leistungsfähig", und das reicht aus. Gut.

2) Sie schließen sich also einfach über das Plug-in an und das war's? Gut.

//--------------------------------------------------------------------

Wenn das Hauptkriterium für die Bewertung des Algorithmus"konzeptionell überzeugend" ist, dann habe ich verloren.

Wenn das Hauptkriterium für die Bewertung des Algorithmus - "Einfachheit, Schnelligkeit und Komfort " - Ich gewinne.

An diesem Punkt können wir das Thema abschließen.


Nur ein Beispiel zeigt die häufigste - das heißt, eine Menge zusätzlicher Informationen, zumindest die Debug-Handler und definieren auf dem Druck fehlt - oder sonst wäre es eine weitere 300 Zeilen hinzugefügt haben.

Zumindest der gesamte Code ist vollständig ....

der Teil des Codes, den Sie hinzufügen und über die Bibliothek aufrufen müssen, wird viel bequemer, weniger kodiert und besser lesbar sein

 
Alexandr Andreev:

Wenn ein Ticker mit einer Magie kommt - sollte er gespeichert werden und dann kann er in einer bequemen Form an den Ticker oder die Magie gesendet werden.

Die schnellste Lösung wäre, alle Informationen in der Struktur zu speichern. Die Zugriffe erfolgen jedoch über den geordneten Referenzindex sammiva.

Dies ist eine frontale Lösung und daher nicht die schnellste. Es wäre besser, dies über eine HashMap zu tun. In der aktuellen Implementierung bräuchten wir jedoch keine Struktur, sondern eine Klasse, die von einer bestimmten Schnittstelle geerbt wird, um die Felder ihrer Aufträge zu beschreiben.

 
Yury Kulikov:

Sie können "Ihren Algorithmus" beschleunigen und vereinfachen (und sie erzählen Ihnen immer wieder davon), wenn Sie string durch zwei int[] der gleichen Größe ersetzen und die Transaktionsnummer in einem und magik im anderen speichern und den erforderlichen Index von magik durch die entsprechende Aufzählung des Arrays der Transaktionen suchen. Es wird schneller gehen. Dies ist natürlich ein Sonderfall, der sich aus Ihrem Beispiel ergibt.


Dies ist ein interessanter und nützlicher Vorschlag. Führen von parallelen Aufzeichnungen. Ich habe es in meinen anderen Lösungen getan.

Das einzige Problem ist, dass wir die Anzahl der Aufträge, die der EA anfangs platzieren wird, nicht kennen. Welche Größe sollte für das int-Array festgelegt werden?

Deshalb habe ich mich für die Verwendung einer Schnur entschieden.

 
fxsaber:

Dies ist eine frontale Lösung und daher nicht die schnellste. Es ist besser, dies über eine HashMap zu tun. Die derzeitige Implementierung würde jedoch keine Struktur, sondern eine von einer bestimmten Schnittstelle geerbte Klasse erfordern, um die Felder ihrer Aufträge zu beschreiben.


Ich habe diegenerische Datei nicht gefunden, es scheint, dass dies ein altes Build ist. Wie wird also das Navigationsprinzip bereitgestellt - wie lautet der Quellcode?

 
Реter Konow:

Das ist ein interessanter und kluger Vorschlag. Führen von parallelen Aufzeichnungen. Ich habe es in meinen anderen Lösungen getan.

Das Einzige, was wir nicht wissen, ist die Anzahl der Aufträge, die vom Expert Advisor erteilt werden. Welche Größe sollte für das int-Array festgelegt werden?

Also beschloss ich, eine Schnur zu nehmen.

Peter, es gibt eine großartige Funktion namens ArrayResize(). Es ermöglicht Ihnen, die Größe eines Arrays im Moment der Programmausführung zu erhöhen.