Saturday 20 January 2018

Universal trading strategies


Estratégias de Investimento Universal oferece one-on-one opções negociação mentoria e educação para os investidores que procuram gerar ativo, passivo e / ou renda de aposentadoria. Com mais de 25 anos de experiência combinada e milhares de clientes satisfeitos, Estratégias de Investimento Universal foi fundada sobre os princípios de vamos caminhar com você lado a lado a cada passo do caminho. Nós nos esforçamos para ajudar nossos clientes a desenvolver uma sólida estratégia de negociação de opções para que eles possam ser bem sucedidos. Trabalharemos para melhorar a compreensão das opções, técnicas de comércio e disciplina. Vamos ajudá-lo a se tornar um comerciante Opções eficazes Nós entendemos que o mercado financeiro pode ser um lugar intimidador, especialmente se você não está devidamente versado na articulação financeira. No entanto, aqui no Universal Investment Strategies tomamos o medo eo fator de intimidação fora dos mercados como nossa equipe de profissionais financeiros andam com você para baixo o que pode parecer um corredor complicado de confusão financeira. Nós adaptamos nossa plataforma educacional para cada cliente individual enquanto ensinamos somente o que eles estão interessados ​​em aprender. Fazemos a educação comercial não só divertido, mas tão vantajoso quanto possível para que nossos clientes recebam o máximo retorno sobre o investimento para o seu dinheiro, bem como o tempo gasto. Nossos ClientesMetaTrader 5 - Exemplos Consultor Universal Especializado: Negociando em um Grupo e Gerenciando um Portfolio de Estratégias (Parte 4) Sumário Introdução Muitas vezes precisamos criar algoritmos que devem conviver uns com os outros, ou seja, a operação de um algoritmo não deve ser influenciada Pelas ações de outros algoritmos realizados ao mesmo tempo. Essa situação ocorre quando você precisa combinar vários algoritmos em um módulo executável ex5. Apesar de sua aparente simplicidade, essas tarefas têm algumas armadilhas significativas características algorítmicas que devem ser considerados ao construir o mecanismo de estratégias de negociação. O mecanismo de negociação CStrategy inclui um conjunto de algoritmos que implementam a cooperação de duas e mais estratégias de negociação. Vamos discuti-los em detalhes na quarta parte desta série. Também vamos criar um perfil de negociação de um grupo de Expert Advisors negociando simultaneamente, a fim de diversificar os riscos comerciais. A classe CStrategyList um contêiner de estratégias de tipo CStrategy pertence aos algoritmos que fornecem operação simultânea de estratégias. A classe permite o upload da apresentação baseada em XML das estratégias, bem como criá-los dinamicamente usando o método correspondente uma fábrica de estratégias. O vídeo anexado demonstra o processo de testar várias estratégias no MetaTrader 5 Strategy Tester. Todas as estratégias baseadas no mecanismo de negociação descrito têm um painel personalizado padrão, que o ajudam a controlar facilmente estratégias distintas diretamente do gráfico. CStrategyList Strategy Manager O segundo artigo da série Universal Expert Advisor descreveu a classe CStrategy e seus principais módulos. Através do uso desta classe e sua funcionalidade implementada nos módulos, cada estratégia herdada mantém uma lógica de negociação unificada. No entanto, organizar um processo de negociação usando robôs é mais do que mera execução de pedidos de comércio. É importante assegurar sua cooperação, incluindo a operação de vários algoritmos em um módulo executável ex5. A classe CStrategyList especial é usada para este propósito específico. Como você pode adivinhar a partir de seu nome, essa classe fornece uma lista de estratégias de tipo CStrategy, mas sua operação é um pouco mais complicada do que a operação de um contêiner de dados usual. O módulo resolve as seguintes tarefas: assegurar a operação simultânea de várias estratégias de negociação entregando eventos comerciais a cada instância de estratégia criando objetos de estratégia a partir da lista de estratégias unificadas de interação com o painel personalizado usado para a configuração do EA. Aqui está o cabeçalho da classe CStrategyList: Como você pode ver, a maioria dos métodos apresentados são manipuladores de eventos comerciais. Eles têm conteúdo do mesmo tipo. Vamos analisar um deles, OnBookEvent: Como visto a partir do conteúdo da classe, ele procura estratégias CStrategy na lista e chama um evento apropriado em cada uma das estratégias. A operação de outros métodos de eventos é semelhante. Além da transmissão de eventos, o CStrategyList executa procedimentos especiais carregando estratégias a partir do arquivo XML. Para obter mais informações sobre como funciona, leia a próxima seção. Estratégias de carregamento a partir de uma lista XML. Um portfólio de estratégias Se um módulo executável ex5 contém múltiplos algoritmos de negociação, precisamos de ferramentas para gerar um portfólio de estratégias. Suponha que dois algoritmos com diferentes parâmetros comercializam um módulo executável. Como configurar esses parâmetros A coisa mais simples é a saída dos parâmetros de cada estratégia na janela de propriedades do EA. Mas o que fazer quando muitas estratégias são usadas, cada uma das quais tem muitos parâmetros Neste caso, a lista de parâmetros com diferentes modificadores, sinalizadores, strings e comentários seria enorme. Isso é o que a janela de parâmetros de um Expert Advisor negociação três estratégias seria semelhante: Fig. 1. A lista de parâmetros da EA negociação três estratégias AN Expert Advisor pode usar ainda mais estratégias. Neste caso, a lista de parâmetros poderia ter tamanho inimaginável. O segundo aspecto importante do comércio de carteira é a criação de estratégias sobre o fluxo. Suponha que queremos executar a mesma estratégia com dois conjuntos diferentes de parâmetros. O que devemos fazer Obviamente, apesar dos diferentes conjuntos de parâmetros, essas duas estratégias são uma e a mesma estratégia, embora com configurações diferentes. Em vez de criar cada uma das estratégias manualmente, podemos confiar esta tarefa a uma classe separada. A classe pode criar automaticamente um objeto de estratégia e configurá-lo corretamente. Antes de criar uma estratégia sobre o fluxo, é necessário fornecer sua descrição completa. A descrição deve conter os seguintes detalhes: o nome da estratégia uma ID única estratégia ou o seu número Magic o símbolo a estratégia é executada no tempo de trabalho da estratégia uma lista de parâmetros únicos de estratégias (uma lista individual para cada estratégia). A descrição da estratégia pode conter outras propriedades além da lista acima. A melhor maneira de fornecer essa descrição é usando XML. O idioma foi criado como uma ferramenta de descrição especial. Ele permite descrever convenientemente objetos complexos, de modo que um objeto como uma estratégia de negociação pode ser convertido em um documento XML de texto e um documento de texto pode ser convertido em uma estratégia. Por exemplo, com base em um documento XML, o mecanismo de negociação pode criar uma estratégia e configurar adequadamente seus parâmetros. Para trabalhar com este tipo de documentos diretamente do MQL5, devemos usar uma biblioteca XML-Parser especial disponível na Base de código. Aqui está um exemplo da descrição XML de um portfólio que carrega três estratégias MovingAverage com parâmetros diferentes: Cada uma das estratégias forma a unidade ltStrategygt. Os atributos a seguir são especificados nele: Símbolo, Timeframe, Magic e StrategyName. A partir do exemplo acima, vemos que cada uma das três estratégias tem seu próprio símbolo, número mágico e prazo. Além desses parâmetros necessários, outras propriedades de estratégia são especificadas na lista XML. A seção ltTradeStateStartgt especifica o modo de negociação no momento do lançamento da estratégia. A seção ltParamsgt contém os parâmetros da estratégia. No início, o mecanismo de negociação tentará carregar as estratégias de negociação a partir do arquivo XML acima. Uma estratégia é carregada e criar com base neste documento na classe CStrategyList no seu LoadStrategiesFromXML método. Abaixo estão os conteúdos deste método, bem como de todos os métodos relacionados: A parte mais interessante dos métodos é a criação de uma estratégia usando o método estático especial CStrategy :: GetStrategy. O nome da estratégia deve ser passado para ele como um parâmetro. O método retorna uma instância específica da estratégia associada a esse nome. O método foi feito estático para permitir o acesso a ele antes que um objeto de estratégia seja criado. O GetStrategy é escrito em um arquivo de cabeçalho separado, porque, ao contrário de outras partes do mecanismo de negociação, você precisará editá-lo de vez em quando, adicionando novas estratégias a ele. Se você quiser que sua estratégia seja carregada de XML, seu procedimento de criação deve ser adicionado diretamente a este método. O código-fonte deste arquivo de cabeçalho é o seguinte: Uma vez criada a estratégia, ela deve ser inicializada com os parâmetros necessários da seção ltParamsgt. Uma vez que os parâmetros de cada estratégia são únicos, não é possível inicializar esses parâmetros no nível do mecanismo de negociação. Em vez disso, a classe base da estratégia pode chamar o método virtual ParseXmlParams. Se a estratégia, em seguida, substitui esse método e analisa corretamente a lista de parâmetros como um nó XML para ele, ele será capaz de especificar os valores necessários de seus próprios parâmetros. Como exemplo, observe o método ParseXmlParams da estratégia CMovingAverage que negoceia com base em duas médias móveis (seu algoritmo é descrito no primeiro capítulo deste artigo). Os detalhes desta estratégia são descritos no terceiro artigo da série, que abrange o desenvolvimento de estratégias personalizadas. Usando o mecanismo de criação de estratégia a partir de um arquivo, é possível configurar um conjunto de estratégias uma vez, e depois carregá-lo a partir de um arquivo de cada vez. Você pode ir ainda mais longe e escrever um algoritmo de auto-otimização que salva os conjuntos de parâmetros de suas melhores execuções para um arquivo XML. O mecanismo de negociação lerá este arquivo na inicialização e formará um conjunto de estratégias em sua base. Gerenciando estratégias usando um painel personalizado Do ponto de vista do usuário, as estratégias podem ser convenientemente controladas usando um painel personalizado especial. Este painel seria exibido em um gráfico após o lançamento EA e permitiria realizar operações simples com cada um dos algoritmos de negociação: alterar o modo de negociação de estratégia de compra ou venda do volume necessário em vez da estratégia. A última opção é útil se a EA não conseguiu executar a ação apropriada por algum motivo, e você precisa sincronizar seu estado com a situação atual do mercado. Descrição das classes que criam painéis personalizados e caixas de diálogo está além do escopo do assunto discutido e requer um artigo separado. Descreveremos apenas os aspectos básicos relacionados à conexão do painel. O painel de controle do Expert Advisor é implementado em uma classe CPanel separada que inclui vários controles, como listas, botões e rótulos de texto. Todas as classes para criação de gui estão disponíveis em ltdatafoldergtMQL5IncludePanel. Para garantir o funcionamento do painel, é necessário manipular o evento OnChartEvent diretamente no arquivo mq5 do EAs. O manipulador de eventos de gráfico está localizado na classe CStrategyList, portanto, é suficiente para chamar esse manipulador em OnChartEvent: O manipulador desses eventos no CStrategyList envia-los diretamente para o painel. Com um clique em qualquer botão no painel, ele define a ação a ser executada e executa-la. Por exemplo, se selecionarmos uma estratégia da lista de estratégias, o índice da estratégia atual será igual ao selecionado, então você poderá realizar outras ações de negociação. Por exemplo, você pode alterar o modo de negociação da estratégia escolhida selecionando a opção apropriada na lista drop-down dos modos de estratégia: Fig. 2. A lista de modos de uma estratégia selecionada Comprar e vender em nome da estratégia selecionada é realizada da mesma maneira. Um ponteiro para a estratégia chama os métodos Buy and Sell da classe base do CStrategy. Estes métodos compram e vendem o volume passado neles. Neste caso, o número mágico nas operações executadas corresponde ao número mágico da estratégia, por isso é impossível distinguir o comércio manual das ações do EAs. Deve-se notar que a lógica de negociação EAs é implementada de modo que todas as posições abertas por um usuário são então mantidas por este Expert Advisor no modo normal. Ele gerencia tais posições como suas próprias posições automaticamente abertas. Expert Advisors Trading em um Grupo Podemos montar um portfólio de estratégias de negociação. As estratégias devem conter métodos responsáveis ​​pela análise de parâmetros XML, ou seja, precisamos substituir o ParseXmlParams método. Também é necessário adicionar a criação do tipo apropriado de estratégia para o método CStrategy :: GetStrategy. Finalmente, precisaremos criar um arquivo XML com uma lista de estratégias e seus parâmetros. Depois disso, a classe CStrategyList criará instâncias de estratégias e as adicionará à sua lista de estratégias. O painel personalizado exibirá essas estratégias depois disso. Vamos criar um portfólio de estratégias composto pelos Consultores Especialistas descritos acima. Exemplos de análise de configurações XML para as estratégias CMovingAverage e CChannel estão disponíveis nas seções 3.5 e 4.3. O conteúdo do CStrategy :: GetStrategy para a criação das duas estratégias será o seguinte: O toque final é substituir o método responsável pelo nome completo do EAs. Execute a substituição para a estratégia CMovingAverage: Agora tudo está pronto para criar um portfólio de estratégias. Nossa carteira incluirá quatro sistemas de negociação. Cada um deles trocará seu próprio símbolo. Duas estratégias serão baseadas em MovingAverage, e duas outras usarão BollingerBands. Uma descrição mais detalhada dessas estratégias está disponível no artigo anterior: Universal Expert Advisor: Custom Strategies e Auxiliary Trade Classes (parte 3). Nosso portfólio XML será o seguinte: Este arquivo deve ser salvo uma pasta de dados comum da plataforma MetaTrader como Strategies. xml. Aqui está o código-fonte do módulo mq5 que cria um Expert Advisor: As variáveis ​​personalizadas StrategiesXMLFile e LoadOnlyCurrentSymbol são definidas na classe CStrategyList. Eles são usados ​​dentro dessa classe para especificar a lista de estratégias a serem carregadas eo modo que permite carregar apenas as estratégias com o símbolo igual ao nome do instrumento em que o Expert Advisor está sendo executado. Observe também que alguns eventos, como OnBookEvent e OnTimer, não são usados. Isso significa que eles não serão usados ​​em estratégias personalizadas. A compilação deve ser bem-sucedida. Depois disso, o Expert Advisor (chamado Agent. ex5 no projeto) está pronto para uso. Vamos tentar executá-lo no gráfico. Antes disso, devemos nos certificar de que todos os símbolos usados ​​estejam disponíveis no MetaTrader Market Watch. Após o início com êxito, o ícone Expert Advisor aparecerá no canto superior direito do gráfico. Outro botão é adicionado ao canto superior esquerdo do gráfico que maximiza o painel personalizado. Se selecionarmos a lista de EAs (denominada Agent) no painel, uma lista de quatro Expert Advisors será aberta: Fig. 3. Lista de consultores especializados carregados A captura de tela apresenta a lista de consultores especializados formada pelo nosso arquivo XML Strategies. xml. Depois de um tempo, as estratégias começarão a negociar cada estratégia em seu símbolo individual. Analisando a Operação do Consultor Especializado no Testador de Estratégia Tendo gerado um portfólio de estratégias, podemos testá-lo no Testador de Estratégias para garantir que ele funcione corretamente. Nenhuma ação específica adicional é necessária, porque a lista de estratégias XML está localizada na pasta de dados global, acessível através do Testador de Estratégia. Depois de lançar o módulo EA Agent. ex5 nele, todos os símbolos necessários serão carregados automaticamente. Cada Expert Advisor realizará operações de negociação seguindo suas regras de negociação individuais e, adicionalmente, elaborará seu próprio conjunto de indicadores. O vídeo abaixo mostra o teste de um portfólio de estratégias em quatro instrumentos diferentes: A simulação de estratégias baseadas no CStrategy no Strategy Tester é semelhante à negociação em tempo real usando essas estratégias. A opção de teste visual permite que você verifique facilmente a precisão das entradas e saídas das estratégias. Conclusão Consideramos algoritmos que permitem criar conjuntos aleatórios de estratégias de negociação. Com esses conjuntos ou portfólios de estratégias, você pode escalar de forma flexível e eficiente o processo de negociação, ao mesmo tempo em que gerencia múltiplos algoritmos de negociação localizados no mesmo módulo executável. Os algoritmos são particularmente úteis para as estratégias que usam múltiplos instrumentos de negociação simultaneamente. Usando a abordagem proposta, a criação de algoritmos de negociação semelhantes é tão fácil como o desenvolvimento de estratégias de negociação convencional. MetaTrader 5 - Exemplos Universal Expert Advisor: Estratégias personalizadas e Classes Comerciais Auxiliares (Parte 3) Introdução Nesta parte, continuamos a discutir o mecanismo de negociação CStrategy. Aqui estão os breves conteúdos das duas partes anteriores. No primeiro artigo Universal Expert Advisor: Modos de Negociação de Estratégias. Discutimos detalhadamente os modos de negociação que permitem configurar a lógica do Expert Advisor de acordo com a hora e o dia da semana. No artigo segundos Universal Expert Advisors: o Modelo de Evento e Trading Strategy Prototype. Analisamos o modelo de evento baseado no tratamento centralizado de eventos, bem como os principais algoritmos da classe básica da CStrategy subjacentes Custom Expert Advisors. Na terceira parte da série, descreveremos em detalhes os exemplos de Expert Advisors baseados no mecanismo de negociação CStrategy e alguns algoritmos auxiliares que podem ser necessários para o desenvolvimento da EA. É dada especial atenção ao procedimento de exploração madeireira. Apesar de seu papel puramente de apoio, a exploração madeireira é um elemento muito importante de qualquer sistema complexo. Um logger bom permite que você compreenda rapidamente a causa do problema e encontre o lugar onde ocorreu. Este registrador é escrito usando uma técnica de programação especial chamada padrão Singleton. Informações sobre isso será interessante não só para aqueles que organizam o processo de negociação, mas também para aqueles que criam algoritmos para executar tarefas não-padrão. Além disso, o artigo descreve os algoritmos que permitem acessar dados de mercado através de índices convenientes e intuitivos. Na verdade, o acesso a dados através de índices como Close1 e High0 é uma característica popular do MetaTrader 4. Então, por que evitá-lo, se ele também pode ser usado no MetaTrader 5 Este artigo explica como fazer isso e descreve em detalhes os algoritmos que implementam o acima idéia. Para terminar a conclusão, eu gostaria de usar as palavras do meu artigo anterior. O mecanismo de negociação CStrategy com todos os seus algoritmos é um conjunto bastante complexo. No entanto, não é necessária uma compreensão total e profunda do seu princípio de funcionamento. Você só deve entender os princípios gerais ea funcionalidade do mecanismo de negociação. Portanto, se qualquer uma das partes do artigo não for clara, você pode ignorá-la. Este é um dos princípios fundamentais da abordagem orientada a objetos: você pode usar um sistema complexo sem conhecer sua estrutura. Logs, CMessage e CLog Classes, Singleton Pattern Logging é uma das tarefas auxiliares tradicionais. Como regra, aplicativos simples usam a função Print ou printf comum que imprime uma mensagem de erro ao terminal MetaTrader 5: No entanto, essa abordagem simples nem sempre é suficiente para entender o que está acontecendo em programas complexos grandes que contêm centenas de linhas de código-fonte . Portanto, a melhor solução para essas tarefas é desenvolver um módulo de log especial a classe CLog. O método mais óbvio do logger é AddMessage (). Por exemplo, se Log for um objeto do nosso CLog, podemos escrever a seguinte construção: No entanto, o aviso enviado contém muito menos informações úteis do que é necessário para a depuração. Como você pode saber a partir desta mensagem quando ele foi criado Que função criou Como você pode saber quais informações importantes estão contidas nele Para evitar isso, precisamos expandir a noção da mensagem. Além do texto, cada mensagem deve conter os seguintes atributos: tempo de criação mensagem fonte tipo de mensagem (informação, aviso, mensagem de erro) Também seria útil, se a nossa mensagem continha alguns detalhes adicionais: Negociação foi realizada) tempo do servidor de comércio a partir do momento da criação da mensagem Todas essas informações podem ser combinadas convenientemente na classe CMessage especial. Uma vez que nossa mensagem é uma classe, você pode facilmente adicionar mais dados e métodos para trabalhar com logs. Aqui está o cabeçalho da classe: Primeiro de tudo o cabeçalho contém ENUMMESSAGETYPE. Define o tipo da mensagem que está sendo criada. A mensagem pode ser informativa (MESSAGEINFO), aviso (MESSAGEWARNING) e notificação de um erro (MESSAGEERROR). A classe consiste em vários métodos Get / Set que definem ou lêem vários atributos de uma mensagem. Para criação de mensagem fácil em uma linha, CMessage fornece um correspondente construtor sobrecarregado que deve ser chamado com os parâmetros que definem o texto da mensagem, seu tipo e fonte. Por exemplo, se for necessário criar uma mensagem de aviso na função OnTick notificando uma quantidade muito pequena de dados carregados, isso pode ser feito da seguinte maneira: Esta mensagem contém mais informações do que a anterior. Além da própria mensagem, contém o nome da função que o chamou eo tipo de mensagem. Além disso, nossa mensagem tem dados que você não precisa preencher durante a criação. Por exemplo, o objeto de mensagem contém o tempo de criação da mensagem e o código atual do erro de negociação, se houver algum. Agora é hora de considerar o logger CLog. A classe serve como um armazenamento de mensagens CMessage. Uma de suas funções mais interessantes é enviar notificações push para terminais móveis usando a função SendNotification. Esta é uma característica extremamente útil quando o monitoramento constante da operação do Expert Advisor é impossível. Em vez disso, podemos enviar push para notificar o usuário de que algo deu errado. O recurso específico do log é que ele deve ser um processo único para todas as partes do programa. Seria estranho se cada função ou classe tivesse seu próprio mecanismo de log. Portanto, a classe CLog é implementada usando um padrão de programação especial chamado Singleton. Esse padrão garante que há apenas uma cópia de um objeto de um determinado tipo. Por exemplo, se o programa usa dois ponteiros, cada um dos quais se refere ao objeto do tipo CLog, os ponteiros apontarão para o mesmo objeto. Um objeto é realmente criado e excluído nos bastidores, em métodos particulares da classe. Consideremos o título desta classe e os métodos que implementam o padrão Singleton: A classe CLog armazena um ponteiro para o objeto estático de si mesmo como um membro particular. Pode parecer uma estranha construção de programação, mas faz sentido. O único construtor de classe é privado e não pode ser chamado. Em vez de chamar o construtor, o método GetLog pode ser usado: Ele verifica se o ponteiro estático aponta para um objeto CLog existente e, em caso afirmativo, retorna uma referência a ele. Caso contrário, ele cria um novo objeto e associa o ponteiro mlog interno com ele. Isso significa que o objeto é criado somente uma vez. Durante outras chamadas do método GetLog, um objeto criado anteriormente será retornado. A exclusão do objeto também é executada apenas uma vez. Isso é feito usando o método DeleteLog: Se o mlog existir, ele será excluído e true será retornado. Pode parecer que o sistema de registro descrito é complexo, porém seus recursos suportados são bastante impressionantes. Por exemplo, você pode classificar as mensagens por tipo ou enviá-las como notificações push. Um usuário é, finalmente, decidir se deseja usar este sistema. Ele é implementado em módulos separados Message. mqh e Logs. mqh, para que você possa usá-lo separadamente do projeto descrito ou dentro dele. Acessando Citações Usando Índices do MetaTrader 4 Uma das principais mudanças no MetaTrader 5, em comparação com seu antecessor, é um modelo de acesso citações e dados de indicadores. Por exemplo, se você precisasse descobrir o preço próximo da barra atual, poderia fazê-lo no MetaTrader 4 adicionando o seguinte procedimento: Significa, você poderia acessar dados quase diretamente através da indexação de uma timeseries apropriada. Mais ações são necessárias para encontrar o nosso preço próximo da barra atual no MetaTrader 5: Definir um array receptor para copiar a quantidade necessária de cotações para. Copie as cotações necessárias usando uma das funções do grupo Copiar (funções para acessar dados de tempos e indicadores). Consulte o índice necessário da matriz copiada. Para encontrar o preço próximo da barra atual no MetaTrader 5, as seguintes ações são necessárias: Este acesso aos dados é mais difícil do que no MetaTrader 4. No entanto, essa abordagem torna o acesso a dados universal: a mesma interface unificada e os mecanismos são usados ​​para Acessar dados recebidos de diferentes símbolos e indicadores. Embora isso não seja necessário em tarefas cotidianas como uma regra. Muitas vezes, só precisamos obter o último valor do símbolo atual. Este pode ser o preço Open ou Close de um bar, bem como o seu alto ou baixo. De qualquer forma, seria conveniente usar o modelo de acesso a dados adotado no MetaTrader 4. Devido à natureza orientada a objeto do MQL5, é possível criar classes especiais com um indexador que pode ser usado da mesma maneira para acessar dados de comércio, como é Usado no MetaTrader 4. Por exemplo, para poder obter o preço Fechar no MetaTrader 5 desta forma: devemos adicionar o seguinte wrapper para fechar preços: O mesmo código deve ser escrito para a outra série, incluindo o tempo, o volume, bem como Como preços abertos, altos e baixos. É claro que, em alguns casos, o código pode ser executado muito mais lento do que a cópia única da matriz necessária de aspas usando as funções de sistema de cópia. No entanto, como mencionado acima, muitas vezes precisamos acessar apenas o último elemento, porque todos os elementos anteriores são levados em conta na janela em movimento. Esse conjunto simples de classes é incluído em Series. mqh. Ele fornece uma interface conveniente para acessar cotações como no MetaTrader 4 e é ativamente usado no mecanismo de negociação. Uma característica distintiva dessas classes é a independência de suas plataformas. Por exemplo, no MetaTrader 5 um Expert Advisor pode chamar o método de uma dessas classes pensando que ele se refere às cotações diretamente. Este método de acesso também funcionará no MetaTrader 4, mas em vez do wrapper especializado, ele acessará diretamente as séries do sistema, como Open, High, Low ou Close. Usando Indicadores Orientados a Objetos Quase todos os indicadores possuem várias configurações para configuração. Trabalhar com indicadores no MetaTrader 5 é semelhante ao trabalho com aspas, com a única diferença é a necessidade de criar o identificador identificador chamado. Isto é, um ponteiro especial para algum objeto MetaTrader 5 interno contendo valores de cálculo, antes de copiar os dados do indicador. Os parâmetros de um indicador são definidos no momento da criação do identificador. Se você precisar editar um dos parâmetros indicadores por algum motivo, você deve excluir o identificador indicador antigo e criar um novo com parâmetros atualizados. Os parâmetros indicadores devem ser armazenados em um local externo, por exemplo, em variáveis ​​do Expert Advisor. Como resultado, a maioria das operações com indicadores são passadas para o Expert Advisor. Nem sempre é conveniente. Vamos considerar um exemplo simples: um Expert Advisor comércios usando os sinais de MA cruzamento. Apesar de sua simplicidade, o indicador de Média Móvel tem seis parâmetros a serem definidos: O símbolo para calcular a Média Móvel no período ou período de gráfico O período de média O tipo de Média Móvel (simples, exponencial, ponderado, etc.) Bar preço aplicado (um dos preços OHLC de uma barra ou um buffer de cálculo de outro indicador) Portanto, se queremos escrever um Expert Advisor negociação a interseção de duas médias móveis que usam uma lista completa das configurações MA, ele terá Para conter doze parâmetros seis parâmetros para a média de movimento rápido e seis mais para o lento. Além disso, se o usuário alterar o cronograma ou o símbolo do gráfico no qual o EA está sendo executado, as alças dos indicadores usados ​​também precisarão ser reinicializadas. Para liberar o Expert Advisor das tarefas relacionadas aos identificadores de indicadores, devemos usar as versões orientadas a objetos dos indicadores. Ao usar as classes de indicadores orientadas a objetos, podemos escrever construções como: O usuário final é apenas definir os parâmetros dos indicadores usados ​​pelo Expert Advisor. O Consultor Especial apenas lerá os dados deles. Há outra vantagem importante de usar objetos indicadores. Indicadores orientados a objetos esconder sua implementação. Isso significa que eles podem calcular seus valores por conta própria ou chamando alças apropriadas. Nos casos em que são utilizados múltiplos indicadores de cálculo e é necessária uma velocidade de execução elevada, é aconselhável adicionar a unidade de cálculo do indicador directamente ao Expert Advisor. Graças à abordagem orientada a objetos, isso pode ser feito sem reescrever o Expert Advisor. Você só precisa calcular os valores de indicador dentro da classe apropriada sem usar alças. Para ilustrar o acima, abaixo está o código-fonte da classe CIndMovingAverage que se baseia no indicador iMA do sistema: A classe é bastante simples. Sua principal tarefa é reinicializar o indicador se um de seus parâmetros mudar, bem como retornar o valor calculado por índice. Um identificador é reinicializado usando o método Init eo valor necessário é retornado usando OutValue. Métodos que retornam um dos valores de indicador começam com o prefixo de saída. Isso facilita a busca do método necessário ao programar em editores que oferecem a substituição intelectual de parâmetros, como o MetaEditor. O pacote de mecanismo de negociação inclui uma série de indicadores orientados a objetos. Isso ajudará você a entender como eles funcionam e criar suas próprias versões orientadas a objetos de indicadores clássicos. A seção sobre o desenvolvimento de Expert Advisors personalizados ilustra os princípios de trabalhar com eles. Métodos a serem substituídos pelo conselheiro perito personalizado No primeiro artigo Universal Expert Advisor: Modos de negociação de estratégias (Parte 1). Nós consideramos em detalhes os modos de negociação de uma estratégia e seus principais métodos que precisam ser substituídos. Agora, é hora de praticar. Cada Expert Advisor criado usando o mecanismo CStrategy deve substituir métodos virtuais que são responsáveis ​​por algumas propriedades e comportamento do Expert Advisor. Vamos listar todos os métodos a serem substituídos como uma tabela de três colunas. O primeiro contém o nome do método virtual, o segundo mostra o evento ou ação a ser rastreada ou executada. A terceira coluna contém a descrição da finalidade da utilização do método. Então aqui está a tabela:

No comments:

Post a Comment