Especialistas: Ask Bid Ticks

 

Ask Bid Ticks:

"AskBidTicks" é uma solução de alta precisão para dados de tick em tempo real com a finalidade de análise da microestrutura.

Ele exporta preços tick a tick para um arquivo CSV e fornece opções para nome de arquivo, delimitadores e data-hora. Ele funciona com o tempo do computador local para o tempo de chegada de cada tick em alta precisão. No início do programa, o caminho do arquivo completo também é mostrado na "caixa de ferramentas" - guia "Experts":

Visualizar caixa de ferramentas

Abaixo há um tabela com exemplo de saída da amostra do arquivo csv com tempo data-hora também em milissegundos:

Saída

Autor: Erdem Sen

 
Automated-Trading:

Ticks de compra e venda:

Autor: Erdem Sen

Interessante, como você poderia usá-lo no backtesting? Alguma ideia?
 
Olá, você pode fazer o equivalente em Bar M5 M15 H1 H4
 
vanvolxem:
Olá, você pode fazer o equivalente em Bar M5 M15 H1 H4
Desculpe-me, não consegui entender, poderia ser mais específico?
 

Olá,

Time Symbol OPEM CLOSE PH PB

2013.01.04 04:55 EURGBP 0.81065 0.81078 0.81086 0.81065 172

2013.01.04 05:00 EURGBP 0.81079 0.81046 0.81080 0.81044 90

2013.01.04 05:05 EURGBP 0.81047 0.81044 0.81056 0.81044 89

2013.01.04 05:10 EURGBP 0.81043 0.81059 0.81059 0.81033 111

2013.01.04 05:15 EURGBP 0.81057 0.81052 0.81059 0.81048 78

2013.01.04 05:20 EURGBP 0.81051 0.81065 0.81071 0.81050 124

2013.01.04 05:25 EURGBP 0.81067 0.81066 0.81070 0.81060 243

2013.01.04 05:30 EURGBP 0.81067 0.81076 0.81080 0.81063 108


 
vanvolxem:

Olá,

Time Symbol OPEM CLOSE PH PB

2013.01.04 04:55 EURGBP 0.81065 0.81078 0.81086 0.81065 172

2013.01.04 05:00 EURGBP 0.81079 0.81046 0.81080 0.81044 90



A melhor maneira de obter dados periódicos (de acordo com minha opinião) é usar o histórico do MT4; você pode fazer download e exportar (para o Excel) os dados históricos:

//+------------------------------------------------------------------+
//|PeriodicRealTimeDataStream.mq5
//| Copyright 2013, MetaQuotes Software Corp. |
//| http://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

datetime t1;
double   arro[1],arrh[1],arrl[1],arrc[1];
string   T,O,H,L,C;
long     arrv[1],V;

//+------------------------------------------------------------------+
void OnTick()
  {  

   t1 = (datetime)SeriesInfoInteger(_Symbol,_Period,SERIES_LASTBAR_DATE);
   static datetime  t0 = t1;
//--- obter valores para o gráfico especificado 
   if (t0!=t1)
      {  
         //--- copiar valores para matrizes
         CopyOpen(_Symbol,_Period,0,1,arro);
         CopyHigh(_Symbol,_Period,0,1,arrh);
         CopyLow(_Symbol,_Period,0,1,arrl);
         CopyClose(_Symbol,_Period,0,1,arrc);
         CopyTickVolume(_Symbol,_Period,0,1,arrv);
         //--
         T=TimeToString(t1,TIME_DATE|TIME_MINUTES);
         O=DoubleToString(arro[0],_Digits);
         H=DoubleToString(arrh[0],_Digits);
         L=DoubleToString(arrl[0],_Digits);
         C=DoubleToString(arrc[0],_Digits);
         V=arrv[0];
         //--- saída dos valores
         printf("%s  %s  %s  %s  %s  %s  %d",T,_Symbol,O,H,L,C,V);
         //--- definir a hora novamente
         t0=t1;     
      }
//---
  }
//+------------------------------------------------------------------+

se quiser exportar para csv, você pode usar as funções e variáveis de arquivo como no código principal

 
E quanto aos ticks que você perde? Você adiciona alguma coisa ao arquivo TXT para eles? Se não fizer isso, você não está "... armazenando todos os dados tick-by-tick dos preços de compra e venda em um arquivo txt."
 
RaptorUK:
E quanto aos ticks que você perde? Você adiciona alguma coisa no arquivo TXT para eles? Se não o fizer, então você não está ". . . armazenando todos os dados tick-by-tick dos preços de compra e venda em um arquivo txt."

Você está certo de que existe a possibilidade de faltarem cotações devido à forma de tratamento do evento NewTick, mas o código é rápido o suficiente para tornar essa possibilidade muito pequena (quase nula). Se os ticks faltantes ocorrerem mais do que eu pensava (o que pode afetar a significância da análise), então Ontick() está com um bug, não meu código.

E sobre a frase ". . . armazena todos os dados tick-by-tick dos preços de compra e venda em um arquivo txt.", eu percebi isso há muito tempo e a alterei :) não há mais o "all", mas no fórum ele permaneceu o mesmo - desculpe-me por não poder alterá-lo, eu gosto de reeditar os comentários, mas é impossível para essa frase :(

 
erdogenes:

Você está certo de que existe a possibilidade de faltarem cotações devido à forma de tratamento do evento NewTick, mas o código é rápido o suficiente para tornar essa possibilidade muito pequena (quase nula). Se os ticks faltantes ocorrerem mais do que eu pensava (o que pode afetar a significância da análise), então Ontick() está com um bug, não meu código.

E sobre a frase ". . . armazena todos os dados tick-by-tick dos preços de compra e venda em um arquivo txt.", eu percebi isso há muito tempo e a alterei :) não há mais o "all", mas no fórum ele permaneceu o mesmo - desculpe-me por não poder alterá-lo, eu gosto de reeditar os comentários, mas é impossível para essa frase :(

Não é um bug, é apenas como funciona... se OnTick() estiver sendo executado quando um novo tick chegar, o novo tick será ignorado...

NewTick

O eventoNewTick é gerado se houver novas cotações e é processado pelo OnTick() dos Expert Advisors anexados. Caso a função OnTick da cotação anterior esteja sendo processada quando uma nova cotação for recebida, a nova cotação será ignorada por um Expert Advisor, pois o evento correspondente não será enfileirado.

Todas as novas cotações recebidas enquanto o programa estiver em execução serão ignoradas até que a função OnTick() seja concluída. Depois disso, a função será executada somente depois que uma nova cotação for recebida.

Você já testou para ver quantos ticks você normalmente perde?

 
RaptorUK:

Não é um bug, é apenas o modo como funciona... se OnTick() estiver sendo executado quando um novo tick chegar, o novo tick será ignorado...

Estou confuso, então você acha que essa é a maneira de lidar com o novo tique e eu também:)

erdogenes:

Você está certo, existe a possibilidade de perder as aspas devido à forma de tratamento do evento NewTick

Talvez você tenha entendido errado: se a falta de ticks tiver um efeito significativo na análise, então o Ontick está com um bug, não normalmente (porque ele é o manipulador de eventos de "new tick", se não puder lidar com o suficiente, está com um bug), mas não acho que ele não possa lidar com isso, não acho que esteja com um bug.

RaptorUK:

. . você testou para ver quantos ticks você normalmente perde?

Não sei o que são ticks perdidos, eu obtenho o que o programa obtém, como posso calculá-los? ou podem ser calculados de alguma forma? não sei quantos ticks o Ontick perde em um dia (não estou desenvolvendo o mql5). Não posso falar sobre a MetaQuotes. Não tenho acesso direto a um servidor de negociação para comparar os feeds. Não posso calcular isso para um programa, pois isso não será alterado quando o programa for meu, só posso falar estatisticamente.

Para você, editei um exemplo com o processamento de dados de HF. Obtenho a taxa de chegadas de ticks no mesmo milissegundo com as taxas interbancárias de 27.01.2011 - o programa para cálculo é o Gretl, os códigos que você pode usar e os dados são enviados por PM (não posso compartilhar esses dados publicamente, desculpe). o resultado é ~0,003 (é a taxa de chegadas no mesmo milissegundo e foi um dia ativo).

Vamos supor que os dados sejam tratados no MT5 e (absurdamente) que todos eles (~0,003) estejam faltando. Então, um sinal que foi reamostrado aleatoriamente com uma taxa de ~0,003 perde alguma significância? Minha resposta é não. Já usamos reamostragem com taxas mais altas na análise.

É claro que foi apenas uma hipótese, e não de um corretor, mas espero que você entenda meu argumento. E, novamente, não tenho condições de obter o número real de ticks ausentes.

E mais uma coisa: se for a política "sem fila" do manipulador de eventos NewTick que causa os ticks ausentes (e é), acho que o número de ticks ausentes também pode depender da velocidade de seu hardware. Então, ele não pode ser calculado como um valor padrão.

(Reeditei o comentário: Corrigi o código que enviei a você, ele estava com um bug, o resultado real é ~0,003, o código está incluído)

Arquivos anexados:
codes.zip  1 kb
 
erdogenes:

Estou confuso, então você acha que é a maneira de lidar com o newtick e eu também:)

Talvez você tenha entendido errado: se a falta de ticks tiver um efeito significativo na análise, então o Ontick está com um bug, não normalmente (porque ele é o manipulador de eventos de "novo tick", se não puder lidar com o suficiente, está com um bug), mas não acho que ele não possa lidar com isso, não acho que esteja com um bug.

Não sei sobre os ticks perdidos, obtenho o que o programa obtém, como posso calculá-los? ou podem ser calculados de alguma forma? não posso saber quantos ticks o Ontick perde em um dia (não estou desenvolvendo o mql5).

Sim, é possível... você pode contar os ticks conforme os vê na barra atual e verificar o valor do volume do tick na barra atual. Quando sua contagem e o volume do tick não coincidirem, então você perdeu um ou mais ticks...