RefreshRates() versus SymbolInfoTick()

 
Ola pessoal, sou novo aqui mas ja conheco o metatrader e mql5 a algum tempo. Estou desenvolvendo um robô de arbitragem e gostaria de saber qual é a melhor forma de saber o preco mais atual de bid/ask, acredito que seja usando a função SymbolInfoTick() mas em alguns locais vi referencias a outra função chamada RefreshRates(), não sei se é coisa antiga, mas na build atual essa função nem existe, só existe na classe CSymbolInfo mas não acredito que seja o correto. Minha ideia é pegar o preço mais atual possível de bid/ask pra calcular uma diferença de spread pra operar. Obrigado desde já.
 
Fabio Silva:
Ola pessoal, sou novo aqui mas ja conheco o metatrader e mql5 a algum tempo. Estou desenvolvendo um robô de arbitragem e gostaria de saber qual é a melhor forma de saber o preco mais atual de bid/ask, acredito que seja usando a função SymbolInfoTick() mas em alguns locais vi referencias a outra função chamada RefreshRates(), não sei se é coisa antiga, mas na build atual essa função nem existe, só existe na classe CSymbolInfo mas não acredito que seja o correto. Minha ideia é pegar o preço mais atual possível de bid/ask pra calcular uma diferença de spread pra operar. Obrigado desde já.

Boa noite Fabio,

As inúmeras maneiras de se obter bid/ask pelo MQL5, a meu ver, são eficientes. Minha sugestão: escolha a que você entender como a sendo mais elegante.

Quanto a arbitragem, seria uma boa a leitura dos comentários abaixo e refletir se a arquitetura do metatrader pode mesmo atender a suas expectativas e ficar muito atento a riscos. Minha opinião: você vai perder dinheiro e se expor a riscos que desconhece se optar pelo Metatrader para isso. Mas a decisão eh exclusivamente sua.


Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Como Funciona um robo de arbitragem entre Mini Indice e Indice?

Rogerio Figurelli, 2019.06.04 08:16

Olá Lucas_Massotti, independentemente de funcionar ou não, obrigado por compartilhar pois acredito que esse é um bom caminho, de buscar testar na prática as ideias, pois no mínimo aprendemos com isso para ir melhorando, por mais provável ou improvável que seja a ideia original.

Nesse caso específico, me parece que qualquer backtesting ou teste em conta demo vai ser muito longe da realidade, pois exigiria uma precisão de tick a tick muito grande, e, principalmente, que o fornecedor de market data entregue essa precisão, o que não acredito muito.

Dessa forma, e antes dos seus testes em conta real, minha opinião é que os riscos e oportunidades dessa estratégia se equilibram ao de qualquer outra estratégia de pair trading ou long/short, ainda mais com instrumentos tão conhecidos e antigos como esses.

Seja como for, imagino as seguintes possibilidades de resultados dos testes em conta real:

  1. Perda por latência: como comentei no início, a competição está em arbitragem de latência, e você pode até visualizar a diferença, mas estará vendo atrasado e entrando atrasado nela, o que não é nada recomendado.
  2. Perda por exposição: caso a estratégia tenha sido vencedora em algum momento, apenas por arbitragem de preço, uma das leis mais relevantes da economia é a do equilíbrio, e certamente se já foi divulgado até em vídeo no YouTube, já são tantos players fazendo isso, com uma exposição tão grande no mesmo modelo operacional, que as chances de você encontrar o mesmo resultado no mundo real são mínimas e para poucos players, com maior capacidade operacional, ou até mesmo operando contra a estratégia original.
  3. Ganho: nesse caso não há meio termo e você descobriu um "Ovo de Colombo", trilhando um ótimo caminho para se tornar bilionário.

Espero, sinceramente, que a possibilidade correta seja a 3, até porque vejo um elemento novo que é a certa estratégia que você refere, mas da minha experiência no mercado e com robôs acredito bem mais na 1 e 2, mesmo sem escrever nenhuma linha de código, o que implicaria, no melhor caso, em um retorno baixo e de alto risco. Mas, caso não seja a 3 (nesse caso provavelmente você irá ter mais o que fazer), ou até mesmo se for, por favor retorne aqui para compartilhar o resultado de sua experiência em conta real.

Sds.,
Rogério Figurelli

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Como Funciona um robo de arbitragem entre Mini Indice e Indice?

Trader_Patinhas, 2019.06.04 15:13

@Lucas_Massotti

Recomendo que você preste atenção ao um ponto importantíssimo que o @Rogerio Figurelli explicou: "a competição irá migrar de arbitragem de preço para arbitragem de latência".

No caso específico da arbitragem entre minicontratos e contratos cheios, existem players que exploram essas distorções usando robôs HFT que rodam em servidores hospedados dentro da rede local da B3, com latência da ordem de microssegundos (ou até menos).

Se você examinar o log de eventos dos contratos e minicontratos de dólar e índice, verá que as raríssimas oportunidades de arbitragem que ocorrem nunca duram mais do que 1 ou 2 milissegundos, sendo praticamente impossíveis de serem exploradas por um robô que rode fora da rede local da B3.

Detalhe: essas janelas de oportunidade de 1 a 2 ms que observei ocorrem sempre em momentos de pico de fluxo de ordens, de modo que talvez nem sejam oportunidades reais onde se possa entrar negociando e obter lucro (a diferença de 1 a 2 ms talvez seja apenas delay de processamento de fila, inaproveitável para negociação, pois a sua ordem entraria na fila para ser executada).

Um tipo de arbitragem que observei que fica viável de se fazer de vez em quando usando robô externo à B3 é arbitrar lote cheio versus lote fracionário de ações de baixíssima liquidez, pelas quais os grandes players não se interessam em implementar robôs HFT de arbitragem, dado o baixo volume de negociação (nas ações de alta liquidez, tipo PETR4, ITUB4, BBAS3, etc. os robôs dos grandes players traçam todas as distorções entre cheio e fracionário em microssegundos e fica impossível competir com eles).

O problema é que, nessas ações de pouca liquidez, as oportunidades são tão raras e os volumes tão pequenos que o lucro potencial de arbitragem, mesmo com execução perfeita e corretagem zero, seria insignificante (talvez isso explique porque ninguém se interessa em implementar HFT de arbitragem nesses ativos).

Resumindo minha experiência: eu já tentei estudar várias possibilidades de arbitragem em diversos ativos da B3 (inclusive opções) e, pelo menos até o momento, não consegui encontrar nenhuma brecha que permita vencer os robôs HFT dos grandes players usando robôs com latência de milissegundos e os casos que encontrei nos quais não existe concorrência com os HFT são sempre ativos com liquidez e volume tão baixos que raramente compensam os custos operacionais.

Conselho de amigo: é importante vc examinar os históricos tick a tick e simular com precisão o comportamento real do seu robô de arbitragem naquele cenário, considerando latência da conexão de rede, spreads, dinâmica das filas, etc. Se vc não fizer uma simulação precisa e realista do que realmente vai acontecer quando o seu robô estiver operando no mercado real, vc certamente vai se iludir achando que dá pra tirar lucro de onde não dá (esqueça o strategy tester e a conta demo, pois ambos vão te iludir, vc terá que desenvolver seu próprio código para processar o histórico tick a tick, para obter uma estimativa realista do lucro que uma estratégia de arbitragem conseguirá realmente gerar).


$uce$$o!
 

Obrigado @Joscelino Celso de Oliveira pela resposta, na verdade estou fazendo um robo de spread, tipo long/short ou travas de opções, e acredito que não ter tanto problema quanto esses de arbitragem que me mandou, pois pretendo testar VPS da AWS/google cloud e usando diferentes corretoras para ter o minimo de latencia possivel, nesse caso como não serão ativos tão disputados quanto dolar/indice, acredito que consiga fazer algo interessante, eu usava um robo de spread comercial mas ele sempre me deixava despernado em uma das pontas, sendo que vi atrasos de mais de 1 segundo e por isso resolvi ir pro metatrader no qual eu ja desenvolvi alguns EAs simples e indicadores e sei que a latencia vai ser bem menor que isso usando VPS.

 
Fabio Silva:

Obrigado @Joscelino Celso de Oliveira pela resposta, na verdade estou fazendo um robo de spread, tipo long/short ou travas de opções, e acredito que não ter tanto problema quanto esses de arbitragem que me mandou, pois pretendo testar VPS da AWS/google cloud e usando diferentes corretoras para ter o minimo de latencia possivel, nesse caso como não serão ativos tão disputados quanto dolar/indice, acredito que consiga fazer algo interessante, eu usava um robo de spread comercial mas ele sempre me deixava despernado em uma das pontas, sendo que vi atrasos de mais de 1 segundo e por isso resolvi ir pro metatrader no qual eu ja desenvolvi alguns EAs simples e indicadores e sei que a latencia vai ser bem menor que isso usando VPS.

Legal Fabio,

Neste caso, considerando as travas de opções, sugiro que leia a thread abaixo, especialmente o comentário em destaque.


Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Execução de travas no Metatrader

Trader_Patinhas, 2019.03.30 19:45

Boa tarde, @ericsebestyen

A Modalmais, pelo menos na época em que pesquisei, não permitia vender opções pelo Metatrader, mesmo cobertas por opção comprada em outro strike (trava) ou pela mesma quantidade do ativo subjacente (venda coberta). Se estão permitindo venda coberta agora, isso é novidade pra mim, pois antes, nem mesmo tendo os ativos em custódia pra fazer venda coberta, eles permitiam.

Na Modalmais vc só vai conseguir negociar travas pelo Home Broker.

A XP também não permite negociar travas pelo Metatrader (pelo menos na época em que pesquisei o assunto, meados de 2018, não permitia).

Até onde vai meu conhecimento, a única corretora onde vc vai conseguir negociar travas no Metatrader usando robô é a Terra Investimentos, desde que o robô primeiro adquira a ponta comprada para em seguida lançar a ponta vendida.

Porém, para operar opções por robô, é bom estar atento a algumas dicas que vou te passar abaixo:

