Discussão do artigo "Receitas MQL5 – Obtendo as propriedades de uma posição de cobertura aberta"

 

Novo artigo Receitas MQL5 – Obtendo as propriedades de uma posição de cobertura aberta foi publicado:

A plataforma MetaTrader 5 não é apenas multimercado, pois ela também permite que utilizar diferentes sistemas de registro de posição. Esses recursos expandem significativamente as ferramentas para a implementação e formalização de ideias de negociação. O artigo trata de como processar e levar em conta as propriedades das posições quando elas são registradas independentemente (cobertura - 'hedge'). Além disso, é proposta uma classe derivada, é exemplificado como processar e obter as propriedades de uma posição de cobertura.

Relativamente recentemente no terminal de negociação MetaTrader 5 surgiu a capacidade oportunidade de abrir ordens multidirecionais. Esse sistema de registro de ordens é chamado de cobertura (em inglês, 'hedge'). Esse sistema de ordens permite que você transfira facilmente os algoritmos de negociação do MetaTrader 4 para a quinta versão do terminal, aproveitando ao máximo sus recursos. Você pode saber mais sobre a cobertura do MetaTrader 5 no artigo "Agora a plataforma MetaTrader 5 possui um sistema de cobertura de registro de posições".

Esse artigo fala sobre as propriedades da posição agregada, tratada no sistema de cobertura.

Painel de propriedades da posição de cobertura

Fig. 4 Painel de propriedades da posição de cobertura

Autor: Denis Kirichenko

 

Opreço de abertura é normalizado por Digits por algum motivo.

A comissão é calculada com um erro e lentamente: ela é normalizada e dobrada a cada etapa do ciclo.

 
fxsaber:

Opreço de abertura é normalizado por Digits por algum motivo.

A comissão é calculada com um erro e lentamente: ela é normalizada e dobrada a cada etapa do ciclo.

Obrigado por sua opinião.

Verifiquei o código referente à normalização. Há apenas dois casos na classe CHedgePositionInfo: comissão e margem. Os preços permanecem não normalizados. O preço de abertura, pelo que entendi, é implicitamente normalizado para a impressão no script de teste Test_hedge_properties.mq5.

Em seguida, sobre a comissão. Você a comparou com os registros na guia "History"? Lá, para cada negociação, o valor da comissão é normalizado com uma precisão de 2. E a duplicação está levando em conta o momento da saída(DEAL_ENTRY_OUT). Ou seja, o painel reflete a comissão para o ciclo completo - abertura e fechamento. Há uma menção sobre isso no artigo.

 
Denis Kirichenko:

Obrigado por sua opinião.

Verifiquei o código referente à normalização. Há apenas dois casos na classe CHedgePositionInfo: comissão e margem. Os preços permanecem não normalizados. O preço de abertura, pelo que entendi, é implicitamente normalizado para a impressão no script de teste Test_hedge_properties.mq5.

Sim, era sobre a impressão.

Depois, sobre a comissão. Você a comparou com os registros na guia "History"? Lá, para cada negociação, o valor da comissão é normalizado para o valor mais próximo de 2. E a duplicação está levando em conta o momento da saída(DEAL_ENTRY_OUT). Ou seja, o painel reflete a comissão para o ciclo completo - abertura e fechamento. Há uma menção a isso no artigo.

Não, eu estava julgando pelo código. Abrir uma posição e depois fechar uma parte dela. De acordo com seu código, a comissão da posição atual não será alterada.

Além disso, dobrar a posição é uma boa intenção que cria um problema. A questão é que você precisa que o saldo seja igual ao patrimônio líquido + PositionCommission depois de fechar todas as posições. Mas, nesse caso, não deve haver duplicação, porque o MT5 já refletiu a comissão de abertura no saldo ao abrir as posições.


E é muito caro realizar a normalização em cada etapa do ciclo ao calcular a comissão. Isso é importante ao otimizar.

 
fxsaber:

...Não, a julgar pelo código. Abra uma posição e depois feche parte dela. De acordo com seu código, a comissão da posição atual não será alterada.

Além disso, a duplicação é uma boa intenção que cria um problema. A questão é que você precisa que o saldo seja igual ao patrimônio líquido + PositionCommission depois de fechar todas as posições. Mas, nesse caso, não deve haver duplicação, porque o MT5 já refletiu a comissão de abertura no saldo ao abrir as posições.

Sim, ela não será alterada. O objetivo era mostrar a comissão máxima que pagamos no total para o hedge atual. E, além disso, já pagamos parte dela e pagaremos a segunda parte mais tarde. Mas há nuances.

Por exemplo, existe um tipo de transação chamado DEAL_ENTRY_OUT_BY. Não há comissão alguma, pelo menos com minha corretora. A comissão também pode mudar (a entrada e a saída podem ter custos diferentes) se a moeda da conta não coincidir com a moeda base. Portanto, meu exemplo está longe de ser ideal....

O que o faz pensar que eu preciso disso? Acabei de mostrar uma das maneiras de calcular custos indiretos como a comissão.


Bem, ao calcular a comissão, é muito caro normalizar em cada etapa do loop. Isso é importante na otimização.

Exceto para otimização. Bem, ninguém o impede de fazer suas próprias alterações e levá-las em conta no código.

 
Denis Kirichenko:

Sim, isso não mudará. O objetivo era mostrar o valor máximo de comissão que pagamos no total para o hedge atual. E, além disso, já pagamos parte dela e pagaremos a segunda parte mais tarde. Mas há nuances.

Por exemplo, existe um tipo de transação chamado DEAL_ENTRY_OUT_BY. Não há comissão alguma, pelo menos com meu corretor.

CloseBy não está sujeito a comissão por definição.

A comissão também pode mudar (a entrada e a saída podem ter custos diferentes) se a moeda da conta não for a mesma que a moeda base. Portanto, meu exemplo está longe de ser perfeito....

O que o faz pensar que eu preciso disso? Acabei de mostrar uma das maneiras de calcular custos indiretos como a comissão.

Porque na linguagem do MT4 Equity = Saldo + Lucro + Swap + Comissão. Essa é a lógica mais comum. Mas é claro que você pode ter sua própria lógica.

Exceto pela otimização. Bem, ninguém o impede de fazer suas próprias alterações e levá-las em conta no código.

Os desenvolvedores estão tentando tornar o Otimizador mais rápido. Mas o código lento é permitido nos artigos. Parece estranho.

 
fxsaber:

Porque, na linguagem do mesmo MT4, patrimônio líquido = saldo + lucro + swap + comissão. Essa é a lógica mais comum. Mas é claro que você pode ter sua própria lógica.

Você não vai acreditar em mim, eu penso da mesma forma sobre o patrimônio líquido :-))))

Farei uma escolha para o método de comissão, como contar. Fazer alterações no código...

...Os desenvolvedores falam em tornar o Otimizador mais rápido. Mas nos artigos eles permitem código lento. Parece estranho.

Em linguagem diplomática. Você ainda está fervendo? - Estou testando tudo na nuvem há muito tempo e não me preocupo com a existência de normalizações desnecessárias e macros de várias linhas em algum lugar...

 
Denis Kirichenko:

Estou testando tudo na nuvem há muito tempo e não me preocupo com o fato de que em algum lugar há normalizações desnecessárias e nenhuma macro de várias linhas...

Parece ser uma tendência de longa data substituir até mesmo a otimização algorítmica mais simples pelo poder do hardware. Eu não posso fazer isso.

 
fxsaber:

Até mesmo a otimização algorítmica mais simples sendo substituída pelo poder do hardware é aparentemente uma tendência estabelecida há muito tempo. Não posso fazer isso.

A geração do gigahertz e do gigabyte.

 

Hi,

Quando baixei o arquivo zip, extraí-o e abri os arquivos no editor, mas quando os compilei, eles retornaram com muitos erros.


Há algo que eu possa usar?


Obrigado

 

Se você seguir meu caminho, não haverá erros. O procedimento é simples. Abra seu MetaEditor e:

1) crie uma subpasta "Hedge" na pasta "Shared Projects" ( Projetos compartilhados);

2) coloque os arquivos de origem na subpasta.


Navegador ME

Em seguida, você pode compilar o HedgePropertiesEA.mq5 (um consultor especialista) e o Test_hedge_properties.mq5 (um script). Quando a compilação for concluída com êxito, você encontrará os executáveis no navegador do terminal.


Navegador MT5