Hilfe bei der Codierung - Seite 38

 

...

Bei einem Indikator wäre die einzige Möglichkeit, dies zu tun, ihn in einer Endlosschleife zu halten, bis ein Ereignis (Tastatur, Maus, ...) erkannt wird.

Aber das würde auch bedeuten, dass die Ausführung der restlichen Terminalfunktionen gestoppt wird (das ist dasselbe wie bei einem fehlerhaften Indikator, der abstürzt und den Metatrader blockiert), also keine gute Lösung. Die Funktion, die normalerweise dafür verwendet wird (sleep), die die Ausführung von anderem Code erlaubt, während Ihr Code pausiert (das wäre die Zeit, in der Sie den Rest der Funktionen im Terminal die Arbeit erledigen lassen), ist in den Indikatoren deaktiviert, so dass sie nicht als Lösung verwendet werden kann

marley60:
Wenn ein Alarm ausgelöst wird, ertönt einmal ein "pling". Gibt es eine Möglichkeit, einen Alarmton abzuspielen, bis ich ihn stoppe? (Grund: Ich will kein einziges "Pling" hören, wenn ich auf der Toilette oder in der Küche bin). Ich habe den Alarmton durch ein Lied ersetzt, aber ich würde es vorziehen, eine Auswahl zwischen einmaligem Abspielen und Abspielen bis zum Stoppen zu haben (wie es in Tradestation war).
 

Frage zum Index

Hallo Mladen;

Ich habe gesehen, dass jemand einen Indikator wie Ind[3][0][1] aufruft, was bedeutet der erste und zweite definierte Index?

Vielen Dank im Voraus

kemal

 

Zickzack-Problem in EA

Hallo,

ich verwende den Standard Zigzag indy in meinem EA. Ich verwende den folgenden Code, um die Zigzag-Knoten zu bestimmen. Mir ist aufgefallen, dass der MT4 manchmal die Zigzag-Knoten aus dem falschen Zeitrahmen zurückgibt. Zum Beispiel, wenn ich versuche, H1 Zickzack-Knoten zu erhalten, MT4returns M15 Zickzack-Knoten Werte. Ist jemand schon einmal auf ein solches Problem gestoßen? Wenn Sie mehr über Zigzag und den möglichen Problembereich wissen, geben Sie mir bitte Bescheid.

Vielen Dank!

FFJason

Anmerkung: TF ist der Zeitrahmen, den ich mit verschiedenen Werten füttere, um Zickzack-Knoten aus verschiedenen Zeitrahmen zu erhalten. Irgendwie hat MT4 die Knotenwerte verwechselt, wenn ein bestimmter TF verwendet wird.

void vGetNode2(int TF,double& lwnd2[2],double& hgnd2[2])

{ int t=0; int p=0; int q=0; double nd2i;

for (i=0; i<=150; i++)

{ nd2i=iCustom(NULL,TF,"ZigZag",13,8,5,0,i);

if (nd2i==iLow(NULL,TF,i)) {if (p<=1) {lwnd2[p]=nd2i; p++;}}

if (nd2i==iHigh(NULL,TF,i)) {if (q<=1) {hgnd2[q]=nd2i; q++;}}

if (p==2 && q==2) break;

}

return;

}

 

Wie öffnet man eine neue Order nach S/L der vorherigen Order?

Öffnen Sie eine neue Order nach dem S/L der vorherigen Order.
Sehr geehrter Herr;

Ist jeder Körper wissen, das Programm für EA, um nach dem Schließen der Bestellung auf der Grundlage der S / L die neue Bestellung geöffnet ist?

Mit freundlichen Grüßen
 

...

Wahrscheinlich haben Sie einen Fall, in dem der ZigZag-Peak eines Zeitrahmens mit dem ZigZag-Peak eines anderen Zeitrahmens übereinstimmt (was kein ungewöhnlicher Fall ist, da nach Peaks gesucht wird). Was die Zeitrahmen anbelangt, so erhalten Sie mit diesem Code korrekte Zeitrahmenwerte. Vielleicht muss nur eine Änderung im Code vorgenommen werden, um sicherzustellen, dass Sie 4 letzte ZigZag-Werte erhalten, und dann würde der Code wie folgt aussehen

