Fala pessoal, tudo certo?
Estou desenvolvendo um código para avaliar os ticks, mas alguns deles estão vindo com o flags zerado, segue o meu código:
E segue o resultado:
Como é apenas um teste está dando alguns avisos de conversão de dados numéricos para string na compilação, mas não estou me preocupando com isso no momento.
As corretoras onde fiz o teste são Modal e XP.
Obrigado.
Jhoni Carlos da Silva.
É um EA?
E, os ticks são de Forex?
uma vez vi um post onde uma pessoa recebia 2 tick flags ao mesmo tempo. Essa estrutura é com operação de bits... Dá uma olhada nesta thread:
https://www.mql5.com/en/forum/212349
- 2017.07.31
- www.mql5.com
É um EA?
E, os ticks são de Forex?
uma vez vi um post onde uma pessoa recebia 2 tick flags ao mesmo tempo. Essa estrutura é com operação de bits... Dá uma olhada nesta thread:
https://www.mql5.com/en/forum/212349
Boa tarde Flávio, obrigado por responder.
Sim, é um EA, e não, não é Forex. É Mini contrato de dólar.
Com relação a thread, ele fala sobre os valores estarem divergentes em um buy\sell, não é o meu caso, no meu caso, a propriedade flags não identifica que tipó de tick é.
Olhando para o histórico de negociações, aparentemente estes com a flag zerada são buy, pois identifiquei uns com volume alto e foi possível distinguir, mas não sei se é regra.
Obrigado.
Jhoni Carlos da Silva.
Boa tarde Flávio, obrigado por responder.
Sim, é um EA, e não, não é Forex. É Mini contrato de dólar.
Com relação a thread, ele fala sobre os valores estarem divergentes em um buy\sell, não é o meu caso, no meu caso, a propriedade flags não identifica que tipó de tick é.
Olhando para o histórico de negociações, aparentemente estes com a flag zerada são buy, pois identifiquei uns com volume alto e foi possível distinguir, mas não sei se é regra.
Obrigado.
Jhoni Carlos da Silva.
Coincidentemente estou passando pelo mesmo perrengue.
O que descobri é que o SymbolInfoTick() tem 2 bizarrices, Flag zerado e que NÃO entrega os FLAGS de BUY e SELL, ao contrário do CopyTicks(), que te dá tudo direitinho.
Abri uma thread no Forum americano... vamos ver...
Tem que ter um saco gigantesco pra programar em MQL5...
:(
https://www.mql5.com/en/forum/304098
- 2019.02.19
- www.mql5.com
Coincidentemente estou passando pelo mesmo perrengue.
O que descobri é que o SymbolInfoTick() tem 2 bizarrices, Flag zerado e que NÃO entrega os FLAGS de BUY e SELL, ao contrário do CopyTicks(), que te dá tudo direitinho.
Abri uma thread no Forum americano... vamos ver...
Tem que ter um saco gigantesco pra programar em MQL5...
:(
https://www.mql5.com/en/forum/304098
Verdade. A solução paliativa que eu encontrei é procurar por aquele price no book de ofertas, e comparar criando um histórico, mas é muito trabalhoso e consome muito processamento que não precisaria se tivesse a informação no MqlTick.
Consegui fazer fia SymbolInfoTick(), rastreando is bits dos Flags. Parece bizarro, mas é o que a B3/Corretora nos fornece. Provavelmente vai dar pau em corretoras Forex, portanto cuidado...
Código:
if (!SymbolInfoTick( _Symbol, curTick )) { Print("Tick NOT received!"); return 0; } /* //DEBUG: TICK_FLAG_BID | TICK_FLAG_ASK = 6 // TICK_FLAG_LAST | TICK_FLAG_VOLUME = 24 // BUY=56 / SELL=88 -->TICK_FLAG_LAST+TICK_FLAG_VOLUME+TICK_FLAG_BUY,idem string o = TimeToString(curTick.time) + " bid: " + (string)curTick.bid + " ask:" + (string)curTick.ask + " last: " + (string)curTick.last + " vol:" + (string)curTick.volume_real; if ((curTick.flags &TICK_FLAG_BID)==TICK_FLAG_BID) { o += " -BID- " + (string)curTick.flags; } else if ((curTick.flags &TICK_FLAG_ASK)==TICK_FLAG_ASK) { o += " -ASK- " + (string)curTick.flags; } else if ((curTick.flags &TICK_FLAG_LAST)==TICK_FLAG_LAST) { o += " -LAST- " + (string)curTick.flags; } else if ((curTick.flags &TICK_FLAG_BUY)==TICK_FLAG_BUY) { o += " -BUY- " + (string)curTick.flags; } else if ((curTick.flags &TICK_FLAG_SELL)==TICK_FLAG_SELL) { o += " -SELL- " + (string)curTick.flags; } else if ((curTick.flags &TICK_FLAG_VOLUME)==TICK_FLAG_VOLUME) { o += " -VOLUME- " + (string)curTick.flags; } else { o += " -UNKNOWN- " + (string)curTick.flags; } Print( o ); */ if (curTick.flags == TICK_FLAG_LAST+TICK_FLAG_VOLUME+TICK_FLAG_BUY) { bufferBUY[0] +=curTick.volume_real; } else if (curTick.flags == TICK_FLAG_LAST+TICK_FLAG_VOLUME+TICK_FLAG_SELL) { bufferSELL[0] -=curTick.volume_real; }
Já passei por isso.
A solução que encontrei foi jogar no lixo a função SymbolInfoTick() e passar a usar somente a CopyTicks() ou a CopyTicksRange(), mesmo quando a intenção é ler apenas o tick mais recente (nesse caso uso a CopytTicks com from=0 e count=1, que é equivalente ao SymbolInfoTick sem o problema dos flags).
Como atualmente uso algoritmos que processam tick a tick, tenho usado mais a CopyTicksRange().
Já passei por isso.
A solução que encontrei foi jogar no lixo a função SymbolInfoTick() e passar a usar somente a CopyTicks() ou a CopyTicksRange(), mesmo quando a intenção é ler apenas o tick mais recente (nesse caso uso a CopytTicks com from=0 e count=1, que é equivalente ao SymbolInfoTick sem o problema dos flags).
Como atualmente uso algoritmos que processam tick a tick, tenho usado mais a CopyTicksRange().
MQL é uma linguagem forrada de exceções e inconsistências... Não me admira vários projetos gerarem atrasos inesperados...
Perdi horas hoje só pra adivinhar que diabos o MQL estava fazendo com os flags...
Torço para o que o Pine Script ande a passos gigantescos... esses russos da Metaquotes precisam de um chacoalhão...
Como se não bastasse os updates Goela-Abaixo de versões beta em sistemas na produção - sim, somos todos cobaias - desligaram o suporte, cabendo à comunidade se virar...
:(
Código:
if (curTick.flags == TICK_FLAG_LAST+TICK_FLAG_VOLUME+TICK_FLAG_BUY) { bufferBUY[0] +=curTick.volume_real; }
else if (curTick.flags == TICK_FLAG_LAST+TICK_FLAG_VOLUME+TICK_FLAG_SELL) { bufferSELL[0] -=curTick.volume_real; }
Flávio, na B3 muitos ticks vêm com os flags BUY e SELL acesos simultaneamente.
Acredito que sejam os chamados "negócios diretos": a corretora junta ofertas de compra e de venda de clientes seus e, em vez de enviar as ordens pro mercado, manda apenas a notificação de "negócio direto" para a B3 (isso é obrigatório por lei, pois não pode haver negócio fora do pregão).
Fiz uns estudos há tempos atrás e vi que no mini-índice essas situações de BUY e SELL acesos simultaneamente chegavam a mais de 1% do volume total dos negócios em alguns dias.
Nesse teu código aí em cima, os volumes dos ticks que vierem com BUY e SELL acesos simultaneamente não serão somados nem no bufferBuy nem no bufferSell, de modo que, no fim do dia, a soma bufferBuy + bufferSell vai ficar um pouquinho menor que o volume total de negócios. Não sei se isso é relevante para a sua estratégia, mas é bom vc estar ciente de que essa soma não vai bater e o motivo disso.
Na minha versão do teu código acima (eu também faço isso), no caso dos flags com BUY e SELL acesos ao mesmo tempo, eu somo metade do volume pra BUY e metade pra SELL. Desta forma a soma bate. Mas se vc for criar indicadores baseados na proporção entre agressão de compra e de venda, tipo BUY/(BUY+SELL) e SELL/(BUY+SELL), aí já fica meio discutível como deveriam ser contabilizados os ticks "biagressores". Descartá-los, como você faz, talvez não seja uma solução ruim. Eles são 1% ou menos do volume total, então talvez essa discussão seja preciosismo excessivo.
O pior é que já constatei que esses flags às vezes variam de corretora pra corretora (uma diz que é BUY e outra diz que é SELL, pro mesmo tick). São muito raros os ticks cujos flags BUY/SELL variam entre corretoras, mas no mini-dolar e no mini-indice todos os dias tem alguns.
Isso me faz me perguntar(*) se essa informação dos flags BUY e SELL (quem foi a parte agressora) vem mesmo da bolsa ou se é o MT5 que tenta inferir esses flags comparando LAST com BID e ASK. Neste último caso, se os ticks chegarem fora da ordem (lembrar que o protocolo TCP/IP usado na internet não garante que os pacotes cheguem na mesma ordem em que foram enviados), cada instância de MT5 pode fazer uma inferência diferente, o que explicaria a existência de algumas raras discrepâncias entre corretoras (se a informação viesse da bolsa, deveria ser rigorosamente a mesma em todas as corretoras, pois o TCP/IP garante a entrega de todos os pacotes a todos os destinos, embora não necessariamente na mesma ordem).
(*) lembrei do Led Zeppelin quando escrevi isso ... "hmmm, it makes me wonder..."
MQL é uma linguagem forrada de exceções e inconsistências... Não me admira vários projetos gerarem atrasos inesperados...
Perdi horas hoje só pra adivinhar que diabos o MQL estava fazendo com os flags...
Torço para o que o Pine Script ande a passos gigantescos... esses russos da Metaquotes precisam de um chacoalhão...
Como se não bastasse os updates Goela-Abaixo de versões beta em sistemas na produção - sim, somos todos cobaias - desligaram o suporte, cabendo à comunidade se virar...
:(
Nem me fala. Se aqueles mais experimentados em desenvolvimento sofrem, imagina marinheiros de primeira viagem como eu.
Baita perrengue para colocar para rodar e, quando se supera o problema da linguagem, vem a parte nebulosa com as corretoras, inclusive no que menciona o @Trader_Patinhas.
Hoje, em minhas observações, vejo com mais grave o ponto de sincronização. Como cai essa mer...
[ ]'s
É um EA?
E, os ticks são de Forex?
uma vez vi um post onde uma pessoa recebia 2 tick flags ao mesmo tempo. Essa estrutura é com operação de bits... Dá uma olhada nesta thread:
https://www.mql5.com/en/forum/212349
O autor desse tópico aí é um velho conhecido meu. Um dia ele perdeu a senha da conta e um feitiço o transformou em pato ;-)
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Fala pessoal, tudo certo?
Estou desenvolvendo um código para avaliar os ticks, mas alguns deles estão vindo com o flags zerado, segue o meu código:
E segue o resultado:
Como é apenas um teste está dando alguns avisos de conversão de dados numéricos para string na compilação, mas não estou me preocupando com isso no momento.
As corretoras onde fiz o teste são Modal e XP.
Obrigado.
Jhoni Carlos da Silva.