Discussão do artigo "Desenvolvendo um EA multimoeda (Parte 12): Gerenciamento de Risco como em empresas de prop trading"

 

Novo artigo Desenvolvendo um EA multimoeda (Parte 12): Gerenciamento de Risco como em empresas de prop trading foi publicado:

No EA em desenvolvimento, já temos um mecanismo de controle de rebaixamento implementado. No entanto, ele tem uma natureza probabilística, pois se baseia nos resultados de testes com dados históricos de preços. Assim, o rebaixamento, embora com pequena probabilidade, às vezes pode exceder os valores máximos esperados. Vamos tentar adicionar um mecanismo que garanta a manutenção de um nível de rebaixamento predefinido.

Recentemente, o tema de controle de riscos foi abordado em artigos como Gerenciador de risco para operar manualmente e Gerenciamento de Risco para trading algorítmico. Neles, o autor propôs uma implementação programática que monitora o cumprimento de vários parâmetros de trading com indicadores predefinidos. Por exemplo, ao exceder o nível de perda estabelecido para o dia, semana ou mês, a negociação é pausada.

Outro artigo bastante interessante foi Aprenda algumas lições com as Empresas de Prop Trading (Parte 1) — Uma introdução, onde o autor examina os requisitos de trading impostos por essas empresas para testar traders que desejam gerenciar capital. Apesar da controvérsia em torno dessas empresas, amplamente discutida em vários recursos de trading, a aplicação de regras claras de controle de riscos é uma das chaves para o sucesso no trading. Portanto, por que não aproveitar essa experiência já existente e implementar nosso próprio gerenciamento de riscos, com base no modelo de controle de riscos usado por empresas de prop trading? 

Autor: Yuriy Bykov

 
Trabalho incrível que você está fazendo! Obrigado pelo artigo.
 
Obrigado pelo feedback! Faremos o possível para continuar a manter o nível alto.
 

Obrigado pelo artigo interessante! Bom trabalho.

Se me permite, gostaria de esclarecer alguns pontos lógicos e técnicos:

Entendi corretamente que, ao controlar os riscos no método DailyLoss(), o risco de redução do patrimônio líquido não é levado em consideração?

Por que você usa macros ao trabalhar com matrizes?

Obrigado.

 

Obrigado pelo feedback!

Правильно я понимаю, что при контроле рисков в методе DailyLoss() не учитывается риск просадки по еквити?

Provavelmente está errado. O método DailyLoss() não avalia o tamanho do drawdown. Ele apenas converte o nível de drawdown máximo especificado para a moeda da conta em porcentagem, se necessário. A comparação em si ocorre no método CheckDailyLimit():

if(m_dailyProfit < -DailyLoss() && CMoney::DepoPart() > 0) { ... }

O valor de m_dailyProfit é atualizado a cada tick e é calculado como a diferença dos fundos atuais (patrimônio líquido) e o nível diário(o máximo do valor do saldo e dos fundos no início do período diário):

m_dailyProfit = m_equity - m_baseDailyLevel;

Portanto, parece que o rebaixamento dos fundos é simplesmente levado em consideração. Ou eu não entendi bem a pergunta?


Por que você usa macros ao trabalhar com matrizes?

Para compactar o código. As macros também permitem que você passe um bloco de código como parâmetro, ao passo que, ao implementar essas operações por meio de funções, não é possível passar um bloco de código para as funções como parâmetro.

 
Yuriy Bykov cada tick e é calculado como a diferença entre os fundos atuais (patrimônio líquido) e o nível diário(o máximo do saldo e dos fundos no início do período diário):

Portanto, parece que o rebaixamento dos fundos é simplesmente levado em consideração. Ou será que não entendi bem a pergunta?


Para compactação do código. Além disso, as macros permitem a passagem de um bloco de código como parâmetro, enquanto que, ao implementar essas operações por meio de funções, não é possível passar um bloco de código para as funções como parâmetro.

Muito obrigado por sua resposta extensa )) Vamos aguardar os novos artigos! )

 

Prezado Yuriy,

Estou tentando compilar o código, mas recebo o seguinte erro no VirtualRiskManager.mqh:

"Changed - undeclared identifier" na linha CVirtualReceiver::Instance().Changed(); // Notificar o destinatário sobre as alterações

Verifiquei o código várias vezes, mas não foi possível. Você pode me explicar o que está faltando?

Estou aguardando ansiosamente o próximo artigo desta série.

Muito obrigado

 

Olá!

Peço desculpas, mas esqueci de anexar pelo menos mais um arquivo no qual foram feitas edições. A partir da parte 16, um arquivo completo dos arquivos do projeto é anexado a cada artigo. Vou anexá-lo aqui para este artigo.

Arquivos anexados:
MQL5.zip  80 kb
 
Yuriy Bykov do projeto é anexado a cada artigo. Vou anexá-lo aqui para este artigo.
Muito obrigado