Ich brauche Hilfe! Ich kann das Problem nicht lösen, ich stoße an die Grenzen der Hardware - Seite 16

 
komposter: Wie kann man das Kriterium für die letzten X Geschäfte der Sequenz berechnen, wenn man eine solche Datei hat?


Wir haben ein Fragment der Datei in unserem Speicher, gehen es durch und bilden eine Stichprobe der notwendigen Länge für die Berechnung des Kriteriums, indem wir nur Geschäfte auswählen, die zur gleichen Sequenz gehören. Dann berechnen wir das Kriterium für diese Stichprobe. Übrigens gibt es Möglichkeiten, bei der Auswahl eine Rekursion zu verwenden, die auf einer Idee beruht.

Oder habe ich die Frage nicht verstanden?

P.S. Natürlich müssen wir bei der Bildung des Musters in der Datei rückwärts gehen.

 
Candid:

Wir haben ein Fragment der Datei in unserem Speicher, gehen es durch und bilden eine Stichprobe der notwendigen Länge für die Berechnung des Kriteriums, wobei wir nur Angebote auswählen, die zur gleichen Sequenz gehören. Dann berechnen wir das Kriterium für diese Stichprobe. Übrigens gibt es theoretisch die Möglichkeit, bei der Auswahl eine Rekursion durchzuführen.

Oder habe ich die Frage falsch verstanden?

P.S. Natürlich müssen wir bei der Bildung des Musters in der Datei rückwärts gehen.

das Problem des Einfügens neuer Daten - lösen Sie es irgendwie.

Warum sollte man die weißen Socken mehrmals durchgehen und auswählen, wenn es einfacher ist, die weißen in einen Korb und die schwarzen in einen anderen zu werfen und dann zu fragen, wer da ist und in welcher Menge.

 
komposter:

Ein Chunk wird gelesen. Die Größe des Chunks wird durch die Anzahl der Transaktionen bis zum Suchdatum bestimmt, die in einer bestimmten Reihenfolge waren.

Übrigens, wenn der Startpunkt jeder Sequenz bekannt ist, können die gewünschten Daten durch binäre Suche gesucht werden, da die Abschlüsse nach Zeit geordnet sind.
 
ALXIMIKS:

das Problem des Einfügens neuer Daten - lösen Sie es irgendwie.

Warum sollte man viele Male durchgehen und weiße Socken auswählen, wenn es einfacher ist, weiße in einen Korb und schwarze in einen anderen zu werfen und dann zu fragen, wer da ist und in welcher Menge.

Zu viele Daten sind auch schlecht :)

Das Problem ist, dass hier nicht die Weißen und Schwarzen ausgewählt werden, sondern diejenigen, die lokal weißer sind. Die Berechnung des globalen Schwärzungsgrads bringt also nichts. Übrigens habe ich in diesem Thread nur mit einem Vorschlag zur kontinuierlichen Berechnung des Kriteriums begonnen.

P.S. Übrigens, niemand hindert daran, einige Dateien zusammen zu verarbeiten - einfach Cache für jeden wird weniger zu tun haben. Aber es scheint eine Reserve für die Cachegröße zu haben.

Das heißt, die neuen Daten können einfach in einer anderen Datei gesammelt werden.

P.P.S. Übrigens: Wenn Sie die Datei in mehrere kleinere Dateien aufteilen, wird das Sortieren einfacher.

 
komposter:

1. Wenn das Kriterium statisch wäre... Was ist, wenn sich seine Parameter ändern?

2. Ja, dann wird es einen Handel geben. Eine Neuberechnung ist jedoch nur für die jüngsten Daten erforderlich, es besteht keine Notwendigkeit, die gesamte Historie zu erschüttern.

3. dies ist ein Werkzeug...

4. genau.

1. von dem, was ich oben sagte: "Lassen Sie das Kriterium der durchschnittliche Gewinn der letzten 20 Trades der Sequenz sein."Dies sollte als ein Kriterium verstanden werden, das die Gewinnerwartung bewegt. Welche anderen gibt es?

Erstellen Sie in der Datenbank eine Tabelle mit den Sequenzkennungen und den entsprechenden gleitenden Durchschnitten. Die Sequenzen, die die Bedingungen nicht erfüllen, sollten sofort gelöscht werden. Dies sollte durch eine Prozedur im Parallelmodus auf DBMS-Ebene auf Anfrage des Roboters erfolgen, wobei der Prozessstatus im Roboter angezeigt wird.

Sagen wir, FilterAvgProfit (pProfitValue, pTrades, pDeviation),

wobei pProfitValue der Zielgewinn, pTrades die Anzahl der Trades für den gleitenden Durchschnittsgewinn und pDeviation die zulässige Abweichung von pProfitValue ist.

Das Ergebnis - eine gefüllte Tabelle mit Sequenz-IDs und Durchschnittswerten des Gewinns.

Auf ähnliche Weise können Sie gespeicherte Prozeduren für jedes der Kriterien schreiben.

2. Wenn ein Teil der Daten verworfen wird (verwenden Sie "frische Daten" anstelle von 1 Million), ergibt sich ein Leistungsgewinn.

3. das ging aus der Erklärung nicht ganz klar hervor. Nun gut.

4. Meines Erachtens sollte dieser Vorgang bei der Strategieauswahl nicht zu oft durchgeführt werden (z. B. bei jedem Balken oder unmittelbar vor der Eröffnung eines Auftrags). Dieser Ansatz ist sinnvoll, wenn die aktuelle Strategie N Verlustgeschäfte in Folge aufweist - dann können wir eine andere wählen und es wird Zeit brauchen, eine Entscheidung zu treffen", es gibt nichts zu vermeiden. Oder führen Sie diese Auswahl einmal pro Woche durch (am Wochenende, wenn der Markt geschlossen ist), und bestätigen Sie die aktuell gewählte Strategie oder wechseln Sie zu einer anderen. Es ist möglich, eine Liste der optimalen empfohlenen Strategien für einen Händler unter bestimmten Bedingungen zu erstellen. Bei Markteröffnung und mit klarem Kopf (am Montag) bestätigt der Händler dann seine Wahl (oder früher, vor der Markteröffnung... die E-Mail-Benachrichtigung, usw.).

