Diskussion zum Artikel "Gleitender Durchschnitt in MQL5 von Anfang an: Schlicht und einfach"

 

Neuer Artikel Gleitender Durchschnitt in MQL5 von Anfang an: Schlicht und einfach :

Anhand einfacher Beispiele werden wir die Grundsätze der Berechnung gleitender Durchschnitte untersuchen und lernen, wie man die Berechnung von Indikatoren, einschließlich gleitender Durchschnitte, optimieren kann.

Wir haben die Grundsätze der Berechnung der wichtigsten Arten von gleitenden Durchschnitten überprüft, die in den Einstellungen des Standardindikators Gleitender Durchschnitt im Client-Terminal verfügbar sind. Die im Artikel vorgestellten Berechnungen können sowohl in Indikatoren mit Berechnungsoptimierung (die ebenfalls im Artikel gezeigt wird) verwendet werden, während die vorgestellten Codes als unabhängige Berechnung von Durchschnittswerten eines sequenziellen Datensatzes in Ihren Programmen verwendet werden können.

Die obige Abbildung zeigt den Unterschied zwischen gleitenden Durchschnitten mit demselben Berechnungszeitraum (10), aber unterschiedlichen Typen:

Rot - SMA, grün - EMA, gold - SMMA, blau - LWMA.

Es wird deutlich, dass der geglättete gleitende Durchschnitt weniger anfällig für den Einfluss kleiner Kursschwankungen ist als die anderen und den allgemeinen Trend der Kursbewegung deutlicher anzeigt.
Exponentielle und linear gewichtete gleitende Durchschnitte reagieren besser auf Marktschwankungen, da sie bei ihren Berechnungen den aktuellen Daten das größte Gewicht beimessen.

Autor: Artyom Trishkin

 

Danke für den guten Artikel. Aber ich kann nicht umhin, ihn zu kritisieren. Ich bin heute in so einer Stimmung.

Der Artikel befasst sich weniger mit dem Programmieren als mit Formeln und der Optimierung von Berechnungen. Ich denke aber, dass er für Programmieranfänger und diejenigen, die sich erst seit kurzem mit den Möglichkeiten der Verwendung verschiedener Schleifenoperatoren befassen, nützlicher ist. Ich hoffe, dass die nächsten Artikel dies widerspiegeln werden. Immerhin gibt es mindestens 3 Schleifenoperatoren in MQL5. Und jeder von ihnen kann verwendet werden, um einen Indikator zu erstellen.

 

nützliche Informationen auf einmal und an einem Ort,

und schließlich die Schleife i++

 

Ein guter Artikel für Anfänger, der den Code hinter den 4 Standard-MQ-Durchschnittswerten zeigt.

Sie sollten auch die Bedeutung einer einfachen Optimierung und ihre Auswirkungen erörtern, da 99 % der Ticks zwischen den Taktwechseln auftreten. Die Minimierung der Berechnungen zwischen den einzelnen Taktwechseln führt zu einer viel höheren Effizienz auf Kosten einer geringen Komplexität. Wenn Sie also die Basiswerte einmal beim Taktwechsel berechnen und die Werte speichern, wird die Berechnungszeit erheblich verkürzt. Bei einem SAM beispielsweise ist die Standardberechnung für N Perioden:

Betrachten Sie .

double sm=0;

for(int bar=0;bar<N;bar++) sum+=Close[CurrentBar-bar];

SMA=sum/N;


gegen

statisch double partialsum;

double sum=0;


Beim Barwechsel{

partialsum=0;

for(int bar=0;bar<N-1;bar++) partialsum+=Close[CurrentBar-bar];

partialsum/=(N-1);

}

SMA =partialsum +Close[CurrentBar]/N;

Bei 1000 Ticks in einer Balkenperiode und N=10 spart diese Optimierung etwa 90.000 Berechnungen von sum+=Close[EndingBar-bar] für jeden Balken. Wenn Ihr Chart 1.000 Balken enthält, belaufen sich die Einsparungen auf über 90 Millionen nicht benötigte Berechnungen. Bei modernen CPUs sind die durch dieses Beispiel erzielten Einsparungen trivial und wahrscheinlich nicht spürbar, aber sie summieren sich mit der Zeit, wenn Ihre Programme in Expert Advisors komplexer werden.

Die Bedeutung der manuellen Optimierung liegt darin, dass Sie bessere Programmiertechniken entwickeln, die Ihnen bei zukünftigen Projekten zur zweiten Natur werden.

 

Vielen Dank für Ihren Artikel, aber es ist nicht klar, warum ich nach der Verwendung der Funktion OnCalculate() die Transaktionsfunktion OrderSend() nicht mehr verwenden kann. Ich weiß nicht, wie der Autor dieses Problem gelöst hat, ich habe keine andere Wahl, als die Indikatoren in der Standardbibliothek auf folgende Weise zu verwenden:

#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

#include <Indicators\Trend.mqh>
CiMA ma;

//+------------------------------------------------------------------+
//| Skript Programmstartfunktion &nbsp Skript Programmstartfunktion
//+------------------------------------------------------------------+
int OnInit(){ 
    ma.DeleteFromChart(ChartID(), 0);
    ma.Create(_Symbol, PERIOD_CURRENT, 14, 0, MODE_SMA, PRICE_CLOSE);
    ma.AddToChart(PERIOD_CURRENT, 0);
    
    return INIT_SUCCEEDED; 
}

void OnTick(){ 
    ma.Refresh();
    double curMA = ma.Main(0);
    
    //Drucken("Aktueller MA-Wert:", maValue);
}