Академический Документы
Профессиональный Документы
Культура Документы
Novo artigo
METATRADER 5 — EXEMPLOS
FUNDAMENTOS BÁSICOS DA
PROGRAMAÇÃO MQL5:
ARRAYS
18 março 2014, 14:12
0 4 228
DMITRY FEDOSEEV
Introdução
Juntamente com as variáveis e funções, os arrays são partes
integrais de quase todas as linguagens de programação. Muitos
programadores iniciantes frequentemente ficam com medo dos
arrays. Parece estranho, mas é verdade! Posso assegurar que eles
não são nem um pouco assustadores. Na realidade, os arrays são
semelhantes às variáveis comuns. Sem entrar em detalhes sobre as
peculiaridades da notação, não há grande diferença entre escrever
uma expressão com variáveis simples:
Variable0=1;
Variable1=2;
Variable2=Variable0+Variable1;
ou utilizar arrays:
double Variable[3];
Variable[0]=1;
Variable[1]=2;
Variable[2]=Variable[0]+Variable[1];
Como você pode ver, a diferença não é tão grande, exceto pelo
fato de que, quando utilizamos arrays, os nomes das variáveis
contêm colchetes. Há outra diferença mais significativa - ao
declarar variáveis, você precisa especificar o nome de cada
variável, enquanto que, ao declarar um array, você precisa
escrever o seu nome apenas uma vez e especificar o número de
variáveis nos colchetes (número de elementos do array). As
vantagens de usar arrays em comparação ao uso de variáveis se
torna ainda mais óbvio ao gerenciarmos os desafios de um grande
número de tarefas de programação da vida real.
Será possível que o motivo pelo qual os arrays são vistos como algo
complicado está de alguma forma relacionado ao uso de "[" e "]"?
EssesSaiba
Esta página utiliza cookies. símbolos
mais são
sobreraramente utilizados
nossa Política em outro lugar que não
de cookies.
seja a programação quando se trabalha com arrays, de forma que a
https://www.mql5.com/pt/articles/567 1/19
07/05/2019 Fundamentos básicos da programação MQL5: arrays - Artigos MQL5
double Variable[3];
double Variable[3];
int Size=ArraySize(Variable);
double Variable[3];
#define SIZE 3
double Variable[SIZE];
Esta página utiliza cookies. Saiba mais sobre nossa Política de cookies.
https://www.mql5.com/pt/articles/567 2/19
07/05/2019 Fundamentos básicos da programação MQL5: arrays - Artigos MQL5
double Variable[];
Antes de você usar um array desse tipo, você precisa definir o seu
tamanho. O tamanho é definido pela função ArrayResize():
ArrayResize(Variable,3);
ArrayFree(Variable);
ArrayResize(Variable,0);
A liberação do array pode ser útil quando ele não é mais necessário
para a operação de programa adicional (isso reduz a quantidade de
memória utilizada pelo programa) ou no início de uma função de
execução (caso o array seja utilizado para coleta de dados).
bool dynamicArray=ArrayIsDynamic(Variable);
Inicialização do array
Às vezes é necessário preencher um array com valores
imediatamente após a sua declaração. Imagine que você deseja
criar diversos botões do mesmo tipo e organizá-los em uma linha,
sendo que cada botão tem o seu próprio texto. É aqui que se
observam as grandes vantagens dos arrays. Não há necessidade de
copiar o código para cada botão (poderá haver dúzias deles), e
também não há necessidade de chamar a mesma função
repetidamente. Você pode criar o número necessário de botões
através da iteração sobre o array em um circuito, tendo escrito o
código de chama da função apenas uma vez.
https://www.mql5.com/pt/articles/567 3/19
07/05/2019 Fundamentos básicos da programação MQL5: arrays - Artigos MQL5
ArrayInitialize(Variable,1);
double Variable[4];
ArrayFill(Variable,0,2,1);
ArrayFill(Variable,2,2,2);
//--- forwards
for(int i=0; i<SIZE; i++){
// some manipulations on the Variable[i] element
}
//--- backwards
for(int i=SIZE-1; i>=0; i--){
// some manipulations on the Variable[i] element
}
https://www.mql5.com/pt/articles/567 4/19
07/05/2019 Fundamentos básicos da programação MQL5: arrays - Artigos MQL5
Arrays multidimensionais
Até agora, apenas consideramos arrays unidimensionais. Eles
podem ser representados da seguinte forma:
double Variable[10][3];
double Variable[10][10][10];
Esta página utiliza cookies. Saiba mais sobre nossa Política de cookies.
https://www.mql5.com/pt/articles/567 5/19
07/05/2019 Fundamentos básicos da programação MQL5: arrays - Artigos MQL5
double Variable[][3][3];
double Variable[][3][3];
ArrayResize(Variable,3);
int Size = ArraySize(Variable);
double Variable[][3][3];
ArrayResize(Variable,3);
int Elements=ArrayRange(Variable,1)*ArrayRange(Variab
int Size=ArraySize(Variable)/Elements;
Esta página utiliza cookies. Saiba mais sobre nossa Política de cookies.
Podemos torná-lo mais universal:
https://www.mql5.com/pt/articles/567 6/19
07/05/2019 Fundamentos básicos da programação MQL5: arrays - Artigos MQL5
Neste ponto, você pode pensar que seria bom criar uma função
para esse cálculo. Infelizmente, isso não é possível, visto que um
array aleatório não pode ser transformado em função. Ao declarar
o argumento de uma função, você precisa especificar claramente o
número de elementos em todas as dimensões do array exceto a
primeira, o que tornaria sem sentido uma função desse tipo. Esses
cálculos são melhores e mais facilmente feitos na inicialização do
programa. Ao declarar um array, é aconselhável utilizar constantes
que determinam tamanhos de dimensões:
#define SIZE1 3
#define SIZE2 3
#define TOTAL SIZE1*SIZE2
double Variable[3][3];
double Variable[][3][3]={
{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
},
{
{10, 20, 30},
{40, 50, 60},
{70, 80, 90}
},
{
{100, 200, 300},
{400, 500, 600},
{700, 800, 900}
}
};
https://www.mql5.com/pt/articles/567 7/19
07/05/2019 Fundamentos básicos da programação MQL5: arrays - Artigos MQL5
array unidimensional:
ArrayInitialize(Variable,1);
double var[3][3][3];
ArrayFill(Variable,0,9,1);
ArrayFill(Variable,9,9,10);
ArrayFill(Variable,18,9,100);
int x=1;
Func(x);
int x=1;
Func(x);
https://www.mql5.com/pt/articles/567 8/19
07/05/2019 Fundamentos básicos da programação MQL5: arrays - Artigos MQL5
double var[][3][3];
#define SIZE1 3
#define SIZE2 3
double Var[][SIZE1][SIZE2];
Esta página utiliza cookies. Saiba mais sobre nossa Política de cookies.
https://www.mql5.com/pt/articles/567 9/19
07/05/2019 Fundamentos básicos da programação MQL5: arrays - Artigos MQL5
class CDynamicArray
{
private:
int m_ChunkSize; // Chunk size
int m_ReservedSize; // Actual size
int m_Size; // Number of ac
public:
double Element[];
// The array pr
// so that we c
//+----------------------------------------------
//| Constructor
//+----------------------------------------------
void CDynamicArray(int ChunkSize=1024)
{
m_Size=0; // Number
m_ChunkSize=ChunkSize; // Chunk
m_ReservedSize=ChunkSize; // Actual
ArrayResize(Element,m_ReservedSize); // Prepar
}
//+----------------------------------------------
//| Function for adding an element at the end o
//+----------------------------------------------
void AddValue(double Value)
{
m_Size++; // Increase the number of active elem
if(m_Size>m_ReservedSize)
{ // The required number is bigger than the
m_ReservedSize+=m_ChunkSize; // Calculate t
ArrayResize(Element,m_ReservedSize); // Inc
}
Element[m_Size-1]=Value; // Add the value
}
//+----------------------------------------------
//| Function for getting the number of active e
//+----------------------------------------------
int Size()
{
return(m_Size);
}
};
int n=50000;
Esta página utiliza cookies. Saiba mais sobre nossa Política de cookies.
double ar[];
https://www.mql5.com/pt/articles/567 11/19
07/05/2019 Fundamentos básicos da programação MQL5: arrays - Artigos MQL5
CDynamicArray da;
https://www.mql5.com/pt/articles/567 12/19
07/05/2019 Fundamentos básicos da programação MQL5: arrays - Artigos MQL5
ar[0]=3; // Set the value for the new array element
Alert(ar[0]," ",ar[1]," ",ar[2]); // Print array val
bool series=ArrayIsSeries(ar);
Cópia de arrays
A maneira mais fácil de copiar é realizar uma iteração do array em
um circuito e copiar elemento a elemento, de um array a outro.
Entretanto, há uma função especial no MQL5 que permite copiar
arrays - ArrayCopy():
double ar1[]={1,2,3};
double ar2[];
ArrayCopy(ar2,ar1);
https://www.mql5.com/pt/articles/567 13/19
07/05/2019 Fundamentos básicos da programação MQL5: arrays - Artigos MQL5
double ar1[]={1,2,3,4,5};
ArrayCopy(ar1,ar1,1,2);
double ar1[]={1,2,3,4,5};
ArrayCopy(ar1,ar1,2,1);
Ordenar um array
Um array pode ser ordenado através da função ArraySort():
double ar[]={1,3,2,5,4};
ArraySort(ar);
Pesquisa binária
Para realizar uma pesquisa binária, utilizamos a função
ArrayBsearch(). Essa função apenas funciona corretamente com
arrays ordenados. A pesquisa binária recebe esse nome devido ao
fato de que o algoritmo divide continuamente um array em duas
partes. O algoritmo primeiramente compara o valor alvo ao valor
do elemento do meio do array, determinando assim a metade que
contém o elemento alvo - o sub-array à esquerda ou o sub-array à
direita. Em seguida, ele compara o valor alvo ao valor do elemento
do meio
Esta página utiliza cookies. dos
Saiba sub-arrays
mais e assim
sobre nossa por diante.
Política de cookies.
https://www.mql5.com/pt/articles/567 14/19
07/05/2019 Fundamentos básicos da programação MQL5: arrays - Artigos MQL5
double ar[]={1,2,3,4,5};
int index=ArrayBsearch(ar,3);
double ar[]={3,2,1,2,3,4,5,4,3};
int MaxIndex=ArrayMaximum(ar);
int MinIndex=ArrayMinimum(ar);
double MaxValue=ar[MaxIndex];
double MinValue=ar[MinIndex];
int MaxIndex=ArrayMaximum(ar,5,3);
int MinIndex=ArrayMinimum(ar,5,3);
//+-------------------------------------------------
//| Base class
//+-------------------------------------------------
class CArrayBase
{
public:
CArrayBase *D[];
double V[];
void ~CArrayBase()
{
for(int i=ArraySize(D)-1; i>=0; i--)
{
if(CheckPointer(D[i])==POINTER_DYNAMIC)
{
delete D[i];
}
}
}
};
//+-------------------------------------------------
//| Child class 1
//+-------------------------------------------------
class CDim : public CArrayBase
{
public:
void CDim(int Size)
{
ArrayResize(D,Size);
}
};
//+-------------------------------------------------
//| Child class 1
//+-------------------------------------------------
class CArr : public CArrayBase
{
public:
void CArr(int Size)
Esta página utiliza cookies. Saiba{mais sobre nossa Política de cookies.
https://www.mql5.com/pt/articles/567 16/19
07/05/2019 Fundamentos básicos da programação MQL5: arrays - Artigos MQL5
ArrayResize(V,Size);
}
};
A.D[1].V[0]=10;
A.D[1].V[1]=20;
A.D[2].V[0]=100;
A.D[2].V[1]=200;
A.D[2].V[2]=300;
//--- Check the values
Alert(A.D[0].V[0]);
Alert(A.D[1].V[0]);
Alert(A.D[1].V[1]);
Alert(A.D[2].V[0]);
Alert(A.D[2].V[1]);
Alert(A.D[2].V[2]);
//---
Esta página utiliza cookies. Saiba mais sobre nossa Política de cookies.
delete A; // Delete the object
https://www.mql5.com/pt/articles/567 17/19
07/05/2019 Fundamentos básicos da programação MQL5: arrays - Artigos MQL5
Conclusão
Este artigo abordou todas as funções padrão disponíveis em MQL5
para trabalhar com arrays. Revisamos as peculiaridades e algumas
das técnicas mais importantes para manejo de arrays. A linguagem
MQL5 oferece um total de 15 funções, sendo que algumas delas são
de fundamental importância, enquanto outras podem ficar
praticamente sem uso, exceto em casos em que você precisa
solucionar um problema incomum. As funções podem ser
organizadas por importância e frequência de uso da seguinte
forma:
https://www.mql5.com/pt/articles/567 18/19
07/05/2019 Fundamentos básicos da programação MQL5: arrays - Artigos MQL5
Aviso: Todos os direitos a estes materiais são reservados a MQL5 Ltd. A cópia ou
Esta página utiliza cookies. Saiba mais sobre nossa Política de cookies.
https://www.mql5.com/pt/articles/567 19/19