Diskussion zum Artikel "Wie man in MQL5 Indikatoren aufruft" - Seite 2

 

Bei mir lässt es mich die Datei nicht kompilieren.

Ich weiß nicht, ob es eine Idee gibt, was los ist.

Danke!

Jordi

 
Vielen Dank für die großartige Arbeit!
 

Danke!

Im Folgenden finden Sie ein einfaches Beispiel, das ich beim Herumspielen zusammengestellt habe.

Wenn es falsch ist, korrigieren Sie mich bitte und ich werde es ändern.

Was ich seltsam finde, ist, dass die Werte nicht mit einem einfachen gleitenden Durchschnitt im Diagramm übereinstimmen.

################### In einem Skript

int period = 21; // Der gleitende Durchschnitt von 21 Balken
int sampleSize = 100; //Das ist die Anzahl der Balken der Daten, die Sie abrufen möchten
int handle = iCustom(Symbol(),0, "Examples\\Custom Moving Average",
Periode,// Zeitraum
0, // Versatz
MODE_SMA, // Berechnungsmethode
PRICE_CLOSE // Berechnung auf Basis der Schlusskurse
);


void OnTick()
{

// Dies ist das Array, in das Ihre gleitenden Durchschnitte kopiert werden.
// Jedes Element hier ist ein gleitender Durchschnittswert
// Das erste Element in diesem Array (Element an Position 0) ist das aktuellste
// Das letzte Element ist das letzte Element im 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];


################################# In einem EA (HINWEIS: die OnInit und OnTick)

int OnInit(){

int period = 21; // Der gleitende Durchschnitt von 21 Balken

int sampleSize = 100; //Das ist die Anzahl der Balken der Daten, die Sie abrufen möchten
int handle = iCustom(Symbol(),0, "Examples\\Custom Moving Average",
period, // Zeitraum
0, // Versatz
MODE_SMA, // Berechnungsmethode
PRICE_CLOSE // Berechnung auf Schlusskursen
);

}

OnTick()
{

// Dies ist das Array, in das Ihre gleitenden Durchschnitte kopiert werden.
// Jedes Element hier ist ein gleitender Durchschnittswert
// Das erste Element in diesem Array (Element an Position 0) ist das aktuellste
// Das letzte Element ist das letzte Element im 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];

}

 
Großartiger Artikel
 
Ja... es ist einfacher, Ihren eigenen Indikator zu erfinden und ihn in den Robotercode einzubauen, als diese Griffe jedes Mal zu programmieren... Langeweile