Generische Klassenbibliothek - Bugs, Beschreibung, Fragen, Nutzungsmöglichkeiten und Vorschläge - Seite 17
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Ein großartiges theoretisches Beispiel! Hat jemand in der Praxis schon einmal Tausende von Transaktionen durchgeführt?
P.S. Ich versuche nicht zu beweisen, dass es Quatsch ist und niemand es braucht. Ich versuche, den Wert für den realen Handel zu verstehen. Ich bin im Allgemeinen kein Theoretiker, sondern ein reiner Praktiker.
Kurzer Überblick über die aktuelle Implementierung vonCHashMap:
Zunächst wollen wir herausfinden, wasEntry<TKey,TValue> ist.
Im Wesentlichen ist es ein Knoten wie in CLinkedList, der enthält:
m_entries[] - Array von "Zellen", in denen der hinzugefügte Schlüssel und Wert, Hash_code, next abgelegt werden. Die Größe des Arrays entspricht der Kapazität.
m_count - gibt den Index der ersten unbenutzten Zelle in m_entries an. Der Anfangswert ist 0, er wächst bis zur Kapazität, dann werden alle Felder mit zunehmender Kapazität und Größe aller Felder neu aufgebaut.
m_buckets[] - Index-Array auf m_entries[]. Der Standardwert ist -1. Die Größe des Arrays entspricht der Kapazität.
Keine Kollision, Hinzufügen eines eindeutigen Wertes zumCHashMap-Container:
Ohne Kollisionen, Wert nach Schlüssel imCHashMap-Container erhalten:
Kollisionsauflösung:
Kollision, Wert nach Schlüssel imCHashMap-Container erhalten:
Entfernen eines Wertes aus demCHashMap-Container:
Hash-Tabelle neu aufbauen (Verfahren zur Erhöhung der Kapazität) :
Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests
Generic Class Library - Bugs, Beschreibung, Fragen, Verwendung und Vorschläge
Sergey Dzyublik, 2017.12.09 01:12
Habe mich mit derCHashMap-Implementierung vertraut gemacht
Ehrlich gesagt, ich mochte sie.
Es gibt mehrere Vorschläge für mögliche Verbesserungen:
1) Meiner bescheidenen Meinung nach enthält die Implementierung eine nicht ganz korrekte Auswahl der Kapazität - sowohl der anfänglichen Größe 3 als auch der nachfolgenden beim Wiederaufbau der Hashtabelle.
Ja, es ist richtig, dass für eine gleichmäßige Verteilung eine Primzahl gewählt werden sollte.
Die Implementierung von CPrimeGenerator entspricht jedoch nicht den Erwartungen und enthält Auslassungen von Primzahlen.
Der Zweck eines solchen "Generators" ist klar: Er soll einen Steigerungsfaktor in der Größenordnung von 1,2 mit automatischer Generierung von Primzahlen liefern.
Aber ist dieser Koeffizient nicht zu klein? In C++ für Vektoren beträgt der Koeffizient normalerweise 1,5-2,0, je nach Bibliothek (da er die durchschnittliche Komplexität der Operation stark beeinflusst).
Der Ausweg könnte ein konstanter Koeffizient sein, gefolgt von einer Rundung der Zahl auf eine Primzahl über eine binäre Suche in einer Liste von Primzahlen.
Und eine Anfangsgröße von 3 ist zu klein, wir leben nicht im letzten Jahrhundert.
2) Derzeit wird die Hash-Tabelle nur dann neu aufgebaut (Resize), wenn die Kapazität zu 100% voll ist (alle m_entries[] sind gefüllt).
Aus diesem Grund kann es bei nicht sehr gleichmäßig verteilten Schlüsseln zu einer erheblichen Anzahl von Kollisionen kommen.
Als Option könnte man die Einführung eines Füllfaktors in Erwägung ziehen, der 100 % um den notwendigen Grenzwert für den Neuaufbau einer Hash-Tabelle reduziert.
Hat jemand in der Praxis schon einmal mit Tausenden von Transaktionen gearbeitet?
Ja, Millionen von Geschichtsaufrufen in einem Durchgang werden von vielen praktiziert.
Auf Forts jeden ersten.
Das ist klar.
DieÜbermittlung von Aufträgen durch den hft-Algorithmus und ihre Abholung zur Analyse sind zwei verschiedene Dinge. Diese Hashes werden für den Versand nicht benötigt und auch nicht für die Analyse, da sie auf andere Weise ausgewertet werden.
Also, nichts für ungut. Sie brauchen auch Theorie.
Das ist klar.
Die Übermittlung von Aufträgen durch den hft-Algorithmus und die spätere Abholung zur Analyse sind unterschiedliche Dinge. Sie brauchen diese Hashes nicht zum Senden und auch nicht zur Analyse, denn das ist nicht das, was analysiert wird.
Also, nichts für ungut. Wir brauchen auch Theorie.
Ich benutze keinen Geschirrspüler, sondern einen Schwamm.
Nichts für ungut. Geschirrspüler sind lahm, wozu sind sie da?
Das ist klar.
Die Übermittlung von Aufträgen durch den hft-Algorithmus und die spätere Erhebung zur Analyse sind zwei verschiedene Dinge. Sie brauchen diese Hashes nicht, um sie einzureichen, und Sie brauchen sie auch nicht für die Analyse, da wir anschließend etwas anderes analysieren.
Also, nichts für ungut. Wir brauchen auch Theorie.
Welcher Groll? Schreiben Sie weiter an Ihren Krücken.
Kurz über die aktuelle Implementierung vonCHashMap
Danke, ich werde es beim Parsen von Quellcode verwenden.
Welcher Groll? Schreiben Sie weiter an Ihren Krücken.
Danke, ich werde sie beim Parsen der Quellen verwenden.
Beim Hinzufügen eines neuen Schlüssel-Wert-Paares wurde nicht geprüft, ob der Schlüssel im Container vorhanden ist, sondern zuerst ausgeführt.
Aber das ist nicht wichtig.
Bitte bringen Sie so etwas in Generic unter.