Discussione sull’articolo "Come chiamare gli indicatori in MQL5" - pagina 2

 

A me non permette di compilare il file.

Non so se c'è qualche idea su cosa stia succedendo.

Grazie,

Jordi

 
Grazie per l'enorme lavoro svolto!
 

Grazie!

Di seguito è riportato un semplice esempio che ho messo insieme giocando.

Se è sbagliato, vi prego di correggermi e lo modificherò.

Quello che trovo strano è che i valori non sembrano corrispondere a una semplice media mobile sul grafico.

################### In uno script

int period = 21; // La media mobile a 21 barre
int sampleSize = 100; /Questo è il numero di barre di dati che si desidera recuperare
int handle = iCustom(Symbol(),0, "Examples\Custom Moving Average",
periodo,// Periodo
0, // Offset
MODE_SMA, // Metodo di calcolo
PRICE_CLOSE // Calcolo sui prezzi di chiusura
);


void OnTick()
{

// Questo è l'array in cui verranno copiate le medie mobili.
// Ogni elemento è un valore di media mobile
// Il primo elemento di questo array (elemento in posizione 0) è il più recente
// L'ultimo elemento è l'ultimo elemento dell'array ArraySize() - 1
double movingAverageValues[];

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

double currentMovingAverage = movingAverageValues[0];

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


################################# In un EA (NOTA: OnInit e OnTick)

int OnInit(){

int period = 21; // La media mobile a 21 barre

int sampleSize = 100; /Questo è il numero di barre di dati che si desidera recuperare
int handle = iCustom(Symbol(),0, "Examples\Custom Moving Average",
period, // Periodo
0, // Offset
MODE_SMA, // Metodo di calcolo
PRICE_CLOSE // Calcolo sui prezzi di chiusura
);

}

OnTick()
{

// Questo è l'array in cui verranno copiate le medie mobili.
// Ogni elemento è un valore di media mobile
// Il primo elemento di questo array (elemento in posizione 0) è il più recente
// L'ultimo elemento è l'ultimo elemento dell'array ArraySize() - 1
double movingAverageValues[];

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

double currentMovingAverage = movingAverageValues[0];

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

}

 
Ottimo articolo
 
Sì... è più facile inventare un proprio indicatore e inserirlo nel codice del robot che codificare ogni volta queste maniglie... tedio