Diferença de FLAGs nos ticks do Depth Of Market entre Corretoras

 

Olá pessoal

Estou testando o mt5 num broker com DMA4 e comparando os dados com outro computador que roda o mt5 de outro broker (creio ser DMA1 ou 2).

Os dados de Book estão ok, poquissima latência e quase nenhuma diferença entre os dois.

Porém os dados históricos de negócios estão apresentando, em alguns ticks, diferença entre flags...

Enquanto um marca azul (agressão de compra) o outro marca vermelho (agressão de venda) para um mesmo tick.


Visualmente fica quase impossível analisar a agressão no book destes ticks que estão em desacordo porque são aqueles que ocorrem em milissegundos, então para tirar a prova abri uma outra plataforma do broker que me fornece o acesso DMA4 e comparei os dados.


Para minha surpresa o histórico de delas desta outra plataforma estava em conformidade com o mt5 do outro broker, porém apresentando diferença com relação ao mt5 deles mesmo.


Então tenho 1 questão para os senhores: - A informação de Flags do mqltick é um dado fornecido pela B3 ou é calculado pelas plataformas ?


Apesar da conformidade entre o mt5 do outro broker com outra plataforma do meu atual broker, estou inclinado a crer mesmo é nos dados do DMA4.

 
Salec:

 A informação de Flags do mqltick é um dado fornecido pela B3 ou é calculado pelas plataformas ?


Eu desconfio que seja calculado pelas plataformas, pois, tal como você, também já constatei que ocorrem diferenças nos flags de agressão entre dados históricos baixados de corretoras diferentes.

Isso demonstra que a informação dos flags pode nem sempre estar correta, o que nos causa insegurança quanto à precisão de quaisquer indicadores ou decisões automatizadas de trading que se baseiem na direção da agressão.

Imagino que a direção da agressão seja inferida pela plataforma a partir da comparação do "last" com o "bid" e o "ask" (não sei qual seria a regra nos casos dúbios em que o "last" estiver entre o "bid" e o "ask").

Há também situações especiais que os flags do mqltick não contemplam, como negócios diretos (intencionais e não-intencionais) e leilões. Não sei como fica o preenchimento nesses casos. 

Já pensei em fazer um estudo minucioso sobre isso para tentar decifrar como a plataforma preenche os flags nessas situações e também tentar desvendar a origem das diferenças de preenchimento de flags entre corretoras, mas ainda não tive tempo.

Certa vez cheguei a comparar dados de 3 corretoras e encontrei diferenças entre as três, mas não consegui encontrar uma "padrão lógico" nessas diferenças.

Alguém sabe responder melhor?

 

Uma outra questão intrigante é:

- se os flags forem inferidos pela plataforma por meio de alguma regra fixa (por exemplo: comparando "last" com "bid" e "ask"), então essa regra deveria ser idêntica em qualquer corretora e portanto, a princípio, não deveria haver diferenças no preenchimento dos flags.

Uma outra anomalia que eu já percebi nos mqlticks e que pode estar relacionada com isso é uma ligeira falta de sincronismo entre os eventos que notificam trade (os que vem com flag BUY e/ou SELL acesos e volume maior que zero) e os eventos que notificam alteração de preço de mercado (os que vem flags BID e/ou ASK acesos e volume zero). Já observei que frequentemente há uma defasagem entre esses grupos de eventos.

Isso costuma ficar bem nítido quando uma ordem a mercado de grande volume executa um grande número de ordens a mercado em vários níveis de preço de uma vez só (os traders que usam "Tape Reading" chamam isso de "tomar/bater pra dentro da fila"), de modo que o bid ou o ask sofre uma alteração brusca.

Nesses casos, o esperado seria que o mqltick com flag BID ou ASK aceso que notifica a atualização do preço chegasse logo em seguida aos mqlticks com flag BUY ou SELL aceso que notificam a execução dos volumes "enxugados" por essa grande ordem a mercado, antes da chegada de qualquer outro mqltick com flag BUY/SELL na direção oposta. Mas, por incrível que pareça, eu já observei o mqltick BID/ASK chegar após vários outros mqlticks de trade na direção oposta terem chegado) e também já observei (mais incrível ainda!), o mqltick BID/ASK chegar ANTES dos mqlticks BUY/SELL que causaram a mudança no preço bid ou ask.

Ou seja, parece que diferentes tipos de mqltick (eventos que notificam trades e eventos que notificam alteração do preço bid ou ask) são processados assincronamente por diferentes processos. Se isso for verdade, eles poderão ser processados em ordem diferente no servidor MT5 de cada corretora (e também em ordem diferente entre dois servidores da mesma corretora, o que poderia explicar a diferença que você observou no DMA4 da mesma corretora). 

É apenas uma hipótese, mas parece fazer sentido.

Seria muito bom se alguém que conheça o processo em profundidade pudesse esclarecer como, exatamente, os mqlticks e seus flags são gerados.

Se ninguém souber responder aqui, podemos lançar a questão no fórum em inglês e no fórum em russo, pra ver se algum dos desenvolvedores da plataforma responde.

 
Trader_Patinhas:

Uma outra questão intrigante é:

- se os flags forem inferidos pela plataforma por meio de alguma regra fixa (por exemplo: comparando "last" com "bid" e "ask"), então essa regra deveria ser idêntica em qualquer corretora e portanto, a princípio, não deveria haver diferenças no preenchimento dos flags.

Uma outra anomalia que eu já percebi nos mqlticks e que pode estar relacionada com isso é uma ligeira falta de sincronismo entre os eventos que notificam trade (os que vem com flag BUY e/ou SELL acesos e volume maior que zero) e os eventos que notificam alteração de preço de mercado (os que vem flags BID e/ou ASK acesos e volume zero). Já observei que frequentemente há uma defasagem entre esses grupos de eventos.

Isso costuma ficar bem nítido quando uma ordem a mercado de grande volume executa um grande número de ordens a mercado em vários níveis de preço de uma vez só (os traders que usam "Tape Reading" chamam isso de "tomar/bater pra dentro da fila"), de modo que o bid ou o ask sofre uma alteração brusca.

Nesses casos, o esperado seria que o mqltick com flag BID ou ASK aceso que notifica a atualização do preço chegasse logo em seguida aos mqlticks com flag BUY ou SELL aceso que notificam a execução dos volumes "enxugados" por essa grande ordem a mercado, antes da chegada de qualquer outro mqltick com flag BUY/SELL na direção oposta. Mas, por incrível que pareça, eu já observei o mqltick BID/ASK chegar após vários outros mqlticks de trade na direção oposta terem chegado) e também já observei (mais incrível ainda!), o mqltick BID/ASK chegar ANTES dos mqlticks BUY/SELL que causaram a mudança no preço bid ou ask.

Ou seja, parece que diferentes tipos de mqltick (eventos que notificam trades e eventos que notificam alteração do preço bid ou ask) são processados assincronamente por diferentes processos. Se isso for verdade, eles poderão ser processados em ordem diferente no servidor MT5 de cada corretora (e também em ordem diferente entre dois servidores da mesma corretora, o que poderia explicar a diferença que você observou no DMA4 da mesma corretora). 

É apenas uma hipótese, mas parece fazer sentido.

Seria muito bom se alguém que conheça o processo em profundidade pudesse esclarecer como, exatamente, os mqlticks e seus flags são gerados.

Se ninguém souber responder aqui, podemos lançar a questão no fórum em inglês e no fórum em russo, pra ver se algum dos desenvolvedores da plataforma responde.

Olá,

Quando fiz um curso de Tape Reading há +- 2 nos atrás, nos contaram com muita propriedade que a única ferramenta quase que fidedigna ao processsar e catalogar os eventos de Agressão erea o Profit Chart, inclusive com a capacidade de montar a Ordem Original (no caso de particionamento da ordem, ex: iceberg). Todas as demais plataformas apresentavam incorreções naquilo que é considerado uma Agressão.

Recuperei 2 tópicos passados que talvez possam ser relevantes pra vocês:

https://www.mql5.com/pt/forum/63861

https://www.mql5.com/pt/forum/16254

Hoje meu interesse é outro, mas como aprendi a operar TR, deixo o lembrete que, tão importante como ter a informação de Agressão, é também ter a informação de Absorção. Outra curiosidade que notei no MT5 - sou novo também na plataforma - mas como sou desenvolvedor, me adapto fácil - é que não existe (pelo menos não encontrei) o Book de Ofertas com as boletas individuais, só vi o Book Agrupado por Preço, no DOM. A falta dessa informação também atrapalha muito o TR...

;)

 

Bom saber essa do Profit Chart.


Eu sei que a B3 possui os dados naturais das negociações, é preciso para fins de auditoria ter os dados exatos de negociação, podemos baixa-los e auditá-los pelo marketdata deles (manda um email que eles fornecem o link).

Agora com relação a disponibilizar estes dados mais complexos, já acho que é uma questão de custos. Deve fazer parte de um pacote mais caro.

há muito tempo atrás eu estava procurando saber deste comércio. Existiam os vendors e os dados diretos.

Os vendors compravam os dados diretos e revendiam. Como o preço era mais barato as corretoras na maioria compravam esses dados de "segunda mão".  Agora com esse nosso papo começo a entender a diferença de qualidade destes dados.

Creio então que os únicos dados recebidos pelo metatrader são:

Ordens de compra (preço e volume)

Ordens de Venda (preço e volume)

ticks (preço e volume)


Todo o resto é calculado pela plataforma compilando a partir da estrutura destes dados.


Os flags e ordens individuais com info das corretoras devem ser uma estrutura mais cara e complexa, então muitas plataformas devem usar de cálculos para expor em tela. Creio que o Metatrader não possui uma estrutura de dados capaz de receber essa informação de corretoras e ordens individuais, ao menos ainda não, então juntam tudo no "mesmo bolo".


Com relação às ordens diretas, eu num computador antigo tinha criado um indicador de volume que apurava isso...

Ele armazenava e comparava os valores das ordens do book antes depois dos ticks, se o volume do book não fosse alterado então o tick era de uma ordem direta, e não contabilizava. Claro que isso não era exato mas foi o mais próximo que encontrei da realidade.

Eu perdi meu HD com tudo dentro e deixei de lado isso... Mas podemos pensar em criar um projeto nesse sentido.

 
Minions Labs:

Olá,

Quando fiz um curso de Tape Reading há +- 2 nos atrás, nos contaram com muita propriedade que a única ferramenta quase que fidedigna ao processsar e catalogar os eventos de Agressão erea o Profit Chart, inclusive com a capacidade de montar a Ordem Original (no caso de particionamento da ordem, ex: iceberg). Todas as demais plataformas apresentavam incorreções naquilo que é considerado uma Agressão.

Recuperei 2 tópicos passados que talvez possam ser relevantes pra vocês:

https://www.mql5.com/pt/forum/63861

https://www.mql5.com/pt/forum/16254

Hoje meu interesse é outro, mas como aprendi a operar TR, deixo o lembrete que, tão importante como ter a informação de Agressão, é também ter a informação de Absorção. Outra curiosidade que notei no MT5 - sou novo também na plataforma - mas como sou desenvolvedor, me adapto fácil - é que não existe (pelo menos não encontrei) o Book de Ofertas com as boletas individuais, só vi o Book Agrupado por Preço, no DOM. A falta dessa informação também atrapalha muito o TR...

;)

No Metatrader só tem o book agrupado mesmo. Não tem informação da corretora, portanto não dá pra determinar com precisão se está havendo absorção ou dispersão.

Há empresas que vendem o sinal completo, que inclui cada inclusão, alteração de preço e cancelamento de cada ordem, incluindo identificação da corretora, a custos acessíveis, tipo menos de R$ 400 por mês (pelo menos uma que conheço pratica essa faixa de preço).

Mas nesse caso não existe uma infraestrutura amigável para construir robôs como a que existe no metatrader. Você tem que construir um sistema completo que processa os dados brutos e envia ordens pra bolsa (pra enviar ordens já é uma outra interface, que também custa algo na faixa de algumas centenas de reais por mês, se não me falha a memória dá uns R$ 700 por mês tudo: sinal completo da bolsa + interface para enviar e consultar as ordens ... e só funciona com algumas corretoras, nenhuma delas com corretagem zero ou baratinha, como as corretoras que operam com Metatrader ... mas pra quem opera grande volume e sabe tirar proveito da informação completa, pode valer a pena no médio/longo prazo o investimento de construir um robô que utilize essas interfaces.

O Profitchart tem interface de programação aberta que permita construir robôs para automatizar os trades?  

 
Salec:

Bom saber essa do Profit Chart.


Eu sei que a B3 possui os dados naturais das negociações, é preciso para fins de auditoria ter os dados exatos de negociação, podemos baixa-los e auditá-los pelo marketdata deles (manda um email que eles fornecem o link).

Agora com relação a disponibilizar estes dados mais complexos, já acho que é uma questão de custos. Deve fazer parte de um pacote mais caro.

há muito tempo atrás eu estava procurando saber deste comércio. Existiam os vendors e os dados diretos.

Os vendors compravam os dados diretos e revendiam. Como o preço era mais barato as corretoras na maioria compravam esses dados de "segunda mão".  Agora com esse nosso papo começo a entender a diferença de qualidade destes dados.

Creio então que os únicos dados recebidos pelo metatrader são:

Ordens de compra (preço e volume)

Ordens de Venda (preço e volume)

ticks (preço e volume)


Todo o resto é calculado pela plataforma compilando a partir da estrutura destes dados.


Os flags e ordens individuais com info das corretoras devem ser uma estrutura mais cara e complexa, então muitas plataformas devem usar de cálculos para expor em tela. Creio que o Metatrader não possui uma estrutura de dados capaz de receber essa informação de corretoras e ordens individuais, ao menos ainda não, então juntam tudo no "mesmo bolo".


Com relação às ordens diretas, eu num computador antigo tinha criado um indicador de volume que apurava isso...

Ele armazenava e comparava os valores das ordens do book antes depois dos ticks, se o volume do book não fosse alterado então o tick era de uma ordem direta, e não contabilizava. Claro que isso não era exato mas foi o mais próximo que encontrei da realidade.

Eu perdi meu HD com tudo dentro e deixei de lado isso... Mas podemos pensar em criar um projeto nesse sentido.

Sim, os logs da B3 são públicos e têm todo o detalhamento de tudo o que aconteceu. Com isso a gente pode verificar qual servidor/corretora preenche os flags com melhor qualidade.

Infelizmente os logs da B3 não são publicados em tempo real, só ficam disponíveis publicamente no dia seguinte.

Mas, como falei na resposta acima, há empresas que vendem o sinal detalhado em tempo real. 

Essa ideia de comparar os valores do book antes e depois do tick é interessante, mas é preciso levar em conta que há diferentes eventos que alteram os volumes do book: novas ordens são acrescentadas, ordens são canceladas, ordens têm seu preço alterado (o volume é subtraído de um nível de preço e acrescentado em outro), etc.... por isso acho difícil detectar com precisão o negócio direto, pois se uma ordem for consumida e outra de mesmo volume entrar, vai parecer que foi direto, mas não foi ... e se após um negócio direto uma ordem do mesmo volume for cancelada, vai parecer que não foi direto, mas foi ... mas vale como estimativa ... na média de grandes números as estimativas vão ficar próximas da realidade. 

 
Trader_Patinhas:

O Profitchart tem interface de programação aberta que permita construir robôs para automatizar os trades?  

Desde que os conheço, dizem que sim, mas o que vi é uma meta-linguagem proprietária (estilo BASIC) com documentação quase-inexistente. Inviável.

Das plataformas brasileiras, com poder de programação, depois do Metatrader, talvez seja o Protrader, que você pode programá-lo em C#. Nunca mexi com ele, nem vi sua documentação.

;)

 
Minions Labs:

Desde que os conheço, dizem que sim, mas o que vi é uma meta-linguagem proprietária (estilo BASIC) com documentação quase-inexistente. Inviável.

Se for uma linguagem de programação que permita exportar e importar dados em alta velocidade via Named Pipes, tal como o MQL5 permite, pode-se concentrar os algoritmos mais pesados e a inteligência de tomada de decisão em um processo externo implementado em C++ (ou outra linguagem de alto desempenho) que rode em background, se comunicando com o robô.

Nesse paradigma, o robô fica sendo uma coisinha simples e burra (menos de 100 linhas de código), que apenas repassa informações de mercado (mqlticks, volumes do book, etc.) a uma inteligência externa e recebe dela comandos para comprar e vender ativos.

Isso minimiza o retrabalho necessário na portabilidade para outras plataformas além do MT5, pois basta replicar na nova plataforma o robô burrinho que repassa informações e recebe comandos via named pipes, enquanto o verdadeiro "cérebro" continua no mesmo processo externo e com a mesma performance.

Além disso, ganha-se flexibilidade total na implementação do processo que concentra a inteligência de decisão, podendo ser agregadas bibliotecas otimizadas de álgebra linear, bibliotecas de machine learning, uso de processamento paralelo em múltiplos cores, múltiplas GPU's, etc.

Estou implementando meus novos robôs desta forma.

Se essa "metalinguagem proprietária estilo BASIC" do Profit Chart permitir trocar dados com processos externo via Named Pipes (ou via outra forma de comunicação de dados de alta velocidade), pra mim o problema tá resolvido!

Se aceitar linkar com uma DLL externa, basta encapsular o envio e o recebimento de dados via named pipe em chamadas de funções da DLL e também tá resolvido!

Se for um ambiente "incomunicável" com o mundo externo, então não vale a pena.

 
Minions Labs:

Das plataformas brasileiras, com poder de programação, depois do Metatrader, talvez seja o Protrader, que você pode programá-lo em C#. Nunca mexi com ele, nem vi sua documentação.

Quanto ao Protrader, vc sabe se ele tem as informações que faltam no Metatrader?

Refiro-me a:

1) Quais corretoras estão na ponta compradora e na ponta vendedora de cada trade

2) Qual lado foi o agressor em cada trade ou se foi negócio direto (informação real, e não estimada, como no MT5)

3) Book detalhado ordem por ordem, com a corretora responsável por cada ordem

Para construir um algoritmo de scalping que considere os conceitos de "agressão", "absorção" e "dispersão" usados pela galera que pratica o tal do "Tape Reading", as informações acima, ausentes no Metatrader, seriam importantíssimas.
 
Trader_Patinhas:

Quanto ao Protrader, vc sabe se ele tem as informações que faltam no Metatrader?

Refiro-me a:

1) Quais corretoras estão na ponta compradora e na ponta vendedora de cada trade

2) Qual lado foi o agressor em cada trade ou se foi negócio direto (informação real, e não estimada, como no MT5)

3) Book detalhado ordem por ordem, com a corretora responsável por cada ordem

Para construir um algoritmo de scalping que considere os conceitos de "agressão", "absorção" e "dispersão" usados pela galera que pratica o tal do "Tape Reading", as informações acima, ausentes no Metatrader, seriam importantíssimas.

Olá,

Para ambos os casos (Profit e Protrader), não faço ideia. Você terá que entrar em contato com eles...

Escolhi por fazer tudo em Metatrader pelo gigantesco uso mundial, suporte via comunidade e linguagem bem robusta. No caso desses dois, você fatalmente cairá no suporte proprietário deles e essa ideia pra mim (pessoal), não gosto. Falo por experiência própria de outras plataformas nacionais. Protrader apenas experimentei.

;)

Razão: