Discussão do artigo "R quadrado como uma estimativa da qualidade da curva de saldo da estratégia" - página 4

 

As conclusões sobre alguma relação estatística podem ser incorretas se os valores atípicos não forem tratados - detecção de valores atípicos.

 
Dennis Kirichenko:

As conclusões sobre alguma relação estatística podem estar erradas se a detecção de outliers não for realizada.

Se o R^2 for usado como critério para a otimização (OnTester), qualquer análise dos resíduos LR e seus coeficientes deverá ser descartada.

Como a análise adicional aumenta o tempo precioso da otimização e é de pouca utilidade, a situação não mudará drasticamente: as mesmas curvas de patrimônio líquido "suaves" estarão no topo, o que era desejado inicialmente.

 
СанСаныч Фоменко:

O autor demonstra uma total falta de compreensão dos processos de chance. Todas as conclusões do artigo não têm nada a ver com o próprio conceito de chance e induzem as pessoas ao erro.

Deixe-me explicar essa opinião.

Logo no início do artigo, é dada uma definição:

A regressão linear é uma dependência linear de uma variável y em outra variável independente x, expressa pela fórmula y = ax+b. Nessa fórmula, a é o multiplicador e b é o coeficiente de polarização

A regressão linear NÃO é expressa pela fórmula

y = ax+b é uma fórmula de equação linear,

mas é expressa pela fórmula

y = ax+b + erro

O erro deve ser NORMALMENTE DISTRIBUÍDO e, se não for, surgem muitas nuances que limitam muito a aplicação da regressão linear.

É extremamente importante perceber que os coeficientes de regressão linear, diferentemente da equação linear, NÃO são constantes, são valores de chance e, se você usar um ajuste de regressão linear padrão, por exemplo, no R, sempre será especificado o desvio desse valor de coeficientes para os coeficientes de regressão linear, bem como a probabilidade (probabilidade na hipótese nula de NÃO HÁ EVIDÊNCIA DESSE COEFICIENTE). Mais uma vez: diferentemente de uma equação linear, os coeficientes de regressão linear podem não existir de fato. É por isso que o coeficiente R2 discutido no artigo só faz sentido para regressões em que a probabilidade de não existência dos coeficientes de regressão é inferior a 10%. Em séries financeiras, nunca vi que os coeficientes da regressão linear fossem significativos e, portanto, é possível usar essa mesma regressão linear.

San Sanych, não interfira. Nós moldamos como sabemos!

p.s. É óbvio que você leu na diagonal. O R^2 não é calculado para gráficos de cotações, mas para patrimônio líquido. Sua principal tarefa é mostrar o patrimônio líquido uniforme. É isso. Se ele corresponde ao aleatório ou não, deixe que o usuário decida:

fxsaber:

Se fizermos do R^2 um critério de otimização (OnTester), qualquer análise dos resíduos de LR e de seus coeficientes será um inferno.

Como a análise adicional aumenta o tempo precioso da otimização e é de pouca utilidade, a situação não mudará drasticamente: as mesmas curvas de patrimônio líquido "suaves" estarão no topo, o que era inicialmente desejado.

+
 

De qualquer forma, o sinal errado é retirado daqui:

Começamos com 100.000. Comissão 0. A soma das transações +513, mas o saldo total 99 755,90, ou seja, em algum lugar faltam 757,1$

Como é isso?

 
Vasiliy Sokolov:

Em resumo, o sinal errado é retirado daqui:

Eu o reformularia um pouco. A observação sobre a exatidão do sinal dizia respeito ao caso geral, não apenas ao patrimônio líquido. Se você comparar o primeiro e o último valores por patrimônio líquido, como fez, é provável que o sinal incorreto seja derrotado nesse caso. Seria melhor lidar com o caso geral.

Começamos com 100.000. Comissão 0. A soma das transações é +513, mas o saldo total é 99.755,90, ou seja, $757,1 estão faltando em algum lugar.

Como isso acontece?

Um relatório em HTML ajudaria a entender.

 
fxsaber:

Eu reformularia um pouco. A observação sobre a correção do sinal era sobre o caso geral, não apenas sobre o patrimônio líquido. Se você comparar o primeiro e o último valor por patrimônio líquido, como fez, então a incorreção do sinal provavelmente será derrotada nesse caso. Seria melhor lidar com o caso geral.

Um relatório em HTML ajudaria a entender isso.

Infelizmente, ele mostra o mesmo resultado que o do saldo. Os totais em ambos os casos coincidem completamente: +513$. Mas, em geral, eles deveriam coincidir, porque após o teste todas as negociações são fechadas e o patrimônio líquido é comparado com o saldo.

fxsaber:

Um relatório em HTML ajudaria a entender.

Vou enviá-lo agora.

 

Já sei. Esqueci de levar em conta o swap (o Swap to profit não está resumido)!

 

Concluído. Corrigida a função de cálculo do saldo. Agora, cada transação também leva em conta o swap:

//+------------------------------------------------------------------+
//| Retorna a pontuação R^2 calculada com base no equilíbrio da estratégia.
//+------------------------------------------------------------------+
double CustomR2Balance(ENUM_CORR_TYPE corr_type = CORR_PEARSON)
{
   HistorySelect(0, TimeCurrent());
   double deals_equity[];
   double sum_profit = 0.0;
   int current = 0;
   int total = HistoryDealsTotal();
   for(int i = 0; i < total; i++)
   {
      ulong ticket = HistoryDealGetTicket(i);
      double profit = HistoryDealGetDouble(ticket, DEAL_PROFIT);
      double swap = HistoryDealGetDouble(ticket, DEAL_SWAP);
      if(profit == 0.0 && swap == 0.0)
         continue;
      if(ArraySize(deals_equity) <= current)
         ArrayResize(deals_equity, current+16);
      sum_profit += profit + swap;
      deals_equity[current] = sum_profit;
      current++;
   }
   ArrayResize(deals_equity, current);
   return CustomR2Equity(deals_equity, corr_type);
}

Corrigido o cálculo do patrimônio líquido para que seu valor final seja sincronizado com o resultado real:

//+------------------------------------------------------------------+
//|| Adiciona monitoramento de patrimônio|
//+------------------------------------------------------------------+
double CStrategyList::OnTester(void)
{
   switch(m_custom_type)
   {
      case CUSTOM_NONE:
         return 0.0;
      case CUSTOM_R2_BALANCE:
         return CustomR2Balance(m_corr_type);
      case CUSTOM_R2_EQUITY:
      {
         double equity[];
         m_equity_exp.GetEquityArray(equity);
         int total = ArrayResize(equity, ArraySize(equity)+1);
         equity[total-1] = AccountInfoDouble(ACCOUNT_EQUITY);
         return CustomR2Equity(equity, m_corr_type);
      }
   }
   return 0.0;
}

Como o intervalo de coleta do patrimônio líquido pode ser grande, o último valor conhecido pode ser diferente do valor real. Portanto, adicionamos um último valor adicional igual ao resultado final.

p.s. Foram feitas correções no artigo. O artigo foi enviado ao moderador para atualização.
 
Vasiliy Sokolov:

Já sei. Esqueci de levar em conta o swap (o swap não soma o lucro)!

Eu continuaria a não levar em conta

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação.

Discussão do artigo "R-quadrado como uma avaliação da qualidade da curva de equilíbrio da estratégia"

fxsaber, 2017.10.24 15:18

Código para calcular "patrimônio", adequado para R^2. Escrito no estilo MT4, não é difícil de traduzir para o MT5...

static double GetOrderProfit( void )
  {
    return((OrderProfit()/* + OrderCommission() + OrderSwap()*/) / OrderLots()); // às vezes é útil ignorar a comissão e a troca
  }

A troca não tem quase nada a ver com a avaliação da lucratividade do TS e só introduz distorções ao avaliar a robustez.

 
fxsaber:

Eu continuaria a desconsiderar

O swap não tem quase nada a ver com a avaliação da lucratividade de um TS e só introduz distorções ao avaliar a solidez.

Essa é uma declaração controversa. Mas essa não é nem mesmo a questão aqui. São apenas as condições de limite. O tamanho do swap não é grande, mas quando está próximo de zero, sua contabilização ou não pode afetar o sinal final.