Fragen Sie! - Seite 176

 

PS: nur zur Erinnerung - der 3. Parameter im iCustom()-Aufruf ist der Name des Indikators. Der erste Parameter ist das Symbol und der 2. Parameter ist der gewünschte Zeitrahmen.

mladen:
Gehen Sie wie folgt vor:
array[0]=iClose("EURUSD",0,0); [/PHP]

and so on. That way array will be filled with close prices for symbols you select. If you are using a custom indicator then the form is the following :

[PHP]array[0]=iCustom("EURUSD",0,"indicator name",0,0);
 

MLaden

Ich rufe einen benutzerdefinierten Indikator mit icustom in einer Schleife für mehrere Paare auf. Ich kann auf der Registerkarte "Experten" sehen, dass der Indikator entladen und dann für das nächste Paar neu geladen wird. Bedeutet dies, dass der iCustom-Aufruf die Werte für die gesamten maximalen Balken im Diagramm jedes Mal neu berechnet, wenn er geladen wird? Wenn Sie den Aufruf für Balken N und dann für Balken N+1 als separate aufeinanderfolgende Aufrufe durchführen, muss dann der zweite Aufruf vollständig neu berechnet werden? Und schließlich, wenn die aufeinanderfolgenden Aufrufe für verschiedene Puffer sind, wird dann jeder neu berechnet.

Ich erinnere mich, dass Sie sagten, dass jeder iCustom-Aufruf eine eigene Instanz erzeugt, so dass meine Vermutung ist, dass jeder in seiner Gesamtheit neu berechnet wird.

Vielen Dank für die Antwort,

Tzuman

 

Tzuman,

Metatrader erstellt eine neue Instanz des Indikators für jeden neuen Satz von Parameterwerten (Ausnahme sind Puffernummer und Index).

Ein Beispiel - die folgenden zwei Aufrufe :

iCustom(NULL,0, "Name",1,0,0);

iCustom(NULL,0, "Name",2,0,0);

erstellt zwei Instanzen eines Indikators (auch wenn Sie z.B. "n" anstelle von 1 und 2 verwenden und n vor einem neuen Aufruf von iCustom() unterschiedliche Werte zuweisen, werden separate Instanzen erstellt. Aus diesem Grund können einige adaptive Indikatoren nicht mit iCustom() geschrieben werden, sondern müssen in Form von Funktionen erstellt werden)

Jetzt geht es um Instanzen. Aber wenn der Indikator geladen und dann wieder entladen wird, handelt es sich in der Regel um ein Problem mit den Parametern (der entladende Teil zeigt das normalerweise an). Wenn die Parametertypen nicht übereinstimmen, dann wird der "load - unload" Stunt ausgeführt. Prüfen Sie, ob zufällig einige der an iCustom übergebenen Parameter nicht dem erwarteten Typ entsprechen (oder einige der Parameter versehentlich weggelassen wurden, was zu einer Verwechslung der Parametertypen führen könnte).

Tzuman:
MLaden

Ich rufe einen benutzerdefinierten Indikator mit icustom in einer Schleife für mehrere Paare auf. Auf der Registerkarte "Experten" kann ich sehen, dass der Indikator entladen und dann für das nächste Paar neu geladen wird. Bedeutet dies, dass der iCustom-Aufruf die Werte für die gesamten maximalen Balken im Diagramm jedes Mal neu berechnet, wenn er geladen wird? Wenn Sie den Aufruf für Balken N und dann für Balken N+1 als separate aufeinanderfolgende Aufrufe durchführen, muss dann der zweite Aufruf vollständig neu berechnet werden? Und schließlich, wenn die aufeinanderfolgenden Aufrufe für verschiedene Puffer sind, wird dann jeder neu berechnet.

Ich erinnere mich, dass Sie sagten, dass jeder iCustom-Aufruf eine eigene Instanz erzeugt, so dass meine Vermutung ist, dass jeder in seiner Gesamtheit neu berechnet wird.

Danke für die Antwort,

Tzuman
 

Ich wollte Ihre jüngsten Diskussionen nicht unterbrechen

bitte sehen Sie sich diesen neuen Thread an

https://www.mql5.com/en/forum/182212

 

Wie ich sehe, hat mrtools das Problem bereits gelöst

MaaTini:
Ich wollte Ihre aktuellen Diskussionen nicht unterbrechen

bitte schauen Sie sich diesen neuen Thread an

https://www.mql5.com/en/forum/182212
 
mladen:
Tzuman,

Metatrader erstellt eine neue Instanz des Indikators für jeden neuen Satz von Parameterwerten (Ausnahme sind Puffernummer und Index).

Ein Beispiel - die folgenden zwei Aufrufe :

iCustom(NULL,0, "Name",1,0,0);

iCustom(NULL,0, "Name",2,0,0);

werden zwei Instanzen eines Indikators erstellt (auch wenn Sie z.B. "n" anstelle von 1 und 2 verwenden und n vor einem neuen Aufruf von iCustom() unterschiedliche Werte zuweisen, werden separate Instanzen erstellt. Aus diesem Grund können einige adaptive Indikatoren nicht mit iCustom() geschrieben werden, sondern müssen in Form von Funktionen erstellt werden)

Jetzt geht es um Instanzen. Wenn der Indikator jedoch geladen und dann wieder entladen wird, handelt es sich in der Regel um ein Problem mit den Parametern (der entladende Teil zeigt dies in der Regel an). Wenn die Parametertypen nicht übereinstimmen, wird der "load - unload" Stunt ausgeführt. Prüfen Sie, ob zufällig einige der an iCustom übergebenen Parameter nicht dem erwarteten Typ entsprechen (oder einige der Parameter versehentlich weggelassen wurden, was zu einer Verwechslung der Parametertypen führen könnte).

Vielen Dank für die Erklärung. Ich nahm an, dass das Laden/Entladen dadurch verursacht wird, dass sich das Symbol bei jeder Iteration der Schleife ändert, so dass es alle neuen Datenwerte laden muss,

z.B. iCustom("EURUSD",0, "name" ,1,0,0); & iCustom("GBPUSD",0,name" ,1,0,0);

Ich werde die Parameter sorgfältig überprüfen, aber ich bin dazu übergegangen, meine eigenen MA-Durchschnittsfunktionen mit einigen Plagiaten zu schreiben. Wenn ich mir die Prozessorauslastung im Task-Manager ansehe, sieht es so aus, als ob meine CPU-Auslastung um 90-95% gesunken ist. Ich bin zufrieden

 

Hallo guru im Neuling in der Codierung können Sie mir helfen, in "stop öffnen mehrere um, wenn takeprofit hit" ich versuchen, Code wie diese aber nicht funktioniert. könnten Sie mir bitte helfen.

static datetime closeT;

for(int a=OrdersHistoryTotal()-1; a>=0; a--) {if(OrderSelect(a,SELECT_BY_POS,MODE_HISTORY)==true) {if(OrderMagicNumber()==magic && OrderSymbol()==symb && closeT<OrderCloseTime()) { closeT=OrderCloseTime(); if((buy==true || sell==true) && closeT==Time[0]){buy=false; sell=false;} } } }

 

Danke mladen, ich werde deinen Code ausprobieren.

 
RBarias:
hallo guru im newbie in coding can you help me in "stop opening multiple order when takeprofit hit" i try code like this but not working. could you help me please.

staticdatetime closeT;

for(int a=OrdersHistoryTotal()-1; a>=0; a--) {if(OrderSelect(a,SELECT_BY_POS,MODE_HISTORY)==true) {if(OrderMagicNumber()==magic && OrderSymbol()==symb && closeT<OrderCloseTime()) { closeT=OrderCloseTime(); if((buy==true || sell==true) && closeT==Time[0]){buy=false; sell=false;} } } }

Sie können etwas wie dieses versuchen (es wird geprüft, ob die letzte geschlossene Order auf einem aktuellen Bar geschlossen ist und ob ein Takeprofit getroffen wurde):

datetime closeT= 0;

int ticket=-1;

for(int a=OrdersHistoryTotal()-1; a>=0; a--)

{

if(OrderSelect(a,SELECT_BY_POS,MODE_HISTORY))

if(OrderMagicNumber()==magic && OrderSymbol()==symb && closeT<OrderCloseTime())

{

closeT=OrderCloseTime();

ticket=OrderTicket();

}

}

if (ticket>-1)

{

OrderSelect(ticket,SELECT_BY_TICKET,MODE_HISTORY);

if(iBarShift(symb,0,closeT)==0 && OrderClosePrice()==OrderTakeProfit())

{

buy =false;

sell=false;

}

}
 

Hallo mladen,

Ihr Skript Symbols.mq4 hat in MT4 Build 509 einwandfrei funktioniert, aber in Build 636 gibt es einen Dateifehler (beim Öffnen von symbols.raw).

Würden Sie bitte eine aktualisierte Version für MT4 Build 636 zur Verfügung stellen?

Vielen Dank im Voraus.

Mit freundlichen Grüßen,

Timo.

Grund der Beschwerde: