MetaTrader 5 build 3210: adicionamos novos métodos de matrizes e controle de valor mínimo/máximo de indicador

Alterado o algoritmo de cálculo Sharpe Ratio, agora é calculado da maneira clássica e seu valor é reduzido ao intervalo anual

11 fevereiro 2022

MQL5

  1. Adicionadas as funções Min, Max, ArgMin, ArgMax e Sum para vetores e matrizes, que permitem encontrar valores mínimos e máximos, índices e soma correspondentes.
  2. Adicionado suporte para métodos Flat para matrizes. Isto permite que um elemento matricial seja endereçado através de um único índice, e não através de dois.
    double matrix::Flat(ulong index) const;      // getter
    void matrix::Flat(ulong index,double value); // setter

    Pseudocódigo para calcular o endereço de um elemento da matriz:

    ulong row=index / mat.Cols();
    ulong col=index % mat.Cols();
    
    mat[row,col]

    Por exemplo, para uma matriz matrix mat(3,3) o acesso aos elementos pode ser registrado assim:

      para leitura —  x=mat.Flat(4), o que corresponde à expressão x=mat[1][1]
      para registro —  mat.Flat(5, 42), o que corresponde à expressão mat[1][2]=42

    Caso seja chamada uma função com um índice de matriz inválido, será gerado um erro crítico de
    execução - OutOfRange.
  3. Melhorada a formatação de números fracionários nos parâmetros de entrada MQL5 do programa. Quando eram lidos alguns números reais, nos parâmetros de entrada eram substituídos números com mais zeros, por exemplo, 0,4 era representado como 0.400000000002.
  4. Corrigidos bugs da biblioteca matemática Math\Stat\Math.mqh. Além disso, foi modificada a função MathSample desta biblioteca para corresponder ao comportamento clássico do mesmo tipo de bibliotecas matemáticas quando da amostragem com retorno.
  5. Corrigido um bug ao usar CopyTicks/CopyTicksRange, este erro fazia com que os dados desatualizados fossem dados à meia-noite para aqueles casos em que não eram recebidos ticks do instrumento.
  6. Acrescentados os novos valores INDICADOR_FIXED_MINIMUM e INDICADOR_FIXED_MAXIMUM à enumeração ENUM_CUSTOMIND_PROPERTY_INTEGER.
    Estas propriedades são utilizadas para habilitar/desabilitar a fixação dos valores mínimos e máximos do indicador através da função IndicatorSetInteger. Ao chamar IndicatorSetInteger(INDICATOR_FIXED_MINIMUM/INDICATOR_FIXED_MAXIMUM, true) é usado o valor mínimo/máximo atual, respectivamente.



Tester

  1. Alterado o algoritmo de cálculo Sharpe Ratio, agora é calculado da maneira clássica e seu valor é reduzido ao intervalo anual. O algoritmo anterior se baseava no PnL (spread of profits and losses), mas não levava em conta as flutuações do capital líquido em posições abertas. Agora são levados em conta os altos e baixos do capital líquido, e o valor do próprio índice de Sharpe é tratado classicamente:
    •  Sharpe Ratio < 0              Estratégia não lucrativa, não é boa.  Ruim.
    •  0 < Sharpe Ratio  < 1.0    Risco não compensa. Tais estratégias podem ser tomadas para operar se não houver alternativas.  Incerto.
    • Sharpe Ratio ≥ 1.0            Caso o índice de Sharpe seja maior que um, o risco está compensando, a carteira/estratégia está funcionando. Bom.
    • Sharpe Ratio ≥ 3.0            Um número alto indica que a probabilidade de ocorrência de uma perda em qualquer negócio em particular é muito baixa. Muito bom

Terminal

  1. Otimizado o consumo de memória do terminal.
  2. Aprimorado o funcionamento do subsistema de rede para melhorar o desempenho e reduzir a latência da rede.
  3. Removida a exibição do zero da grade no indicador quando a renderização da grade estiver desativada.