Discussão do artigo "Matemática na negociação: indices de Sharpe e de Sortino" - página 2

 
Ivan Titov #:
Eu entendi corretamente que o Sharpe.mqh calcula apenas o índice Sharpe anual? O Sortino mensal não funcionará?

O artigo contém a resposta para sua pergunta.

 
Andrey Khatimlianskii #:

Novamente, o que é um "número baixo"? Parece-me que 70-80 é baixo, mas você não tem uma penalidade nesses passes.

Os números são comparados a outros passes?

Eles são normalizados pela duração do intervalo de teste?

É provável que algum valor fixo seja definido, caso contrário, você teria que recalcular toda a tabela de resultados várias vezes.

Concordo com seus argumentos acima.

 
Andrey Khatimlianskii #:
Eles coincidem, mas nem sempre

Se você definir o período de tempo semanal no testador, eles quase sempre não coincidem:

No período de tempo mensal, a diferença é ainda maior:


 
Rashid Umarov #:

O artigo contém a resposta para sua pergunta.

Não encontrei a resposta para minha pergunta no artigo, mas, a julgar pelo código Sharpe.mqh, o Sortino não está nele. Por isso, anexei o código alterado com a opção de cálculo do Sortino abaixo. Ao mesmo tempo, otimizei o código em termos de chamadas de função desnecessárias.

Em minha opinião, a desvantagem do coeficiente de Sortino é que somente os rendimentos abaixo da taxa livre de risco (zero, nesse caso) são considerados para seu cálculo. Mas um retorno positivo em um dos períodos abaixo da média calculada para a estratégia testada também é um risco. É por isso que adicionei um cálculo de coeficiente que leva em conta apenas os retornos abaixo da média. Como não encontrei um análogo, modestamente o chamei de coeficiente de Titov)). Quando eu o encontrar, mudarei seu nome.

No original, é inconveniente que o período de cálculo dependa do período de tempo atual. Por isso, acrescentei a definição do período de cálculo (se não for explicitamente definido, o período de tempo atual será considerado):

Returns.SetTF(PERIOD_MN1);

Não encontrei em nenhuma fonte a necessidade de usar o logaritmo do rendimento ao calcular o índice de Sharpe e trazê-lo para o valor anual. É por isso que adicionei a possibilidade de desativar essas opções.

Por alguma razão, os exemplos do artigo ignoram períodos com retornos zero. Isso distorce o resultado. Portanto, adicionei uma opção para incluir esses períodos no cálculo.

Exemplo de uso do cálculo do índice de Sharpe como no artigo original:

#include <Sortino.mqh>
CReturns Returns;

..

void OnTick()
{
        Returns.OnTick();
        ..
}


double OnTester(void)
{
        return(Returns.OnTester(DEF_SHARPE));
}

Exemplo de cálculo do coeficiente de Sortino com todas as outras coisas sendo iguais:

#include <Sortino.mqh>
CReturns Returns;

..

void OnTick()
{
        Returns.OnTick();
        ..
}


double OnTester(void)
{
        return(Returns.OnTester(DEF_SORTINO));
}

Para mim, decidi avaliar o risco de retornos abaixo da média em intervalos mensais:

#include <Sortino.mqh>
CReturns Returns;

..

int OnInit()
{
        Returns.SetTF(PERIOD_MN1);
        ..
}


void OnTick()
{
        Returns.OnTick();
        ..
}


double OnTester(void)
{
        return(Returns.OnTester(DEF_TITOV, false, false, false));
}
Arquivos anexados:
Sortino.mqh  10 kb
 
Ivan Titov #:
Não encontrei em nenhuma fonte a necessidade de usar o logaritmo dos retornos ao calcular o índice de Sharpe

Para responder com uma citação

O uso do logaritmo dos retornos no cálculo do índice de Sharpe não é estritamente necessário, mas pode ser útil para simplificar os cálculos e melhorar as propriedades estatísticas dos dados, especialmente ao lidar com longos períodos de tempo ou ativos altamente voláteis. Os retornos logarítmicos são frequentemente usados porque proporcionam uma melhor aproximação da distribuição normal dos retornos e simplificam os cálculos ao compilar portfólios.

Eu acrescentaria: experimente sem logaritmos e me conte sobre o efeito colateral incomum. Você deve encontrá-lo.

 
Ivan Titov #:
Não encontrei em nenhuma fonte a necessidade de calcular o índice de Sharpe e trazê-lo para um valor anualizado.

Outra citação

Quanto a trazer o índice de Sharpe para um valor anualizado, isso é feito para padronizar o índice e permitir a comparação entre diferentes estratégias de investimento e carteiras, independentemente da escala de tempo original do investimento. Essa é uma prática comum que ajuda os investidores a medir o desempenho do investimento em relação a um padrão comum, especialmente quando as comparações são feitas entre diferentes tipos de ativos ou estratégias com diferentes frequências de negociação

 
Rashid Umarov #:
Vou responder com uma citação

Por fontes, eu quis dizer informações sobre os índices de Sharpe e Sortino fora deste artigo.

Rashid Umarov #:
Quanto a trazer o índice de Sharpe para um valor anualizado, isso é feito para padronizar o índice, permitindo que ele seja comparado entre diferentes estratégias de investimento e carteiras, independentemente da escala de tempo original do investimento.
O índice de Sharpe é a razão entre o retorno médio dos segmentos de um determinado período e o desvio padrão dos mesmos segmentos. Ou seja, a duração dos segmentos não é muito importante para a possibilidade de comparar estratégias entre si. Na minha opinião, é aconselhável escolher um comprimento várias vezes maior do que a duração média de uma negociação para remover ruídos desnecessários.
Rashid Umarov #:
Experimente sem logaritmos e me conte sobre o efeito colateral incomum. Você deve encontrá-lo

Eu tentei: nada de anormal. Mas encontrei um erro e anexei a versão corrigida.

Arquivos anexados:
Sortino.mqh  10 kb
 
Rashid Umarov #:

Vou responder com uma citação

Acrescentarei por mim mesmo - experimente sem logaritmos e me conte depois sobre o efeito colateral incomum. Você deve encontrá-lo.

Curiosamente, para esse patrimônio, esse script fornece um Sharpe de 2,08:

E para este (o mesmo com reinvestimento) 3,66:

Embora seja óbvio que a qualidade do segundo patrimônio líquido seja pior (o reinvestimento sempre piora a qualidade do patrimônio líquido).

E se, em vez de logaritmos de incrementos de patrimônio líquido, usarmos os próprios incrementos:

         log_return = (m_equities[i] - prev_equity); // incremento 
         //log_return = MathLog(m_equities[i] / prev_equity); // incremento do logaritmo

Obteremos 3,85 para o primeiro e 2,1 para o segundo. Muito mais adequado.

 
Além disso, o Sharpe em logaritmos depende significativamente do tamanho do depósito inicial. No exemplo acima (patrimônio líquido 1), com um depósito inicial de 4.000, ele dá 2,08. Com um depósito de 400.000, ele dá 3,83. Embora a forma do patrimônio líquido não tenha mudado de forma alguma (negociação com um lote fixo).
 

O Sharpe em logaritmos não depende do tamanho do depósito somente no caso de negociação com reinvestimento.

Mas, nesse caso, o Sharpe em incrementos simples não depende do tamanho do depósito.

Portanto, não entendo por que devo usar o Sharpe em logaritmos.