Bibliotecas: CTradeStatistics

 

CTradeStatistics:

Classe para o cálculo dos parâmetros de enumeração ENUM_STATISTICS.

Autor: Andrey Voytenko

 
Automated-Trading:

CTradeStatistics:

Autor: Andrey Voytenko

Boa tarde!

Estou interessado em saber se é possível colocar a correlação LR na função OnTester(), a fim de otimizar o Expert Advisor por esse critério, via Custom max?

 
forexman77:

Estou interessado em saber se é possível colocar a correlação LR na função OnTester()....

A descrição fornece um exemplo com OnTrade(). Nada o impede de mover os cálculos para OnTester().

 
avoitenko:

A descrição dá um exemplo com OnTrade(). Nada impede que você transfira os cálculos para OnTester().

Não estou muito familiarizado com o mql5, portanto, desculpe-me por quaisquer erros óbvios.

Tentei fazer isso no código do EA antes do OnDeinit:

double OnTester()
{
double lrk=TesterStatistics(STAT_LR_CORRELATION);
  return(lrk);
}

O erro "'STAT_LR_CORRELATION' - can't convert enum" é exibido.

Se for o caso:

double OnTester()
  {
//--- bloquear solicitações repetidas na mesma seção.
   static datetime time_on_trade;
   if(time_on_trade==TimeTradeServer())return;
   time_on_trade=TimeTradeServer();

//--- atualizar estatísticas
   if(!m_stat.Calculate())Print(m_stat.GetLastErrorString());

  }

Erros: "'return' - a função deve retornar um valor", " '}' - nem todos os caminhos de controle retornam um valor".

Linha 1 e 2 no EA:

#include <CTradeStatistics.mqh>
CTradeStatistics m_stat;

Diga-me o que está errado?

 

Fiz isso por tentativa e erro:

double OnTester()
{
CTradeStatistics m_stat;  
if(m_stat.Calculate()) PrintFormat("LR Correlation: %.2f",m_stat.LRCorrelation());
else Print(m_stat.GetLastErrorString());
double LRC=(double)m_stat.LRCorrelation();
return(LRC);
}
Acho que funcionou...?
 

Andrei, há alguns comentários.

1. Linha 500

if(m_balance_data.At(i)!=0.0) corrija para if(m_balance_data.At(i-1)!=0.0)


2. Linha 511
nenhuma verificação do denominador m_initial_deposit para 0

3. certifique-se de especificar que está usando o cálculo m_sharpe_ratio para a opção Índice de Sharpe Anual com a opção RiskFreeRate

pois essa é apenas uma das opções e é especificamente diferente da opção padrão.

 

Descobri que esse código não consegue calcular nenhuma estatística relacionada à redução do patrimônio líquido. Alguém conseguiu calcular o rebaixamento do patrimônio com seu próprio código?

 

O que quer dizer com isso? Devo estar entendendo mal sua pergunta, pois essa resposta simples não pode ser o que você está procurando, não é? ---> Com as classes de negociação do MT5, você pode criar um objeto de conta CAccountInfo acc; acc é o objeto de informações da conta criada que oferece acesso rápido a todas as funções de detalhes da conta. Então, faça o seguinte acc.Equity()-acc.Balance(). Bem, para ser honesto, você pode usar um código ainda mais simples acc.Profit(). Se positivo é lucro, se negativo é saque, certo? Lucro de patrimônio líquido negativo é o mesmo que saque. Profit() é a diferença entre patrimônio líquido e saldo

Se sua pergunta for mais complexa, adicione detalhes;)

 
Obrigado, Andrey! Excelente trabalho.
 
nenhum tempo médio de espera?
 

Funciona perfeitamente!

Se você quiser evitar receber avisos de compilação

você precisa adicionar o elemento null ao enum deal_result:

//+------------------------------------------------------------------+
//| deal result |
//+------------------------------------------------------------------+
enum deal_result
{
NOVALUE=0, //<---- added
WIN=1,
LOSS
};