- Direção de Indexação em Arrays, Buffers e Séries Temporais
- Organizando Acesso aos Dados
- SeriesInfoInteger
- Bars
- BarsCalculated
- IndicatorCreate
- IndicatorParameters
- IndicatorRelease
- CopyBuffer
- CopyRates
- CopySeries
- CopyTime
- CopyOpen
- CopyHigh
- CopyLow
- CopyClose
- CopyTickVolume
- CopyRealVolume
- CopySpread
- CopyTicks
- CopyTicksRange
- iBars
- iBarShift
- iClose
- iHigh
- iHighest
- iLow
- iLowest
- iOpen
- iTime
- iTickVolume
- iRealVolume
- iVolume
- iSpread
Acesso a séries de tempo e indicadores
Estas são funções para trabalhar com séries de tempo e indicadores. Uma série de tempo difere de um array de dados usual pela sua ordenação reversa - elementos de séries de tempo são indexados do final de um array para seu início (a partir do mais recente para o mais antigo). Para copiar valores de séries de tempo e dados de indicadores, é recomendável usar somente arrays dinâmicos, porque as funções de cópia estão projetadas para alocar o tamanho necessário dos arrays que recebem valores.
Existe uma importante exceção a esta regra: se valores de séries de tempo e indicadores precisam ser copiados com freqüência, por exemplo, a cada chamada de OnTick() em Expert Advisors ou a cada chamada de OnCalculate() em indicadores, neste caso seria melhor usar arrays alocados estaticamente, porque operações de alocação de memória para arrays dinâmicos requerem um tempo adicional, e isso terá efeitos durante os processos de teste e otimização.
Ao usar funções de acesso a valores de séries de tempo e indicadores, a direção de indexação deve ser leva em consideração. Isso é descrito na seção Direção de indexação em arrays e séries de tempo.
O acesso a dados de indicadores e séries de tempo é implementado independentemente do fato dos dados solicitados estarem prontos ou não (o chamado acesso assíncrono). Isso é extremamente importante para os cálculos de um indicador customizado, porque se não houver dados, as funções de tipo Copy...() retornam imediatamente um erro. Contudo, ao acessar dados a partir de Expert Advisors e scripts, as várias tentativas para receber dados são feitos com uma pausa pequena, cujo objetivo é fornecer algum tempo necessário para baixar a série de tempo requerida para calcular valores de um indicador.
A seção Organizando Acesso a Dados descreve detalhes de recebimento, armazenamento e solicitação de dados de preço no terminal cliente MetaTrader 5.
É historicamente aceito que um acesso a dados de preço em um array é realizado a partir do final dos dados. Fisicamente, os novos dados são sempre escritos no final do array, mas o índice do array é sempre igual a zero. O índice 0 no array de série de tempo denota dados da barra corrente, isto é, a barra que correspondente ao intervalo de tempo não terminado nesta janela de tempo.
Uma janela de tempo é o período de tempo, durante o qual uma única barra de preço é formada. Existem 21 janelas de tempo padrão predefinidas.
Função |
Ação |
---|---|
Retorna informação sobre o estado dos dados históricos |
|
Retorna o número de barras do histórico para um ativo e período especificados |
|
Retorna o número de dados calculados em um buffer de indicador ou -1 em caso de erro (os dados não foram calculados ainda) |
|
Retorna o handle para o indicador técnico especificado criado por um array de parâmetros de tipo MqlParam |
|
Baseado no handle especificado, retorna o número de parâmetros de entrada do indicador, bem como os valores e tipos dos parâmetros |
|
Remove um handle de indicador e libera o bloco de cálculo do indicador, se ele não for usado por ninguém mais |
|
Copia dados de um buffer especificado de um indicador especificado em um array |
|
Obtém dados históricos da estrutura Rates para um ativo e período especificados em um array |
|
Obtém no conjunto de arrays especificado as séries temporais sincronizadas da estrutura MqlRates para o símbolo-período especificado na quantidade especificada. |
|
Obtém dados históricos sobre hora de abertura de barras para um ativo e período especificados em um array |
|
Obtém dados históricos sobre preço de abertura de barras para um ativo e período especificados em um array |
|
Obtém histórico de dados sobre preço de barra máximo para um ativo e período especificados em um array |
|
Obtém histórico de dados sobre preço de barra minimo para um ativo e período especificados em um array |
|
Obtém histórico de dados sobre preço de fechamento de barra para um ativo e período especificados em um array |
|
Obtém histórico de dados sobre volumes de tick para um ativo e período especificados em um array |
|
Obtém dados históricos sobre volumes de negociação para um ativo e período especificados em um array |
|
Obtém histórico de dados sobre spreads para um ativo e período especificados em um array |
|
Obtém, dentro da matriz ticks_array, ticks no formato MqlTick |
|
Obtém, na matriz ticks_array, ticks em formato MqlTick |
|
Retorna o número de barras - no histórico - do símbolo e do período correspondentes |
|
Retorna o índice da barra na qual o tempo especificado coincide |
|
Retorna o valor do preço de fechamento da barra (indicado pelo parâmetro shift) do gráfico correspondente |
|
Retorna o valor do preço máximo da barra (especificado pelo parâmetro shift) do gráfico correspondente |
|
Retorna o índice do maior valor encontrado (deslocamento relativo à barra atual) do gráfico correspondente |
|
Retorna o valor do preço mínimo da barra (indicado pelo parâmetro shift) do gráfico correspondente |
|
Retorna o índice do menor valor encontrado (deslocamento relativo à barra atual) do gráfico correspondente |
|
Retorna o valor do preço de abertura da barra (indicado pelo parâmetro shift) do gráfico correspondente |
|
Retorna o valor do tempo de abertura da barra (indicado pelo parâmetro shift) do gráfico correspondente |
|
Retorna o valor do volume de tick (especificado pelo parâmetro shift) do gráfico correspondente |
|
Retorna o valor do volume real da barra (indicado pelo parâmetro shift) do gráfico correspondente |
|
Retorna o valor do volume de tick (especificado pelo parâmetro shift) do gráfico correspondente |
|
Retorna o valor do spread da barra (indicado pelo parâmetro shift) do gráfico correspondente |
Apesar do fato de que pelo uso da função ArraySetAsSeries() é possível definir em arrays acesso aos elementos como em séries de tempo, deve ser lembrado que os elementos de arrays são fisicamente armazenados na mesma e única ordem - somente a direção de indexação muda. Para demonstrar este fato, vamos apresentar um exemplo:
datetime TimeAsSeries[];
|
Como resultado nós conseguimos a seguinte saída:
TimeCurrent = 2009.06.11 14:16:23
|
Como vemos a partir da saída, a medida que o índice do array TimeAsSeries aumenta, o valor da hora do índice diminui, isto é, nós nos movemos do presente para o passado. Para o array comum ArrayNotSeries o resultado é diferente - a medida que o índice cresce, nós nos movemos do passado para o presente.
Veja também
ArrayIsDynamic, ArrayGetAsSeries, ArraySetAsSeries, ArrayIsSeries