CopyTicks

Obtém em uma matriz ou vetor os ticks a partir da estrutura MqlTick. Os elementos da posição inicial são contados do passado para o presente, ou seja, o tick com índice 0 é o mais antigo. Para analisar um tick é necessário verificar o campo flags, que notifica exatamente o que foi alterado no tick em questão.

bool  matrix::CopyTicks(
   string           symbol,                // nome do símbolo
   ulong            flags,                 // sinalizador que define o tipo de ticks recebidos
   ulong            from_msc,              // momento a partir do qual os ticks são solicitados
   ulong            count                  // número de ticks a serem obtidos
   );

Método vetorial

bool  vector::CopyTicks(
   string           symbol,                // nome do símbolo
   ulong            flags,                 // sinalizador que define o tipo de ticks recebidos
   ulong            from_msc,              // momento a partir do qual os ticks são solicitados
   ulong            count                  // número de ticks a serem obtidos
   );

Parâmetros

symbol

[in]  Símbolo.

flags

[in]  Combinação de sinalizadores a partir da enumeração ENUM_COPY_TICKS, que indica a composição dos dados solicitados. Ao copiar em um vetor, apenas um valor da enumeração pode ser especificado a partir da enumeração ENUM_COPY_TICKS, caso contrário, haverá um erro.

from_msc

[in]  momento a partir do qual os ticks são solicitados. Indicado em milissegundos a partir de 01.01.1970. Se o parâmetro from_msc=0, então é dada a última count de ticks.

count

[in]  Número de ticks solicitados. Se os parâmetros from_msc e count não forem especificados, todos os últimos ticks disponíveis serão registrados, mas não mais do que 2000.

 

Valor retornado

Retorna true se for bem-sucedido, caso contrário, false se for erro.

Observação

A primeira chamada a CopyTicks() inicia uma sincronização do banco de dados de ticks armazenados no disco rígido para um determinado símbolo. Se não houver ticks suficientes no banco de dados local, os ticks ausentes serão baixados automaticamente do servidor de negociação. Neste caso, os ticks são sincronizados a partir do momento from_msc, especificado em CopyTicks(), até o momento. Após essa operação, todos os ticks recebidos para esse símbolo serão armazenados no banco de dados de ticks, mantendo-o atualizado em tempo real e em sincronia.

Se os parâmetros from_msc e count não forem especificados, então todos os ticks disponíveis serão escritos para a matriz/vetor, mas não mais do que 2000.

Nos indicadores, o método CopyTicks() retorna o resultado imediatamente: Quando chamado a partir do indicador CopyTick() retornará imediatamente os ticks disponíveis por símbolo, e também iniciará a sincronização do banco de dados de ticks se houver dados insuficientes. Todos os indicadores de um mesmo símbolo operam em um fluxo comum, portanto, um indicador não deve aguardar a conclusão da sincronização para continuar funcionando. Após o término da sincronização, a próxima chamada a CopyTicks() retornará todos os ticks solicitados. A função OnCalculate() nos indicadores é chamada após a recepção de cada tick.

Em EAs e scripts, o método CopyTicks() pode esperar até 45 segundos por um resultado: Ao contrário de um indicador, cada EA e script trabalha em seu próprio fluxo e pode, portanto, esperar até 45 segundos para que a sincronização seja concluída. Se durante esse tempo os ticks não forem sincronizados na medida necessária, então CopyTicks() retornará apenas os ticks disponíveis por timeout, enquanto a sincronização continuará. A função OnTick() nos EAs não é um manipulador de cada tick, ela apenas notifica o EA sobre as mudanças no mercado. As mudanças no mercado podem ocorrer em lotes, ou seja, diversos ticks podem ser recebidos pelo terminal simultaneamente. Entretanto, a função OnTick() será chamada apenas uma vez para notificar o Expert Advisor sobre a última condição do mercado.

Taxa de saída: o terminal mantém em cache os últimos 4096 ticks de cada símbolo (65536 ticks para símbolos com a pilha em execução) para acesso rápido, o que permite consultas mais rápidas aos dados históricos. Quando são solicitados ticks da sessão de negociação atual que não estão armazenados em cache, a função CopyTicks() acessa diretamente os ticks armazenados na memória do terminal. No entanto, essas solicitações podem levar mais tempo para serem executadas. As solicitações de ticks de outros dias são as mais lentas, pois nesse caso os dados são lidos do disco, o que leva mais tempo para serem recuperados e processados.

ENUM_COPY_TICKS

A enumeração ENUM_COPY_TICKS contém sinalizadores para especificar o tipo de dados a ser passado para a matriz ou array. A combinação de sinalizadores permite obter várias séries do histórico em uma solicitação. Nesse caso, a ordem das linhas na matriz corresponderá à ordem dos valores na enumeração ENUM_COPY_TICKS, ou seja, a linha com dados High será sempre maior na matriz do que a linha com dados Low.

Identificador

Valor

Descrição

COPY_TICKS_INFO

1

 

COPY_TICKS_TRADE

2

 

COPY_TICKS_ALL

3

 

COPY_TICKS_TIME_MS

1<<8

Tempo de tick em milissegundos

COPY_TICKS_BID

1<<9

Preço Bid

COPY_TICKS_ASK

1<<10

Preço Ask

COPY_TICKS_LAST

1<<11

Preço Last (preço da última negociação)

COPY_TICKS_VOLUME

1<<12

Volume para o preço Last

COPY_TICKS_FLAGS

1<<13

Sinalizador de ticks

Disposição dos dados

 

 

COPY_TICKS_VERTICAL

1<<15

Os ticks são copiados na matriz ao longo do eixo vertical. Isso implica que os ticks na matriz são organizados de forma vertical, ou seja, os ticks mais antigos são apresentados na primeira linha e os mais recentes, na última.

 

Por padrão, ao copiar para uma matriz, os ticks são adicionadas ao longo do eixo horizontal.

 

O sinalizador só é relevante ao copiar para uma matriz.

Para saber exatamente quais dados foram alterados com o tick atual, analise seus sinalizadores:

  • TICK_FLAG_BID — tick mudou o preço Bid
  • TICK_FLAG_ASK  — tick mudou o preço Ask
  • TICK_FLAG_LAST — tick mudou o preço da última negociação
  • TICK_FLAG_VOLUME — tick modou o volume
  • TICK_FLAG_BUY — tick surgiu como resultado de uma negociação de compra
  • TICK_FLAG_SELL — tick surgiu como resultado de uma negociação de venda

 

Ver também

Acesso a séries temporais e indicadores, CopyTicks