Русский
preview
Redes neurais em trading: modelos de refinamento iterativo de previsões (RAFT)

Redes neurais em trading: modelos de refinamento iterativo de previsões (RAFT)

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

Introdução

O mundo dos mercados financeiros sempre avança mais rápido do que os modelos teóricos. Cada nova onda tecnológica apenas reforça que os métodos clássicos de previsão são excessivamente lineares quando comparados à dinâmica real dos preços. O mercado não se comporta como uma sequência de tendências lineares simples, mas como um campo contínuo de múltiplas interações, no qual qualquer impulso local repercute imediatamente no quadro global. Por isso, arquiteturas capazes de refinar sucessivamente suas previsões, ajustando a própria confiança ao longo dos cálculos, vêm ganhando cada vez mais relevância.

A abordagem RAFT (Recurrent All-Pairs Field Transforms), originalmente desenvolvida em visão computacional para reconstrução de fluxo óptico, não se baseia em uma estimativa grosseira de uma única etapa, mas no refinamento iterativo do estado. O modelo não tenta prever o futuro de uma só vez. Primeiro, constrói uma estimativa inicial e depois a aprimora repetidamente, recorrendo ao campo completo de relações entre os dados de entrada. Esse princípio difere radicalmente das arquiteturas tradicionais, nas quais a previsão é produzida uma única vez e suas deficiências são corrigidas apenas durante o treinamento. No framework RAFT, a própria estrutura do modelo prevê refinamentos dentro de uma única etapa de inferência. É justamente isso que o torna especialmente interessante para aplicações financeiras.

O mercado raramente revela sua intenção de imediato. Um movimento de preço pode começar com uma fase enganosa, ganhar força em seguida e depois perder definição diante de um impulso contrário. Qualquer previsão produzida em uma única etapa é obrigada a assumir uma direção já na primeira estimativa. Um modelo iterativo funciona de outra forma. Ele estabelece uma versão preliminar do futuro e imediatamente verifica sua consistência com as demais relações presentes nos dados, de modo semelhante a um trader experiente que reavalia a situação assim que surge o menor sinal novo. Essa forma de raciocínio está mais próxima da tomada de decisão real do que modelos estáticos rígidos, que mantêm a mesma avaliação até a próxima chamada do modelo.

A principal ideia do RAFT é construir explicitamente um campo multidimensional de correspondências entre todos os pares de elementos dos dados analisados. Na tarefa de fluxo óptico, esses pares correspondem aos pixels de dois quadros. Em dados financeiros, essas correspondências podem relacionar estados de janelas temporais, instrumentos, horizontes temporais e padrões locais de microestrutura. O resultado não é uma aproximação, mas um mapa completo das possíveis interações. Esse mapa permite não apenas identificar uma tendência, mas também compreender como um desvio pode se propagar por dezenas de outras relações. Essa é precisamente a natureza do mercado financeiro: ele não é um sinal linear, mas um campo de múltiplas dependências que não pode ser explicado por uma única direção de movimento.

Enquanto os modelos clássicos baseados em CNN ou LSTM interpretam o mercado como um fluxo de eventos sequenciais, o framework RAFT o enxerga como um campo distribuído. Não como uma série temporal, mas como um espaço de relações. Nessa perspectiva, a previsão deixa de ser uma extrapolação unidimensional e passa a representar uma reconstrução dinâmica da posição do sistema dentro de um contexto multidimensional. A cada etapa de refinamento, a previsão se torna mais robusta, pois o modelo não depende de uma única hipótese: ele a confronta repetidamente com todas as relações disponíveis. No trading, em que um erro cometido mesmo em uma única iteração pode ter um custo elevado, essa capacidade de autocorreção interna é especialmente valiosa.

Sob essa ótica, o mercado deixa de parecer uma sequência de eventos e passa a se apresentar como uma estrutura dinâmica de forças interdependentes, na qual cada mudança repercute não apenas localmente, mas em todo o campo de correspondências. O movimento do mercado não se propaga em linha reta. Ele ressoa, assim como uma perturbação em determinado ponto de um meio físico pode provocar uma resposta a distância. É justamente por isso que os modelos unidimensionais clássicos inevitavelmente perdem parte da informação: eles enxergam apenas uma linha, enquanto o mercado se comporta como um sistema distribuído.

O caráter iterativo do RAFT abre espaço para a adaptação a regimes de mercado que mudam rapidamente. Em vez de depender do treinamento com uma quantidade enorme de exemplos que cubram todos os cenários possíveis, o modelo pode refinar sua decisão no próprio momento da execução. Com isso, ele se transforma não apenas em um mecanismo de previsão, mas também de adaptação. Como a arquitetura já é concebida desde o início para realizar refinamentos sucessivos, ela consegue operar em tempo real sem comprometer a eficiência computacional. É exatamente esse tipo de flexibilidade que o ambiente financeiro exige: reagir de imediato sem sacrificar a profundidade da análise.

O desenvolvimento dessa ideia conduz a modelos que percebem o mercado como um campo de tensões interdependentes em transformação contínua. Eles não se limitam a prever o preço, mas reconstroem seu movimento como uma estrutura integrada, refinando cada elemento no contexto de todos os demais. Essa abordagem não é apenas lógica, mas também uma consequência natural da própria dinâmica do mercado. Ela abre caminho para sistemas capazes de emitir alertas antes mesmo do surgimento do evento. O modelo deixa de raciocinar apenas a partir do passado, como ocorre com grande parte dos algoritmos de análise de dados, e passa a tomar decisões no presente, em interação contínua com a situação, em vez de apenas seguir uma instrução previamente calculada. Quando o mercado se assemelha mais a um sistema físico complexo do que a uma soma linear de fatores, arquiteturas da classe RAFT apontam para uma nova direção. Nosso objetivo é mostrar como esse princípio pode ser adaptado ao ambiente financeiro preservando sua vantagem fundamental: a capacidade de enxergar não apenas elementos isolados, mas o sistema como um todo, chegando à previsão não de uma só vez, mas por meio de um refinamento consciente e sucessivo.

Em essência, isso nos leva a tratar a previsão não como uma tentativa de adivinhar o preço futuro, mas como a reconstrução do estado atual do sistema, um estado que ainda não se manifestou nas cotações, embora já exista como uma configuração de forças. Um modelo iterativo com acesso ao campo completo de correspondências pode captar a tensão interna do mercado antes que ela se converta em um movimento explícito. Essa abordagem está mais próxima da análise do que da especulação: o objetivo não é capturar um movimento abrupto, mas avaliar até que ponto o sistema está preparado para uma transição. É isso que torna o refinamento iterativo fundamentalmente mais confiável do que uma única previsão linear.

E, se considerarmos o mercado como um ambiente com uma estrutura contínua de relações de causa e efeito, torna-se evidente que não é possível prevê-lo de uma só vez a partir de um vetor de entrada. É preciso estimar seu estado. Não interpretar uma sequência, mas reconstruir uma configuração integrada de tensões. É justamente nisso que reside a importância fundamental da arquitetura RAFT: ela opera por meio de um mecanismo interno de reavaliação, e não apenas pela geração externa de uma resposta. O refinamento iterativo transforma a previsão em um processo de interpretação computacional, em vez de uma reação instantânea. Essa é a principal razão pela qual modelos desse tipo podem se tornar a base de uma nova geração de sistemas financeiros.

Essa mudança de paradigma altera a própria compreensão do papel do modelo na infraestrutura de trading. Ele deixa de ser um consultor externo que emite um sinal ao término dos cálculos e passa a atuar como um mecanismo interno de análise, capaz de adaptar seu estado em tempo real. Trata-se de um nível fundamentalmente diferente de interação com o ambiente de mercado: não reativo, mas acoplado à sua dinâmica. O modelo não espera que o desvio final do preço se manifeste. Ele acompanha o desenvolvimento desse movimento, atualizando a previsão em ciclos sucessivos, confrontando-a com o campo de dependências observado. A previsão deixa de ser uma decisão binária e se transforma em uma avaliação contextual do estado. Isso é particularmente importante em mercados com elevado nível de ruído, nos quais falsos impulsos são inevitáveis e uma sensibilidade excessiva pode desencadear uma sequência de ações equivocadas. Uma arquitetura baseada em refinamentos sucessivos trata o ruído como uma flutuação temporária cuja consistência é confrontada com todo o campo de interações.

É por isso que a adaptação dos princípios do RAFT ao contexto financeiro deixa de ser apenas possível e passa a ser praticamente necessária. Um sistema capaz de reavaliar repetidamente sua hipótese sobre o estado do mercado reflete melhor a dinâmica real da tomada de decisão. Seu funcionamento se aproxima mais da forma como atua um analista experiente do que do comportamento de um algoritmo estático.


Algoritmo RAFT

A adaptação adequada dos modelos de refinamento iterativo de previsões (RAFT) às séries temporais financeiras exige, antes de tudo, uma análise cuidadosa da estrutura do algoritmo. Na tarefa original do RAFT aplicada a imagens, considera-se um par de quadros RGB consecutivos I e I2,, e é necessário estimar um campo denso de deslocamentos (f1, f2), que mapeia cada pixel do segundo quadro para a posição correspondente no primeiro. No caso de dados financeiros, um campo análogo pode ser interpretado como um mapa de correspondências entre janelas temporais consecutivas, no qual cada valor de um instrumento é relacionado ao seu estado futuro e à influência exercida sobre outros instrumentos.

O algoritmo RAFT é dividido em três etapas:

  • extração de atributos,
  • cálculo das correspondências mútuas,
  • refinamento iterativo da previsão.

Todas as etapas são diferenciáveis e formam uma estrutura treinável de ponta a ponta. No contexto financeiro, a primeira etapa pode ser interpretada como a extração de indicadores de mercado relevantes, padrões e regularidades ocultas a partir dos dados históricos, reduzindo a dimensionalidade dos dados e construindo uma representação rica da dinâmica atual.

O módulo codificador de atributos gθ transforma os dados analisados em mapas densos de atributos com resolução reduzida. Na arquitetura original, essa resolução corresponde a 1/8 da resolução de entrada, enquanto a dimensionalidade D dos atributos é igual a 256. O codificador é composto por seis blocos com conexões residuais, cada nível contendo duas camadas convolucionais. No contexto de séries temporais financeiras, isso permite identificar padrões em diferentes escalas temporais: picos de curto prazo, tendências de médio prazo e movimentos de longo prazo. Esse processamento em múltiplos níveis permite que o modelo compreenda o mercado como um todo, e não apenas eventos isolados.

O modelo de contexto hθ extrai atributos apenas da primeira janela temporal, análoga à primeira imagem, fornecendo uma representação estável e consistente dos dados. No trading, isso corresponde a uma avaliação inicial do estado do mercado: construção de um mapa de relações entre instrumentos, identificação de correlações e detecção de sinais ocultos antes do início do refinamento iterativo da previsão. Em conjunto, os modelos gθ e hθ formam a base da arquitetura. Seus cálculos são realizados uma única vez, mas definem a estrutura utilizada nas atualizações subsequentes.

Essa abordagem oferece uma vantagem evidente em relação aos métodos tradicionais de previsão. Em vez de depender de uma única previsão baseada no valor anterior do preço, o modelo constrói uma representação abrangente do mercado, que posteriormente é utilizada para refinar a previsão de forma sucessiva. Cada nova atualização considera todo o mapa de relações e permite corrigir a estimativa inicial, algo especialmente importante em mercados voláteis e ruidosos. Como resultado, a arquitetura transforma a previsão: em vez de simplesmente estimar o próximo valor, ela realiza uma reconstrução dinâmica do estado do mercado levando em conta múltiplos fatores. Isso a torna significativamente mais robusta e precisa do que os algoritmos clássicos.

Na etapa seguinte do algoritmo RAFT, são calculadas as correspondências entre os atributos, o que, na tarefa original, é denominado similaridade visual. Para dados financeiros, essa etapa pode ser interpretada como uma estimativa do grau de consistência entre diferentes janelas temporais e instrumentos. Na arquitetura original, é construído um campo completo de correlações entre todos os pares de elementos das duas imagens: C(gθ(I1), gθ(I2)) ∈ RH×W×H×W, em que cada célula de correlação representa o produto escalar entre os vetores de atributos. Na interpretação financeira, isso pode ser entendido como o cálculo de uma matriz completa de interações entre todos os pontos das séries temporais, permitindo identificar quais elementos da janela passada exercem maior influência sobre os valores previstos.

Para aumentar a eficiência e levar em conta mudanças em diferentes escalas, é construída uma pirâmide de correlações com quatro níveis {C1, C2, C3, C4}. Em cada nível, aplica-se pooling com redução de resolução sobre as duas últimas dimensões, usando diferentes tamanhos de kernel e passos. Essa abordagem preserva simultaneamente a alta resolução das interações locais e a capacidade de capturar grandes deslocamentos nos dados. No ambiente financeiro, isso equivale a avaliar impulsos de curto prazo e tendências de longo prazo sem perder informações sobre movimentos pequenos e rápidos dos preços, que muitas vezes são decisivos para uma previsão precisa.

Para extrair informações da pirâmide, é utilizado o operador Lookup LC. Ele gera um mapa de atributos indexando os valores de correlação com base na estimativa atual dos deslocamentos (f1, f2). Para cada ponto da primeira janela de dados, determina-se a posição correspondente na janela seguinte e, em torno dessa posição estimada, é construída uma grade local com raio r. Os valores do volume de correlações são obtidos a partir dessa grade por meio de interpolação bilinear. Esse mecanismo permite que o modelo ajuste a previsão de forma flexível com base no contexto mais próximo, considerando tanto dependências pontuais quanto relações mais amplas. Em dados financeiros, isso corresponde a uma avaliação ponderada da influência de pontos vizinhos da série temporal e de instrumentos relacionados sobre a iteração atual da previsão, aumentando a robustez diante de ruído e pequenas anomalias.

As informações provenientes de todos os níveis da pirâmide são reunidas em um único mapa de atributos, que então é encaminhado para a etapa de refinamento iterativo da previsão. Dessa forma, o cálculo das correspondências fornece uma base abrangente e multinível para a análise subsequente, permitindo que o RAFT realize uma análise mais profunda e sistêmica ao considerar o campo completo de relações. Na interpretação financeira, isso corresponde a uma compreensão mais profunda da estrutura do mercado e da dinâmica dos instrumentos.

Os autores do framework RAFT dedicam atenção especial à eficiência computacional ao lidar com dados de alta dimensionalidade. O campo completo de correlações apresenta complexidade quadrática O(N²), em que N é o número de elementos da janela analisada. No entanto, ele é calculado apenas uma vez e não depende da quantidade de iterações usadas para refinar a previsão. Além disso, existe uma implementação alternativa com complexidade linear O(NM), que explora a linearidade do produto escalar e o cálculo prévio de médias dos atributos. Em vez de pré-calcular todo o volume de correlações, são construídas representações piramidais dos atributos com pooling com redução de resolução, e os valores de correlação necessários são calculados sob demanda, somente no momento em que são consultados.

Para séries temporais financeiras, esse tipo de otimização é especialmente importante. Ele permite escalar o modelo para dezenas ou centenas de ativos, trabalhar com dados de alta frequência e preservar os detalhes dos movimentos locais. O pooling em diferentes escalas temporais pode ser interpretado como um mecanismo de agregação de microtendências, mesotendências e macrotendências. Já o cálculo dinâmico das correlações sob demanda permite adaptar o modelo ao estado atual do mercado sem a necessidade de armazenar todo o volume de cálculos intermediários.

Os autores ressaltam que, mesmo com o pré-cálculo completo das correlações, essa etapa não se torna um gargalo nos aceleradores gráficos atuais. No contexto de modelos financeiros, isso significa que podemos escolher livremente a estratégia mais adequada: uma modelagem global do campo de relações com máxima precisão ou uma alternativa mais econômica e adaptativa, na qual as correlações são construídas dinamicamente ao longo do processo iterativo. As duas abordagens se integram naturalmente à arquitetura RAFT e permitem adaptá-la a tarefas de mercado sem comprometer a velocidade nem a profundidade da análise.

A etapa seguinte é o ciclo iterativo de atualização, no qual o RAFT deixa de ser apenas um modelo de correspondência entre atributos e passa a atuar como um mecanismo completo de análise e otimização contínuas. Nessa fase, o sistema já não depende de uma correspondência estática entre dois estados fixos do mercado, mas trata a previsão como uma hipótese dinâmica que precisa ser constantemente verificada e refinada em tempo real. Cada iteração utiliza não apenas a estimativa atual do deslocamento, mas também o contexto oculto acumulado, isto é, o estado interno. Ele funciona como uma forma de memória cognitiva, por meio do qual o modelo acompanha a estabilidade das relações observadas e o grau de confiança na trajetória atual do fluxo de capital. Quando novas informações confirmam a estrutura de fases identificada anteriormente, a hipótese se fortalece. Quando surgem divergências, a trajetória é corrigida de forma adaptativa. Já não se trata de uma simples iteração no código, mas de um ciclo estratégico que reproduz o comportamento de um trader experiente, reavaliando constantemente suas posições atuais à luz da evolução do cenário de mercado.

Do ponto de vista arquitetural, esse processo é implementado por meio de um bloco recorrente funcionalmente semelhante a uma GRU, porém adaptado ao processamento de um campo espaço-temporal de atributos. Ele recebe como entrada os atributos de correlação atuais, as estimativas de deslocamento e o estado oculto anterior, gerando uma atualização ∆f e um novo estado interno. Esse módulo conecta a parte analítica, responsável pela interpretação das relações entre os atributos e pela identificação de padrões, à parte de engenharia, baseada em operações convolucionais, bounded activations e tied weights, promovendo uma convergência estável para um ponto fixo, de modo análogo a uma trajetória de otimização. O uso de GRUs convolucionais em vez de camadas clássicas totalmente conectadas amplia o contexto local e permite que o modelo considere simultaneamente correlações em várias escalas sem um crescimento excessivo do número de parâmetros.

Após cada etapa, o estado oculto passa por camadas convolucionais que geram uma atualização do fluxo ∆f, adicionada de forma incremental à previsão atual. Na etapa intermediária, o fluxo é previsto com resolução reduzida de 1/8. A etapa final do RAFT consiste em restaurar o fluxo à escala completa e refinar a máscara correspondente a cada pixel. No contexto financeiro, isso se assemelha à combinação de microindicadores e macroindicadores em uma única avaliação estratégica do mercado. Depois de gerar a atualização em resolução reduzida, a rede aplica uma máscara treinável que combina de forma ponderada os valores vizinhos em uma grade 3×3, corrigindo erros locais e aumentando a consistência da previsão. Duas camadas convolucionais geram uma máscara de tamanho H/8×W/8×(8×8×9), à qual é aplicado SoftMax, permitindo que cada pixel leve em conta a contribuição dos elementos vizinhos. Como resultado, a previsão do fluxo se torna suave, estável e altamente precisa.

Em termos de dados financeiros, isso pode ser interpretado como a combinação de microssinais de liquidez de curto prazo com tendências de longo prazo e indicadores macroeconômicos. Cada atualização local da máscara adapta a previsão às condições específicas do mercado, filtrando ruído e oscilações aleatórias sem comprometer a lógica estratégica global do fluxo de capital. Esse mecanismo promove uma adaptação contínua, na qual anomalias no nível micro são corrigidas sem comprometer o direcionamento estratégico definido pelas tendências e pelas fases do ciclo de mercado.

O uso de uma máscara treinável e de upsampling é semelhante à forma como um trader experiente combina dados de curto prazo com o contexto histórico. Cada correção local é avaliada à luz do cenário geral do mercado e da estratégia atual de gestão da posição. Isso permite que o RAFT produza previsões altamente precisas do movimento dos ativos, levando em conta tanto os microimpulsos atuais quanto os macropadrões estruturais, formando uma representação abrangente e estrategicamente coerente do mercado, pronta para as etapas subsequentes de tomada de decisão e modelagem de risco.

Isso cria uma base fundamental para a aplicação do RAFT nos mercados financeiros. Em vez de produzir uma única previsão determinística, o modelo passa a construir uma trajetória provável de evolução do mercado, refinando-a a cada etapa. Esse processo adaptativo e dinâmico torna o método especialmente valioso em períodos de alta volatilidade, quando previsões estáticas perdem rapidamente sua validade.

A visualização do framework RAFT elaborada pelos autores é apresentada abaixo.


Implementação em MQL5

Após examinarmos os aspectos teóricos do framework RAFT, passamos à parte aplicada do nosso trabalho. Nesta etapa, o foco deixa de ser o conceito abstrato e passa a ser sua viabilidade prática dentro de uma infraestrutura real de trading. Apresentaremos uma das possíveis formas de reproduzir a arquitetura proposta em MQL5, um ambiente voltado à análise de alta frequência, à conexão direta com fontes de liquidez e a requisitos rigorosos de latência.

Isso permitirá verificar se o modelo está correto e sua compatibilidade com restrições reais de mercado, como a velocidade de atualização do livro de ofertas, a resposta a picos de volatilidade e a robustez diante de ruídos locais. A implementação em MQL5 funciona como uma espécie de teste de estresse do framework RAFT, mostrando se ele é capaz de operar em sistemas que tomam decisões em tempo real com base em dados reais.

Além disso, o RAFT se integra naturalmente às tarefas de gestão de risco. A sequência iterativa de previsões não fornece apenas um único valor, mas uma trajetória acompanhada de uma medida de consistência. A partir dela, é possível construir uma estimativa probabilística do grau de confiança, ajustar o tamanho da posição e gerenciar dinamicamente o stop-loss. Se os refinamentos convergem de forma rápida e estável, isso constitui um sinal favorável ao aumento da exposição. Se a sequência oscila intensamente e não converge, é um indicativo para reduzir o tamanho da posição ou até optar por não entrar na operação.

No entanto, antes de passarmos à implementação, é importante compreender, em nível conceitual, como adaptar corretamente as ideias do RAFT à análise de séries temporais financeiras. Os dados visuais do fluxo óptico são representados em uma grade bidimensional de coordenadas, na qual cada pixel possui uma posição horizontal e vertical. Já os atributos financeiros constituem uma sequência unidimensional de valores ao longo do tempo. Em teoria, é possível ampliá-la para uma representação bidimensional, por exemplo, acrescentando uma dimensão correspondente a outros instrumentos. Ainda assim, permanece uma diferença fundamental: em uma imagem, um ponto pode se deslocar ao longo dos dois eixos, inclusive na diagonal, o que representa literalmente uma transferência de energia entre coordenadas vizinhas.

Nos dados financeiros, porém, nada se desloca de um atributo para outro. Os atributos não podem migrar entre instrumentos, apenas variar em magnitude ao longo do tempo. Isso exige uma interpretação diferente da correspondência espaço-temporal: em vez de deslocamentos entre coordenadas, trabalhamos com a dinâmica dos valores e seus desvios locais em relação ao contexto histórico.

A adaptação às séries temporais financeiras deve começar por uma compreensão clara do significado econômico de cada operação. No RAFT original, o bloco de atualização é interpretado como uma etapa de otimização sobre o campo de deslocamentos. Em nossas tarefas, ele passa a representar uma etapa de reavaliação da trajetória probabilística do mercado. Esse é o ponto central: o estado oculto deixa de armazenar atributos e passa a codificar o grau atual de confiança na hipótese, a avaliação de risco e a direção do impulso interno do fluxo de capital. Nosso objetivo é fazer com que cada etapa de refinamento produza não apenas uma melhoria matematicamente consistente da previsão, mas também um ajuste da posição economicamente interpretável.

Comecemos pelo formato dos dados de entrada. No modelo financeiro, interpretamos o flow como um vetor de incrementos das previsões para cada instrumento e horizonte temporal. Não se trata de um deslocamento no espaço, mas de uma variação das expectativas: quanto e em que direção elas se alteram. Os atributos de correlação fornecem um mapa de consistência, indicando quais instrumentos e quais defasagens temporais confirmam a hipótese atual e quais a contradizem. O vetor de contexto agrega informações mais amplas sobre o mercado, como volatilidade, volumes, spreads e outros indicadores proxy do estado do mercado. Em conjunto, esses elementos formam a entrada em forma de campo para o bloco de atualização.

Quanto à lógica de atualização. Sua base é um mecanismo semelhante a uma GRU: o update gate controla até que ponto o modelo preserva a posição anterior (position inertia), enquanto o reset gate determina sua disposição para abandonar a hipótese anterior diante de um conflito acentuado entre os atributos (regime switch). A transformação não linear do estado oculto gera uma nova hipótese, que então é convertida por um head específico em um incremento concreto das expectativas ∆f. As bounded activations e os tied weights atuam como mecanismos de controle. Eles impedem que as correções cresçam exponencialmente em presença de ruído e favorecem a convergência para um ponto fixo, que, em termos econômicos, pode ser interpretado como a obtenção de uma previsão consensual.

A interpretação financeira desses recursos arquiteturais é importante para a tomada de decisão. Quando o update gate permanece próximo de um, o modelo demonstra convergência entre suas avaliações, confirmando a inércia da tendência e, consequentemente, justificando uma posição mais agressiva. Quando o reset gate é ativado, por outro lado, isso sinaliza uma possível mudança de regime: os riscos aumentam e o modelo recomenda maior cautela, redução do lote ou adoção de uma posição neutra. Essa lógica interna de reavaliar se a hipótese ainda merece confiança fornece ao trader uma justificativa clara e explicável para alterar a exposição e transforma o modelo em uma ferramenta de gestão.

Ao examinarmos em maior detalhe os aspectos práticos das abordagens propostas pelos autores do framework RAFT, é possível identificar certa semelhança com o framework STE-FlowNet analisado anteriormente. Isso não surpreende. Ambos foram originalmente desenvolvidos para estimar fluxo óptico e se baseiam na ideia de refinamento iterativo da previsão. Nos dois casos, são utilizadas correlações entre estados e um bloco GRU convolucional, o que permite acumular de forma consistente informações sobre movimento e contexto. Essa semelhança traz uma vantagem evidente: podemos aproveitar soluções já desenvolvidas para a implementação da arquitetura, a otimização dos cálculos e a gestão do hidden state, adaptando-as às séries temporais financeiras e às particularidades da execução em MQL5. Essa abordagem reduz a complexidade da implementação, acelera a prototipagem e torna a integração do RAFT mais segura e previsível tanto do ponto de vista da engenharia quanto do econômico.

Ainda assim, há uma diferença importante entre as abordagens. O STE-FlowNet utiliza uma arquitetura em U do tipo Codificador-Decodificador, na qual as informações são progressivamente comprimidas e depois reconstruídas para prever o fluxo. Isso permite combinar atributos locais e globais por meio de conexões de salto. O RAFT, em contraste, opera predominantemente em alta resolução e utiliza a agregação dos mapas de correlação para construir uma pirâmide que preserva informações detalhadas sobre cada pixel, ou atributo, ao mesmo tempo que permite considerar deslocamentos de diferentes magnitudes. Essa abordagem torna o RAFT mais adequado ao refinamento iterativo da previsão, especialmente quando são necessárias alta precisão e preservação da estrutura local dos dados. Isso é particularmente relevante para séries temporais financeiras, nas quais cada unidade de informação possui um significado econômico específico.

Por isso, não será possível avançar sem aprimorar as soluções existentes. Começaremos pela construção do mapa de correlação dos atributos. Como ponto de partida, podemos utilizar a solução já desenvolvida durante o trabalho com o framework STE-FlowNet. Assim como anteriormente, em vez de um estado inicial fixo, utilizaremos uma pilha dos estados mais recentes do sistema analisado. Isso permite acompanhar não apenas o valor atual dos atributos, mas também a dinâmica geral das mudanças do sistema ao longo do tempo. Essa abordagem fornece uma base histórica para o refinamento iterativo das previsões, formando um contexto que incorpora tendências, inércia e oscilações de curto prazo do mercado, de forma análoga ao modo como o RAFT, na tarefa visual de fluxo óptico, identifica o movimento dos objetos levando em conta seus estados anteriores.

No entanto, precisamos adicionar o escalonamento do mapa de correlações proposto pelos autores do framework. Aqui existe uma diferença fundamental: no RAFT original, o escalonamento é realizado no plano de coordenadas, o que permite acompanhar grandes deslocamentos dos objetos. Em séries temporais financeiras, essa abordagem não é aplicável. Um impulso não se desloca entre atributos, e não existe uma grade de coordenadas. Por isso, aplicamos o escalonamento ao eixo temporal, permitindo que o sistema acompanhe impulsos mais amplos nas variações dos atributos e em sua evolução temporal. Dessa forma, preservamos a ideia de análise multinível, análoga à pirâmide de correlações, mas adaptada à interpretação econômica dos dados, na qual é importante captar tanto mudanças de curto prazo quanto movimentos de longo prazo do mercado.

De forma semelhante ao método alternativo de cálculo das correlações proposto pelos autores, estruturamos a construção de um mapa multiescala de atributos do estado analisado. Primeiro, o mapa é formado em diferentes escalas temporais, permitindo que o sistema capture tanto oscilações de curto prazo quanto tendências de longo prazo. Somente depois disso, o tensor geral de atributos agregados é adicionado à pilha de estados expandidos, garantindo a consistência dos dados.

Passamos agora do conceito de agregação multiescala para sua implementação concreta em um kernel OpenCL, procurando preservar ao máximo o encadeamento lógico. Partimos do princípio de que cada work-item é responsável por um par específico formado por um atributo e uma variável analisada. Sua tarefa é calcular todos os níveis da pirâmide temporal para o ponto correspondente, começando pelo valor atual,

e incorporando gradualmente um histórico cada vez mais profundo da pilha.

__kernel void AggregationByTime(__global const float* inputs,
                                __global const float* stack,
                                __global float* outputs,
                                const int stack_size,
                                const int levels
                               )
  {
   const size_t id = get_global_id(0);
   const size_t var = get_global_id(1);
   const size_t dimension = get_global_size(0);
   const size_t variables = get_global_size(1);

O algoritmo do kernel começa obtendo os índices do atributo e da variável correspondentes à thread atual. Isso permite processar de forma independente cada fatia temporal e cada variável. As dimensões da grade são obtidas por meio de get_global_size, obtendo o tamanho global do espaço de tarefas.

A primeira operação consiste em ler o valor atual do atributo a partir do array de entrada inputs. Antes de gravá-lo, passamos o valor pela função IsNaNOrInf para eliminar possíveis artefatos, como NaN ou infinito. O valor resultante é gravado no array de saída outputs como nível zero. Esse é o estado mais recente do sistema e serve como ponto de referência para a agregação piramidal subsequente.

   const float val = IsNaNOrInf(inputs[RCtoFlat(var, id, variables, dimension, 0)], 0);
   outputs[RCtoFlat(var, id, variables, dimension, 0)] = val;

Em seguida, inicia-se um laço pelos níveis. Cada nível seguinte l abrange uma quantidade de passos temporais duas vezes maior. A estrutura dos blocos segue, portanto, uma progressão em potências de dois: 1, 2, 4, 8 e assim por diante. Antes de adicionar uma nova contribuição, reduzimos pela metade o resultado acumulado no nível anterior. Trata-se de uma estratégia deliberada de decaimento exponencial: em vez de recalcular todo o histórico desde o início, ajustamos a agregação anterior a cada etapa com base apenas na nova parcela de dados.

   for(int l = 1; l < levels; l++)
     {
      int total = pow(2, l);
      int start = total - 1;
      val /= 2;

Para o nível l, calculamos o tamanho do bloco como 2 elevado à potência l e determinamos o índice de deslocamento a partir do início da pilha, indicando onde começa a amostragem do bloco de histórico correspondente. Um laço interno percorre os elementos desse bloco, mas, antes de cada iteração, verificamos se o índice ultrapassa stack_size. Essa verificação é especialmente importante no início da execução, quando a profundidade da pilha ainda pode ser insuficiente.

      for(int s = 0; s < total; s++)
        {
         if(s + start >= stack_size)
            continue;
         val += IsNaNOrInf(stack[RCtoFlat(var, id, variables * levels,
                                          dimension, start + s)] / total, 0);
        }
      outputs[RCtoFlat(var, id, variables, dimension, l)] = IsNaNOrInf(val, 0);
     }
  }

Cada valor histórico também passa por IsNaNOrInf. Em seguida, ele é dividido pelo tamanho do bloco e então somado ao valor val já atenuado e é adicionado ao valor val, que já havia sido atenuado.

Após concluir o processamento do bloco, armazenamos o valor agregado resultante em outputs, na posição correspondente ao nível atual l. Dessa forma, cada nível representa uma visão progressivamente mais generalizada da dinâmica do sistema, desde a reação instantânea até uma resposta suavizada em escalas temporais mais longas.

Com isso, o laço é concluído e, ao sair do kernel, obtemos no array de saída uma pirâmide temporal completa para o par variável-atributo correspondente, pronta para a construção subsequente de um mapa multidimensional de atributos ou para ser passada ao módulo de análise de correlações.

Hoje abordamos uma grande quantidade de informações novas, e é natural que esse conteúdo precise de algum tempo para ser assimilado. Por isso, encerraremos esta etapa por aqui, para que possamos avaliar o material com mais clareza e retomá-lo com uma nova perspectiva. No próximo artigo, continuaremos o trabalho com uma compreensão mais precisa do caminho a seguir.


Conclusão

Neste artigo, chegamos muito perto de adaptar o sólido framework RAFT ao contexto financeiro, e é justamente nesse ponto que sua principal vantagem se torna evidente. Ao contrário dos modelos tradicionais, que operam de forma estática e sem refinamento iterativo, o RAFT constrói a previsão como uma aproximação contínua da trajetória mais confiável do mercado, apoiando-se em uma memória de correlações multiescala. Isso permite não apenas registrar o movimento dos preços, mas acompanhar sua dinâmica causal e sistêmica, reagindo rapidamente a sinais fracos antes que eles se transformem em uma tendência claramente definida. Essa abordagem abre caminho para uma nova geração de sistemas adaptativos de trading, capazes não de tentar adivinhar o mercado, mas de reduzir metodicamente o espaço de probabilidades em torno de sua trajetória real.


Referências


Programas utilizados no artigo

# Nome Tipo Descrição
1 Study.mq5 Expert Advisor EA para treinamento offline dos modelos
2 StudyOnline.mq5 Expert Advisor EA para treinamento online dos modelos
3 Test.mq5 Expert Advisor EA para teste do modelo
4 Trajectory.mqh Biblioteca de classe Estrutura para descrever o estado do sistema e a 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/20095

Arquivos anexados |
MQL5.zip (3251.71 KB)
Caminhe em novos trilhos: Personalize indicadores no MQL5 Caminhe em novos trilhos: Personalize indicadores no MQL5
Vou agora listar todas as possibilidades novas e recursos do novo terminal e linguagem. Elas são várias, e algumas novidades valem a discussão em um artigo separado. Além disso, não há códigos aqui escritos com programação orientada ao objeto, é um tópico muito importante para ser simplesmente mencionado em um contexto como vantagens adicionais para os desenvolvedores. Neste artigo vamos considerar os indicadores, sua estrutura, desenho, tipos e seus detalhes de programação em comparação com o MQL4. Espero que este artigo seja útil tanto para desenvolvedores iniciantes quanto para experientes, talvez alguns deles encontrem algo novo.
Redes neurais em trading: Percepção adaptativa da dinâmica do mercado (Conclusão) Redes neurais em trading: Percepção adaptativa da dinâmica do mercado (Conclusão)
O artigo dá continuidade à implementação das abordagens do framework STE-FlowNet, que combina processamento multithread com estruturas recorrentes para analisar dados complexos com alta precisão. Os testes realizados confirmaram sua estabilidade e flexibilidade em diferentes cenários. A arquitetura acelera os cálculos e permite modelar com maior profundidade as dependências presentes nas séries temporais. Essa abordagem abre novas possibilidades de aplicação prática no trading e na análise de mercado.
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 em trading: Modelos de refinamento iterativo de previsões (Componentes principais) Redes neurais em trading: Modelos de refinamento iterativo de previsões (Componentes principais)
Neste artigo, exploramos a mecânica interna do framework RAFT, uma das abordagens mais precisas e elegantes para a análise de processos dinâmicos. Passo a passo, adaptamos sua ideia de refinamento iterativo às séries temporais financeiras, criando uma base sólida para o desenvolvimento do futuro modelo. O leitor fará uma imersão envolvente na arquitetura, em que cada componente tem seu próprio significado e função.