void vGetNode2(int TF,double& lwnd2[2],double& hgnd2[2])

{

int p=0; int q=0; int max=iBarShift(NULL,TF,0); double nd2i;

for (int i=0; i<max; i++)

{

nd2i=iCustom(NULL,TF,"ZigZag",13,8,5,0,i);

if (nd2i==iLow(NULL,TF,i)) {if (p<=1) {lwnd2[p]=nd2i; p++;}}

if (nd2i==iHigh(NULL,TF,i)) {if (q<=1) {hgnd2[q]=nd2i; q++;}}

if (p==2 && q==2) break;

}

return;

}

[/PHP]

As you can see only the loop end is changed from "150" to "Bars-1"

novalight:
Hi,

I use standard Zigzag indy in my EA. I use the following code to determine the zigzag nodes. I noticed that sometimes the MT4 returns the zigzag nodes from the wrong time frame. For example, when I try to get H1 zigzag nodes, MT4returns M15 zigzag node values. Has anyone come across such problem before? If you know more info about zigzag and the possible problem area, please advise.

Many thanks.

FFJason

note: TF is the time frame which I feed different values for getting zigzag nodes from different time frame. Somehow MT4 mixed up the node values when a specific TF is used.

[PHP]

void vGetNode2(int TF,double& lwnd2[2],double& hgnd2[2])

{ int t=0; int p=0; int q=0; double nd2i;

for (i=0; i<=150; i++)

{ nd2i=iCustom(NULL,TF,"ZigZag",13,8,5,0,i);

if (nd2i==iLow(NULL,TF,i)) {if (p<=1) {lwnd2[p]=nd2i; p++;}}

if (nd2i==iHigh(NULL,TF,i)) {if (q<=1) {hgnd2[q]=nd2i; q++;}}

if (p==2 && q==2) break;

}

return;

}

 

Zickzack-Problem in EA

Hallo Maiden,

vielen Dank für Ihre Hilfe.

Ich habe etwas über iBarShift gelesen, und Ihr iBarShift(NULL,TF,0) scheint die Gesamtzahl der Balken im Chart zu ermitteln. Bitte korrigieren Sie mich, wenn ich Ihre Absicht, iBarShift zu verwenden, missverstanden habe.

Ich habe mir die Fälle angesehen, in denen ZigZag falsche Knotenwerte zurückgegeben hat, und die Suchnummer (ich verwende 150) war nicht das Problem. Ich verstehe auch, dass einige Knoten für verschiedene Zeitrahmen gleich sind, aber die Fehler, die ich gefunden habe, waren zwei oder mehr Knoten und die entsprechenden Bar-Nummern zeigten alle auf einen anderen Zeitrahmen. Das war das Problem, das mich verwirrte.

Heute habe ich ein weiteres rätselhaftes Problem mit Zigzag gefunden. Ich verwende Alert, um die von der Routine zurückgegebenen Knoten anzuzeigen, und habe festgestellt, dass die Routine manchmal ein korrektes Knotenpaar und die zugehörige Balkenanzahl zurückgibt, aber der andere Knoten und die Balkenanzahl waren beide 0. Das ist wirklich seltsam. Ich habe die Routine weiter verbessert, indem ich mit den folgenden Codes sichergestellt habe, dass kein Knoten den Wert 0 hat. Ich hoffe nur, dass es nicht MT4 einen Herzschlag oder Stall zu überspringen, und werfen Müll zu meinem EA. Der Grund, warum ich das sage, ist, dass mein anderer EA, der Warnmeldungen anzeigt, wenn mein Programm versucht, SL und TP einzufügen, oder OP-Werte zu sammeln, und es geschah ziemlich oft, dass MT4 diese Schritte einfach überspringt und 0 Werte zurückgibt. Ich muss mein Programm verbessern, um auf diese Fälle zu achten und sicherzustellen, dass diese Aufgaben ordnungsgemäß ausgeführt werden.

Bitte um Rat. Ich bin mit meinen Kräften am Ende. Für Ihre Hilfe bin ich Ihnen sehr dankbar. Vielen Dank,

Novalight

int iGetNode4(int TF, double& lwnd4, double& hgnd4, int& lwnd4bar, int& hgnd4bar)

{ lwnd4=0; hgnd4=0; lwnd4bar=0; hgnd4bar=0; int t=0,p=0; //node 4 = arrow

for (i=0; i<=120; i++)

{ double lowi=iLow(NULL,TF,i); double highi=iHigh(NULL,TF,i);

if (iCustom(NULL,TF,"ZigZag",80,35,12,0,i)==lowi && lowi!=0) {if (t==0) {lwnd4=iLow(NULL,TF,i); lwnd4bar=i; t++; if(lwnd4==0) Alert(lwnd4);}}

if (iCustom(NULL,TF,"ZigZag",80,35,12,0,i)==highi && highi!=0) {if (p==0) {hgnd4=iHigh(NULL,TF,i); hgnd4bar=i; p++;if (hgnd4==0) Alert(hgnd4);}}

if (t==1 && p==1) break;

}

if (lwnd4bar<hgnd4bar) return(1); //current node 4 is a low node for Long

if (lwnd4bar>hgnd4bar) return(-1); //current node 4 is a high node for Short

return;

}

[/PHP]

mladen:
You probably have a case when the ZigZag peak of one time frame is the same as the ZigZag peak of another time frame (which is not an unusual case since they are looking for peaks). As far as time frames are concerned, you are getting correct time frame values with that code. Maybe just one change in the code has to be done in order to ensure that you get 4 last ZigZag values, and then the code would be like this

[PHP]void vGetNode2(int TF,double& lwnd2[2],double& hgnd2[2])

{

int p=0; int q=0; int max=iBarShift(NULL,TF,0); double nd2i;

for (int i=0; i<max; i++)

{

nd2i=iCustom(NULL,TF,"ZigZag",13,8,5,0,i);

if (nd2i==iLow(NULL,TF,i)) {if (p<=1) {lwnd2[p]=nd2i; p++;}}

if (nd2i==iHigh(NULL,TF,i)) {if (q<=1) {hgnd2[q]=nd2i; q++;}}

if (p==2 && q==2) break;

}

return;

}

As you can see only the loop end is changed from "150" to "Bars-1"
 

...

Was iBarShift(NULL,TF,0) betrifft: Ja, es gibt die gesamten Balken eines Zielzeitrahmens zurück. Aber die Schleife wird nicht so oft ausgeführt, sie wird existieren, sobald die letzten 4 ZigZag-Peaks gefunden wurden.

Stellen Sie sich Folgendes vor: Sie rufen die Funktion für einen Zeitrahmen auf und haben eine Grenze von 150 Balken für die Suche nach den letzten 4 Spitzen. Die Funktion erledigt die Aufgabe, und dann schauen Sie in einen anderen Zeitrahmen. Stellen Sie sich vor, dass der 4. Peak außerhalb der ersten 150 Balken liegt, nur um der Argumentation willen. Was dann passiert. Da Ihre Arrays nicht bereinigt wurden, sind einige Ergebnisse für den zuvor gesuchten Zeitrahmen noch vorhanden, da beim 150. Takt nicht alle 4 Spitzen gefunden wurden, und einige zuvor gefundene Spitzen sind noch vorhanden, da sie im aktuell gesuchten Zeitrahmen gefunden wurden.

Das war der Grund für das Hinzufügen dieses Codes: um sicherzustellen, dass tatsächlich die letzten 4 Spitzen gefunden werden. Manchmal dauert es 10 Takte, manchmal 1000 (es hängt ganz von ZigZag ab und ist keine feste Anzahl von Takten), aber es wird nicht "Takte" mal durchlaufen. Es werden nur die notwendigen Schleifen durchlaufen und es wird sichergestellt, dass alle 4 Peaks aus dem Zielzeitrahmen stammen.

Was die Verwechslung der Zeitrahmen betrifft, so glaube ich nicht, dass dies der Fall ist. Die Art und Weise, wie die Verlaufsdateien für die Zielzeitrahmen geöffnet werden (durch einfaches Hinzufügen der Minuten des Zielzeitrahmens zum Symbolnamen), macht es unmöglich, Daten aus 2 Zeitrahmen in einer einzigen Schleife zu lesen, wenn der Zeitrahmenparameter nicht geändert wird (in diesem Fall wird nur eine Verlaufsdatei geöffnet und es kann nicht auf Daten aus verschiedenen Zeitrahmen zugegriffen werden).

novalight:
Hallo Maiden,

Vielen Dank für Ihre Hilfe.

Ich habe etwas über iBarShift nachgelesen, und Ihr iBarShift(NULL,TF,0) scheint die Gesamtzahl der Balken im Chart zu ermitteln. Bitte korrigieren Sie mich, wenn ich Ihre Absicht der Verwendung von iBarShift missverstanden habe.

Ich habe mir die Fälle angesehen, in denen ZigZag falsche Knotenwerte zurückgegeben hat, und die Suchnummer (ich verwende 150) war nicht das Problem. Ich verstehe auch, dass einige Knoten für verschiedene Zeitrahmen gleich sind, aber die Fehler, die ich gefunden habe, waren zwei oder mehr Knoten und die entsprechenden Bar-Nummern zeigten alle auf einen anderen Zeitrahmen. Das war das Problem, das mich verwirrte.

Heute habe ich ein weiteres rätselhaftes Problem mit Zigzag gefunden. Ich verwende Alert, um die von der Routine zurückgegebenen Knoten anzuzeigen, und habe festgestellt, dass die Routine manchmal ein korrektes Knotenpaar und die zugehörige Balkenanzahl zurückgibt, aber der andere Knoten und die Balkenanzahl waren beide 0. Das ist wirklich seltsam. Ich habe die Routine weiter verbessert, indem ich mit den folgenden Codes sichergestellt habe, dass kein Knoten den Wert 0 hat. Ich hoffe nur, dass es nicht MT4 einen Herzschlag oder Stall zu überspringen, und werfen Müll zu meinem EA. Der Grund, warum ich das sage, ist, dass mein anderer EA, der Warnmeldungen anzeigt, wenn mein Programm versucht, SL und TP einzufügen, oder OP-Werte zu sammeln, und es geschah ziemlich oft, dass MT4 diese Schritte einfach überspringt und 0 Werte zurückgibt. Ich muss mein Programm verbessern, um auf diese Fälle zu achten und sicherzustellen, dass diese Aufgaben ordnungsgemäß ausgeführt werden.

Bitte um Rat. Ich bin mit meinen Kräften am Ende. Für Ihre Hilfe bin ich Ihnen sehr dankbar. Vielen Dank,

Novalight

int iGetNode4(int TF, double& lwnd4, double& hgnd4, int& lwnd4bar, int& hgnd4bar)

{ lwnd4=0; hgnd4=0; lwnd4bar=0; hgnd4bar=0; int t=0,p=0; //node 4 = arrow

for (i=0; i<=120; i++)

{ double lowi=iLow(NULL,TF,i); double highi=iHigh(NULL,TF,i);

if (iCustom(NULL,TF,"ZigZag",80,35,12,0,i)==lowi && lowi!=0) {if (t==0) {lwnd4=iLow(NULL,TF,i); lwnd4bar=i; t++; if(lwnd4==0) Alert(lwnd4);}}

if (iCustom(NULL,TF,"ZigZag",80,35,12,0,i)==highi && highi!=0) {if (p==0) {hgnd4=iHigh(NULL,TF,i); hgnd4bar=i; p++;if (hgnd4==0) Alert(hgnd4);}}

if (t==1 && p==1) break;

}

if (lwnd4bar<hgnd4bar) return(1); //current node 4 is a low node for Long

if (lwnd4bar>hgnd4bar) return(-1); //current node 4 is a high node for Short

return;

}

 

Zickzack-Problem in EA

Hallo Maiden,

Sie haben absolut Recht! Ich überprüfe meinen Code und festgestellt, dass 150 für große Zigzag unzureichend ist, und wenn nicht alle 4 Knoten gefunden werden, die gesamte Logik der Identifizierung, die Knoten kommt erste oder letzte wird haywire sein.

Zusammenfassend lässt sich sagen, dass es weder an Zigzag noch an MT4 liegt, sondern lediglich an meinem eigenen Fehler, eine zu kleine Suchnummer einzustellen. Ich danke Ihnen für Ihre Zeit, Geduld und vor allem Ihre Bereitschaft zu helfen ......

Machen Sie es gut .....

Novalight

mladen:
Was iBarShift(NULL,TF,0) betrifft: Ja, es gibt die Gesamtanzahl der Takte eines Zielzeitrahmens zurück. Aber die Schleife wird nicht so oft ausgeführt, sie existiert, sobald die letzten 4 ZigZag-Peaks gefunden wurden.

Nun stellen Sie sich Folgendes vor: Sie rufen die Funktion für einen Zeitrahmen auf und haben die Grenze von 150 Bars, um nach den letzten 4 Spitzenwerten zu suchen. Die Funktion erledigt den Job und dann schauen Sie in einem anderen Zeitrahmen nach. Stellen Sie sich vor, dass der 4. Peak außerhalb der ersten 150 Balken liegt, nur um der Argumentation willen. Was dann passiert. Da Ihre Arrays nicht bereinigt wurden, sind einige Ergebnisse für den zuvor gesuchten Zeitrahmen noch vorhanden, da beim 150. Takt nicht alle 4 Spitzen gefunden wurden, und einige zuvor gefundene Spitzen sind noch vorhanden, da sie im aktuell gesuchten Zeitrahmen gefunden wurden.

Das war der Grund für das Hinzufügen dieses Codes: um sicherzustellen, dass tatsächlich die letzten 4 Spitzen gefunden werden. Manchmal dauert es 10 Takte, manchmal 1000 (das hängt ganz von ZigZag ab und ist keine feste Anzahl von Takten), aber es wird nicht "Takte" mal durchlaufen. Es werden nur die notwendigen Schleifen durchlaufen und es wird sichergestellt, dass alle 4 Peaks aus dem Zielzeitrahmen stammen.

Was die Verwechslung der Zeitrahmen betrifft, so glaube ich nicht, dass dies der Fall ist. Die Art und Weise, wie die Historiendatei für die Zielzeitrahmen geöffnet wird (durch einfaches Hinzufügen der Minuten des Zielzeitrahmens zum Symbolnamen), macht es unmöglich, Daten aus zwei Zeitrahmen in einer einzigen Schleife zu lesen, wenn der Zeitrahmenparameter nicht geändert wird (in diesem Fall wird nur eine Historiendatei geöffnet und es kann nicht auf Daten aus verschiedenen Zeitrahmen zugegriffen werden).
 

Hilfe mit Code

Wäre jemand so freundlich, dem SnakeBorders-Indikator Code hinzuzufügen, um die beiden folgenden Plots hinzuzufügen:

1. Ein Liniendiagramm, das die Mitte des weißen Bereichs aufzeichnet (wie durch die rote Linie auf dem Bild dargestellt).

2. Ein Liniendiagramm, das das entgegengesetzte Extrem des gelben Liniendiagramms aufzeichnet (wie durch die cyanfarbene Linie auf dem Bild dargestellt).snakeborders.mq4

Dateien:
sb.gif  39 kb
 

bitte jemand helfen, diesen Indikator für mich zu erstellen

Ich möchte einen Indikator

Bedingung

Kaufen, wenn Body Kerze Preis Kreuz über ma Indikator und rsi > rsi 50 nach Kerze schließen öffnen neue Kerze beginnen einen blauen Pfeil und Blue Line bis Verkauf

Verkaufen, wenn Body Kerze Preis Kreuz unten ma Indikator und rsi < rsi 50 nach Kerze schließen öffnen neue Kerze beginnen ein roter Pfeil und rote Linie bis zum Kauf

Bitte fügen Sie die Eingabe für die Änderung des Wertes zu

Entschuldigung für mein schlechtes Englisch

Ich danke Ihnen vielmals