Русский
preview
Redes neurais em trading: Agregação Temporal do Movimento (TMA)

Redes neurais em trading: Agregação Temporal do Movimento (TMA)

MetaTrader 5Sistemas de negociação |
20 0
Dmitriy Gizlyk
Dmitriy Gizlyk

Introdução

Em muitos aspectos, o mercado financeiro se assemelha a um organismo vivo. Sua atividade pulsa no ritmo das negociações, dos picos de liquidez e das mudanças de sentimento. Sua respiração é irregular: ora acelera sob a pressão das notícias e dos impulsos emocionais, ora quase se imobiliza durante longos períodos de espera. Cada instante é repleto de eventos, mas nem todos têm relevância. Em meio ao fluxo de alterações mínimas, como oscilações microscópicas dos preços, variações nos volumes e cruzamentos de ordens, a forma se perde e a estrutura do movimento se torna difusa. Os métodos tradicionais de análise enxergam esse fluxo como uma sequência de pontos em que o tempo é apenas uma coordenada. Na realidade, porém, ele é vivo: ora se adensa, ora se dilata, como a própria respiração do mercado.

Essa variabilidade torna o tempo financeiro algo singular. Ele não transcorre de maneira uniforme como nas séries temporais clássicas. Em períodos de pânico ou euforia, o mercado atravessa eras inteiras em poucas horas, enquanto, nas fases de calmaria, um único dia pode ser vazio e sereno, como a superfície imóvel do mar. Esse ritmo irregular rompe com as concepções habituais de causalidade temporal. Preços, volumes e spreads passam a interagir em um espaço não linear e assíncrono, no qual cada evento desencadeia toda uma rede de consequências. É justamente aí que surge a principal tarefa da análise de mercado moderna: ir além do simples registro das mudanças e captar a forma dinâmica do movimento, sua arquitetura oculta.

Curiosamente, um problema semelhante já vem sendo tratado há bastante tempo na área de visão computacional, sobretudo nas pesquisas com câmeras baseadas em eventos. Diferentemente dos sensores tradicionais, que registram quadros estáticos, essas câmeras reagem a alterações de luminosidade, ou seja, ao movimento, e não à imagem em si. Seus dados consistem em uma sequência de eventos discretos, cada um carregando uma pequena parcela de informação sobre o que está acontecendo. Quanto mais intenso o movimento, mais denso se torna o fluxo de eventos. O mercado financeiro apresenta uma estrutura surpreendentemente semelhante: cotações, ordens e a microestrutura das negociações são eventos que formam um fluxo contínuo, porém irregular, de mudanças. Cada transação funciona como um lampejo de luz em uma câmera baseada em eventos, sinalizando que o sistema mudou de estado.

Foi nesse ponto de convergência que surgiu o framework TMA (Temporal Motion Aggregation), proposto por Haotian Liu e seus coautores no trabalho "TMA: Temporal Motion Aggregation for Event-based Optical Flow". Ele foi desenvolvido para extrair o movimento a partir de dados baseados em eventos, mas seus princípios se mostraram universais, capazes de descrever qualquer sistema dinâmico em que a sequência temporal dos eventos seja relevante. A essência do TMA consiste em não tratar os eventos como pontos isolados e desconectados, mas agregá-los em estruturas temporais coerentes, revelando padrões de movimento ocultos sob a superfície do caos. Nesse sentido, o TMA pode ser visto como uma espécie de ponte entre a física do movimento e a matemática do tempo.

O algoritmo do framework TMA se baseia em três mecanismos interligados.

  1. Event Splitting Strategy: divide o fluxo de eventos em segmentos temporais, de forma semelhante a um analista que separa o histórico das negociações em pequenos períodos de atividade. Cada segmento tem seu próprio ritmo, composto por breves impulsos que refletem a dinâmica local do mercado.
  2. Linear Lookup Strategy: realiza o alinhamento temporal, sincronizando eventos que ocorrem em momentos diferentes. O procedimento lembra a normalização de dados financeiros, na qual sinais provenientes de diferentes ativos ou bolsas são ajustados a uma mesma escala temporal, eliminando os efeitos de atrasos e defasagens.
  3. Motion Pattern Aggregation Module: é o componente central, no qual todos os fragmentos temporais são reunidos em uma representação coerente do movimento. É nessa etapa que o ruído se dissipa e os padrões começam a emergir, como os contornos de uma corrente sob a superfície da água.

Ao observar o mercado sob a perspectiva dessas ideias, fica evidente que o preço não é apenas um valor, mas uma trajetória formada por inúmeros microeventos. Cada alteração na cotação carrega informações sobre o movimento do capital, o deslocamento do interesse entre os participantes, as reações às notícias e a tensão entre liquidez e medo. O TMA oferece um mecanismo capaz de reunir esse fluxo disperso no tempo em uma representação dinâmica integrada. Ao dividir os eventos em camadas temporais, alinhá-los de acordo com seus ritmos e direções e, em seguida, agregá-los em um movimento coerente, torna-se possível obter aquilo que os economistas poderiam chamar de verdadeiro impulso do mercado: uma estrutura na qual se manifesta a intenção coletiva.

Do ponto de vista da percepção, isso representa uma transição da lógica estática da previsão para uma lógica dinâmica de compreensão. Nos modelos tradicionais, passado e futuro estão ligados de maneira mecânica: uma fórmula descreve a relação, e isso basta. No TMA, o próprio tempo passa a carregar significado. Cada novo evento não apenas acrescenta informação, mas também redefine o contexto dos eventos anteriores. No mercado, por exemplo, um novo pico de volume pode alterar completamente a interpretação do movimento observado no dia anterior. Não se trata de uma cadeia linear, mas de uma atualização contínua das relações de causa e efeito, em que o significado surge não de fatos isolados, mas de sua coerência ao longo do tempo.

Pode-se dizer que o TMA incorpora uma filosofia de coerência temporal, na qual o movimento não é apenas descrito, mas percebido como um todo. Para dados financeiros, isso é especialmente importante. Os padrões mais persistentes não surgem de valores médios, mas de padrões recorrentes de atividade. Assim como um trader experiente percebe o mercado pelo ritmo da fita de negócios, o modelo TMA aprende a reconhecer padrões recorrentes no fluxo temporal. Ele não procura atributos estáticos: ele capta o movimento.

É justamente isso que torna a abordagem TMA tão promissora para a análise de séries temporais financeiras. Ela oferece não apenas uma nova arquitetura de processamento de dados, mas uma perspectiva diferente sobre o próprio conceito de tempo. Nesse modelo, o tempo não é passivo, mas ativo; não é linear, mas composto por múltiplas camadas. Cada evento não é um ponto, mas uma onda, e é a interação entre essas ondas que forma a verdadeira dinâmica do mercado.

Ao observar o fluxo de cotações por essa perspectiva, é possível perceber como as tendências se formam em nível microscópico, como os impulsos de atividade se combinam em ondas de movimento e como o ruído das negociações se transforma em um ritmo dotado de significado. O TMA permite tornar esse ritmo visível, convertendo a respiração irregular do mercado em um modelo capaz de prever a direção e a intensidade de seu próximo fôlego.



Algoritmo TMA

Nas tarefas clássicas de fluxo óptico, o objetivo consiste em determinar um campo denso de deslocamentos u : ℝ² → ℝ², que associa a cada ponto (x, y), no instante t₀, sua nova posição (x′, y′) no instante t₁. Transpondo essa ideia para o domínio financeiro, pode-se dizer que a análise do fluxo de dados busca determinar um vetor de movimento do mercado: uma função que mapeia o estado do preço, do volume ou da volatilidade para um novo estado após determinado intervalo de tempo.

Os modelos tradicionais tentam resolver essa tarefa calculando a correlação entre valores de dois frames temporais, que funcionam como uma espécie de quadros da atividade do mercado. Eles avaliam o grau de correspondência entre padrões observados em momentos diferentes para determinar a direção e a velocidade das mudanças. No entanto, essa abordagem inevitavelmente esbarra em limitações decorrentes da própria natureza dos dados de mercado. Esses dados são discretos, assíncronos e espacialmente esparsos. O fluxo financeiro não apresenta uma intensidade explícita, mas apenas uma sequência de negociações, cotações e ordens. Por isso, ao tentar construir uma estrutura de correlação, surgem regiões instáveis de correspondência e fronteiras difusas do movimento. O resultado são atributos menos informativos e estimativas menos precisas da direção do fluxo de capital.

O framework TMA aborda esse problema de outra maneira. Em vez de comprimir os dados em frames e procurar correspondências em fatias estáticas, ele aproveita a continuidade temporal do fluxo de eventos. Assim como os eventos de um modelo visual, os dados financeiros contêm uma estrutura temporal rica. Cada alteração na cotação está associada a diversos microeventos, como a entrada de ordens, o aumento do volume e a variação do spread. Essa estrutura sequencial, com alta granularidade temporal, contém muito mais informações sobre a dinâmica real do mercado do que atributos espaciais obtidos por média. Ao explorar esse nível de detalhe temporal, o TMA reconstrói o contexto contínuo do movimento e produz estimativas mais precisas e expressivas da direção e da velocidade das mudanças.

Para preservar a estrutura temporal e facilitar a extração de atributos, o fluxo de eventos E é convertido em uma representação tridimensional no tempo V(x, y, t). Na formulação original do TMA, essa conversão é feita por meio da discretização do eixo temporal: o fluxo é dividido em intervalos consecutivos e os eventos são distribuídos em uma representação multidimensional. No contexto financeiro, isso equivale a dividir o fluxo do mercado em microcamadas temporais, nas quais cada alteração dos parâmetros, como preço, volume ou volatilidade, é registrada como um elemento de um array multidimensional.

Cada evento eₖ = (xₖ, pₖ, tₖ) pode ser representado como uma tríade: localização (xₖ, yₖ), marca de tempo tₖ e polaridade da mudança pₖ = ±1, que indica a direção do movimento, de alta ou de baixa. Diferentemente dos timeframes fixos, esse formato permite trabalhar com fluxos assíncronos sem perder a sequência em que os eventos de mercado se desenvolvem.

Para construir o volume V(x, y, t), são utilizados o escalonamento temporal e a interpolação bilinear, que ajuda a suavizar as transições entre camadas temporais adjacentes. Se B representar a duração da janela temporal e Nₑ o número de eventos, o volume é formado como uma soma ponderada de todos os eventos, levando em conta sua proximidade temporal e espacial.

Em outras palavras, o TMA não trata cada transação ou alteração de preço de forma isolada. Ele constrói uma representação tridimensional contínua do movimento do mercado, cujos eixos refletem preço, tempo e direção da atividade. Trata-se de uma espécie de cubo temporal de liquidez, dentro do qual é possível observar a formação das tendências, desde os primeiros impulsos de demanda até o surgimento de uma tendência persistente.

O framework TMA adota princípios arquiteturais herdados do RAFT, mas foi substancialmente reformulado para processar fluxos de eventos. Sua arquitetura se apoia em três mecanismos fundamentais:

  • estratégia de divisão de eventos (Event Splitting Strategy),
  • alinhamento temporal linear (Linear Lookup Strategy),
  • módulo de agregação de padrões de movimento (Motion Pattern Aggregation Module).
Em conjunto, esses componentes permitem explorar o potencial da continuidade temporal e reconstruir a dinâmica de forma precisa e robusta dentro de um modelo treinável.

Transpondo essa ideia para o domínio financeiro, o TMA pode ser visto como um sistema que analisa o fluxo de eventos do mercado, como negociações, ordens e picos de liquidez, e o transforma em um mapa de movimentos coerentes de capital. Diferentemente dos modelos tradicionais, que tratam os dados como uma sequência de frames fixos, como candles ou barras temporais, o TMA percebe o mercado como um vídeo contínuo com alta taxa de quadros, no qual cada tick reflete o movimento dos participantes e cada microssinal indica a direção do fluxo de liquidez.

O primeiro componente, Event Splitting Strategy, atua como um segmentador inteligente. Em vez de comprimir o fluxo de cotações em frames temporais obtidos por média, ele o divide em vários intervalos temporais sobrepostos, formando uma série de representações intermediárias. Essa divisão preserva a riqueza da dinâmica entre os instantes observados, incluindo detalhes sutis do movimento que muitas vezes se perdem na agregação convencional. O fluxo de dados E, que abrange o intervalo de t₀ a t₁, é dividido em g segmentos iguais com passo Δt, aos quais se acrescenta um fragmento de referência adicional correspondente ao intervalo (t₀ - Δt, t₀). Dessa forma, obtém-se uma sequência de g+1 fatias temporais, cada uma refletindo seu próprio ritmo de mercado.

Em seguida, cada uma dessas fatias passa por um Codificador compartilhado, que pode ser comparado a um analisador da estrutura do mercado. O Codificador extrai representações vetoriais F ∈ ℝᴴ×ᵂ×ᶜ, em que H e W definem a grade espacial dos atributos, enquanto C corresponde à profundidade do espaço de atributos. No contexto financeiro, isso pode ser interpretado como a transformação dos microeventos em um campo multidimensional de atributos de mercado, uma espécie de mapa de atividade que reflete tanto as oscilações locais quanto as variações mais amplas do interesse dos participantes.

Na etapa seguinte, essas representações são usadas para construir correlações temporais C, que medem o grau de similaridade entre o estado inicial e os estados subsequentes do fluxo.

onde:

  • F₀ são os atributos do primeiro segmento temporal, correspondente ao estado de referência do mercado;
  • Fᵢ são os atributos do segmento correspondente no instante tᵢ.

Esse mecanismo permite calcular não apenas uma relação geral entre frames, mas um campo denso de correlações ao longo do tempo, capaz de registrar de que maneira as estruturas locais do mercado evoluem ao longo do tempo.

Por analogia, seria como se um analista não se limitasse a comparar candles diários, mas acompanhasse cada movimento ocorrido dentro deles: as pequenas ondas de variação do interesse, a formação do impulso e sua propagação de uma zona de preço para outra. Esses coeficientes densos de correlação temporal permitem captar até mesmo deslocamentos sutis na estrutura do mercado, identificando o início de uma tendência antes que ela se torne evidente nos indicadores clássicos.

A principal diferença entre o TMA e as abordagens tradicionais está justamente na densidade temporal da análise. Enquanto os métodos clássicos se restringem a um único par temporal fixo, formado pelo estado inicial e pelo estado final, o TMA considera toda uma série de fragmentos temporais interligados. Isso permite acompanhar o desenvolvimento contínuo do movimento, levando em conta não apenas sua direção, mas também a forma como ele evolui.

No contexto financeiro, essa abordagem abre caminho para modelar a estrutura temporal do impulso, ou seja, compreender como a energia do mercado se propaga ao longo de uma sequência de eventos. Ao dividir o fluxo em microssegmentos e compará-los com alta densidade temporal, o TMA constrói, na prática, um mapa dinâmico do movimento do capital, no qual cada evento e cada negociação se tornam parte de uma complexa estrutura temporal cuja combinação dá origem à tendência geral.

Essa abordagem permite abandonar uma visão plana do mercado como um conjunto de barras independentes. Em seu lugar, revela a profundidade das interações temporais, nas quais passado e futuro se entrelaçam em um processo contínuo de formação do movimento. Com isso, o framework TMA pode ir além da simples previsão de direção e captar a lógica do fluxo do mercado, identificando conexões ocultas entre diferentes instantes e integrando-as em um campo dinâmico coerente.

A etapa seguinte, o alinhamento temporal linear (Linear Lookup Strategy), permite trazer todos os processos dinâmicos registrados no fluxo de eventos para uma referência temporal comum.

Matematicamente, o alinhamento temporal linear parte da hipótese de que, dentro de uma janela temporal curta, as mudanças no movimento ocorrem de forma linear. Em outras palavras, entre fatias temporais adjacentes, a trajetória se altera de maneira uniforme. Isso permite dividir o vetor total de deslocamento (u) em intervalos iguais e amostrar os dados em pontos intermediários correspondentes a esses passos temporais. Dessa forma, cada mapa de correlação recebe uma referência temporal bem definida, garantindo a sincronização necessária para a agregação posterior.

No contexto dos mercados financeiros, o alinhamento temporal linear funciona como um algoritmo de normalização dos sinais de mercado. Na prática, diferentes ativos, e até diferentes intervalos de um mesmo ativo, podem apresentar movimentos dessincronizados: as fases de alta e de correção se deslocam no tempo, enquanto a resposta a eventos externos pode ocorrer com atraso. A Linear Lookup Strategy do TMA atua justamente sobre essas defasagens, alinhando movimentos que ocorrem em momentos distintos e permitindo analisá-los em uma escala temporal comum. O princípio lembra o alinhamento de séries de preços com base na volatilidade ou sua conversão para um mesmo timeframe, tornando a comparação e a interpretação mais consistentes.

Do ponto de vista técnico, o alinhamento temporal linear sincroniza os mapas de correlação, estruturas que contêm informações sobre as relações entre atributos provenientes de diferentes camadas temporais. Inicialmente, cada um desses volumes registra o movimento em seu próprio ritmo, assim como cada instrumento financeiro apresenta uma dinâmica própria de variação dos preços. O objetivo dessa etapa é transformar esses dados dispersos em uma representação coerente, na qual cada elemento corresponda ao mesmo instante no tempo. Como resultado, o movimento passa a ser observado ao longo do tempo, e não apenas no espaço.

Em termos figurativos, o alinhamento temporal linear funciona como um maestro que coloca em ordem uma orquestra de sinais temporais. Sem ele, cada grupo de instrumentos, representado por uma camada de correlação distinta, seguiria seu próprio andamento, produzindo ruído em vez de harmonia. Depois do alinhamento, porém, todos os elementos passam a evoluir de forma sincronizada, permitindo que o modelo identifique padrões persistentes que se repetem em diferentes intervalos temporais. É justamente essa propriedade que torna o TMA especialmente sensível a estruturas de movimento complexas e sutis, sejam elas trajetórias de objetos no espaço ou micropadrões de variação das cotações.

O módulo de agregação de padrões de movimento (Motion Pattern Aggregation Module) é o componente final e, talvez, o mais refinado da arquitetura TMA. Sua função é reunir os atributos temporais de movimento obtidos nas etapas anteriores em uma representação única e coerente, na qual cada camada temporal não apenas acrescenta dados, mas contribui de maneira significativa para a representação global da dinâmica. À primeira vista, a tarefa parece simples: combinar os atributos e atualizar a estimativa do fluxo. Na prática, porém, há um equilíbrio delicado, semelhante ao que existe entre diferentes etapas de um movimento na física ou entre ruído e sinal na análise financeira.

Nas arquiteturas tradicionais, esses atributos geralmente são concatenados, ou seja, empilhados para que o modelo possa sintetizar todas as informações acumuladas. Esse método, porém, trata todos os atributos da mesma forma, como se o mercado não distinguisse um pico de atividade pela manhã de uma desaceleração no fim do dia. Como as camadas intermediárias são sempre mais numerosas, elas passam a exercer maior influência, e seu peso estatístico pode distorcer a decisão final. O problema é que esses atributos intermediários foram obtidos com base em hipóteses lineares e deslocamentos definidos manualmente, o que limita sua precisão.

Os autores do framework TMA resolveram essa questão com uma solução de engenharia elegante, introduzindo um mecanismo de atenção cruzada (cross-attention). Em vez de atribuir o mesmo peso a todos os movimentos, esse mecanismo os pondera de acordo com seu grau de coerência com o último estado temporal, considerado o mais confiável. O último atributo (MFg) funciona como referência, de forma semelhante ao fechamento de um pregão, que sintetiza as oscilações anteriores e reflete a dinâmica resultante do mercado.

Cada camada intermediária (MFi) é comparada com essa representação final por meio do mecanismo de atenção, que calcula as similaridades cruzadas entre cada camada intermediária e a representação final. Dessa forma, o TMA destaca justamente os padrões de movimento que permanecem coerentes com a etapa final, ou seja, aqueles que persistiram ao longo da evolução do movimento e foram confirmados pelo tempo. Em termos de trading, isso pode ser comparado à filtragem de ruído: diversos sinais de curto prazo são avaliados quanto à sua consistência em relação a uma tendência de prazo mais longo. Os padrões que preservam sua direção e seu ritmo em sintonia com o movimento final são reforçados, enquanto as oscilações aleatórias têm sua influência reduzida.

Tecnicamente, esse processo é implementado por uma sequência de blocos de atenção cruzada seguidos de transformações não lineares (MLP), que refinam e normalizam os atributos sem alterar sua dimensionalidade. Essa característica é importante porque permite aumentar a profundidade da arquitetura sem sobrecarregar o modelo, assim como um analista pode refinar progressivamente uma previsão sem aumentar a quantidade de indicadores de entrada. Como resultado, cada atributo atualizado (MFi) deixa de ser apenas mais uma fatia temporal e passa a incorporar padrões coerentes e confirmados ao longo do tempo.

Em termos figurativos, o módulo de agregação de padrões de movimento atua como um sintetizador que transforma a multiplicidade de vozes das camadas temporais em uma única melodia. Ele considera o passado, confronta-o com o presente e extrai uma harmonia comum na qual cada nota tem sua importância. Na análise financeira, essa abordagem equivale a integrar sinais provenientes de diferentes horizontes, como minutos, horas e dias, priorizando aqueles que permanecem consistentes à medida que se avança para timeframes mais longos. É justamente essa coerência entre diferentes características temporais que sustenta uma previsão mais confiável.

O TMA integra seus três componentes fundamentais, a estratégia de divisão de eventos, o alinhamento temporal linear e a agregação de padrões coerentes, em um único fluxo computacional. Em conjunto, esses mecanismos formam um framework que vai além do simples cálculo do fluxo óptico e extrai a estrutura interna do movimento aproveitando a riqueza das informações temporais. Em essência, o modelo aprende a raciocinar ao longo do tempo. Ele não opera sobre estados estáticos, mas interpreta a dinâmica, assim como um trader experiente percebe o pulso do mercado em vez de apenas observar as cotações na tela.

Essa arquitetura demonstra que, quando o problema é formulado corretamente, a continuidade temporal deixa de ser um obstáculo e passa a ser uma fonte adicional de informação. Isso permite alcançar alta precisão já nas etapas iniciais da previsão, quando a maioria dos modelos ainda exige sucessivos refinamentos. No contexto financeiro, seria o equivalente a produzir uma previsão confiável a partir dos primeiros impulsos do movimento do preço, sem esperar pela confirmação dos indicadores.

A visualização do framework TMA proposta pelos autores é apresentada abaixo.


Implementação em MQL5

Após analisar os fundamentos teóricos do framework TMA, é natural passar à parte prática e avaliar até que ponto os conceitos descritos funcionam de maneira eficiente em condições reais. Vamos considerar uma das possíveis implementações dessas ideias em MQL5, aproveitando a experiência já acumulada na integração de arquiteturas profundas à infraestrutura de trading.

Como observam os autores do framework, o TMA tem como base a arquitetura RAFT, uma solução consolidada e amplamente testada em tarefas de fluxo óptico. Para nós, isso representa uma vantagem importante. Já tivemos a oportunidade não apenas de estudar esse framework em detalhes, mas também de implementá-lo em nossa própria biblioteca. Por isso, o ponto de partida deste projeto é bastante favorável: não precisamos construir novamente o modelo do zero, bastando adaptar o código existente às particularidades do processamento temporal proposto pelo TMA.

Essa abordagem pode ser comparada ao uso de uma fundação pronta para erguer um novo edifício. A base é sólida, a infraestrutura já está instalada e, portanto, toda a atenção pode se concentrar naquilo que será acrescentado: os mecanismos específicos que distinguem o TMA, como a divisão do fluxo de eventos, o alinhamento temporal linear e a agregação cruzada dos padrões de movimento. Em essência, nossa tarefa agora não é recriar a arquitetura, mas incorporar a ela a dinâmica do tempo. É justamente essa sensibilidade temporal que torna o TMA uma ferramenta de análise tão poderosa.

No entanto, a adaptação das abordagens do TMA ao ambiente MQL5 traz uma série de dificuldades, tanto conceituais quanto estritamente técnicas. E isso já fica evidente nas primeiras etapas. Os autores do framework TMA original propõem segmentar o fluxo temporal em blocos não sobrepostos de mesma duração. À primeira vista, não parece uma tarefa particularmente complexa, sobretudo quando se dispõe de uma janela temporal fixa com um número previamente conhecido de elementos. Em nossa prática, já utilizamos técnicas semelhantes diversas vezes na análise de dados históricos.

Neste caso, porém, a situação é um pouco diferente. O modelo desenvolvido durante o estudo do framework RAFT segue um princípio recorrente. Isso significa que, a cada instante, ele recebe apenas um retrato do estado atual do mercado, um frame instantâneo da dinâmica do preço, e não uma longa sequência de valores. Essa abordagem reduz significativamente a carga computacional. Cada frame é processado apenas uma vez, tornando o modelo mais estável e eficiente no uso de recursos. Essa simplicidade, porém, também tem seu custo: a segmentação ao longo do eixo temporal se torna limitada.

No TMA clássico, a análise se baseia em uma visão integrada do volume temporal, em que cada bloco de eventos se conecta ao anterior e ao seguinte por meio da estrutura dos padrões temporais. Em nosso esquema recorrente, essa conexão é menos direta. O modelo percebe o mercado não como um fluxo contínuo, mas como uma sequência de frames. Por isso, integrar os princípios do TMA exige uma abordagem específica: é preciso ensinar o modelo a captar a profundidade temporal sem comprometer sua eficiência computacional nem sua velocidade de execução.

Em outras palavras, temos diante de nós uma tarefa nada trivial: unir dois mundos. O mundo do RAFT, no qual a informação avança sequencialmente, como o curso de um rio, e o mundo do TMA, em que o tempo é tratado como um volume estruturado, semelhante a um cristal. Precisamos encontrar uma forma de combinar essas duas representações para que o fluxo do mercado não seja apenas registrado, mas também interpretado em termos de sua dinâmica.

Para começar, vamos entender por que esses segmentos são necessários e como são utilizados na estrutura do TMA. Os autores do framework propõem dividir o fluxo temporal não por mera conveniência de processamento. Cada segmento funciona como um frame independente da dinâmica do mercado, dentro do qual é possível analisar as relações e os padrões entre os atributos que moldam o comportamento do preço.

Para cada um desses blocos, é construído um mapa de correlações próprio, uma espécie de retrato das interações ao longo de determinado intervalo de tempo. Esse mapa registra como as relações entre atributos locais se modificam, em que medida diferentes regiões do campo de preços se movem de forma coerente e onde surge a inércia temporal do mercado. Em essência, cada segmento se transforma em um pequeno experimento no qual o modelo avalia a natureza do movimento atual e sua lógica interna.

Nos mercados financeiros, porém, o tempo não se presta a divisões rígidas. O movimento do preço é contínuo, sem fronteiras bem definidas, em que cada instante se transforma gradualmente no seguinte. Qualquer divisão artificial inevitavelmente provoca a perda de fases de transição, impulsos e microtendências, justamente aquela respiração do mercado que muitas vezes determina uma reversão ou uma aceleração do movimento.

Decidimos abandonar essa discretização rígida e seguir outro caminho: permitir que o modelo acompanhe o próprio fluxo. Nossa solução se apoia na arquitetura recorrente desenvolvida anteriormente durante a implementação do framework RAFT. Ela permite interpretar a série temporal não como um conjunto de retratos isolados, mas como uma história contínua. Cada novo frame não é apenas mais um ponto de dados, mas a continuação natural do estado anterior. Nós o inserimos em uma pilha recorrente que armazena vários dos estados mais recentes, formando uma janela de observação através da qual o modelo acompanha o mercado.

Essa janela desliza ao longo do eixo temporal como a lente de uma câmera permanentemente voltada para o presente, mas sem perder a profundidade do contexto. A cada passo, são calculadas correlações entre os elementos da janela, formando uma descrição em múltiplas camadas do movimento atual. Ao mesmo tempo, o modelo não recalcula tudo do zero: cada frame é processado apenas uma vez, e todas as atualizações posteriores são realizadas de forma incremental, somente onde surgiram novos dados. Os estados mais antigos saem gradualmente da pilha, abrindo espaço para os mais recentes, enquanto sua influência é preservada nas estruturas de correlação já acumuladas.

Essa abordagem permite trabalhar naturalmente com segmentos sobrepostos, sem custos computacionais desnecessários. Criamos um sistema dinâmico no qual as sobreposições não precisam ser modeladas artificialmente, pois surgem de forma natural graças à memória recorrente. Os mapas de correlação passam a funcionar como uma espécie de pulso do mercado: reagem às menores oscilações, registram micromovimentos e, ao mesmo tempo, preservam a estabilidade do quadro geral.

Pode-se dizer que o modelo começa a raciocinar como um analista experiente: em vez de enxergar o mercado como uma sucessão de barras isoladas, ele percebe um fluxo contínuo de capital. Cada novo tick complementa a observação anterior, em vez de substituí-la, formando uma representação dinâmica integrada.

Na implementação prática da abordagem proposta, criamos um novo componente, CNeuronMultScalStackCorrelBySegments, que se torna o elemento central na adaptação das ideias do TMA à arquitetura recorrente. Sua função é combinar a correlação multiescala com o mecanismo de segmentação, preservando ao mesmo tempo a continuidade do fluxo temporal. Em termos simples, trata-se do componente no qual a dinâmica do mercado é decomposta em segmentos temporais sobrepostos e imediatamente recombinada em uma representação enriquecida do movimento.

class CNeuronMultScalStackCorrelBySegments :  public CNeuronAddToStack
  {
protected:
   CNeuronMultiScaleStackCorrelation cCorrelation;
   //---
   virtual bool      feedForward(CNeuronBaseOCL *NeuronOCL) override;
   virtual bool      calcInputGradients(CNeuronBaseOCL *NeuronOCL) override;

public:
                     CNeuronMultScalStackCorrelBySegments(void) {};
                    ~CNeuronMultScalStackCorrelBySegments(void) {};
   //---
   virtual bool      Init(uint numOutputs, uint myIndex, COpenCLMy *open_cl,
                          uint segments, uint segment_size, uint dimension,
                          uint variables, uint levels,
                          ENUM_OPTIMIZATION optimization_type, uint batch);
   //---
   virtual int       Type(void)   override const   {  return defNeuronMultScalStackCorrelBySegments;   }
   //--- methods for working with files
   virtual bool      Save(int const file_handle) override;
   virtual bool      Load(int const file_handle) override;
   //---
   virtual void      SetOpenCL(COpenCLMy *obj) override;
   //---
   virtual void      SetActivationFunction(ENUM_ACTIVATION value) override;
   virtual bool      Clear(void) override;
   //---
   virtual uint      GetLevels(void) const { return cCorrelation.GetLevels(); }
   virtual uint      SetSegmentSize(void) const { return cCorrelation.GetStackSize(); }
  };

A classe herda a funcionalidade básica de CNeuronAddToStack, o que permite integrá-la naturalmente à hierarquia já existente de módulos neurais e aproveitar a lógica de pilha implementada anteriormente. Internamente, é declarado um objeto CNeuronMultiScaleStackCorrelation, responsável pelas correlações multiescala dentro do segmento atual. É ele que constitui a base dos cálculos, comparando as relações entre estados consecutivos e construindo o tecido temporal do movimento sobre a qual se apoiará a previsão posterior.

A inicialização da classe é realizada pelo método Init, no qual são definidos os principais parâmetros: número de segmentos, tamanho de cada segmento, dimensionalidade do espaço de atributos, número de variáveis, níveis de escala e tipo de otimização. Esse método configura o ambiente em que o neurônio operará e, ao mesmo tempo, estabelece as regras para o processamento das estruturas temporais.

bool CNeuronMultScalStackCorrelBySegments::Init(uint numOutputs, uint myIndex, COpenCLMy *open_cl,
                                                uint segments, uint segment_size, uint dimension,
                                                uint variables, uint levels,
                                                ENUM_OPTIMIZATION optimization_type, uint batch)
  {
   if(!CNeuronAddToStack::Init(numOutputs, myIndex, open_cl, segments, segment_size * levels,
                                                                    variables, optimization_type, batch))
      return false;
   if(!cCorrelation.Init(0, 0, OpenCL, segment_size, dimension, variables, levels, optimization, iBatch))
      return false;
   SetActivationFunction(None);
//---
   return true;
  }

Na primeira etapa, é chamado o método de mesmo nome da classe pai, que cria uma pilha destinada a armazenar os dados de correlação para o número especificado de segmentos. Essa abordagem permite ao neurônio analisar não apenas oscilações de curto prazo, mas também considerar horizontes temporais mais longos. No contexto dos dados financeiros, isso é especialmente importante, pois o movimento do preço não é um impulso isolado, mas o resultado de uma interação complexa entre sinais de diferentes escalas temporais.

Em seguida, é inicializado o objeto cCorrelation, responsável pelo cálculo das correlações entre os atributos analisados dentro do segmento. Com isso, forma-se uma estrutura interna na qual cada nível é processado de maneira independente, enquanto todos os resultados são consolidados em um único campo de correlação. Na prática, cria-se uma espécie de mapa de memória que representa as relações entre diferentes trechos da série temporal. Isso permite que o modelo perceba o mercado não como um conjunto de frames desconectados, mas como um sistema dinâmico no qual passado e presente interagem continuamente.

Vale destacar, em particular, a desativação da função de ativação. Isso é intencional: nesta etapa, precisamos obter uma representação limpa e matematicamente precisa das correlações, sem distorções introduzidas por transformações não lineares. As funções de ativação serão aplicadas posteriormente, quando o modelo precisar não apenas medir as relações, mas também extrair padrões a partir delas.

Dessa forma, o método Init define não apenas os parâmetros técnicos, mas também a base conceitual da nova abordagem para o processamento de séries temporais. Graças a ele, o framework passa a observar o mercado simultaneamente em várias escalas temporais, mantendo o uso eficiente dos recursos computacionais. É justamente essa propriedade que abre caminho para a construção de estratégias de trading mais flexíveis, adaptativas e previsíveis.

O algoritmo de propagação para frente em nossa implementação se torna o elemento central que conecta o processamento dinâmico das correlações ao mecanismo recorrente de acúmulo de informações. No método feedForward, combinamos, na prática, duas lógicas: a análise das relações locais dentro de um segmento temporal e a formação sequencial de um fluxo contínuo de dados que reflete a dinâmica viva do mercado.

bool CNeuronMultScalStackCorrelBySegments::feedForward(CNeuronBaseOCL *NeuronOCL)
  {
   if(!cCorrelation.FeedForward(NeuronOCL))
      return false;
   if(!CNeuronAddToStack::feedForward(cCorrelation.AsObject()))
      return false;
//---
   return true;
  }

Na primeira etapa, é chamado o método de mesmo nome do objeto interno cCorrelation, iniciando o cálculo das correlações entre os atributos do estado atual e os dados acumulados dentro do segmento. É nesse ponto que se forma o mapa de correlações, uma espécie de retrato da estrutura interna do mercado ao longo de determinado intervalo temporal. Ele registra quais relações predominam, onde aumenta a sincronia dos movimentos e onde as tendências começam a divergir. É como uma radiografia instantânea do estado local, permitindo que o modelo capte a natureza da interação entre as forças presentes naquele momento.

Em seguida, os resultados obtidos são inseridos na pilha recorrente, que atua como a memória do modelo. Nela são armazenados os mapas de correlação mais recentes. A cada novo passo, a pilha é atualizada: novas informações são adicionadas, enquanto os dados mais antigos são gradualmente removidos. Isso produz naturalmente o efeito de segmentos sobrepostos, em que cada novo estado leva o anterior em consideração e forma um contínuo temporal suave, sem a necessidade de recalcular todo o conjunto de dados.

Esse mecanismo confere flexibilidade e capacidade de adaptação ao modelo. Ele deixa de perceber o mercado como um conjunto de frames independentes e passa a enxergá-lo como um fluxo contínuo. Cada instante influencia o seguinte. Isso permite acompanhar não apenas as correlações locais, mas também sua evolução, observando como as relações entre os atributos se fortalecem, enfraquecem ou mudam de direção à medida que o preço se movimenta.

No contexto dos dados financeiros, uma arquitetura desse tipo é especialmente valiosa. Afinal, o mercado raramente se move em linha reta. Com mais frequência, ele pulsa, retorna a níveis já percorridos e gradualmente forma novos padrões de comportamento. O método feedForward se torna o mecanismo que permite ao modelo captar essas oscilações sem perder a inércia histórica. Com isso, torna-se possível analisar não apenas o estado instantâneo, mas também sua evolução, ou seja, como o mercado preserva a memória de seu próprio passado e, a partir dela, constrói o movimento atual.

É justamente aí que se manifesta a diferença entre a abordagem proposta e a implementação clássica do TMA. Não recalculamos todo o fluxo; avançamos por ele passo a passo, preservando o contexto e evitando cálculos redundantes.

De modo geral, a classe CNeuronMultScalStackCorrelBySegments representa uma nova etapa na evolução da arquitetura: a transição do processamento estático para uma percepção dinâmica do mercado. Ela permite construir uma cadeia de relações temporais, preservando a eficiência computacional e adaptando a metodologia do TMA às particularidades da abordagem recorrente. O código completo dessa classe e de todos os seus métodos está disponível no anexo.


Conclusão

Estamos apenas abrindo a primeira página de um trabalho muito mais amplo: a adaptação do framework TMA às aplicações no mercado financeiro em MQL5. Neste artigo, conhecemos seus fundamentos teóricos e demos os primeiros passos na implementação prática das ideias propostas pelos autores. E, quanto mais nos aprofundamos na arquitetura do TMA, mais evidente se torna que não estamos diante de apenas mais uma forma de processar dados temporais, mas de uma concepção completa capaz de transformar a abordagem à análise dos mercados financeiros.

A principal força do TMA está em sua capacidade de extrair informações não de frames isolados, mas do próprio fluxo do tempo. Ele trata o movimento como algo contínuo, no qual cada microdetalhe carrega vestígios do passado e indícios do futuro. Essa abordagem é especialmente valiosa no ambiente financeiro, em que o contexto e a sequência dos eventos muitas vezes têm mais importância do que valores isolados.

Em nossa implementação, baseada em processamento recorrente, conseguimos preservar a eficiência computacional e, ao mesmo tempo, dotar o modelo de memória temporal, permitindo que ele considere segmentos sobrepostos sem custos desnecessários. Na prática, a combinação do TMA com MQL5 confere ao sistema características de um observador atento do mercado, capaz de identificar padrões mesmo onde os métodos tradicionais enxergam apenas ruído.


Referências


Programas utilizados no artigo

# Nome Tipo Descrição
1 Study.mq5 Expert Advisor EA para treinamento offline de modelos
2 StudyOnline.mq5 Expert Advisor EA para treinamento online de modelos
3 Test.mq5 Expert Advisor EA para teste do modelo
4 Trajectory.mqh Biblioteca de classe Estrutura de descrição do estado do sistema e da arquitetura dos modelos
5 NeuroNet.mqh Biblioteca de classe Biblioteca de classes para criação de redes neurais
6 NeuroNet.cl Biblioteca Biblioteca de código do programa OpenCL

Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/20189

Arquivos anexados |
MQL5.zip (3280.15 KB)
Equipe de agentes de IA com rotação baseada no lucro: a evolução de um sistema de trading vivo em MQL5 Equipe de agentes de IA com rotação baseada no lucro: a evolução de um sistema de trading vivo em MQL5
Gestão financeira como ecossistema: sete traders de IA, cada um com personalidade e estratégia próprias, em vez de um único algoritmo. Eles competem pelo capital, aprendem com os erros e tomam decisões em conjunto. O artigo apresenta os princípios de funcionamento do sistema Modern RL Trader, no qual o código é dotado de consciência e emoções, dando origem a uma inteligência de trading viva e em constante evolução.
Sistema de autoaprendizado por reforço para trading algorítmico em MQL5 Sistema de autoaprendizado por reforço para trading algorítmico em MQL5
Neste artigo, desenvolvemos um sistema multiagente de aprendizado de máquina para trading algorítmico no MetaTrader 5 com base em aprendizado por reforço. O sistema possui uma arquitetura de três níveis: os neurônios de memória armazenam a experiência, os agentes tomam decisões de forma independente e a inteligência coletiva combina essas decisões por meio de votação ponderada. O sistema se aperfeiçoa continuamente por meio de Q-learning, pruning de neurônios ineficientes e redução evolutiva do nível de exploração.
Está chegando o novo MetaTrader 5 e MQL5 Está chegando o novo MetaTrader 5 e MQL5
Esta é apenas uma breve resenha do MetaTrader 5. Eu não posso descrever todos os novos recursos do sistema por um período tão curto de tempo - os testes começaram em 09.09.2009. Esta é uma data simbólica, e tenho certeza que será um número de sorte. Alguns dias passaram-se desde que eu obtive a versão beta do terminal MetaTrader 5 e MQL5. Eu ainda não consegui testar todos os seus recursos, mas já estou impressionado.
Redes neurais no trading: modelos de refinamento iterativo de previsões (Conclusão) Redes neurais no trading: modelos de refinamento iterativo de previsões (Conclusão)
Apresentamos o framework RAFT, uma poderosa ferramenta para análise e previsão de séries temporais financeiras. Sua arquitetura flexível e otimizada proporciona precisão nas previsões, estabilidade operacional e processamento de dados mais rápido. O RAFT reduz o risco de erros e facilita o desenvolvimento de estratégias de trading eficientes.