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

 
es ist möglich, alles für eine Datenauslesung zu berechnen - die Hauptsache ist der Wunsch
komposter:

Ja, in dieser Form ist die Aufgabe parallel - jedes Mal, wenn sich das 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.

Ich danke Ihnen allen sehr herzlich!

Wenn wir diesen Algorithmus auf mehreren EAs laufen lassen, sind wir durch die Geschwindigkeit des Lesens von der Festplatte + in Teilen + von verschiedenen Positionen aus begrenzt, und die Geschwindigkeit ist wahrscheinlich nicht ausreichend.

 
ALXIMIKS:
Sie können alles in einer einzigen Datenauslesung berechnen - wenn Sie wollen, Hauptsache, Sie wollen es tun.

Das Lesen von der Festplatte ist ein ziemlich teurer Vorgang - die Ausführung dieses Algorithmus auf mehreren Expert Advisors wird durch die Geschwindigkeit des Lesens von der Festplatte + in Teilen + von verschiedenen Positionen begrenzt, und es ist unwahrscheinlich, dass die Geschwindigkeit erreicht wird.

Wer sagt denn, dass verteiltes Rechnen auf einer einzigen Workstation stattfinden muss? Es gibt keine derartigen Einschränkungen). Die RAM-Disk wird helfen, wie oben gesagt wurde.
 
elugovoy:
Wer hat gesagt, dassdie verteilten Berechnungen auf einer einzigen Workstation durchgeführt werden müssen? Es gibt keine derartigen Einschränkungen)) Die RAM-Disk ist ebenfalls eine große Hilfe, wie oben bereits erwähnt wurde.

Wie wäre es, ein wenig nachzudenken und den Algorithmus zu ändern?

1. wie man mehrere Sequenzen auf einmal herunterlädt und wie man weiß, wo sie beginnen und wo sie enden

2. wie man die Koeffizienten für alle Geschäfte in einer Folge berechnet und in welcher Datenstruktur man die Antwort speichert

3. wie man zwei Antworten aus einem früheren Punkt zu einer neuen, etwas vollständigeren Antwort zusammenführt

4. wie die endgültige Antwort aus Punkt 3 in die erforderlichen Intervalle unterteilt werden kann (wir sprechen vonSeekingDate = Handelsschluss + 1)

Wir können einen leicht abweichenden Algorithmus entwickeln, bei dem wir auswählen, in wie viele zusätzliche Teile dasSeekingDate-Intervall unterteilt werden soll

können wir im Vergleich zum ursprünglichen Algorithmus des Autors andere Fehler erhalten.

 
papaklass:

Die Stellenkapazität einer Nummer wird durch die Eindeutigkeit des Eingabecodes bestimmt, nicht durch die Stellenkapazität des Systems. Es sollte natürlich ein Vielfaches von 1 Byte sein.

64 Bit scheinen mir zu viel zu sein. :)

Bei 1.000.000 Datensätzen würden 16 Bit für einen eindeutigen Datensatzcode nicht ausreichen (maximal 65536 Datensätze). Das ist die eine.

Schauen Sie sich die Architektur der 32-Bit- und 64-Bit-Prozessoren von Intel (Itanium) und AMD (ich habe nicht von Betriebssystemen gesprochen) an. 32/64 ist die Auflösung des Adressbusses, aber gleichzeitig werden 32/64 Bits (4/8 Bytes) in einem Maschinenzyklus aus dem Speicher gelesen, selbst wenn auf ein Byte des Speichers zugegriffen wird.

Daher macht es in Bezug auf die Leistung keinen Unterschied, ob 2 Byte oder 8 Byte aus dem Speicher gelesen werden.

Im Prinzip könnten Sie einen Windows-Dienst für diese Art der Dateiverarbeitung schreiben.

Aber ich bin immer noch geneigt, DBMS zu verwenden.

 
ALXIMIKS:

Wie wäre es, ein wenig nachzudenken und den Algorithmus zu ändern?

1. wie man mehrere Sequenzen auf einmal herunterlädt und wie man weiß, wo sie beginnen und wo sie enden

2. wie man die Koeffizienten für alle Geschäfte in einer Folge berechnet und in welcher Datenstruktur man die Antwort speichert

3. wie man zwei Antworten aus der vorherigen Frage zu einer neuen, etwas vollständigeren Antwort zusammenfügt

4. wie die endgültige Antwort aus Punkt 3 in die erforderlichen Intervalle unterteilt werden kann (wir sprechen vonSeekingDate = Handelsschluss + 1)

Wir können einen leicht abweichenden Algorithmus entwickeln, bei dem wir auswählen, in wie viele zusätzliche Teile dasSeekingDate-Intervall unterteilt werden soll

