
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Ich konnte nicht antworten (ich war verreist). Posten Sie den Code, den Sie analysieren müssen, um über eine Sache zu sprechen.
ZS In diesem Zickzack war kein Fehler, sondern ein Tippfehler (im Vergleich zum Code in MT3), ich fand nur diesen Tippfehler und korrigierte nichts anderes.
Ich habe inzwischen eine große Anzahl dieser oder anderer Bearbeitungen angehäuft. Sie funktionieren recht gut. Der erste Strahl - derjenige, der vom Null-Balken oder einem der ersten Balken ausgeht - versagt jedoch mit Fehlern in den Funktionen zur Identifizierung von Extremen. Und der Indikator arbeitet unstabil.
//+------------------------------------------------------------------+
//| Benutzerdefinierter gleitender Durchschnitt.mq4 |
//| Copyright © 2005, MetaQuotes Software Corp.
//| https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#Eigenschaftslink "https://www.metaquotes.net/
#property indicator_chart_window
#Eigenschaft indicator_buffers 1
#property indicator_color1 Rot
//---- Indikatorparameter
extern intDepth=12;
extern inttern ExtDeviation=5;
extern inttern ExtBackstep=3;
//---- Indikatorpuffer
double ExtMapBuffer[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Benutzerdefinierte Initialisierungsfunktion für Indikatoren |
//+------------------------------------------------------------------+
int init()
{
IndikatorPuffer(2);
//---- Zeichnungseinstellungen
SetIndexStyle(0,DRAW_SECTION);
//---- Zuordnung von Indikatorpuffern
SetIndexBuffer(0,ExtMapBuffer);
SetIndexPuffer(1,ExtMapPuffer2);
SetIndexEmptyValue(0,0.0);
//---- Indikator Kurzbezeichnung
IndicatorShortName("ZigZag("+ExtDepth+", "+ExtDeviation+", "+ExtBackstep+")");
//---- Initialisierung abgeschlossen
zurück(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int shift,back,lasthighpos,lastlowpos;
double val,res;
double curlow,curhigh,lasthigh,lastlow;
for(shift=Bars-ExtDepth; shift>=0; shift--)
{
val=Low[Lowest(NULL,0,MODE_LOW,ExtDepth,shift)];
if(val==lastlow) val=0.0;
sonst
{
lastlow=val;
if((Low[shift]-val)>(ExtDeviation*Point)) val=0.0;
sonst
{
for(back=1; back<=ExtBackstep; back++)
{
res=ExtMapBuffer[shift+back];
if((res!=0)&&(res>val)) ExtMapBuffer[shift+back]=0.0;
}
}
}
ExtMapBuffer[shift]=val;
//--- hoch
val=High[Highest(NULL,0,MODE_HIGH,ExtDepth,shift)];
if(val==lasthigh) val=0.0;
sonst
{
lasthigh=val;
if((val-High[shift])>(ExtDeviation*Point)) val=0.0;
sonst
{
for(back=1; back<=ExtBackstep; back++)
{
res=ExtMapBuffer2[shift+back];
if((res!=0)&&(res<val)) ExtMapBuffer2[shift+back]=0.0;
}
}
}
ExtMapBuffer2[shift]=val;
}
// endgültiger Schnitt
lasthigh=-1; lasthighpos=-1;
lastlow=-1; lastlowpos=-1;
for(shift=Bars-ExtDepth; shift>=0; shift--)
{
curlow=ExtMapBuffer[shift];
curhigh=ExtMapBuffer2[shift];
if((curlow==0)&&(curhigh==0)) weiter;
//---
if(curhigh!=0)
{
if(lasthigh>0)
{
if(lasthigh<curhigh) ExtMapBuffer2[lasthighpos]=0;
sonst ExtMapBuffer2[shift]=0;
}
//---
if(lasthigh<curhigh || lasthigh<0)
{
lasthigh=curhigh;
lasthighpos=shift;
}
lastlow=-1;
}
//----
if(curlow!=0)
{
if(letzter Wert>0)
{
if(lastlow>curlow) ExtMapBuffer[lastlowpos]=0;
sonst ExtMapBuffer[shift]=0;
}
//---
if((curlow<lastlow)||(lastlow<0))
{
lastlow=curlow;
lastlowpos=shift;
}
lasthigh=-1;
}
}
for(shift=Bars-1; shift>=0; shift--)
{
if(shift>=Bars-ExtDepth) ExtMapBuffer[shift]=0.0;
sonst
{
res=ExtMapBuffer2[shift];
if(res!=0.0) ExtMapBuffer[shift]=res;
}
}
}
Bei anderen Zeitrahmen funktioniert es, bei anderen nicht. Bei mir scheint es zu funktionieren. Ja, und es ist nicht mein Code - aus dem Standardangebot scheint es zu sein. Zumindest habe ich das in allen Versionen von MT.
In welchen Zeitrahmen er nicht angezeigt wird. BC - Brezan.
GBP-CHF
Es wird nicht auf m1 und m15 angezeigt. Sie wird auf allen anderen Seiten angezeigt.
EUR-USD
Es wird nicht angezeigt - m1, m5
AUD-USD - alle werden angezeigt.
Ich weiß nicht, warum es so aussieht.
Vielleicht haben Sie ja den Code, den Slava im Sommer überarbeitet hat. Aber seine Überarbeitung hat mir nicht gefallen. Einige Probleme wurden dort nicht gelöst.
================
GODZILLA (Nikolay) hat gute Arbeit geleistet. Aber es hat nur zwei Probleme gelöst.
1) Neuberechnung bei jedem Tick. Er hat sie drastisch reduziert
2) Algorithmus zur Entfernung von Höckern hinzugefügt. Buckel entstehen hauptsächlich durch das Vorhandensein von Minimum und Maximum auf einem Balken. Der Zickzack-Algorithmus hinterlässt nur Hochsignale. Dies führt häufig dazu, dass mehrere Höchststände hintereinander erreicht werden.
Ich habe einige Varianten der Indikatorverbesserung durch GODZILL behoben. Die in der Luft hängenden Knicke sind beseitigt worden. Ich vermute jedoch, dass die fehlerhafte Funktionsweise der Extremumssuche in den ersten beiden Strahlen noch immer besteht. Wegen dieses Problems habe ich dieses Thema hier aufgeworfen.
Vielleicht funktioniert die Suchfunktion aber auch richtig, aber es gibt keine klare Beschreibung dieser Funktion. Aus diesem Grund wird er falsch verwendet.
Ich kann es noch nicht herausfinden. Es scheint mir, es sollte etwas wie ..
Hier wird der "zusätzliche" alte Code auskommentiert. Auch wenn ich die Zickzack-Idee noch nicht ganz verstehe. In jedem Fall führt dieser Code nicht zu verhedderten Extrema. Wenn diese Code-Variante passt, aber nicht von mir erfunden wurde :), entschuldige ich mich für den fehlenden Hinweis.
Na gut. Vergessen Sie den Zickzackkurs. Die Frage bezieht sich nicht auf den Zickzackkurs. Die Frage ist, dass die Funktionen der MQ4-Sprache stabil und vorhersehbar funktionieren sollten.
Und das ist das HAUPTPROBLEM. Die Suchfunktionen werden nicht nur im ZigZag verwendet. Aber auch bei vielen anderen Indikatoren.
Der Zickzackkurs ist ein Sonderfall. Aber es hilft, das Problem zu verdeutlichen. Viele Indikatoren beruhen auf Zickzacklinien. Der Zickzackkurs funktioniert nicht nachhaltig. Das ist für niemanden ein Geheimnis. Viele Menschen müssen ihre Zeit damit verbringen, ihre eigenen Zickzacklinien für ihre eigenen Bedürfnisse zu programmieren. Wie viel Zeit wird verschwendet. Vergeblich. Weil man die Ursache des Problems nicht verstanden hat.
Das sind goldene Worte. Sie sind nicht der erste, der das sagt. Nichtsdestotrotz sind die Ideen hinter dem Zickzack und teilweise in diesem Code umgesetzt sehr gut. Diese Ideen müssen in die Tat umgesetzt werden.
Wenn wir während der Berechnung des Indikators das Fenster verschieben (shift,shift+ExtDepth), kann das Auftreten eines neuen Extremums sowohl mit dem neuen Preis als auch mit der Tatsache zusammenhängen, dass das alte Extremum das Fenster verlassen hat. Dieser Punkt muss behandelt werden. Zu diesem Zweck enthält meine Einfügung die Zeile if(highpos!=shift) val=0.0; . Wie das im Standardcode gemacht wird, verstehe ich nicht. Nach den fehlenden Extrema in meiner Version zu urteilen, wird dies entweder falsch oder gar nicht gemacht.
Und was genau ist die Instabilität des Zickzackkurses?