R-Portfólio - um método de diversificação - página 7

 
Reshetov:

Na MQL5, e ainda mais na MQL4 a velocidade do código para tais algoritmos é muito baixa, ou seja, nada de bom pode ser obtido em MQL puro, e pelo menos uma DLL tem que ser criada. E não faria sentido de qualquer forma, já que as carteiras não precisam ser otimizadas em tempo real em cada tick ou nas barras de tempo pequenas.

Yuri, isso não é verdade, o mql5 não é inferior ao sapo em termos de velocidade.

Quanto ao propósito de utilizá-lo, por exemplo, com relação ao forex, estou mais interessado em otimizar portfólios de estratégias, e não ferramentas. Então... desculpas não são aceitas. :)

Mas a boa notícia é que posso lhe fazer companhia enquanto escrevo o código em mql5. Posso até escrevê-lo eu mesmo. De preferência, apenas uma descrição do algoritmo.

Acho que vai ser divertido.

 
MetaDriver:

Yuri, isso não é verdade, o mql5 não é de forma alguma inferior ao sapo em termos de velocidade.

Você conta estes contos de fadas a seus filhos. As máquinas virtuais Java fazem a compilação JIT, ou seja, compilam o código Java em código de máquina antes de executar o programa. Portanto, a execução de aplicações Java é feita em código de máquina.

Ver resultados comparando o desempenho do Quake2 em Java e C++: http://www.bytonic.de/html/benchmarks.html

Mais sobre este tópico: Benchmarks para C#, C++, Java, Delphi

Afinal, é fácil verificar isto executando o mesmo padrão de referência escrito em Java e em MQL5.


MetaDriver:

Quanto à razão de usá-la - por exemplo, no que diz respeito ao forex, estou mais interessado em otimizar portfólios estratégicos, não em ferramentas. Então... Desculpas não são aceitas. :)

Bem, então carregue as primeiras diferenças de equidade de estratégias para o arquivo CSV e otimize-as. Por que você precisa de desculpas para que a MQL5 possa supostamente "ultrapassar" uma aplicação executada em código de máquina?

MetaDriver:

Mas a boa notícia é que posso lhe fazer companhia enquanto escrevo o código em mql5. Posso até escrevê-lo eu mesmo. De preferência, apenas uma descrição do algoritmo.


Vá em frente. O algoritmo Brown-Robinson não é um segredo. Aqui está o código em 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:

Você conta estes contos de fadas a seus filhos. As máquinas virtuais Java fazem a compilação JIT, ou seja, compilam o código Java em código de máquina antes de executar o programa. Portanto, a execução de aplicações Java é feita em código de máquina.

Yura, isto parece ser uma novidade para você, entretanto a máquina virtual mql5 funciona de maneira semelhante. O compilador faz o bytecode, antes de executá-lo é pré-compilado em um nativ. É o mesmo que em java e afiado. Você deve ler o fórum mql5 com mais freqüência.

Ver resultados comparando o desempenho do Quake2 em Java e C++: http://www.bytonic.de/html/benchmarks.html

Veja mais sobre este tópico: C#, C++, Java, Delphi benchmarks

É fácil verificá-lo executando a mesma referência escrita em Java e em MQL5.

Eu o verifiquei. Embora eu tenha comparado não com java, mas com sharp. Eu tenho a mesma velocidade. Não acho que Java seja pelo menos 30-40% mais rápido do que Sharp. Se existe uma diferença, ainda não se sabe a favor de quem. Concordo em comparar também com java. Qual código você recomendaria para os testes comparativos?

Bem, então despeje as primeiras diferenças de estratégias de Equidade em um arquivo CSV e otimize-o.

Não estou interessado em tal variante. Eu quero um código incorporado. E eu o farei.

Por que você precisa de desculpas para que a MQL5 possa supostamente "ultrapassar" uma aplicação, rodando em código de máquina?

Veja acima. Não conto com a ultrapassagem, conto em ser idêntico (mais ou menos 10%).

Vá em frente. O algoritmo Brown-Robinson não é um segredo. Aqui está o código em Java:

Sim, eu tenho esse código. Você já a postou. Não consegui entender de imediato. Eu estava contando com comentários, pelo menos, para realmente descobrir, não apenas para brincar.

Está bem, vou tentar novamente. Há descrições da idéia do algoritmo na Internet. Eu vou descobrir.

 
MetaDriver:

Yura, isto parece ser uma novidade para você, entretanto a máquina virtual mql5 funciona de forma semelhante. O compilador faz bytecode, antes de lançá-lo é pré-compilado em um nativ. É o mesmo que em java e afiado. Você deve ler o fórum mql5 com mais freqüência.

Eu o verifiquei. Embora eu tenha comparado não com java, mas com sharp. Eu tenho a mesma velocidade. Não acho que Java seja pelo menos 30-40% mais rápido do que Sharp. Se existe uma diferença, ainda não se sabe a favor de quem. Concordo em comparar também com java. Qual código você recomendaria para os testes comparativos?

Não estou interessado em tal variante. Eu quero um código incorporado. E eu o farei.

Veja acima. Eu não acho que a ultrapassagem seja idêntica (mais ou menos 10%).

Sim, eu tenho esse código. Você já a postou. Não consegui entender de imediato. Eu estava contando com comentários, pelo menos, para realmente descobrir, não apenas para brincar.

Está bem, vou tentar novamente. Há descrições da idéia do algoritmo na Internet. Eu vou descobrir.

hilariante...

no entanto

;)

 
MetaDriver:

Sim, eu tenho esse código. Você já a postou. Eu não consegui entrar logo em ação. Eu estava pelo menos esperando por um comentário para que eu pudesse realmente descobrir, e não apenas brincar.

Está bem, vou tentar novamente. Há descrições da idéia do algoritmo na Internet. Eu vou descobrir.

Não há nada de complicado no código. Eu passo em argumentos uma matriz de pagamento - a[][], na saída a estratégia ótima do jogador por colunas da matriz de pagamento - 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
Tudo o mais, qualquer programador que conheça idiomas semelhantes ao C compreenderá sem qualquer ajuda. A única diferença entre Java e C é que não há necessidade de memória livre. Isto é, se uma variável for declarada dentro de um bloco de colchetes {}, isto significa que após o bloco ser fechado, a variável fora do bloco é inválida e a máquina virtual Java irá independentemente liberar a memória que foi alocada para ela. Se for feita uma tentativa de referência a uma variável declarada dentro de um bloco fora desse bloco, o compilador Java gerará um erro.
 
Alex5757000:
Por que você não escreve tudo isso em mql5 e afixa as fontes?

O código fonte está disponível ao público em http://r-portfolio.sourceforge.net/

Se você precisar deles, você pode reescrevê-los em qualquer linguagem de programação ou contatar Job - eles fazem vários caprichos e luxúrias daqueles que precisam implementar algo em código MQL.

 
Yuri, tenho uma pergunta sobre a formação de um portfólio com seu programa. Fiz essa pergunta no tópico "Consultor Especialista em Correlação", mas encontrei esse tópico e vou fazê-la aqui. Você inclui o ouro na carteira junto com as principais moedas, mas os pares de moedas e o ouro têm preços de carrapato diferentes. Como isso é corrigido no cálculo e que pares você utiliza para sua carteira? Estou interessado neste tópico e gostaria de saber de um especialista experiente os resultados aproximados da utilização do sistema.
 
FION:
Yuri, tenho uma pergunta sobre a formação de um portfólio com seu programa. Fiz essa pergunta no tópico "Consultor Especialista em Correlação", mas encontrei esse tópico e vou fazê-la aqui. Você inclui o ouro na carteira junto com as principais moedas, mas os pares de moedas e o ouro têm preços de carrapato diferentes. Como isso é corrigido no cálculo e que pares você utiliza para sua carteira? Estou interessado neste tópico e gostaria de saber de um especialista experiente os resultados aproximados da utilização do sistema.
Veja a resposta ao consultor de correlação
 
Reshetov:

Máquinas virtuais Java realizam a compilação JIT, ou seja, compilam o código Java em código de máquina antes de executar o programa. Portanto, a execução de aplicações Java é feita em código de máquina.


jit em java compila a código de máquina em peças. Até onde eu entendo, o mql5 compila o programa inteiro para usinar o código de uma só vez - isto é mais do que um erro.
 
Reshetov:
Veja a resposta ao consultor de correlação

.

http://sourceforge.net/projects/r-portfolio/ - ele está disponível em russo?


Razão: