English Русский 中文 Español Deutsch 日本語
preview
Teoria das Categorias em MQL5 (Parte 11): Grafos

Teoria das Categorias em MQL5 (Parte 11): Grafos

MetaTrader 5Exemplos | 3 novembro 2023, 15:47
225 0
Stephen Njuki
Stephen Njuki

Introdução

No artigo anterior, abordamos os grupos de monoides, e exploramos o conceito de simetria em monoides típicos. Ao introduzir o axioma adicional de que todos os membros de um grupo monoide devem possuir operações binárias inversas e limitantes entre elementos espelhados para obter um elemento singular, ampliamos a aplicabilidade dos monoides em pontos críticos das decisões de negociação. Com base nisso, exploramos ainda mais a teoria das categorias e sua aplicação prática no desenvolvimento de sistemas de negociação por meio do estudo de grafos.

Os grafos servem como uma ferramenta poderosa para modelar sistemas complexos e visualizar as relações entre diferentes componentes. No contexto do desenvolvimento de sistemas de negociação, a implementação de grafos da teoria de categorias no MQL5 pode oferecer informações valiosas e uma visão alternativa dos processos de tomada de decisão. Embora nosso artigo anterior tenha sugerido o potencial dos grupos de monoides na reclassificação e normalização de conjuntos de monoides para melhorar as decisões de negociação, este artigo explora a utilidade dos grafos de teoria de categorias como parte do desenvolvimento do sistema de negociação MQL5. Embora se reconheça a ampla utilidade e a interconexão dos grafos na teoria das categorias, o objetivo deste artigo é destacar benefícios específicos para o desenvolvimento de sistemas de negociação, incluindo o gerenciamento de trailing stop, como em artigos anteriores em que examinamos sistemas de negociação.

Neste artigo, podemos revelar benefícios adicionais do uso de grafos no MQL5, explorar como eles melhoram o design e a organização do sistema, facilitam a análise e a visualização avançadas de dados e contribuem para a otimização do sistema e a melhoria do desempenho. No entanto, esses benefícios não serão o foco deste artigo.


Grafos na teoria das categorias

Os grafos são uma forma de definir "concretamente" os vértices interconectados e as setas que os ligam em um sistema. Assim, na teoria da categoria, eles são quatro entidades, a saber, um conjunto de vértices, um conjunto de setas que conectam esses vértices, uma função de homomorfismo do conjunto de setas para o conjunto de vértices que associa o vértice original a cada seta e, finalmente, outra função de homomorfismo para direcionar as setas a esses vértices.

Antes de prosseguirmos, talvez seja útil dizer algumas palavras sobre as principais diferenças entre a teoria dos grafos e a teoria das categorias. À primeira vista, ambas parecem lidar com a ligação de elementos, o que pode levar uma pessoa comum a perguntar: por que isso não é a mesma coisa? Para responder a essa pergunta, considere como exemplo o processo de preparação de alimentos com suas etapas e os ingredientes em cada etapa. A teoria dos grafos, nesse caso, se concentraria na sequência de etapas de preparo de uma determinada receita e, talvez, em quais outras repetições dessas etapas (caminhos) poderiam ser usadas para modificar ou aprimorar a receita. A teoria das categorias adotaria uma abordagem mais abstrata, concentrando-se mais nas transformações de cada etapa de preparo e considerando como elas podem ser comparadas com as transformações das etapas de preparo de outras receitas. Outra receita seria categorizada de forma diferente se considerarmos cada etapa do preparo como um conjunto/domínio que contém uma lista de ingredientes. Em outras palavras, a teoria das categorias dá mais atenção aos morfismos ou, neste caso, aos funtores, em vez de sequências de etapas. Sendo assim, consideramos aqui os grafos como uma ferramenta da teoria de categorias. Esse tópico é abordado em mais detalhes na discussão sobre a comparação de categoria de grafos e grafo de categoria (em inglês).

Dessa forma, para nossos propósitos, os grafos podem ser vistos como um meio de catalogar o número e a sequência de etapas em um sistema interconectado. Como começamos a usar monoides, consideramos um sistema de decisão de negociação (com monoides em cada nó) que executou as seguintes etapas:

  1. Seleção de período
  2. Seleção do período de análise retrospectiva
  3. Seleção do preço aplicável
  4. Seleção do indicador
  5. E, finalmente, a seleção da ação de negociação

Em termos de esquema, isso pode ser representado da seguinte forma:


Sistemas alternativos com as mesmas etapas também podem ser representados da seguinte forma:

Opção nº1


Opção nº2


Em cada uma dessas variantes 1 e 2, simplesmente repetimos as etapas intermediárias entre o intervalo de tempo e a ação de negociação. Como veremos no Exemplo 2 abaixo, a capacidade de criar caminhos diferentes representa padrões diferentes que podem ser úteis em algumas decisões de negociação.

Entretanto, formalmente, se considerarmos nosso sistema padrão que vai do período de tempo à ação de negociação, o gráfico é representado por duas tabelas - a tabela de setas e a tabela de vértices. As tabelas são mostradas abaixo:


onde os índices de partida e destino na tabela de setas são os índices dos vértices. A coluna de índice nas setas serve apenas para a numeração das setas.

Ao remodelar o sistema de negociação, consideramos os relatórios como nos artigos anteriores. Procuraremos explorar o significado dos grafos alternando as etapas internas de análise retrospectiva, preço aplicado e indicador. Deixaremos as etapas inicial e final inalteradas para não complicar muito nossa lógica. Além disso, consideraremos possíveis homomorfismos entre diferentes grafos, se levarmos em conta a hipótese de que não existe um sistema perfeito e que as condições mudam a cada nova barra. Assim, tentaremos projetar o seguinte homomorfismo do grafo, levando em conta, digamos, os dois últimos.


MQL5 e desenvolvimento de sistemas de negociação

Em nossa série de artigos, vimos o desenvolvimento de sistemas de negociação usando a biblioteca integrada do assistente MQL5. Os sistemas de negociação na forma de Expert Advisors podem ser montados com a ajuda do assistente embutido no IDE, desde que o usuário no processo selecione um sinal, um método de gerenciamento de dinheiro e um método de trailing stop dentre os disponíveis na biblioteca. Para esses artigos, procuramos expandir a biblioteca, em particular os métodos de trailing stop incorporados, adicionando alternativas que usam os conceitos da teoria da categoria discutidos nos artigos.

O desenvolvimento de um sistema de negociação em MQL5 geralmente enfrenta muitos problemas: desde a depuração de Expert Advisors relativamente simples até a localização e o uso de dados de ticks confiáveis e, finalmente, testes oportunos em períodos suficientemente longos do histórico. Há outros problemas, mas os mencionados acima são os principais. O problema de depuração geralmente é mais difícil do que os outros, porque, em muitos casos, os erros não serão erros de compilação sobre os quais o compilador o notificará, mas podem estar na lógica do sistema do seu EA. E eles podem não aparecer em seus testes até que você comece a trabalhar no mercado real. É por isso que criar seu EA a partir de partes da biblioteca padrão (tanto quanto possível) pode ajudar muito a evitar essa armadilha. Para isso, os sistemas que testamos nestes artigos serão criados por um assistente usando uma biblioteca publicamente disponível e código padrão com modificações provenientes apenas de nossa classe especial que implementa um conceito específico.


Explorando as possibilidades dos grafos nos sistemas de negociação MQL5

Pode ser útil começar considerando as vantagens abstratas dos grafos em MQL5. Em geral, eles têm o potencial de melhorar o design e a organização do sistema.

Se considerarmos nossa hipótese de que não há uma ordenação perfeita das etapas de negociação entre a seleção do período de tempo e a seleção da ação de negociação, poderíamos usar as mudanças entre esses sistemas como homomorfismos de grafos. Esses homomorfismos poderiam ser examinados em busca de relações quadráticas ou mesmo lineares quando forem sequenciados para ver se é possível fazer previsões. Em outras palavras, usamos grafos para gerenciar melhor as relações dos componentes de nosso sistema de negociação.

Se pudermos estabelecer essa relação entre homomorfismos de grafos, seja ela quadrática ou linear, poderemos reutilizá-la em outras situações de ação de preço semelhantes, eliminando assim a necessidade de reexaminar e computar essas relações. Em outras palavras, melhoramos a modularidade e a reutilização de nossos sistemas de negociação.

E isso não é tudo. Se dermos um passo além de nosso sistema de negociação "fechado" e tentarmos ver o que mais os diferentes "caminhos" dos grafos podem indicar, poderemos analisar as correlações entre os tipos de caminho e a ação do preço. Suponhamos que consideremos uma única barra de preço que tenha os quatro preços típicos - Aberto (Open), Alto (High), Baixo (Low) e Fechado (Close). Podemos considerar isso como um caminho porque eles nem sempre estão em uma sequência O-H-L-C. Em barras de alta, embora nem sempre, a ordem pode ser O-L-H-C. Essa e outras observações podem levar ao reconhecimento de padrões por meio da detecção antecipada de mudanças na ação do preço com base no tipo de caminho dos movimentos de preço intrabarras anteriores.

Além disso, se simplesmente codificarmos por cores as etapas internas de nosso sistema de negociação de 5 etapas, que começa com a seleção do período e termina com a seleção da ação de negociação, e fizermos com que nosso EA atualize e exiba periodicamente essas etapas sequenciais coloridas no gráfico em que está sendo executado, saberemos imediatamente qual sistema estamos usando no momento. Isso seria útil se estivéssemos aderindo à nossa hipótese anterior de que a sequência ideal de etapas pode mudar a cada nova barra de preço do gráfico. Essa representação visual de um sistema de negociação em um formato tão dinâmico pode ser muito útil para os traders analisarem e entenderem as tendências de ação de preço de longo prazo.

A otimização e a melhoria do desempenho de um sistema de negociação também podem ser aplicadas em conjunto com grafos, se os parâmetros de entrada forem ajustados às configurações do grafo. Por exemplo, se em um sistema de negociação diferente do que estamos considerando, estivéssemos procurando encontrar o sinal de entrada perfeito para cada tipo de movimento de preço intrabarra (veja OHLC acima), esses sinais poderiam ser otimizados ao longo de um período de estratégia e testados posteriormente para avaliar a estratégia.

Entretanto, os grafos também têm gargalos. O maior deles é a necessidade de representação e interpretação visual. Isso pode ser bastante difícil em um ambiente de negociação volátil, de modo que os EA que usam os grafos devem ser o mais suaves e flexíveis possível e usar técnicas eficientes em termos de memória, como a indexação das diferentes etapas do sistema, para garantir uma execução mais suave e eficiente.


Exemplos<//b>: implementação de grafos no MQL5

Exemplo 1: Grafos baseados em valores de barra intrapreço:

Como nos artigos anteriores, podemos estudar a influência de diferentes trajetórias de grafos referentes a barras de preço internas atrasadas sobre os possíveis altos e baixos das barras de preço subsequentes. Assim, as barras de preço internas levam em conta a sequência de preços de abertura, baixa, alta e fechamento. Você sempre começa com uma abertura e termina com um fechamento, mas a ordem das máximas e mínimas não é padrão, e essa variabilidade nos permite explorar qualquer relação com as alterações subsequentes nos altos e baixos. Para atingir esse objetivo, criaremos uma instância da classe Expert Trailing como antes e a emparelharemos com outras classes existentes na biblioteca para gerenciamento de sinais e de capital para montar um EA. Juntaremos nossa classe de trailing com a classe de sinais Awesome Oscillator e a classe de gerenciamento de capital de margem fixa.

Abaixo estão os resultados do teste no par USDJPY H1 de junho de 2022 a junho de 2023.

r1

Exemplo 2: Grafos como uma modificação do sistema de negociação original

Para o segundo exemplo, podemos observar diferentes iterações das etapas internas do nosso sistema de negociação usado em artigos anteriores. Lembre-se de que as etapas foram: escolher o período de tempo, o período de análise retrospectiva, o preço aplicado, o indicador e, finalmente, a escolha da solução de negociação. Dessa forma, como restringimos o primeiro e o último nós dos caminhos do grafo para o caso 1, também fixaremos a escolha do período de tempo e a escolha da decisão de negociação como o primeiro e o último, respectivamente. Por isso, durante o teste e a validação, repetiremos o período de análise retrospectiva, a escolha do preço e o indicador aplicado para encontrar caminhos diferentes. O impacto de cada caminho, como no exemplo 1, será testado quanto à precisão na previsão de mudanças entre os intervalos das barras de preço. As previsões feitas com base na iteração selecionada serão usadas para ajustar o trailing stop, como nos artigos anteriores.

Se testarmos o par USDJPY como no exemplo 1, obteremos os resultados mostrados no relatório abaixo.

r2


Possíveis problemas e peculiaridades

Como pode ser entendido por nossos EAs de teste implementados nos dois estudos de caso acima, o uso de grafos em um sistema de negociação requer uma longa curva de aprendizado para obter resultados significativos. Se observarmos o primeiro EA, derivamos nossos caminhos com base nas etapas de preço intrabarras de abertura, alta, baixa e fechamento. Esses caminhos foram codificados como uma classe elementar que nem sequer incluía uma ponderação para cada seta, um recurso que é útil se a instância da classe do grafo for atualizada com novas informações sobre as setas ao longo do tempo. Em vez disso, usamos uma instância da classe que é inicializada a cada nova barra, perdendo memória aprendida no processo. A implementação da última opção envolveria, idealmente, o armazenamento do arquivo em um IDE isolado desses grafos, o que, por si só, consome muita memória. Além disso, o poder de processamento e o tempo gasto em testes aumentariam em comparação com a classe simples que usamos no exemplo. Além disso, optamos por definir cada vértice como um ponto de preço em uma barra, mas poderíamos ter usado a opção mais eficiente, em termos de computação, de definir cada ponto de preço como um preço de fechamento. Isso aponta para a necessidade de ponderar cuidadosamente suas decisões e compará-las com a precisão esperada de seu sistema. Além disso, há muitos tipos de grafos orientados. Isso significa que o desenvolvedor precisa selecionar cuidadosamente os elementos que funcionarão melhor com a estratégia pretendida. Para piorar a situação, os dados de preços das corretoras nunca estão completos e muitas vezes contêm lacunas e preços ausentes. Acrescente a isso a relação bastante complexa entre as setas do grafo e os pontos de preço relacionados. Ela é influenciada por muitos fatores, incluindo condições de mercado, sentimento do investidor, eventos econômicos e uma série de outros. Sem dúvida, o desenvolvedor de um sistema de grafos deve garantir que seu sistema possa produzir resultados de negociação significativos a longo prazo e, dada a quantidade de ambiguidade apresentada aqui, isso certamente complica o processo. Por fim, aqui é preciso considerar a escalabilidade, uma vez que, à medida que novos dados de preços se tornam disponíveis todos os dias, os gráficos, especialmente os gráficos de aprendizado ponderado (que não consideramos em nossos estudos de caso), precisarão ser atualizados. O retreinamento dos grafos inevitavelmente se tornará mais demorado com o passar do tempo, a menos que o desenvolvedor consiga criar métodos eficientes de codificação de suas classes para evitar isso.

Até o momento, não há bibliotecas pelo menos adequadas para implementar a teoria dos grafos no MQL5. Isso significa que os programadores precisam investir tempo e recursos consideráveis para encontrar soluções viáveis. E como essas soluções são muito individuais, elas são inevitavelmente propensas a erros. Em comparação, há muitos indicadores de negociação disponíveis no IDE MQL5 que implementam muitas ideias, desde o indicador de Força Relativa até as Bandas de Bollinger (nada menos que 47 no total), que podem ser usados sem a necessidade de codificá-los do zero.

Como mencionado acima, a implementação de estruturas gráficas e algoritmos do zero sem bibliotecas adequadas em MQL5 não só consome tempo, mas também é propensa a erros e exige que os traders invistam um esforço considerável na codificação de soluções viáveis. Esse processo não apenas aumenta o tempo de desenvolvimento, mas também aumenta o risco de erros e bugs.

Diferentemente das implementações da teoria dos grafos, alguns outros conceitos de negociação têm bibliotecas MQL5 amplamente usadas e bem documentadas. Isso inclui indicadores técnicos incorporados, como médias móveis, osciladores e linhas de tendência. Os traders podem acessar e usar facilmente esses indicadores sem precisar reinventar a roda. Além disso, está disponível uma extensa coleção de indicadores personalizados desenvolvidos pela comunidade de traders, permitindo que eles escolham entre uma variedade de soluções prontas para uso.

Além disso, a MQL5 oferece um conjunto completo de funções matemáticas, incluindo cálculos estatísticos, transformações matemáticas e distribuições de probabilidade. Essas funções permitem que os traders realizem cálculos e análises complexas, facilitando o desenvolvimento de estratégias de negociação sofisticadas.

Embora o MQL5 forneça bibliotecas para muitos conceitos de negociação, a falta de bibliotecas padrão projetadas especificamente para implementar grafos é um problema sério. Os operadores que desejam incorporar grafos em suas estratégias enfrentam os obstáculos de tempo e esforço excessivos, baixa confiabilidade e eficiência, e a necessidade de aprender rapidamente.

Para preencher a lacuna que há na implementação de grafos no MQL5, podemos considerar várias abordagens. Explore as contribuições da comunidade MQL5 relacionadas ao desenvolvimento e à distribuição de bibliotecas relacionadas a grafos que possam aumentar significativamente a disponibilidade de soluções prontas para uso. A colaboração, o compartilhamento de conhecimento e a criação de projetos de código aberto contribuem para um ecossistema dinâmico que beneficia todos os traders que buscam implementar estratégias baseadas em grafos. Você também pode considerar bibliotecas de terceiros fora do ecossistema MQL5. Várias linguagens de programação, como Python ou C++, já possuem extensas bibliotecas de grafos que podem ser integradas ao MQL5 por meio de DLLs (bibliotecas de vinculação dinâmica) ou APIs (interfaces de programação de aplicativos) personalizadas. Por fim, você pode fazer lobby para a inclusão de bibliotecas de grafos padronizadas em futuras atualizações do MQL5. A solicitação de aprimoramentos e o feedback sobre a necessidade e os benefícios de tais bibliotecas podem incentivar os fornecedores de plataformas a resolver essa lacuna.

Além disso, o Open-CL disponível no IDE pode ajudar a resolver problemas de desempenho.


O que virá a seguir?

Diariamente, ocorrem avanços com relação aos grafos da teoria de categorias que podem levar a uma possível implementação em sistemas de negociação. Há vários sites dedicados ao assunto, como este ou este (em inglês). A perspectiva de integração com plataformas de inteligência artificial, como o ChatGPT 4.0, não parece mais tão distante quanto, digamos, há dois anos. O desenvolvimento está em andamento. O potencial e as oportunidades de mais pesquisa e desenvolvimento continuarão a crescer. Podemos esperar por mais e mais notícias interessantes nessa área.


Conclusão

Vimos a implementação de grafos da teoria de categorias no MQL5. Demos atenção especial à utilidade dos grafos para o desenvolvimento de sistemas de negociação. Recomenda-se que o leitor pesquise e estude mais os materiais e códigos apresentados antes de usá-los em seus próprios sistemas de negociação.

Traduzido do Inglês pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/en/articles/12844

Arquivos anexados |
ct_11.mqh (27.33 KB)
Teoria das Categorias em MQL5 (Parte 12): Ordem Teoria das Categorias em MQL5 (Parte 12): Ordem
Este artigo faz parte de uma série sobre a implementação de grafos usando a teoria das categorias no MQL5 e é dedicado à teoria da ordem (Order Theory). Consideraremos dois tipos básicos de ordenação e exploraremos como os conceitos de relação de ordem podem auxiliar os conjuntos monoidais na tomada de decisões de negociação.
Desenvolvendo um sistema de Replay (Parte 33): Sistema de Ordens (II) Desenvolvendo um sistema de Replay (Parte 33): Sistema de Ordens (II)
Vamos continuar o desenvolvimento do sistema de ordens. Mas você irá ver que iremos fazer uma reutilização massiva de coisas já vistas em outros artigos. Mesmo assim teremos um bônus neste artigo. Iremos desenvolver, primeiramente um sistema que consiga ser operado junto ao servidor de negociação real, seja usando uma conta demo, seja usando uma conta real. Vamos fazer uso massivo e extensivo da plataforma MetaTrader 5, para nos fornecer todo o suporte do qual precisaremos neste inicio de jornada
Redes neurais de maneira fácil (Parte 48): métodos para reduzir a superestimação dos valores da função Q Redes neurais de maneira fácil (Parte 48): métodos para reduzir a superestimação dos valores da função Q
No artigo anterior, nós exploramos o método DDPG, projetado para treinar modelos em espaços de ação contínua. No entanto, como outros métodos de aprendizado Q, ele está sujeito ao problema da sobreavaliação dos valores da função Q. Esse problema geralmente leva eventualmente ao treinamento de um agente com uma estratégia não otimizada. Neste artigo, examinaremos algumas abordagens para superar o problema mencionado.
Desenvolvendo um sistema de Replay (Parte 32): Sistema de Ordens (I) Desenvolvendo um sistema de Replay (Parte 32): Sistema de Ordens (I)
De todas as coisas desenvolvidas até aqui. Esta com toda a certeza, vocês também irão notar, e com o tempo irão concordar, que é a mais desafiadora de todas. O que temos de fazer é algo simples. Fazer com que o nosso sistema, simule o que um servidor de negociação efetua na prática. Isto de ter que implementar uma forma de simular, exatamente o que seria feito, pelo servidor de negociação, parece simples. Pelo menos nas palavras. Mas precisamos fazer isto de uma maneira, que para o usuário do sistema de replay / simulação, tudo venha a acontecer, de forma o mais invisível, ou transparente, possível.