Declarando Variáveis
Variáveis devem ser declaradas antes de serem usadas. Nomes únicos são usados para identificar variáveis. Para declarar uma variável, você deve especificar o seu tipo e um único nome. Declaração de variável não é um operador.

Os tipos simples são:

char, short, int, long, uchar, ushort, uint, ulong — inteiros;
color — inteiro representando a cor-RGB (red, green, blue);
datetime — a data e hora, um inteiro sem sinal (unsigned) contendo o número de segundos desde a 0 hora de 1 de Janeiro de 1970;
bool — valores booleanos true e false;
double — número de ponto flutuante de dupla precisão;
float — número de ponto flutuante de precisão simples;
string — strings de caractere.
Exemplos:

string szInfoBox;
int nOrders;
double dSymbolPrice;
bool bLog;
datetime tBegin_Data = D'2004.01.01 00:00';
color cModify_Color = C'0x44,0xB9,0xE6';

Tipos compostos ou complexos:

Estruturas são tipos de dados compostos construídos usando outros tipos.

struct MyTime
{
int hour; // 0-23
int minute; // 0-59
int second; // 0-59
};
...
MyTime strTime; // Variável previamente declarada da estrutura MyTime

Não se pode declarar variáveis do tipo estrutura até que se declare a estrutura.

Arrays

Array é uma seqüência indexada de dados de tipos idênticos:

int a[50]; // Array de uma dimensão de 50 inteiros.
double m[7][50]; // Array de duas dimensões de sete arrays,
// cada um deles constituído de 50 números.
MyTime t[100]; // Array contendo elementos como MyTime

Somente um inteiro pode ser um índice de array. Não são permitidos arrays com mais que quatro dimensões. A numeração de elementos de um array começa com 0. O último elemento de um array de uma dimensão tem o número do índice que é 1 a menos que o tamanho do array. Isso significa que chamar pelo último elemento de um array constituído de 50 aparecerá como a[49]. O mesmo acontece a arrays multidimensionais: Um dimensão é indexada de 0 ao tamanho da dimensão menos 1. O último elemento de um array de duas dimensões do exemplo aparecerá como m[6][49].

Arrays estáticos não podem ser representados como séries de tempo, isto é, a funçãoArraySetAsSeries(), que defini o acesso aos elementos de um array do fim para o começo, não pode ser aplicado a eles. Se você desejar ter acesso a um array da mesma forma que uma série de tempo, use o objeto de array dinâmico.

Se houver uma tentativa de acesso fora da faixa do array, a execução do subsistema gerará um erro crítico e o programa será interrompido.

Especificadores de Acesso
Especificadores de acesso definem como o compilador pode acessar variáveis, membros de estruturas ou classes.

O especificador const declara uma variável como uma constante, e não permite modificar esta variável durante o tempo de execução. Uma inicialização simples de uma variável é permitida ao declará-la.

Exemplo:

int OnCalculate (const int rates_total, // tamanho do array price[]
const int prev_calculated, // barras tratadas na chamada anterior
const int begin, // a partir de onde começam os dados significativos
const double& price[] // array a ser calculado
);

Para acessar membros de estruturas e classes use os seguintes qualificadores:

public — permite acesso irrestrito às variáveis ou métodos da classe
protected — permite acesso a partir dos métodos desta classe, bem como a partir dos métodos de classes publicamente herdadas. Outro acesso é impossível;
private — permite acesso às variáveis e métodos da classe somente a partir dos métodos da mesma classe.
virtual — aplica-se apenas a métodos de classe (não a métodos de estrutura) e diz ao compilador que este método deve se colocado na tabela de funções virtuais da classe.
Classes de Armazenamento
Existem três classes de armazenamento: static, input e extern. Estes modificadores de classe de armazenamento explicitamente indicam ao compilador que as variáveis correspondentes estão distribuídas em uma área pré-alocada de memória, que é chamada de global pool. Além disso, estes modificadores indicam um processamento especial dos dados da variável. Se uma variável declarada em nível local não for uma variável estática, a memória para tal variável é alocada automaticamente em uma pilha de programa. A liberação de memória alocada para um array não estático (non-static) é também realizada automaticamente quando se passa além da área de visibilidade do bloco em que o array está declarado.