Discussão do artigo "Otimizando uma estratégia usando o gráfico do saldo e comparando os resultados com o critério "Balance + max Sharpe Ratio""

 

Novo artigo Otimizando uma estratégia usando o gráfico do saldo e comparando os resultados com o critério "Balance + max Sharpe Ratio" foi publicado:

Neste artigo, nós ainda consideramos um outro critério personalizado de otimização de uma estratégia de negociação com base na análise do gráfico de saldo. A regressão linear é calculada usando a função da biblioteca ALGLIB.

Ela representa o lucro por negociação para a linha de regressão traçada:

Fig. 2. Parâmetro TrendProfit

Fig. 2. Parâmetro TrendProfit

Autor: Vladimir Karputov

 

O artigo é interessante como um exemplo do uso de bibliotecas padrão para atingir o objetivo. Uso a análise de equilíbrio RMS há mais de dois anos no MT4 - é um método muito útil para Expert Advisors com média de posição.

Pessoalmente, o artigo carece de informações sobre a criação de um relatório personalizado, ou seja, a gravação dos resultados da otimização em um arquivo, especialmente ao otimizar por meio de agentes.

 

Houve um artigo recente (estou com preguiça de procurá-lo) que também usoua "regressão linear". Fiz um comentário detalhado sobre ele e vou repeti-lo.

Ambos os autores cometem erros idênticos: eles confundem conceitos qualitativamente diferentes de "regressão linear" e "aproximação linear". O primeiro se refere a variáveis aleatórias e o segundo a variáveis determinísticas. Suas equações diferem pela variável aleatória, que é o erro. Não sei como no Alglib, mas em qualquer pacote estatístico normal a contabilização do erro resulta na AVALIAÇÃO dos coeficientes de regressão, pois há um erro para eles, que pode ser múltiplo do valor nominal do coeficiente calculado, o que leva a um resultado triste: o valor do coeficiente é calculado, nós o vemos, mas na realidade ele não está lá, e não podemos usar o que vemos.


Se mudarmos as palavras "regressão linear" para "aproximação linear", o que corresponderá à essência do artigo, no qual a balança é considerada como um conjunto de valores determinísticos e não aleatórios, então o artigo é bastante interessante e útil.

 

Ei, por algum motivo, meu arquivo não inclui o balanceregression. Há alguma maneira de solucionar o problema? Eu o salvei em meus arquivos e em include.


 
Scott David Maclean :

Ei, por algum motivo, meu arquivo não inclui o balanceregression. Há alguma maneira de solucionar o problema? Eu o salvei em meus arquivos e em include.


1. Leia a descrição do erro e verifique seus caminhos.

2. Se você tiver algum erro, forneça resultados reproduzíveis: no mínimo, você precisa de um código completo e, no mínimo, precisa de uma prova da presença de arquivos nas pastas especificadas.

 

Tenho uma pergunta geral: por que, quando estamos preenchendo matrizes de resultados de negociação, consideramos apenas as negociações com impactos positivos no saldo? ou seja, por que arr_profits é preenchido apenas com negociações de (comissão + swap + lucro) > 0,0?

As quedas na curva de saldo (que são os resultados da perda de negociações) também não estão afetando a linha LR e, portanto, o GetProfitStability?

 

Recebi alguns erros quando tentei compilar o BalanceRegression.mph:


As duas linhas comentadas geraram o seguinte erro - depois de pesquisar um pouco, descobri que a biblioteca alglib foi atualizada.

As linhas atualizadas foram compiladas e o código foi executado, mas como nunca usei CMatrixDouble antes, não tenho 100% de certeza de que a correção esteja correta.


operator[] constant variable cannot be passed as reference


 CMatrixDouble xy(arr_size,2);
   for(int i=0;i<arr_size;i++)
     {
      //xy[i].Set(0,i+1);
      //xy[i].Set(1, arr_profits[i]);
      
      xy.Set(i, 0, i+1);
      xy.Set(i, 1, arr_profits[i]);


Além disso, a linha comentada, no mesmo arquivo, retornou uma variável indefinida - novamente, acho que foi devido à atualização da alglib:

//double TrendMSE=linear_report.m_rmserror;

double TrendMSE=linear_report.m_RMSError;