können wir im Vergleich zum ursprünglichen Algorithmus des Autors andere Fehler erhalten.

Für alle 4 Punkte, Datenverarbeitung auf DBMS-Seite.

Was den "etwas anderen" Algorithmus betrifft, so ist nicht ganz klar, was Sie meinen. Aber. Um den Fehler dieses "etwas anderen" Algorithmus im Vergleich zum Algorithmus des "Autors" irgendwie zu berechnen, müssen beide Algorithmen implementiert werden. Und der Thread wurde gerade wegen des technischen Problems der Umsetzung des Algorithmus des "Autors" erstellt.

Welche Methode wollen Sie angesichts dieser Tatsache anwenden, um den Fehler, von dem Sie sprechen, zu berechnen?

 
ALXIMIKS:
kann man alles in einem Rutsch berechnen - Hauptsache, man hat Lust.

Das Lesen von der Festplatte ist eine ziemlich kostspielige Operation - die Ausführung dieses Algorithmus auf mehreren Expert Advisors wird durch die Geschwindigkeit des Lesens von der Festplatte + in Teilen + von verschiedenen Positionen begrenzt, und es ist unwahrscheinlich, dass diese Idee irgendeine Geschwindigkeit bringen wird.

Sagen wir, die Festplatte ist das langsamste Gerät, das ist eine Tatsache. Es geht hier jedoch nicht darum, mehrere EAs mit all diesen Berechnungen laufen zu lassen. Meiner Meinung nach ist die wahrscheinlichste Anwendung die Signalerzeugung. Sprich Cloud Server auf Amazon mit der nötigen Performance + MT4 + diese Entwicklung = Signalanbieter.

 
elugovoy:

Bei allen 4 Punkten liegt die Datenverarbeitung auf der Seite des DBMS.

Was den "etwas anderen" Algorithmus angeht, bin ich mir nicht sicher, was Sie meinen. Aber. Um den Fehler dieses "etwas anderen" Algorithmus im Vergleich zum Algorithmus des "Autors" irgendwie zu berechnen, müssen beide Algorithmen implementiert werden. Und der Thread wurde gerade wegen des technischen Problems der Umsetzung des Algorithmus des "Autors" erstellt.

Welche Methode wollen Sie angesichts dieser Tatsache anwenden, um den Fehler, von dem Sie sprechen, zu berechnen?

Ich verstehe den Autor so, dass der Bereich durch den maximalen Koeffizienten, der aus dem gegebenen Bereich gewählt wird, beschnitten wird. Meine vorgeschlagene Variante ist, jeden Bereich in N Teilbereiche zu unterteilen, wobei bei Konvergenz nur ein Wert des Koeffizienten passen kann. Bei N = 5 kann die Spanne also in Anteile von 0,2 0,4 0,6 0,8 1 unterteilt werden. Und jeder Wert von 0 bis 1 wird in der des Autors abgeschnitten. Ein Bereichsfehler von 0,2 ist also das Maximum bei N = 5.

Und zwar rund um die Frage, wie richtig die Beiträge des Autors interpretiert wurden, denn es herrscht immer noch keine vollständige Klarheit.

 
ALXIMIKS:

Soweit ich die Version des Autors verstanden habe (falls wieder etwas falsch ist, da es keine klare und vollständige Erklärung gibt, was genau benötigt wird), wird der Bereich durch den maximalen Koeffizienten, der aus diesem Bereich ausgewählt wurde, abgeschnitten; in der von mir vorgeschlagenen Version sollte jeder solche Bereich in N Unterbereiche unterteilt werden, in denen nur ein Koeffizientenwert in den Zusammenschluss passen kann. Bei N = 5 kann der Bereich also in die Anteile 0,2 0,4 0,6 0,8 1 unterteilt werden. Und jeder Wert zwischen 0 und 1 wird im Bereich des Autors abgeschnitten. Ein Bereichsfehler von 0,2 ist also das Maximum bei N = 5.

Und zwar rund um die Frage, wie richtig die Beiträge des Autors interpretiert wurden, denn es herrscht immer noch keine vollständige Klarheit.

Ja, anscheinend wurde das Projekt vom Finanzministerium in Auftrag gegeben, aber es gibt nicht genügend spezifische Informationen. Aber jeder kann aus der Diskussion etwas Interessantes für sich selbst finden. Ich sehe dies als einen positiven Aspekt der Diskussion.

