Discussão do artigo "Expert Advisor universal: indicador CUnIndicator e trabalho com ordens pendentes (parte 9)"

 

Novo artigo Expert Advisor universal: indicador CUnIndicator e trabalho com ordens pendentes (parte 9) foi publicado:

O artigo descreve o trabalho com indicadores através da classe universal do CUnIndicator. Além disso, consideram-se novas formas de trabalhar com ordens pendentes. Observe que, a partir deste ponto, a estrutura do projeto do CStrategy muda significativamente. Agora todos os arquivos são colocados num único diretório para a conveniência dos usuários.

A captura de tela abaixo mostra um trecho do teste da estratégia CIpmulse 2.0, no testador de estratégias. Nela, podem ser vistas as ordens pendentes colocadas e o trabalho com elas:


Fig. 1. Trabalho com ordens pendentes no teste da estratégia Impulse 2.0

Autor: Vasiliy Sokolov

 

É simplesmente incrível! Estou falando do invólucro do indicador

A única coisa que, pessoalmente, me falta no seu maravilhoso Expert Advisor universal é a possibilidade de trabalhar no FORTS em uma conta com vários Expert Advisors diferentes, ou seja, acompanhar as posições dos Expert Advisors por mágica, e não por meios padrão.

Portanto, por enquanto, estou usando minhas próprias soluções

 
Viktor Vlasenko:

É simplesmente incrível! Estou falando do invólucro do indicador

A única coisa que me falta em seu maravilhoso Expert Advisor universal é a possibilidade de trabalhar com FORTS em uma conta com vários Expert Advisors diferentes, ou seja, manter o controle das posições por Expert Advisors por mágica, e não por meios padrão.

Portanto, até o momento, estou usando minhas próprias soluções

Para essa finalidade, existe o HedgeTerminal, cuja API está integrada ao Expert Advisor universal. A propósito, o universal expert foi originalmente criado como um wrapper para o HedgeTerminal. Mas, para popularizar o mecanismo, eu o separei do HT e comecei a desenvolvê-lo como um projeto independente.

 
Vasiliy Sokolov:

Para essa finalidade, existe o HedgeTerminal, cuja API, por sinal, está integrada ao Universal Expert Advisor. A propósito, o Universal Expert foi originalmente criado como um wrapper para o HedgeTerminal. Mas, para popularizar o mecanismo, eu o desvinculei do HT e comecei a desenvolvê-lo como um projeto independente.

Obrigado, eu li sobre o HedgeTerminal - ele é redundante para minhas necessidades e não quero trabalhar com a ferramenta fechada de outra pessoa.

E gosto muito da mudança da estrutura de pastas de arquivos na versão atual.

 

O que você quer dizer com especialista universal? Acho que começamos com o fato de que ele é tanto para o MT4 quanto para o MT5. Mas ele não é compilado para o MT4 e suas bibliotecas estão todas em MQL5.

 
void CUnIndicator::PushName(string name)
{
   int old_size = ArraySize(m_params);
   int size = ArrayResize(m_params, ArraySize(m_params) + 1);
   for(int i = 0; i < old_size; i++)
      m_params[i+1] = m_params[i];
   m_params[0].type = TYPE_STRING;
   m_params[0].string_value = name;
}

Suspeito que aqui toda a matriz m_params esteja obstruída pelo primeiro parâmetro aplicado a ela

 

void CUnIndicator::PushName(string name)
{
int old_size = ArraySize(m_params);
int size = ArrayResize(m_params, ArraySize(m_params) + 1);
for(int i = 0; i < old_size; i++)
m_params[i+1] = m_params[i];
m_params[0].type = TYPE_STRING;
m_params[0].string_value = name;
m_params_count++;
}

Parece-me que deveria ser assim, preste atenção a m_params_count++; aumentamos o tamanho da matriz de parâmetros passados, portanto, aumentamos o contador de parâmetros passados, pelo menos quando chamamos o indicador sem parâmetros, funcionou assim. Em outros casos, parece que o último parâmetro não foi percebido no início do indicador.

 

Sim, e na mesma função:

For(int i = old_size-1; i >= 0; i--)
m_params[i+1] = m_params[i];

 

Belo artigo.

Quando o método Create da classe CUnIndicator é usado para um indicador definido pelo cliente, esse código tem uma chamada para PushName(), que é uma função com erros.

Ao criar um indicador definido pelo usuário, o primeiro elemento do MqlParam parameters_array[] deve conter o nome do indicador personalizado.

Todos os elementos devem ser movidos uma posição para a direita para liberar o elemento 0 para o nome do indicador personalizado.

Modifique o seguinte:

void CUnIndicator::PushName(string name)
{
   int old_size = ArraySize(m_params);
   int size = ArrayResize(m_params, ArraySize(m_params) + 1);
   //for(int i = 0; i < old_size; i++) m_params[i+1] = m_params[i]; // está errado escrever dessa forma
   for(int i=old_size-1;i>=0;i--) m_params[i+1] = m_params[i]; /Isso mesmo.
   m_params[0].type = TYPE_STRING;
   m_params[0].string_value = name; // Nome do indicador personalizado
   m_params_count++;// Número de parâmetros mais um 
}
 
Pergunta ao autor: Como fazer com que os indicadores chamados por meio do CUnIndicat possam ser carregados?
 

Bom dia.

Pergunta ao autor: a versão mais recente do mecanismo de negociação anexado ao artigo foi baixada, a estratégia anexada Impluse 2.0 está sendo testada.

1. No testador de estratégia, no modo de visualização, o painel de controle dos modos de negociação deve funcionar?

2. Os modos de negociação definidos por meio do método TradeState.SetTradeState devem ser executados?

Ao negociar na conta, o painel funciona e os modos são alternados, mas no testador de estratégias isso não acontece.