Ungefähr so.

 

Память выделяется однократно для массива структур последовательностей.

Die Struktur der Sequenz umfasst: Nr., Array von Strukturen aller Geschäfte der Sequenz [X], Kriterienwert, Dateizeigerposition.

Im nächsten Schritt werden nur die Elemente der Struktur gefüllt (einschließlich der Arrays von Geschäften). Die Geschäfte im Array werden verschoben, so dass sich immer nur X Geschäfte jeder Sequenz im Speicher befinden.

Sie weisen Speicher für ein Array von Strukturen zu und erhalten:

Arraynein,

ein Array von Arrays von Strukturen aller Angebote der Sequenz [X],

ein Array von Kriterium Wert,

ein Array von Dateizeigerpositionen.

Warum brauchen Sie dasArray "Criterion Value" und dasArray"FileIndex Positions"? (Haben Sie daran gedacht, ein Kriterium und den letzten Handel aufzubewahren?)

Das ist richtig:

Erster Durchlauf - Suche im Intervall von 0 bis SeekDate

dann das beste Kriterium finden undFindDate = Handelsschluss + 1

suchen Sie nun nach dem Intervall zwischen"Zeitpunkt des Transaktionsabschlusses" unddem SeekingDate ?

und Sie müssen X Abschlüsse in diesem Intervall haben, um das Kriterium für jede Sequenz zu berechnen?

 
komposter:

Weitergabe der Ergebnisse meiner Forschung.

Binäre Cache-Datei von 7529 MB liest:

  • Von der Festplatte: in 212,3 Sekunden (35,46 MB/Sek.)
  • Von der RAM-Disk: in 88,1 Sekunden (85,46 MB/Sek.)
Es ist schwer, den Unterschied als kosmisch zu bezeichnen, obwohl ich die gängigste Festplatte habe (allerdings ist der Speicher auch nicht schnell).

Fazit: Der Geschwindigkeitszuwachs beim Lesen einer großen Datei mit RAMdisk beträgt etwa 2,5x.

Seltsame Ergebnisse.

Hier ein Bild von unserem funktionierenden Serversystem unter Last:

  • mit SSD: 200 Mb pro Sekunde, NTFS
  • mit RAM: 2000-2500 Mb pro Sekunde, FAT32, Softperfect RAM Disk 3.4.5

Ohne RAM-Disks dauert es um ein Vielfaches länger, Projekte zu erstellen.

 
Renat:

Seltsame Ergebnisse.

Hier ein Bild von unserem Produktionsserver-System unter Last:

  • mit SSD: 200 Mb pro Sekunde, NTFS
  • mit RAM: 2000-2500 Mb pro Sekunde, FAT32, Softperfect RAM Disk 3.4.5

Ohne RAM-Disks dauert es um ein Vielfaches länger, Projekte zu erstellen.

Das ist es, was ich sagen wollte - Sie müssen große Dateien in großen Stücken lesen, sonst können kleine Dateien bis zu 10 Mal länger dauern.
 
papaklass:

Meiner Meinung nach liegt die Lösung des Problems in der Kodierung der Rohdaten.

Wenn Sie die Rohdaten nicht mehrmals lesen können, müssen Sie sie in ein Format konvertieren, das für mehrere Lesevorgänge geeignet ist.

Eine Möglichkeit besteht darin, jeden Datensatz in eine 16-Bit-Zahl zu konvertieren. Jedem Feld des ursprünglichen Datensatzes sollte eine bestimmte Anzahl von Bits in der Nummer zugewiesen werden. Zum Beispiel:

Die höchstwertige Ziffer der Zahl:

- "0" bedeutet ein negatives Transaktionsergebnis;

- 1" steht für ein positives Ergebnis einer Transaktion.

die untere Ziffer der Nummer:

- 0" steht für einen KAUF;

- 1" bedeutet ein SELL-Geschäft.

und so weiter.

Anstatt die Quelldatei mit vielen Feldern wiederholt zu lesen, wird die Arbeit auf das wiederholte Lesen eines einzigen Zahlenfeldes reduziert, was zu einer erheblichen Beschleunigung führen sollte.

Im Großen und Ganzen kann die Quelldatei sofort in einem kodierten Format erzeugt werden, obwohl die darin enthaltenen Informationen in einer nicht visuellen Form erscheinen.

Aber nicht in "16-Bit", sondern in 64-Bit. Andrew hat einen x64-Prozessor, so dass die minimale Volumeneinheit beim Zugriff auf den Speicher 64 Bit beträgt. Selbst wenn Sie ein Byte aus dem Speicher lesen, liest der Prozessor immer noch 8 Bytes (zwei Doppelwörter).

 
komposter:

Ja, in dieser Form ist die Aufgabe parallel - jedes Mal, wenn sichdas Suchdatum ändert,können Sie eine gleichzeitige Suche nach dem besten Kriterium auf verschiedenen Teilen der Sequenzmenge durchführen. Wir teilen sie zum Beispiel in 20 Teile auf und geben die Aufgabe an 20 Expert Advisors. Und sie sollten die Datei lesen, den Deal finden und nur die beste Reihenfolge (№№, Kriterium und Dateiposition) zurücksenden.

Herzlichen Dank!

Na bitte, schon wieder etwas Neues ))