- 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
CopySeries
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. Os itens da posição inicial são contados do presente para o passado, ou seja, uma posição inicial de 0 significa a barra atual.
Ao copiar antecipadamente uma quantidade desconhecida de dados, é recomendável usar como arrays receptores uma matriz dinâmica, já que se houver mais dados do que o array pode conter, é feita uma tentativa de redistribuir a matriz para que os dados solicitados se ajustem a todo o array.
Se uma quantidade pré-determinada de dados precisa ser copiada, é melhor fazê-lo em um buffer alocado estaticamente, para evitar a alocação global desnecessária de memória.
Não importa que propriedade o array receptor tenha, as_series=true ou as_series=false, os dados serão copiados para que o elemento da série temporal mais antiga seja copiado para o início da memória física alocada ao array.
int CopySeries(
|
Parâmetros
symbol_name
[in] Símbolo.
timeframe
[in] Período.
start_pos
[in] Número do primeiro item copiado.
count
[in] Número de itens a serem copiados.
rates_mask
[in] Combinação de sinalizadores a partir da enumeração ENUM_COPY_RATES .
array1, array2,...
[out] Matriz do tipo apropriado para recuperar as séries temporais a partir da estrutura MqlRates. A ordem dos arrays passados para a função deve corresponder à ordem dos campos na estrutura MqlRates.
Valor retornado
Número de elementos do array copiados ou -1 no caso de erro.
Observação
Se o intervalo de tempo solicitado estiver totalmente fora dos dados disponíveis no servidor, a função retorna -1. Se os dados solicitados estiverem fora do escopo TERMINAL_MAXBARS (número máximo de barras no gráfico), a função também retornará -1.
Ao solicitar dados do indicador, caso as séries temporais solicitadas ainda não tenham sido construídas ou precisem ser baixadas do servidor, a função retornará imediatamente -1, mas o próprio processo de carregamento/construção será iniciado.
Ao solicitar dados de um EA ou script, será iniciada um carregamento desde o servidor se o terminal não tiver esses dados localmente, ou será iniciada a construção da série temporal necessária se os dados puderem ser construídos a partir do histórico local, mas ainda não estiverem prontos. A função retornará a quantidade de dados que estarão prontos quando o tempo expirar, mas o carregamento do histórico continuará, e na próxima vez que uma solicitação semelhante for feita a função retornará mais dados.
Diferença entre CopySeries e CopyRates
A função CopySeries permite obter apenas as séries temporais necessárias de cada vez em diferentes arrays especificados, enquanto todos estão sincronizados entre si. Isso significa que todos os valores nos arrays resultantes em um índice específico N pertencerão à mesma barra no par Symbol/Timeframe especificado. Nesse caso, o programador não precisa garantir que todas as séries temporais recebidas sejam sincronizadas pelo tempo de abertura da barra.
Ao contrário de CopyRates, que retorna o conjunto completo de séries temporais como um array MqlRates, a função CopySeries permite que o programador obtenha apenas as séries temporais necessárias como arrays separados. Para fazer isso, você precisa especificar uma combinação de sinalizadores para especificar o tipo de série temporal solicitado . A ordem dos arrays passados para a função deve corresponder à ordem dos campos na estrutura MqlRates:
struct MqlRates
|
Assim, se for necessário obter os valores das séries temporais time, close e real_volume para as últimas 100 barras do Symbol/Timeframe atual, a chamada deve ser a seguinte:
datetime time[];
|
A ordem das matrizes é importante "time, close, volume" deve estar de acordo com a ordem dos campos na estrutura MqlRates. Já a ordem dos valores na máscara rates_mask não importa, a máscara poderia ser assim:
COPY_RATES_VOLUME_REAL|COPY_RATES_TIME|COPY_RATES_CLOSE |
Exemplo:
//--- input parameters
|
Ver também