A premissa básica que vc tem que ter em mente pra operar opções por robô, que vale não só pra trava mas também pra qualquer outro tipo de estrutura, é que um strike vendido não pode ficar descoberto em nenhum momento.

Isso significa que:

1) Na hora de comprar a trava, vc primeiro tem que comprar o strike da ponta comprada, para então poder vender o strike da ponta vendida.

2) Se o robô enviar as 2 ordens uma logo após a outra, a ordem de venda provavelmente vai ser rejeitada por falta de margem, pois não vai dar tempo de a aquisição da ponta comprada ter sido confirmada. Para comprar a trava por robô, vc tem que aguardar chegar no OnTradeTransaction a notificação de execução da ordem de compra do strike comprado, para então enviar a ordem de venda do strike vendido. Desse jeito funciona.

3) Como no Metatrader vc tem que comprar/vender cada ponta da trava separadamente, a margem necessária para comprar a trava será maior que no Home Broker. No Home Broker, bastaria vc ter margem suficiente para comprar a trava. Mas no Metatrader vc primeiro tem que fazer uma compra a seco, para em seguida travá-la. Por isso vc precisará ter a margem suficiente para comprar a opção a seco, e não apenas o valor da trava.

4) Na hora de vender a trava, a mesma coisa: primeiro tem que recomprar a ponta vendida e aguardar a notificação de execução da ordem no OnTradeTransaction, para então poder vender a ponta comprada (isto porque, enquanto existir a posição vendida na outra ponta, a ponta comprada fica bloqueada como garantia e qualquer ordem de venda dela será rejeitada). 

5) Ao contrário do Home Broker, onde vc não precisa de nenhuma margem para vender travas, para vender a trava no Metatrader vc primeiro precisará comprar a seco a ponta vendida. Então, mais uma vez, vc precisará ter margem para fazer a compra a seco da ponta vendida, caso contrário não conseguirá nem vender a ponta comprada e nem comprar a ponta vendida, ou seja, não conseguirá vender a trava, a não ser manualmente no Home Broker. 

Acho que é só isso. Se vc tiver entendido o que expliquei acima, conseguirá operar travas e também outras estruturas mais complexas no Metatrader pela Terra Investimentos (até o momento, não sei de nenhuma outra corretora que permita).

obs: presumo que vc já esteja familiarizado com o mercado de opções, pois se trata de um mercado muito mais complexo e perigoso que os mercados de ações e de contratos futuros e, para entrar nessa, com ou sem robô, é recomendável saber muito bem o que está fazendo.

Abraços!


Por outro lado, também passei a desenvolver no MQL5 depois de minhas insatisfações com robôs de mercado, e estou muito contente.
 

Excelente @Joscelino Celso de Oliveira vão ser muito uteis essa informações, eu já tenho conta em todas as corretora que usam metatrader e pretendo testar todas, tanto pra operações permitidas quanto pra tempo de resposta em cada uma delas.

 
Fabio Silva:

Obrigado @Joscelino Celso de Oliveira pela resposta, na verdade estou fazendo um robo de spread, tipo long/short ou travas de opções, e acredito que não ter tanto problema quanto esses de arbitragem que me mandou, pois pretendo testar VPS da AWS/google cloud e usando diferentes corretoras para ter o minimo de latencia possivel, nesse caso como não serão ativos tão disputados quanto dolar/indice, acredito que consiga fazer algo interessante, eu usava um robo de spread comercial mas ele sempre me deixava despernado em uma das pontas, sendo que vi atrasos de mais de 1 segundo e por isso resolvi ir pro metatrader no qual eu ja desenvolvi alguns EAs simples e indicadores e sei que a latencia vai ser bem menor que isso usando VPS.

O problema é que vc vai competir com robôs de arbitragem que ficam hospedados dentro da rede local da B3, cuja latência é centenas de vezes menor que qualquer servidor de nuvem que esteja do lado de fora.

Até onde pude verificar, esses robôs arrematam na nossa frente todas as oportunidades que aparecem.

Já verifiquei isso em vários tipos de arbitragem: contratos x minicontratos, diferença entre contratos futuros de diferentes vencimentos e taxa de juros, ações no mercado fracionário x ações no mercado de lote cheio, diversas estruturas de opções (travas de alta e de baixa com call e com put e combinações destas, box de 3 pontas, box de 4 pontas) ... surgem muitas oportunidades de lucro sem risco, mas elas geralmente não duram mais de 2 ms (e acredito que na verdade durem menos que isso, pois esses 2 ms são medidos na recepção dos ticks de notificação e não nos eventos em si).

Os servidores que estão dentro da rede local da B3 tem latência de poucos microssegundos. É impossível competir com eles estando do lado de fora.

Acho que um caminho mais promissor é o que chamam de "arbitragem estatística", que são situações onde o lucro não é garantido, como no caso da arbitragem "raiz", mas a probabilidade de lucro é bem maior que a de prejuízo porque alguma combinação de preços se afastou demasiadamente do seu ponto de equilíbrio e é altamente provável uma reversão à média em curto prazo. 

Razão: