Cartera R: un método de diversificación - página 7

 
Reshetov:

En MQL5, y más aún en MQL4 la velocidad del código para este tipo de algoritmos es demasiado baja, es decir, no se puede obtener nada bueno en MQL puro, y al menos hay que crear una DLL. Y de todos modos no tendría ningún sentido, ya que las carteras no necesitan ser optimizadas en tiempo real en cada tick o en las barras de los marcos temporales pequeños.

Yuri, eso no es cierto, mql5 no es inferior a toad en cuanto a velocidad.

En cuanto a la finalidad de su uso, por ejemplo, con respecto al forex, me interesa más optimizar las carteras de estrategias, no las herramientas. Así que... No se aceptan excusas. :)

Pero la buena noticia es que puedo hacerte compañía mientras escribes código en mql5. Incluso puedo escribirlo yo mismo. Preferiblemente sólo una descripción del algoritmo.

Creo que será divertido.

 
MetaDriver:

Yuri, eso no es cierto, mql5 no es en absoluto inferior a toad en términos de velocidad.

Le cuentas estos cuentos de hadas a tus hijos. Las máquinas virtuales Java realizan una compilación JIT, es decir, compilan el código Java en código máquina antes de ejecutar el programa. Así, la ejecución de las aplicaciones Java se realiza en código máquina.

Consulta los resultados de la comparación del rendimiento de Quake2 en Java y C++: http://www.bytonic.de/html/benchmarks.html

Más sobre este tema: Puntos de referencia para C#, C++, Java, Delphi

Después de todo, es fácil comprobarlo ejecutando el mismo benchmark escrito en Java y en MQL5.


MetaDriver:

En cuanto a la razón de usarlo - por ejemplo con respecto a forex estoy más interesado en optimizar las carteras de estrategias, no las herramientas. Así que... No se aceptan excusas. :)

Bien, entonces cargue las primeras diferencias de equidad de las estrategias en un archivo CSV y optimícelas. ¿Por qué necesitas excusas de que MQL5 puede supuestamente "superar" a una aplicación ejecutada en código máquina?

MetaDriver:

Pero la buena noticia es que puedo hacerte compañía mientras escribes código en mql5. Incluso puedo escribirlo yo mismo. Preferiblemente sólo una descripción del algoritmo.


Adelante. El algoritmo Brown-Robinson no es un secreto. Aquí está el código 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:

Le cuentas estos cuentos de hadas a tus hijos. Las máquinas virtuales Java realizan una compilación JIT, es decir, compilan el código Java en código máquina antes de ejecutar el programa. Así, la ejecución de las aplicaciones Java se realiza en código máquina.

Yura, esto parece ser una novedad para ti, sin embargo la máquina virtual mql5 funciona de manera similar. El compilador hace el bytecode, antes de ejecutarlo se precompila en un nativ. Es lo mismo que en java y sharp. Deberías leer el foro de mql5 más a menudo.

Consulta los resultados de la comparación del rendimiento de Quake2 en Java y C++: http://www.bytonic.de/html/benchmarks.html

Más información sobre este tema: referencias de C#, C++, Java y Delphi

Es fácil comprobarlo ejecutando el mismo benchmark escrito en Java y en MQL5.

Lo he comprobado. Aunque lo he comparado no con java sino con sharp. Tengo la misma velocidad. No creo que Java sea al menos un 30-40% más rápido que Sharp. Si hay una diferencia, aún no se sabe a favor de quién. Estoy de acuerdo en comparar con java también. ¿Qué código recomendaría para las pruebas comparativas?

Pues bien, entonces vuelca las primeras diferencias de las estrategias de equidad en un archivo CSV y lo optimiza.

No me interesa esa variante. Quiero un código incrustado. Y lo haré.

¿Por qué necesitas excusas de que MQL5 puede supuestamente "superar" a una aplicación, corriendo en código máquina?

Ver arriba. No cuento con adelantar, cuento con ser idéntico (más o menos un 10%).

Adelante. El algoritmo Brown-Robinson no es un secreto. Aquí está el código en Java:

Sí, tengo ese código. Ya lo has publicado. No pude entenderlo de inmediato. Contaba con los comentarios al menos, para resolverlo de verdad, no para enredar.

Bien, lo intentaré de nuevo. Hay descripciones de la idea del algoritmo en Internet. Lo resolveré.

 
MetaDriver:

Yura, esto parece ser una novedad para ti, sin embargo la máquina virtual mql5 funciona de manera similar. El compilador hace bytecode, antes de lanzarlo se precompila en un nativ. Es lo mismo que en java y sharp. Deberías leer el foro de mql5 más a menudo.

Lo he comprobado. Aunque lo he comparado no con java sino con sharp. Tengo la misma velocidad. No creo que Java sea al menos un 30-40% más rápido que Sharp. Si hay una diferencia, aún no se sabe a favor de quién. Estoy de acuerdo en comparar con java también. ¿Qué código recomendaría para las pruebas comparativas?

No me interesa esa variante. Quiero un código incrustado. Y lo haré.

Ver arriba. No cuento con adelantar, cuento con ser idéntico (más o menos un 10%).

Sí, tengo ese código. Ya lo has publicado. No pude entenderlo de inmediato. Contaba con los comentarios al menos, para resolverlo de verdad, no para enredar.

Bien, lo intentaré de nuevo. Hay descripciones de la idea del algoritmo en Internet. Lo resolveré.

divertidísimo...

Sin embargo,

;)

 
MetaDriver:

Sí, tengo ese código. Ya lo has publicado. No pude entrar en él de inmediato. Al menos esperaba un comentario para poder resolverlo de verdad y no enredar.

Bien, lo intentaré de nuevo. Hay descripciones de la idea del algoritmo en Internet. Ya lo resolveré.

No hay nada complicado en el código. Paso en argumentos una matriz de pagos - a[][], en la salida la estrategia óptima del jugador por columnas de la matriz de pagos - 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
Todo lo demás, cualquier programador que conozca lenguajes similares a C lo entenderá sin necesidad de ayuda. La única diferencia entre Java y C es que no es necesario liberar memoria. Es decir, si se declara una variable dentro de un bloque de corchetes {}, esto significa que después de cerrar el bloque, la variable fuera del bloque no es válida y la máquina virtual de Java liberará de forma independiente la memoria que se le asignó. Si se intenta hacer referencia a una variable declarada dentro de un bloque fuera de este bloque, el compilador de Java generará un error.
 
Alex5757000:
¿Por qué no lo escribes todo en mql5 y publicas las fuentes?

El código fuente está disponible públicamente en http://r-portfolio.sourceforge.net/

Si los necesita, puede reescribirlos en cualquier lenguaje de programación o contactar con Job - hacen varios caprichos y lujurias de los que necesitan implementar algo en código MQL.

 
Yuri, tengo una pregunta sobre la formación de una cartera con tu programa. Lo pregunté en el hilo "Correlation Expert Advisor", pero he encontrado este hilo y lo preguntaré aquí. Se incluye el oro en la cartera junto con las divisas principales, pero los pares de divisas y el oro tienen precios de tick diferentes. ¿Cómo se corrige esto en el cálculo y qué pares utiliza para su cartera? Estoy interesado en este tema y me gustaría saber de un especialista con experiencia los resultados aproximados del uso del sistema.
 
FION:
Yuri, tengo una pregunta sobre la formación de una cartera con tu programa. Lo pregunté en el hilo "Correlation Expert Advisor", pero he encontrado este hilo y lo preguntaré aquí. Se incluye el oro en la cartera junto con las divisas principales, pero los pares de divisas y el oro tienen precios de tick diferentes. ¿Cómo se corrige esto en el cálculo y qué pares utiliza para su cartera? Estoy interesado en este tema y me gustaría saber de un especialista con experiencia los resultados aproximados del uso del sistema.
Ver respuesta al consejero de correlación
 
Reshetov:

Las máquinas virtuales Java realizan una compilación JIT, es decir, compilan el código Java en código máquina antes de ejecutar el programa. Así, la ejecución de las aplicaciones Java se realiza en código máquina.


jit en java compila a código máquina en partes. Por lo que tengo entendido, mql5 compila todo el programa a código máquina de una vez - esto es más aot que jit.
 
Reshetov:
Ver la respuesta del asesor de correlación

.

http://sourceforge.net/projects/r-portfolio/ - ¿está disponible en ruso?