Discussão do artigo "Expert Advisor universal: indicador CUnIndicator e trabalho com ordens pendentes (parte 9)"
É 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
É 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.
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 }
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.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
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