R-Portfolio - une méthode de diversification - page 7

 
Reshetov:

Dans MQL5, et encore plus dans MQL4, la vitesse du code pour de tels algorithmes est trop faible, c'est-à-dire que rien de bon ne peut être obtenu en MQL pur, et qu'il faut au moins créer une DLL. Et cela n'aurait de toute façon aucun sens puisque les portefeuilles n'ont pas besoin d'être optimisés en temps réel sur chaque tick ou sur les barres des petites échéances.

Yuri, ce n'est pas vrai, mql5 n'est pas inférieur à toad en termes de vitesse.

Quant à l'objectif de son utilisation, par exemple, en ce qui concerne le forex, je suis plus intéressé par l'optimisation de portefeuilles de stratégies, pas d'outils. Alors... Les excuses ne sont pas acceptées. :)

Mais la bonne nouvelle est que je peux vous tenir compagnie en écrivant du code mql5. Je peux même l'écrire moi-même. De préférence, juste une description de l'algorithme.

Je pense que ce sera amusant.

 
MetaDriver:

Yuri, ce n'est pas vrai, mql5 n'est en aucun cas inférieur à toad en termes de vitesse.

Vous racontez ces contes de fées à vos enfants. Les machines virtuelles Java effectuent une compilation JIT, c'est-à-dire qu'elles compilent le code Java en code machine avant d'exécuter le programme. L'exécution des applications Java se fait donc en code machine.

Voir les résultats comparant les performances de Quake2 en Java et C++ : http://www.bytonic.de/html/benchmarks.html

Voici d'autres informations sur ce sujet : benchmarks C#, C++, Java, Delphi

Après tout, il est facile de le vérifier en exécutant le même benchmark écrit en Java et en MQL5.


MetaDriver:

Quant au sens de l'utilisation - pour moi, par exemple, en ce qui concerne le forex, je suis plus intéressé par l'optimisation de portefeuilles de stratégies, pas d'outils. Alors... Les excuses ne sont pas acceptées. :)

Bien, alors téléchargez les premières différences d'équité des stratégies dans un fichier CSV et optimisez-les. Pourquoi avez-vous besoin d'excuses pour dire que MQL5 peut soi-disant "surpasser" une application exécutée en code machine ?

MetaDriver:

Mais la bonne nouvelle, c'est que je peux vous tenir compagnie en écrivant du code dans mql5. Je peux même l'écrire moi-même. De préférence, juste une description de l'algorithme.


Allez-y. L'algorithme de Brown-Robinson n'est pas un secret. Voici le code en 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:

Vous racontez ces contes de fées à vos enfants. Les machines virtuelles Java effectuent une compilation JIT, c'est-à-dire qu'elles compilent le code Java en code machine avant d'exécuter le programme. L'exécution des applications Java se fait donc en code machine.

Yura, cela semble être une nouvelle pour vous, cependant la machine virtuelle mql5 fonctionne de manière similaire. Le compilateur fait le bytecode, avant d'être exécuté il est précompilé dans un nativ. C'est la même chose qu'en java et en sharp. Vous devriez lire le forum mql5 plus souvent.

Voir les résultats comparant les performances de Quake2 en Java et C++ : http://www.bytonic.de/html/benchmarks.html

Voici d'autres informations sur ce sujet : benchmarks C#, C++, Java, Delphi

Il est facile de le vérifier en exécutant le même benchmark écrit en Java et en MQL5.

Je l'ai vérifié. Bien que je l'aie comparé non pas à java mais à sharp. J'ai la même vitesse. Je ne pense pas que Java soit au moins 30-40% plus rapide que Sharp. S'il y a une différence, on ne sait pas encore en faveur de qui. Je suis d'accord pour comparer avec java également. Quel code recommanderiez-vous pour un test comparatif ?

Alors, mettez les premières différences des stratégies d'équité dans un fichier CSV et optimisez-le.

Je ne suis pas intéressé par une telle variante. Je veux un code intégré. Et je le ferai.

Pourquoi avez-vous besoin d'excuses pour dire que MQL5 peut soi-disant "surpasser" une application fonctionnant en code machine ?

Voir ci-dessus. Je ne compte pas sur le dépassement, je compte sur le fait d'être identique (plus ou moins 10%).

Allez-y. L'algorithme de Brown-Robinson n'est pas un secret. Voici le code en Java :

Oui, j'ai ce code. Vous l'avez déjà posté. Je n'ai pas pu le comprendre tout de suite. Je comptais sur les commentaires, au moins, pour vraiment comprendre, et pas seulement pour s'amuser.

Ok, je vais réessayer. On trouve sur Internet des descriptions de l'idée de l'algorithme. Je vais trouver une solution.

 
MetaDriver:

