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());}
################################# 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());}
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
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!
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