R-Portfolio - eine Methode zur Diversifizierung - Seite 7

 
Reshetov:

In MQL5 und noch mehr in MQL4 ist die Codegeschwindigkeit für solche Algorithmen zu gering, d.h. in reinem MQL kann nichts Gutes erreicht werden, und es muss mindestens eine DLL erstellt werden. Und es würde ohnehin keinen Sinn machen, da Portfolios nicht in Echtzeit bei jedem Tick oder auf den Balken kleiner Zeitrahmen optimiert werden müssen.

Yuri, das stimmt nicht, mql5 ist Toad in Bezug auf die Geschwindigkeit nicht unterlegen.

Was den Zweck der Nutzung betrifft, so bin ich zum Beispiel in Bezug auf Forex eher an der Optimierung von Strategieportfolios als an Tools interessiert. Also... Ausreden werden nicht akzeptiert. :)

Aber die gute Nachricht ist, dass ich Ihnen beim Schreiben von Code in mql5 Gesellschaft leisten kann. Ich kann sie sogar selbst schreiben. Vorzugsweise nur eine Beschreibung des Algorithmus.

Ich glaube, das wird ein Spaß.

 
MetaDriver:

Yuri, das ist nicht wahr, mql5 steht Toad in Sachen Geschwindigkeit in nichts nach.

Sie erzählen Ihren Kindern diese Märchen. Virtuelle Java-Maschinen führen eine JIT-Kompilierung durch, d. h. sie kompilieren Java-Code in Maschinencode, bevor sie das Programm ausführen. Die Ausführung von Java-Anwendungen erfolgt also im Maschinencode.

Siehe Ergebnisse zum Vergleich der Quake2-Leistung in Java und C++: http://www.bytonic.de/html/benchmarks.html

Mehr zu diesem Thema: Benchmarks für C#, C++, Java, Delphi

Dies lässt sich leicht überprüfen, indem man denselben in Java und in MQL5 geschriebenen Benchmark ausführt.


MetaDriver:

Was den Grund für die Nutzung angeht - zum Beispiel bin ich in Bezug auf Forex eher an der Optimierung von Strategieportfolios interessiert, nicht an Tools. Also... Ausreden werden nicht akzeptiert. :)

Laden Sie dann die ersten Equity-Differenzen der Strategien in eine CSV-Datei hoch und optimieren Sie sie. Warum brauchen Sie Ausreden, dass MQL5 angeblich eine im Maschinencode ausgeführte Anwendung "überholen" kann?

MetaDriver:

Aber die gute Nachricht ist, dass ich Ihnen beim Schreiben von Code in mql5 Gesellschaft leisten kann. Ich kann sie sogar selbst schreiben. Vorzugsweise nur eine Beschreibung des Algorithmus.


Fahren Sie fort. Der Brown-Robinson-Algorithmus ist kein Geheimnis. Hier ist der Code in Java:

  private int[] optimization(double[][] a) {
    Random rand = new Random();
    int m = a.length;
    int n = a[0].length;
    int[] p = new int[m];
    Arrays.fill(p, 0);
    int[] q = new int[n];
    Arrays.fill(q, 0);
    double[] x = new double[m];
    Arrays.fill(x, 0 d);
    double[] y = new double[n];
    Arrays.fill(y, 0 d);
    int r = rand.nextInt(m);
    int c = 0;
    for (int t = 0; t < 10000000; t++) {
        for (int j = 0; j < n; j++) {
          y[j] = y[j] + a[r][j];
        }
        c = 0;
        for (int j = 1; j < n; j++) {
          if ((y[j] == y[c]) && rand.nextBoolean()) {
            c = j;
          }
          if (y[j] > y[c]) {
            c = j;
          }
        }
        q[c] = q[c] + 1;
        for (int i = 0; i < m; i++) {
            x[i] = x[i] + a[i][c];
        }
        r = 0;
        for (int i = 1; i < m; i++) {
          if ((x[i] == x[r]) && rand.nextBoolean()) {
            r = i;
          }
          if (x[i] < x[r]) {
            r = i;
          }
        }
        p[r] = p[r] + 1;
    }

    return q;
  }
 
Reshetov:

Sie erzählen Ihren Kindern diese Märchen. Virtuelle Java-Maschinen führen eine JIT-Kompilierung durch, d. h. sie kompilieren Java-Code in Maschinencode, bevor sie das Programm ausführen. Die Ausführung von Java-Anwendungen erfolgt also im Maschinencode.

Yura, das scheint neu für Sie zu sein, aber die virtuelle Maschine mql5 funktioniert auf ähnliche Weise. Der Compiler erstellt den Bytecode, der vor dem Ausführen in ein natives Format vorkompiliert wird. Es ist dasselbe wie in Java und Sharp. Sie sollten das mql5 Forum öfters lesen.

Siehe Ergebnisse zum Vergleich der Quake2-Leistung in Java und C++: http://www.bytonic.de/html/benchmarks.html

Mehr zu diesem Thema: Benchmarks für C#, C++, Java, Delphi

Es ist einfach, dies zu überprüfen, indem man denselben in Java und in MQL5 geschriebenen Benchmark ausführt.

Ich habe es überprüft. Allerdings habe ich es nicht mit Java, sondern mit Sharp verglichen. Ich habe die gleiche Geschwindigkeit. Ich glaube nicht, dass Java mindestens 30-40% schneller ist als Sharp. Wenn es einen Unterschied gibt, ist noch nicht bekannt, zu wessen Gunsten er ausfällt. Ich stimme zu, dass man auch mit Java vergleichen sollte. Welchen Code würden Sie für vergleichende Tests empfehlen?

Geben Sie dann die ersten Unterschiede der Aktienstrategien in eine CSV-Datei ein und optimieren Sie sie.

Ich bin an einer solchen Variante nicht interessiert. Ich möchte einen eingebetteten Code. Und das werde ich.

Warum brauchen Sie Ausreden, dass MQL5 angeblich eine Anwendung, die im Maschinencode läuft, "überholen" kann?

Siehe oben. Ich rechne nicht damit, dass ich überhole, sondern dass ich identisch bin (plus oder minus 10%).

Fahren Sie fort. Der Brown-Robinson-Algorithmus ist kein Geheimnis. Hier ist der Code in Java:

Ja, ich habe diesen Code. Sie haben es bereits veröffentlicht. Ich konnte es nicht sofort verstehen. Ich hatte zumindest mit Kommentaren gerechnet, um wirklich etwas herauszufinden, und nicht nur um herumzuspielen.

Okay, ich versuche es noch einmal. Es gibt Beschreibungen der Algorithmusidee im Internet. Ich werde es herausfinden.

 
MetaDriver:

Yura, das scheint neu für Sie zu sein, aber die virtuelle Maschine mql5 funktioniert ähnlich. Der Compiler erzeugt Bytecode, der vor dem Start in ein natives Format vorkompiliert wird. Es ist dasselbe wie in Java und Sharp. Sie sollten das mql5 Forum öfters lesen.

Ich habe es überprüft. Allerdings habe ich es nicht mit Java, sondern mit Sharp verglichen. Ich habe die gleiche Geschwindigkeit. Ich glaube nicht, dass Java mindestens 30-40% schneller ist als Sharp. Wenn es einen Unterschied gibt, ist noch nicht bekannt, zu wessen Gunsten er ausfällt. Ich stimme zu, dass man auch mit Java vergleichen sollte. Welchen Code würden Sie für vergleichende Tests empfehlen?

Ich bin an einer solchen Variante nicht interessiert. Ich möchte einen eingebetteten Code. Und das werde ich.

Siehe oben. Ich rechne nicht damit, dass ich überhole, sondern damit, dass ich identisch bin (plus oder minus 10 %).

Ja, ich habe diesen Code. Sie haben es bereits veröffentlicht. Ich konnte es nicht sofort verstehen. Ich hatte zumindest mit Kommentaren gerechnet, um wirklich etwas herauszufinden, und nicht nur um herumzualbern.

Okay, ich versuche es noch einmal. Es gibt Beschreibungen der Algorithmusidee im Internet. Ich werde es herausfinden.

urkomisch...

jedoch

;)

 
MetaDriver:

Ja, ich habe diesen Code. Sie haben es bereits veröffentlicht. Ich konnte mich nicht sofort damit anfreunden. Ich hatte zumindest auf einen Kommentar gehofft, damit ich es wirklich herausfinden kann, anstatt nur herumzuspielen.

Okay, ich versuche es noch einmal. Es gibt Beschreibungen der Algorithmusidee im Internet. Ich werde es herausfinden.

Es gibt nichts Kompliziertes an dem Code. Ich übergebe in den Argumenten eine Zahlungsmatrix - a[][], in der Ausgabe die optimale Strategie des Spielers nach Spalten der Zahlungsmatrix - q


Random rand = new Random(); // Объект rand - генератор случайных чисел
int[] q = new int[n]; //  Объявление целочисленного массива q  размером n и выделение под него памяти
int m = a.length; // переменной m присваивается значение в виде количества строк в платежной матрице
int n = a[0].length; // переменной n присваивается значение в виде количества столбцов в платежной матрице
Arrays.fill(p, 0); // Массив p инициализируется нулевыми значениями

int r = rand.nextInt(m); // значению переменной r присваивается случайное число в диапазоне от 0 до m - 1
rand.nextBoolean() // с вероятностью 50% / 50% даст случайным образом значение true или false
Alles andere versteht jeder Programmierer, der sich mit C-ähnlichen Sprachen auskennt, ohne jede Hilfe. Der einzige Unterschied zwischen Java und C besteht darin, dass der Speicher nicht freigegeben werden muss. Das heißt, wenn eine Variable innerhalb eines Blocks mit geschweiften Klammern {} deklariert wird, bedeutet dies, dass nach dem Schließen des Blocks die Variable außerhalb des Blocks ungültig ist und die virtuelle Java-Maschine den dafür zugewiesenen Speicher selbstständig freigibt. Wenn versucht wird, auf eine Variable zu verweisen, die innerhalb eines Blocks außerhalb dieses Blocks deklariert wurde, erzeugt der Java-Compiler einen Fehler.
 
Alex5757000:
Warum schreibst du nicht alles in mql5 und gibst die Quellen an?

Der Quellcode ist öffentlich zugänglich unter http://r-portfolio.sourceforge.net/.

Wenn Sie sie benötigen, können Sie sie in einer beliebigen Programmiersprache umschreiben oder Job kontaktieren - sie tun verschiedene Launen und Begierden derer, die etwas in MQL-Code implementieren müssen.

 
Yuri, ich habe eine Frage zur Bildung eines Portfolios mit Ihrem Programm. Ich habe sie im Thread "Correlation Expert Advisor" gestellt, aber ich habe diesen Thread gefunden und werde sie hier stellen. Sie nehmen Gold zusammen mit den Majors in das Portfolio auf, aber Währungspaare und Gold haben unterschiedliche Tickpreise. Wie wird dies in der Berechnung korrigiert und welche Paare verwenden Sie für Ihr Portfolio? Ich interessiere mich für dieses Thema und würde gerne von einem erfahrenen Fachmann wissen, welche ungefähren Ergebnisse die Anwendung des Systems bringt.
 
FION:
Yuri, ich habe eine Frage zur Bildung eines Portfolios mit Ihrem Programm. Ich habe sie im Thread "Correlation Expert Advisor" gestellt, aber ich habe diesen Thread gefunden und werde sie hier stellen. Sie nehmen Gold zusammen mit den Majors in das Portfolio auf, aber Währungspaare und Gold haben unterschiedliche Tickpreise. Wie wird dies in der Berechnung korrigiert und welche Paare verwenden Sie für Ihr Portfolio? Ich interessiere mich für dieses Thema und würde gerne von einem erfahrenen Fachmann wissen, welche ungefähren Ergebnisse die Anwendung des Systems bringt.
Siehe Antwort an den Korrelationsratgeber
 
Reshetov:

Virtuelle Java-Maschinen führen eine JIT-Kompilierung durch, d. h. sie kompilieren Java-Code in Maschinencode, bevor sie das Programm ausführen. Die Ausführung von Java-Anwendungen erfolgt also im Maschinencode.


jit in Java kompiliert in Teilen zu Maschinencode. Soweit ich es verstehe, kompiliert mql5 das gesamte Programm auf einmal in Maschinencode - das ist mehr aot als jit.
 
Reshetov:
Siehe Antwort an den Korrelationsratgeber

.

http://sourceforge.net/projects/r-portfolio/ - ist sie auf Russisch verfügbar?