Yura, cela semble être une nouvelle pour vous, cependant la machine virtuelle mql5 fonctionne de manière similaire. Le compilateur fabrique du bytecode, avant de le lancer, il est recompilé en un code natif. C'est la même chose qu'en java et en sharp. Vous devriez lire le forum mql5 plus souvent.

Je l'ai vérifié. Bien que je l'aie comparé non pas à java mais à sharp. J'ai la même vitesse. Je ne pense pas que Java soit au moins 30-40% plus rapide que Sharp. S'il y a une différence, on ne sait pas encore en faveur de qui. Je suis d'accord pour comparer avec java également. Quel code recommanderiez-vous pour un test comparatif ?

Je ne suis pas intéressé par une telle variante. Je veux un code intégré. Et je le ferai.

Voir ci-dessus. Je ne compte pas sur le dépassement, je compte sur le fait d'être identique (plus ou moins 10%).

Oui, j'ai ce code. Vous l'avez déjà posté. Je n'ai pas pu le comprendre tout de suite. Je comptais sur les commentaires au moins, pour vraiment comprendre, pas pour faire n'importe quoi.

Ok, je vais réessayer. On trouve sur Internet des descriptions de l'idée de l'algorithme. Je vais trouver une solution.

hilarant...

cependant

;)

 
MetaDriver:

Oui, j'ai ce code. Vous l'avez déjà posté. Je n'ai pas pu m'y mettre tout de suite. J'espérais au moins un commentaire pour que je puisse vraiment comprendre, et pas seulement faire des bêtises.

Ok, je vais réessayer. On trouve sur Internet des descriptions de l'idée de l'algorithme. Je vais trouver une solution.

Il n'y a rien de compliqué dans ce code. Je passe en arguments une matrice de paiement - a[][], en sortie la stratégie optimale du joueur par colonnes de la matrice de paiement - 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
Tout le reste, tout programmeur connaissant des langages similaires au C le comprendra sans aucune aide. La seule différence entre Java et C est qu'il n'est pas nécessaire de libérer de la mémoire. En d'autres termes, si une variable est déclarée à l'intérieur d'un bloc de crochets {}, cela signifie qu'après la fermeture du bloc, la variable à l'extérieur du bloc n'est pas valide et la machine virtuelle Java libère indépendamment la mémoire qui lui a été allouée. Si l'on tente de faire référence à une variable déclarée dans un bloc en dehors de ce bloc, le compilateur Java générera une erreur.
 
Alex5757000:
Pourquoi ne pas écrire tout ça en mql5 et poster les sources ?

Le code source est disponible publiquement à l'adresse http://r-portfolio.sourceforge.net/

Si vous en avez besoin, vous pouvez les réécrire dans n'importe quel langage de programmation ou contacter Job - ils font les divers caprices et convoitises de ceux qui ont besoin de mettre en œuvre quelque chose dans le code MQL.

 
Yuri, j'ai une question sur la formation d'un portefeuille avec votre programme. Je l'ai posée dans le fil "Correlation Expert Advisor", mais j'ai trouvé ce fil et je vais la poser ici. Vous incluez l'or dans le portefeuille avec les majors, mais les paires de devises et l'or ont des cours différents. Comment cela est-il corrigé dans le calcul et quelles paires utilisez-vous pour votre portefeuille ? Je suis intéressé par ce sujet et j'aimerais qu'un spécialiste expérimenté me dise quels sont les résultats approximatifs de l'utilisation de ce système.
 
FION:
Yuri, j'ai une question sur la formation d'un portefeuille avec votre programme. Je l'ai posée dans le fil "Correlation Expert Advisor", mais j'ai trouvé ce fil et je vais la poser ici. Vous incluez l'or dans le portefeuille avec les majors, mais les paires de devises et l'or ont des cours différents. Comment cela est-il corrigé dans le calcul et quelles paires utilisez-vous pour votre portefeuille ? Je suis intéressé par ce sujet et j'aimerais qu'un spécialiste expérimenté me dise quels sont les résultats approximatifs de l'utilisation de ce système.
Voir la réponse au conseiller en corrélation
 
Reshetov:

Les machines virtuelles Java effectuent une compilation JIT, c'est-à-dire qu'elles compilent le code Java en code machine avant d'exécuter le programme. L'exécution des applications Java se fait donc en code machine.


jit en java se compile en code machine en pièces détachées. D'après ce que je comprends, mql5 compile l'ensemble du programme en code machine en une seule fois - c'est plus aot que jit.
 
Reshetov:
Voir la réponse au conseiller en corrélation

.

http://sourceforge.net/projects/r-portfolio/ - est-il disponible en russe ?