Friday 27 October 2017

Trading signals generator


MetaTrader 5 - Exemplos Gerador de sinal de negociação com base em um indicador personalizado Introdução Neste artigo, eu direi como criar um gerador de sinal de negociação com base em um indicador personalizado. Você verá como você pode escrever seu próprio modelo de negociação para um indicador personalizado. Também explicarei o propósito do modelo 0 e por que as estruturas de tipo ISPATTERNAGE (0) são usadas no módulo de sinal de negociação. O artigo usará dois tipos de código: o código que estamos prestes a modificar e o código que já modificamos. O código modificado será destacado da seguinte maneira: O código modificado é o código a ser copiado e colado no gerador de sinal de negociação. Espero que você compreenda melhor o código através do uso do destaque. 1. Indicador personalizado Estou certo de que deve haver um indicador não incluído na entrega padrão que você estava querendo usar por um longo período de tempo. E esse é o indicador com base no qual você quer construir um módulo de sinal de negociação. Eu usarei o indicador MACD da entrega padrão como um indicador desse tipo. A localização do indicador é a seguinte. MQL5IndicatorsExamplesMACD. mq5. Cada indicador pode descrever um ou mais modelos de mercado. Um modelo de mercado é uma certa combinação do valor do indicador e do valor do preço. Os modelos disponíveis para o indicador MACD são inversão, cruzamento da linha principal e do sinal, cruzamento do nível zero, divergência e divergência dupla. 1.1 Novo modelo de indicador. Vamos supor que não estamos satisfeitos com os modelos de mercado disponíveis disponíveis para o indicador e queremos apresentar nosso próprio modelo de indicador. A nova descrição do modelo do indicador: se o indicador MACD estiver abaixo da linha zero e seus valores estão aumentando, podemos esperar mais crescimento e abrir uma posição longa: Figura 1: Modelo de crescimento do indicador prospectivo se o indicador MACD estiver acima da linha zero e Os seus valores estão diminuindo, podemos esperar mais diminuir e abrir uma posição curta: Figura 2: Modelo de indicador prospectivo de queda Então, decidimos o indicador personalizado e apresentamos o novo modelo de negociação para o indicador e sua descrição. Vamos continuar escrevendo o código. 2. Escrevendo o gerador de sinal de negociação com base em nosso indicador personalizado Nosso gerador é o descendente da classe base CExpertSignal. A classe base CExpertSignal é uma classe para criar geradores de sinais comerciais. A classe CExpertSignal contém um conjunto de métodos públicos (ou seja, acessíveis externamente) que permitem que um Consultor Especial veja a indicação do gerador de sinal de negociação quanto à direção de entrada no mercado. Uma vez que estamos trabalhando no nosso próprio gerador de sinais comerciais, ele deve ser herdado da classe CExpertSignal, com os métodos virtuais relevantes redefinidos (preenchidos com o código correspondente). 3. Criando a Classe do Gerador de Sinal de Negociação O gerador de sinal de negociação deve, por padrão, estar localizado em. MQL5IncludeExpertSignal pasta. Não sobrecarregue o. Pasta de sinal da Biblioteca Padrão com muita informação, vamos criar uma nova pasta sob o. Expert pasta e chamá-lo MySignals. Figura 3. Criando a nova pasta MySignals Em seguida, criaremos um arquivo de inclusão usando o MQL5 Wizard. Em MetaEditor, selecione Novo no menu Arquivo e, em seguida, selecione Incluir arquivo (.mqh). Figura 4. MQL5 Wizard. Criando um arquivo de inclusão O nome da classe de gerador de sinal será o MySignal. Ele será localizado em IncludeExpertMySignalsMySignal. Permite especificá-lo: Figura 5. MQL5 Wizard. Localização do arquivo de inclusão Depois de clicar em Concluir, o MQL5 Wizard irá gerar um modelo vazio. A partir deste momento, faremos tudo manualmente e os dados de copipastes. Gostaria de chamar sua atenção para o fato de que internamente, todos os sinais da Biblioteca Padrão são quase idênticos. Eles apenas diferem nos algoritmos usados ​​para determinar os modelos comerciais. Portanto, você pode levar qualquer arquivo da pasta IncludeExpertSignal, copiar seus conteúdos e colá-lo em seu modelo. Você pode então começar a editar o arquivo resultante do gerador de sinal de negociação. 4. Descrição da Classe do Gerador de Sinal de Negociação Como modelo, tirei o arquivo IncludeExpertSignalSignalEnvelopes. mqh do qual eu copiei tudo, mas o cabeçalho: e coloquei tudo no nosso modelo MySignal. mqh quase vazio. Isto é o que eu obtive: aqui nós damos uma ordem ao pré-processador para incluir a classe base CExpertSignal para criar geradores de sinais comerciais em nosso modelo. Continuaremos editando o modelo. Para garantir que nosso modelo seja visível mais tarde no MQL5 Wizard, precisamos alterar a descrição da nossa classe: então, vamos ver. A linha mostra o nome da nossa classe de sinal sob a qual será exibida no MQL5 Wizard. Vamos mudar esse nome para algo como isto: indica o nome para descrever variáveis ​​de nossa classe de sinal de negociação. Esta descrição será usada pelo MQL5 Wizard. Permite modificar esta linha da seguinte maneira: Daremos o mesmo nome para este parâmetro: A seguinte linha define o nome da classe: Vamos renomear esse parâmetro: Deixe o próximo parâmetro como está. O seguinte grupo de parâmetros é responsável pela descrição dos parâmetros do indicador subjacente ao gerador de sinal de negociação. Como mencionei anteriormente, vou usar. MQL5IndicatorsExamplesMACD. mq5 como o indicador personalizado. Tem os seguintes parâmetros: 4.1 Parâmetro Descrição Bloco Observe que os parâmetros fornecidos acima se aplicam somente a MACD. mq5. Seu indicador personalizado pode ter parâmetros completamente diferentes. O principal objetivo aqui é combinar os parâmetros do indicador com suas descrições na classe de sinal de negociação. O bloco de descrição do parâmetro na classe de sinal de negociação para o indicador personalizado em consideração, MACD. mq5. Será a seguinte: Dê uma olhada em como os parâmetros no indicador agora combinam as descrições no bloco de descrição da classe. Após todas as modificações, o bloco de descrição da nossa classe será o seguinte: na programação, é considerada uma boa prática fornecer comentários para o código, facilitando assim a compreensão do código ao retornar depois de algum tempo ter passado . Então, modificaremos o seguinte bloco: para coincidir com a descrição da nossa classe: Para evitar confusões, precisamos substituir todos os valores CSignalEnvelopes por CSignalMyCustInd Figura 6. Substituindo CSignalEnvelopes por CSignalMyCustInd Agora, veja alguns aspectos teóricos. 5. A Classe CiCustom Vamos precisar da classe CiCustom para continuar trabalhando no código da classe de indicadores de negociação do indicador personalizado. A classe CiCustom foi criada especificamente para trabalhar com indicadores personalizados. A classe CiCustom oferece criação, configuração e acesso a dados de indicadores personalizados. 6. A classe CIndicators. CIndicators é a classe para coletar instâncias de séries temporais e classes de indicadores técnicos. A classe CIndicators fornece criação, armazenamento e gerenciamento (sincronização de dados, controle e gerenciamento de memória) das instâncias de classe de indicadores técnicos. Estamos particularmente interessados ​​na classe CIndicators devido ao método Create. Este método cria um indicador de um tipo especificado com parâmetros especificados. 7. Continue escrevendo nossa classe de sinal de negociação O próximo bloco de código que vamos modificar (linhas 28-42) é o seguinte: 8. Criação do Indicador Personalizado no Gerador de Sinal de Negociação Dê uma olhada no bloco de código fornecido acima. A linha declara um objeto - o indicador de classe CiEnvelopes. CiEnvelopes é a classe para trabalhar com o indicador técnico da Biblioteca Padrão. A classe CiEnvelopes foi criada com base no indicador técnico da Biblioteca Padrão. No entanto, estamos escrevendo o código do gerador com base em nosso indicador personalizado. Portanto, não há uma classe pronta para o nosso ou seu indicador personalizado na Biblioteca Padrão. O que podemos fazer é usar a classe CiCustom. Vamos declarar o nosso indicador como a classe CiCustom: 8.1 Quatro variáveis ​​Você se lembra do bloco de descrição do parâmetro na classe Existem três parâmetros nessa descrição. Na área protegida da nossa classe geradora, agora declararemos quatro variáveis ​​para passar os valores aos nossos quatro parâmetros: O seguinte bloco de código: Este código declara variáveis ​​que dão peso aos modelos de negociação de nosso gerador de sinal de negociação. Vamos substituir o bloco de pesos pelo seguinte código: 9. Modelo 0 Como você lembra, no início do artigo foi decidido descrever apenas um novo modelo que será gerado pelo nosso gerador de sinais comerciais. No entanto, no código acima eu indiquei dois modelos de mercado (modelo 0 e modelo 1). Aqui, o modelo 0 é um modelo auxiliar importante. É obrigatório ao negociar com pedidos pendentes. Quando aplicado, o modelo 0 garante que as ordens pendentes se movam junto com o preço. Examinemos o nosso gerador de sinais comerciais e as seguintes condições: o indicador personalizado MACD está abaixo da linha zero e seus valores estão aumentando, estamos negociando com ordens pendentes, estabelecendo 50 pontos do preço de abertura da barra (valor de preço de quatro dígitos ). Essas condições descrevem perfeitamente nosso modelo de negociação. Aqui está como as coisas vão se mover: as condições do nosso modelo comercial serão verificadas após a aparição do número da barra. 1. O que temos: o MACD está abaixo da linha zero, mas está ganhando impulso. Isso corresponde ao sinal de compra. Portanto, colocamos uma ordem pendente de compra pendente: após a aparição do próximo número da barra. 2, a verificação de condição verifica se MACD está abaixo de zero e está caindo. De acordo com nosso modelo de negociação, atualmente não há condições para comprar ou vender. No entanto, note: de acordo com a lógica da classe CExpertSignal, uma vez que não há condições para comprar ou vender, todas as ordens pendentes devem ser DELETADAS. Neste caso, se o preço subir de forma súbita e dramática, perderemos a oportunidade de entrar no mercado por nossa vantagem porque não haverá ordem pendente. Este é o lugar onde o modelo auxiliar 0 parece ser muito útil. O modelo auxiliar 0 aplicará, desde que: o indicador personalizado MACD esteja abaixo da linha zero. Então podemos colocar uma ordem de compra comprovada pendente. Uma vez que colocamos um pedido de 50 pontos a partir do preço de abertura do bar, nós, de fato, simplesmente movemos a ordem Pendente de compra pendente de acordo com o movimento do preço: assim, usando o modelo auxiliar 0, temos a oportunidade de mover uma ordem pendente conforme O movimento dos preços. 10. Modificações adicionais do código de modelo O próximo bloco de código a ser modificado é o seguinte: Neste bloco, declaramos métodos de configuração de parâmetros ajustáveis, métodos de ajuste de pesos de modelos de negociação, método de verificação de configurações, método de inicialização de indicadores e métodos De verificar se os modelos de mercado são gerados. Levando em consideração que declaramos quatro variáveis ​​em parâmetros ajustáveis, o bloco de métodos para a configuração dos parâmetros será o seguinte: O próximo fragmento de código permanecerá inalterado: o próximo bloco de código a ser modificado é o seguinte: Este bloco será fortemente Modificado. Por favor, note que estou usando o método GetData da classe CIndicator. Os nomes dos métodos chamados serão fornecidos diretamente no código: O próximo bloco de código é o construtor. No construtor, mudaremos os nomes das variáveis. Além disso, usaremos apenas duas séries: USESERIESHIGHUSESERIESLOW Permite modificar o método ValidationSettings de nossa classe. No bloco de verificação, verificamos a condição principal para o indicador personalizado fornecido: mperiodfastgtmperiodslow O próximo bloco trata da criação de indicadores: conforme aplicado ao nosso indicador personalizado: o bloco a seguir é o bloco de inicialização do indicador: primeiro, adicionamos um objeto ao coleção. Em seguida, estabelecemos os parâmetros do nosso indicador e criamos o indicador personalizado usando o método Create da classe CIndicators: o próximo bloco verifica as condições de compra: de acordo com a implementação do modelo 0. Dois modelos são verificados: o seguinte bloqueio verifica as condições de venda: de acordo com a implementação do modelo 0. Dois modelos são verificados: Conclusão Espero que este artigo o tenha ajudado a entender como você pode criar um gerador de sinal de negociação com base em seu indicador personalizado. MetaTrader 5 - Trading Systems MQL5 Wizard: Como criar um módulo de sinais comerciais Introdução O MetaTrader 5 fornece um Ferramenta poderosa para verificação rápida de idéias comerciais. Este é o gerador das estratégias de negociação do MQL5 Wizard. O uso do MQL5 Wizard para criação automática de códigos Expert Advisor é descrito no artigo MQL5 Wizard: Criando Expert Advisors sem programação. A abertura do sistema de geração de código permite que você adicione suas próprias classes de sinais de negociação, sistemas de gerenciamento de dinheiro e módulos de trânsito aos padrões. Este artigo descreve os princípios de escrever módulos de sinais de negociação para usá-los ao criar Expert Advisors com o MQL5 Wizard. O Expert Advisor criado com MQL5 Wizard. É baseado em quatro pilares - quatro classes base: a classe CExpert (ou sua subclasse) é o principal motor de um robô comercial. Uma instância do CExpert contém uma cópia de cada classe: CExpertSignal. CExpertMoney e CExpertTrailing (ou suas subclasses): CExpertSignal é a base do gerador de sinais comerciais. Uma instância da classe derivada CExpertSignal, incluída no CExpert. Fornece um consultor especialista com informações sobre a possibilidade de entrar no mercado, níveis de entrada e colocação de ordens de proteção, com base em algoritmos incorporados. A decisão final sobre a execução das operações de negociação é feita pela EA. CExpertMoney é a base dos sistemas de gestão de risco e dinheiro. Uma instância da classe derivada CExpertMoney calcula volumes para abrir posições e colocar ordens pendentes. A decisão final sobre o volume é feita pela EA. CExpertTrailing - é a base do módulo de suporte de posições abertas. Uma instância da classe derivada CExpertTrailing informa uma EA sobre a necessidade de modificar ordens de proteção de uma posição. A decisão final sobre a modificação do pedido é feita pela EA. Além disso, os membros da classe CExpert são instâncias das seguintes classes: CExpertTrade (para negociação) CIndicadores (para controlar indicadores e timeseries envolvidos no trabalho da EA). CSincbolInfo (para obter informações sobre o instrumento) CAccountInfo (para obter informações sobre o estado da conta de negociação) CPositionInfo (para obtenção de informações sobre posições) COrderInfo (para obtenção de informações sobre ordens pendentes) Daqui em diante, sob perito, queremos dizer uma instância de CExpert ou É a sua subclasse. Mais detalhes de CExpert e trabalhar com ele serão descritos em um artigo separado. 1. Classe Base CExpertSignal CExpertSignal é a base do gerador de sinais comerciais. Para comunicação com o mundo exterior, CExpertSignal possui um conjunto de métodos virtuais públicos: Descrição dos Métodos 1.1. Métodos de inicialização: o método Init () é chamado automaticamente logo após a instância de classe ser adicionada ao especialista. Não é necessária a substituição do método. O método ValidationSettings () é chamado diretamente do especialista depois de todos os parâmetros serem definidos. Você deve substituir o método se houver algum parâmetro de configuração. O método substituído deve retornar verdadeiro, se todas as opções forem válidas (utilizáveis). Se pelo menos um dos parâmetros estiver incorreto, ele deve retornar falso (o trabalho adicional é impossível). A classe base CExpertSignal não possui parâmetros ajustáveis, portanto, o método da classe base sempre retorna verdadeiro sem realizar verificações. O método InitIndicators () implementa a criação e inicialização de todos os indicadores e timeseries necessários. É chamado do especialista depois que todos os parâmetros são definidos e sua correção é verificada com sucesso. O método deve ser substituído se o gerador de sinal comercial usar pelo menos um indicador ou timeseries. Indicadores e ou timeseries devem ser usados ​​através das classes apropriadas da Biblioteca Padrão. Os ponteiros de todos os indicadores ou timeseries devem ser adicionados à coleção de indicadores de um especialista (um ponteiro para o qual é passado como um parâmetro). O método substituído deve retornar verdadeiro, se todas as manipulações com indicadores e ou timeseries tiveram sucesso (eles são adequados para uso). Se pelo menos uma operação com indicadores e ou timeseries falhar, o método deve retornar falso (o trabalho adicional é impossível). A classe base CExpertSignal não usa indicadores ou timeseries, portanto, o método da classe base sempre retorna verdadeiro, sem executar nenhuma ação. 1.2. Métodos de verificação do sinal de abertura da posição: o método CheckOpenLong () gera um sinal de abertura de uma posição longa, definindo o nível de entrada e os níveis de colocação de pedidos de proteção. É chamado por um especialista para determinar se é necessário abrir uma posição longa. O método deve ser substituído, se for esperado que um sinal de abertura de uma posição longa seja gerado. O método deve implementar o algoritmo de verificar a condição de uma abertura de posição longa. Se a condição for atendida, as variáveis ​​preço, sl, tp e expiração (referências a quais são passados ​​como parâmetros) devem ser atribuídos valores apropriados e o método deve retornar verdadeiro. Se a condição não for cumprida, o método deve retornar falso. A classe base CExpertSignal não possui algoritmo interno para gerar um sinal de uma abertura de posição longa, de modo que o método da classe base sempre retorna falso. O método CheckOpenShort () gera um sinal de abertura de uma posição curta, definindo o nível de entrada e os níveis de colocação de pedidos de proteção. É chamado por um especialista para determinar se é necessário abrir uma posição curta. O método deve ser substituído, se se espera que seja gerado um sinal de abertura de posição curta. O método deve implementar o algoritmo para verificar a condição para abrir uma posição curta. Se a condição for satisfeita, as variáveis ​​preço, sl, tp e expiração (referências a quais são passadas como parâmetros) devem ser atribuídos valores apropriados e o método deve retornar verdadeiro. Se a condição não for cumprida, o método deve retornar falso. A classe base CExpertSignal não possui algoritmo interno para gerar um sinal de uma abertura de posição curta, de modo que o método da classe base sempre retorna falso. 1.3. Métodos de verificação do sinal de fechamento da posição: o método CheckCloseLong () gera um sinal de fechamento de uma posição longa, definindo o nível de saída. É chamado por um especialista para determinar se é necessário fechar uma posição longa. O método deve ser substituído, se se espera que um sinal de fechamento de posição longa seja gerado. O método deve implementar o algoritmo para verificar a condição para fechar a posição longa. Se a condição for satisfeita, o preço variável (a referência a qual é passada como um parâmetro) deve ser atribuído ao valor apropriado e o método deve retornar verdadeiro. Se a condição não for cumprida, o método deve retornar falso. A classe base CExpertSignal não possui algoritmo interno para gerar um sinal de fechamento de posição longa, de modo que o método da classe base sempre retorna falso. O método CheckCloseShort () gera um sinal de fechamento de uma posição curta, definindo o nível de saída. É chamado por um especialista para determinar se é necessário fechar uma posição curta. O método deve ser substituído, se se espera que seja gerado um sinal de fechamento de posição curto. O método deve implementar o algoritmo para verificar a condição para fechar uma posição curta. Se a condição for satisfeita, o preço variável (a referência a qual é passada como um parâmetro) deve ser atribuído ao valor apropriado e o método deve retornar verdadeiro. Se a condição não for cumprida, o método deve retornar falso. A classe base CExpertSignal não possui algoritmo interno para gerar um sinal de fechamento de posição curta, portanto o método da classe base sempre retorna falso. 1.4. Métodos de verificação do sinal de inversão de posição: o método CheckReverseLong gera um sinal de reversão de uma posição longa, definindo o nível de inversão e os níveis de colocação de ordens de proteção. É chamado por um especialista para determinar se é necessário reverter uma posição longa. O método deve ser substituído, se se espera que um sinal de uma inversão de posição longa seja gerado. O método deve implementar o algoritmo para verificar a condição de reversão de posição longa. Se a condição for satisfeita, as variáveis ​​preço, sl, tp e expiração (referências a quais são passadas como parâmetros) devem ser atribuídos valores apropriados e o método deve retornar verdadeiro. Se a condição não for cumprida, o método deve retornar falso. Na classe base CExpertSignal, o seguinte algoritmo para gerar um sinal de inversão de posição longa é implementado: Verificar um sinal para fechar uma posição longa. Verificando um sinal para abrir uma posição curta. Se ambos os sinais estão ativos (as condições são atendidas) e os preços próximos e abertos combinam, as variáveis ​​preço, sl, tp e expiração (referências a quais são passadas como parâmetros) são atribuídos os valores apropriados e o método retorna verdadeiro. Se a condição não for cumprida, o método retorna false. O método CheckReverseShort gera um sinal de reversão de uma posição curta, definindo o nível de reversão e os níveis de colocação de ordens de proteção. É chamado por um especialista para determinar se é necessário reverter uma posição curta. O método deve ser substituído, se se espera que um sinal de uma inversão de posição longa seja gerado de acordo com o algoritmo que difere do implementado na classe base. O método deve implementar o algoritmo para verificar a condição de inversão de posição curta. Se a condição for satisfeita, as variáveis ​​preço, sl, tp e expiração (referências a quais são passadas como parâmetros) devem ser atribuídos valores apropriados e o método deve retornar verdadeiro. Se a condição não for cumprida, o método deve retornar falso. Na classe base CExpertSignal, o seguinte algoritmo para gerar um sinal de inversão de posição curta é implementado: Verificar um sinal para fechar uma posição curta. Verificando um sinal para abrir uma posição longa. Se ambos os sinais estão ativos (as condições são atendidas) e os preços próximos e abertos combinam, as variáveis ​​preço, sl, tp e expiração (referências a quais são passadas como parâmetros) são atribuídos os valores apropriados e o método retorna verdadeiro. Se a condição não for cumprida, o método retornará falso. 1.5. Métodos de verificação do sinal de modificação de ordem pendente: o método CheckTrailingOrderLong () gera o sinal de modificação de uma ordem de compra pendente, definindo um novo preço de pedido. É chamado por um especialista para determinar se é necessário modificar uma ordem de compra pendente. O método deve ser substituído, se se espera que seja gerado um sinal de modificação de uma ordem de compra pendente. O método deve implementar o algoritmo para verificar a condição de modificação de uma ordem de compra pendente. Se a condição for satisfeita, o preço variável (a referência a qual é passada como um parâmetro) deve ser atribuído ao valor apropriado e o método deve retornar verdadeiro. Se a condição não for cumprida, o método deve retornar falso. A classe base CExpertSignal não possui algoritmo interno para gerar um sinal de modificação de uma ordem de compra pendente, portanto o método da classe base sempre retorna falso. O método CheckTrailingOrderShort () gera o sinal de modificação de uma ordem de venda pendente, definindo um novo preço de pedido. É chamado por um especialista para determinar se é necessário modificar uma ordem de venda pendente. O método deve ser substituído, se se espera que seja gerado um sinal de modificação de uma ordem de Venda pendente. O método deve implementar o algoritmo para verificar a condição de modificação de uma ordem de venda pendente. Se a condição for satisfeita, o preço variável (a referência a qual é passada como um parâmetro) deve ser atribuído ao valor apropriado e o método deve retornar verdadeiro. Se a condição não for cumprida, o método deve retornar falso. A classe base CExpertSignal não possui algoritmo interno para gerar um sinal de modificação de uma ordem de Venda pendente, portanto o método da classe base sempre retorna falso. 2. Desenvolva seu próprio gerador de sinais de negociação Agora, depois de revisarmos a estrutura da classe base CExpertSignal, você pode começar a criar seu próprio gerador de sinais comerciais. Como mencionado acima, a classe CExpertSignal é um conjunto de cordas virtuais públicas - métodos, usando o qual o especialista pode conhecer a opinião do gerador de sinais comerciais sobre entrar no mercado de uma direção ou outra. Portanto, nosso principal objetivo é criar nossa própria classe de gerador de sinais comerciais, derivando-o da classe CExpertSignal e substituindo os métodos virtuais apropriados, implementando os algoritmos necessários. Nosso segundo problema (o que não é menos importante) - para tornar a nossa classe visível para MQL5 Wizard. Mas, primeiro as coisas primeiro. 2.1. Criando a classe do gerador de sinais comerciais Primeiro, criamos (por exemplo, usando o mesmo MQL5 Wizard) um arquivo de inclusão com a extensão mqh. No menu Arquivo, selecione Criar (ou pressione a combinação de teclas CtrlN) e indique a criação de um arquivo incluído. Figura 2. Crie um arquivo de inclusão usando o Assistente MQL5. Deve-se notar que, para que o arquivo seja então detectado pelo MQL5 Wizard como Um gerador de sinal, ele deve ser criado na pasta IncludeExpertSignal. Para não limpar na Biblioteca Padrão. Crie nossa própria pasta IncludeExpertSignalMySignals, na qual criamos o arquivo SampleSignal. mqh, especificando esses parâmetros no MQL5 Wizard: Figura 3. Configurando o local do arquivo de inclusão Como resultado da operação do MQL5 Wizard, temos o seguinte padrão: O seguinte é apenas manual trabalhos. Remova as peças desnecessárias e adicione o que é necessário (inclua o arquivo ExpertSignal. mqh da Biblioteca Padrão e uma descrição da classe que agora está vazia). Agora, é necessário escolher os algoritmos. Como base para o nosso gerador de sinais comerciais, tomamos o preço do modelo generalizado, cruza a média móvel. Mas fazemos mais uma suposição: depois de cruzar a média móvel, o preço retrocede, e só então vai na direção certa. Reflita isso em nosso arquivo. Geralmente, quando você está escrevendo algo, não pular os comentários. Depois de algum tempo, ler um código cuidadosamente comentado será tão confortável. Agora, vamos definir quais dados são necessários para tomar decisões sobre a geração de sinais comerciais. No nosso caso, este é o preço aberto e o preço de fechamento do bar anterior, e o valor da média móvel na mesma barra anterior. Para obter acesso a esses dados, usamos as classes de biblioteca padrão CiOpen. CiClose e CiMA. Bem, discuta os indicadores e timeseries mais tarde. Enquanto isso, vamos definir uma lista de configurações para o nosso gerador. Primeiro, precisamos configurar a média móvel. Esses parâmetros incluem o período, a mudança ao longo do eixo do tempo, o método de média e o objeto da média. Em segundo lugar, precisamos configurar o nível de entrada e os níveis de colocação das ordens de proteção e a duração de uma ordem pendente, porque vamos trabalhar com pedidos pendentes. Todas as configurações do gerador serão armazenadas em membros de dados protegidos da classe. O acesso às configurações será implementado através de métodos públicos apropriados. Permite incluir essas alterações em nosso arquivo: Como estamos usando membros de dados protegidos, precisamos adicionar um construtor de classe. No qual vamos inicializar esses dados por valores padrão. Para verificar os parâmetros, substitua o método virtual ValidationSettings de acordo com a descrição da classe base. Descrição da classe: Implementação do método ValidationSettings (): Agora, quando terminamos a maior parte do trabalho preparatório, fale mais sobre indicadores e timeseries. Indicadores e timeseries são a principal fonte de informação para a tomada de decisões (você certamente pode usar o lance de moedas ou as fases da lua, mas são bastante difíceis de formalizar). Como já definimos acima, para tomar decisões, precisamos das seguintes informações: o preço aberto do bar anterior, o preço de fechamento do bar anterior e o valor da média móvel na mesma barra anterior. Para obter acesso a esses dados, usaremos as seguintes classes da Biblioteca Padrão: CiOpen - para acessar o preço aberto da barra anterior, CiClose - para acessar o preço de fechamento do bar anterior, CiMA - para acessar o valor do Média móvel na barra anterior. Você pode perguntar: Por que usar o indicador ou timeseries, embrulhado em uma classe, para obter um único número. Existe um significado oculto, que vamos revelar agora. Como usar os dados de um indicador ou timeseries Primeiro, precisamos criar um indicador. Em segundo lugar, precisamos copiar a quantidade necessária de dados para um buffer intermediário. Em terceiro lugar, precisamos verificar se a cópia está completa. Somente após essas etapas, você pode usar os dados. Usando as classes da Biblioteca Padrão. Você evita a necessidade de criar um indicador, de se preocupar com a disponibilidade de buffers intermediários e sobre o carregamento ou liberação de dados de um identificador. O objeto de uma classe apropriada fará isso por você. Todos os indicadores necessários serão gerados pelo nosso gerador de sinal durante a fase de inicialização, e todos os indicadores serão fornecidos com o buffer temporário necessário. Além disso, uma vez que adicionamos um objeto indicador ou timeseries na coleção (o objeto de uma classe especial), você pode deixar de se importar com a relevância dos dados (os dados serão atualizados automaticamente pelo especialista). Bem, coloque os objetos dessas classes nos membros de dados protegidos. Para cada objeto, criamos um método de inicialização e método de acesso a dados. Vamos substituir o método virtual InitIndicators (de acordo com a descrição da classe base). Descrição da classe: Implementação de métodos InitIndicators, InitMA, InitOpen, InitClose: Todos os trabalhos preparatórios estão concluídos. Como você pode ver, nossa classe cresceu significativamente. Mas agora estamos prontos para gerar sinais comerciais. Figura 4. Sinais de negociação para o preço que atravessa a média móvel Vamos considerar nossos algoritmos de novo com mais detalhes. 1. O sinal de compra aparece quando as seguintes condições foram cumpridas na barra anterior: o preço aberto da barra é inferior ao valor da média móvel, o preço de fechamento da barra é maior do que o valor da média móvel, a média móvel Está aumentando. Nesse caso, oferecemos para colocar uma ordem de compra pendente com os parâmetros definidos pelas configurações. Para isso, substituímos o método virtual CheckOpenLong e preenchê-lo com o funcional correspondente. 2. O sinal de venda aparece quando as seguintes condições foram cumpridas na barra anterior: o preço do bar aberto é maior do que o valor da média móvel, o preço de fechamento da barra é inferior ao valor da média móvel, a média móvel Está diminuindo. Nesse caso, oferecemos para colocar uma ordem de Venda pendente com os parâmetros definidos pelas configurações. For this purpose, we override the virtual method CheckOpenShort and fill it with the corresponding functional. 3. We will not generate signals to close positions. Let the positions be closed by Stop LossTake Profit . 4. We will propose the modification of a pending order along the moving average at the distance specified by the settings. For this purpose, we override the virtual methods CheckTrailingOrderLong and CheckTrailingOrderShort. filling them with corresponding functional. Description of the class: Implementation of methods CheckOpenLong, CheckOpenShort, CheckTrailingOrderLong, CheckTrailingOrderShort: So weve solved the first problem. The above code is a source code of the class of trading signals generator that meets our main task. 2.2. Preparing a description of the created class of the trading signals for MQL5 Wizard We now turn to solving the second problem. Our signal should be recognized by the generator of trading strategies MQL5 Wizard. Weve done the first necessary condition: weve placed the file where it will be found by the MQL5 Wizard. But this is not enough. The MQL5 Wizard must not only find the file, but also recognize it. To do this we must add to the original text the class descriptor for the MQL5 Wizard . A class descriptor is a block of comments composed according to certain rules. Lets consider these rules. 1. The block of comments should start with the following lines: 2. The next line is a text descriptor (what we will see in the MQL5 Wizard when choosing the signal) in the format TitleltTextgt . If the text is too big for one line, you can add one more line (but not more) after it. In our case, we have the following: 3. Then comes a line with the class type specified in the format TypeltTypegt . The ltTypegt field must have the Signal value (in addition to signals, the MQL5 Wizard knows other types of classes). 4. The following line in the format NameltNamegt is the short name of the signal (it is used by the MQL5 Wizard for generating the names of the global variables of the expert). We get the following: 5. The name of a class is an important element of the description. In the line with the format ClassltClassNamegt , the ltClassNamegt parameter must match with the name of our class: 6. We do not fill in this line, but it must be present (this is a link to the language reference section): 7. Further, there are descriptions of the signal setup parameters. This is a set of rows (the number of rows is equal to the number of parameters). The format of each line is ParameterltNameOfMethodgt, ltTypeOfParametergt, ltDefaultValuegt . Here is our set of parameters: 8. The block of comment should end with the following lines: Lets add the descriptor to the source code. Well, thats all. The signal is ready to use. For the generator trading strategies MQL5 Wizard to be able to use our signal, we should restart MetaEditor (MQL5 Wizard scans the folder IncludeExpert only at boot). After restarting MetaEditor. the created module of trading signals can be used in the MQL5 Wizard: Figure 5. The created generator of trading signals in the MQL5 Wizard The input parameters specified in the section of description of the parameters of the trading signals generator are now available: Figure 6. Input parameters of the created generator of trading signals in the MQL5 Wizard The best values of the input parameters of the implemented trading strategy can be found using the Strategy Tester of the MetaTrader 5 terminal. The generator of trading strategies of the MQL5 Wizard greatly simplifies the testing of trading ideas. The code of the generated expert is based on the classes of trading strategies of the Standard Library, which are used for creating certain implementations of trading signal classes, money and risk management classes and position support classes. The article discusses how to write your own class of trading signals with the implementation of signals on the crossing of the price and the moving average, and how to include it to the generator of trading strategies of the MQL5 Wizard. as well as describes the structure and format of the description of the generated class for the MQL5 Wizard. Automate Your Forex Trading Enter your trading strategy and generate Expert Advisor for Forex currency trading. Create Scripts to help you trade. Professional Edition generates both. ex4.ex5 and source code. mq4.mq5 files. Since most Forex trading strategies contain common elements: opening positions, closing positions, trailing stops, signals, etc. generator creates Expert Advisor, Script or Custom Indicator with those common components for trading Forex markets. Press Generate menu and your EA, Script or Custom Indicator is ready. Test your ideas before you hire someone to program Expert Advisor, Script or Custom Indicator for you. Forex Generator Full support for MetaTrader 4. Limited experimental MetaTrader 5 support. No programming required for most setups. Create both Expert Advisors (EA), Custom Indicators and trading Scripts. Setup order opening signals via build-in or custom indicators. Import your own or custom third party indicators. Set order execution: take profit, stop loss, trailing stop, etc. Limit opening of new orders to specific days of the week. Set hours when Expert Advisor should open new orders. Limit Expert Advisor to work only when spreads are less than set value. Setup second order with different take profit, stop loss, etc. Mainly used for break-even trading scenarios. Option to close orders if opposite signal has been received. Martingale and Semi-Martingale risk management. Include your own custom code into the diagram. Forex Generator Block Editor This is free companion add-on product for Forex Generator. Create your own building blocks and use them in Forex Generator. Build your own library of advanced blocks. Free Upgrades If you get current version 6.x all upgrades for any upcoming version 6.x will be free. Forex Generator Screenshots

No comments:

Post a Comment