Was die Diskretisierung der Bereiche betrifft, so ist Ihre Idee klar. Und wenn N=100, 1000... (rein rechnerisch ist das möglich), dann wird diese Aufteilung einen Rückschlag in Bezug auf Leistung und Systemressourcenverbrauch verursachen. Es gibt sowohl die Physik als auch die Mathematik )

 
Candid:

Wir haben ein Fragment einer Datei in unserem Speicher, gehen es durch und bilden eine Stichprobe mit der für die Berechnung des Kriteriums erforderlichen Länge, wobei 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.

Sie müssten also mehrere Millionen Angebote aus anderen Sequenzen durchgehen! Das ist genau das, was ich meine.

ALXIMIKS:

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

Bisher gibt es kein Problem, die Daten sind eine feste Größe.

TheXpert:
Übrigens, wenn Sie den Startpunkt jeder Sequenz kennen, können Sie mit einer binären Suche nach den richtigen Daten suchen, da die Abschlüsse nach Zeit geordnet sind.

+1, danke für die Idee.

elugovoy:

1. auf der Grundlage der oben genannten"Lassen Sie das Kriterium der durchschnittliche Gewinn der letzten 20 Geschäfte der Sequenz sein."Dies sollte als ein Kriterium verstanden werden, nämlich als die gleitende Gewinnerwartung. 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 ist eine ausgefüllte Tabelle mit Sequenz-IDs und durchschnittlichen Gewinnwerten.

1а. Was sind die anderen Kriterien - das spielt keine Rolle. Wichtig ist, dass die Berechnung durch eine Reihe von Geschäften mit der angegebenen Länge erfolgt.

1б. Wie kann man eine Folge verwerfen, nur weil sie zum Zeitpunkt des Abschlusses von Handel N einen schlechten Kriteriumwert hat? Was ist, wenn sie danach eine bessere wird?
Sie können nur die Sequenzen entfernen, die vollständig fehlgeschlagen sind und deren Kriterium keinen Gewinn ergeben hat. Und davon sollte es nicht viele geben.

elugovoy:

4. Meines Erachtens sollte dieser Vorgang bei der Strategieauswahl nicht zu oft durchgeführt werden (z. B. bei jedem Balken oder unmittelbar vor der Ordereröffnung). 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 Entscheidung (oder früher, vor Markteröffnung... E-Mail-Benachrichtigung, usw.).

Nun, das ist eine Frage der Ideologie. Nicht mehr über ihn ;)

ALXIMIKS:

Sie weisen einem Array von Strukturen Speicher zu und erhalten:

Warum brauchen Sieein Array mit Kriteriumswerten undein Array mit Dateizeigerpositionen? (ein Kriterium und die letzte Transaktion haben Sie nicht daran gedacht, zu speichern?)

Das Kriterium Wertfeld dient dazu, einige beste Sequenzen (für die Zukunft) zu sortieren und auszuwählen.

Datei-Indexpositionen - um die Suche in jeder Sequenz an der richtigen Stelle fortzusetzen (wie sonst?).

ALXIMIKS:

Habe ich es richtig verstanden:

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 in dieses Intervall X Trades einpassen, um das Kriterium für jede Sequenz zu berechnen?

1. Ja, von 0 bis zum ersten SeekingDate

2. Nein. Das SeekedDate wird verschoben, und wir verarbeiten die Sequenz (fügen dem Array Trades hinzu) im Intervall "PreviousTreatedTrade - SeekDate".

Renat:

Das sind seltsame Ergebnisse.

Hier ein Bild von unserem funktionierenden Serversystem unter Last:

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

Ohne Plattenrahmen dauert die Montage von Projekten um ein Vielfaches länger.

Ich fange an, komplex zu werden.

Wahrscheinlich muss ich ein Testskript erstellen und eine Datei anhängen, die Sie bei einer ähnlichen Aufgabe überprüfen können.

Ich habe eine normale Festplatte - wdc wd1002FAEX-00Y9A0, nach den technischen Daten zu urteilen, beträgt die maximale Geschwindigkeit 126 MB/s:

Nach der Rezension zu urteilen, ist das ungefähr das, was man herausquetschen kann. Vielleicht mache ich etwas falsch?

Werfen wir einen Blick auf das Skript...

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

Wie liest man einen großen Brocken?

papaklass:

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

Wie können wir die vollständigen Transaktionsdaten kodieren, ohne dass Informationen verloren gehen?

 
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.

Ich habe vergessen, über das Gedächtnis zu schreiben.

DDR3, 1333 MHz:

Softperfect RAM Disk 3.4.5, obwohl ich NTFS verwendet habe (irgendein Unterschied?)

Und noch ein Detail - die RAM-Disk ist 12000 MB groß, und es gibt nur 1-2 GB freien Speicher (für die Arbeit).