Discussão do artigo "Como chamar indicadores no MQL5" - página 2

 

Para mim, ele não permite que eu compile o arquivo.

Não sei se há alguma ideia do que está acontecendo.

Obrigado,

Jordi

 
Obrigado pelo excelente trabalho!
 

Obrigado!

Abaixo está um exemplo simples que eu criei enquanto brincava.

Se estiver errado, corrija-me e eu o corrigirei.

O que acho estranho é que os valores não parecem corresponder a uma média móvel simples no gráfico.

################### Em um script

int period = 21; // A média móvel de 21 barras
int sampleSize = 100; /Esse é o número de barras de dados que você deseja obter
int handle = iCustom(Symbol(),0, "Examples\\Custom Moving Average",
period,// Período
0, // Offset
MODE_SMA, // Método de cálculo
PRICE_CLOSE // Cálculo com base nos preços de fechamento
);


void OnTick()
{

// Esse é o array para o qual as médias móveis serão copiadas.
// Cada item aqui é um valor de média móvel
// O primeiro item nesse array (item na posição 0) é o mais recente
// O último item é o último item no array ArraySize() - 1
double movingAverageValues[];

ArraySetAsSeries(movingAverageValues, true);
if (CopyBuffer(handle,0,0,sampleSize,movingAverageValues) < 0){Print("CopyBufferMA1 error =",GetLastError());}

double currentMovingAverage = movingAverageValues[0];

double earliestMovingAverage = movingAverageValues[ArraySize(movingAverageValues) - 1];


################################# Em um EA (OBSERVAÇÃO: o OnInit e o OnTick)

int OnInit(){

int period = 21; // A média móvel de 21 barras

int sampleSize = 100; //Esse é o número de barras de dados que você deseja obter
int handle = iCustom(Symbol(),0, "Examples\\Custom Moving Average",
period, // Período
0, // Offset
MODE_SMA, // Método de cálculo
PRICE_CLOSE // Cálculo com base nos preços de fechamento
);

}

OnTick()
{

// Esta é a matriz para a qual as médias móveis serão copiadas.
// Cada item aqui é um valor de média móvel
// O primeiro item dessa matriz (item na posição 0) é o mais recente
// O último item é o último item da matriz ArraySize() - 1
double movingAverageValues[];

ArraySetAsSeries(movingAverageValues, true);
if (CopyBuffer(handle,0,0,sampleSize,movingAverageValues) < 0){Print("CopyBufferMA1 error =",GetLastError());}

double currentMovingAverage = movingAverageValues[0];

double earliestMovingAverage = movingAverageValues[ArraySize(movingAverageValues) - 1];

}

 
Great article
 
Sim... é mais fácil inventar seu próprio indicador e incorporá-lo ao código do robô do que codificar essas alças todas as vezes... tédio