Ich habe das nie ausprobiert, aber ich glaube nicht, dass es gültig ist...
OrderType()==(OP_BUYSTOP||OP_SELLSTOP) && // The order selected is either a pending buy on stop order or a buy on sell orderOrderMagicNumber()==(Mnumber1||Mnumber1)) // The orders magic number is the same as the magic number used in this ea
Ich glaube, Sie müssen das tun...
((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) && // The order selected is either a pending buy on stop order or a buy on sell order
((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber2)) // The orders magic number is the same as the magic number used in this ea
Der Grund, warum ich das denke, ist... was bedeutet das? (OP_BUYSTOP||OP_SELLSTOP) Es könnte funktionieren, wenn die Variablen bool wären . . . aber ich glaube nicht, dass es mit int funktionieren kann.
Eine Kleinigkeit: Sie brauchen das OderSelect nicht vor dem OrderDelete. Im Allgemeinen brauchen Sie OrderSelect nur, wenn Sie eine Order-Funktion verwenden, die kein int-Ticket verwendet. z.B. OrderComment( ),OrderCommission( ), etc.
Ok danke Raptor, ich habe gerade den Code in meinem Beitrag aktualisiert. Ich habe mich gerade daran erinnert, wie ihr erwähnt habt, dass es nicht gut war, Balken für einen Zähler zu verwenden, also habe ich es geändert, um die Balkenzeit zu verwenden. Ill fix up die Logik und sehen, ob es funktioniert.
Ok, ich habe die Logik repariert. Aber es löscht die Aufträge immer noch nicht.
Wie ich bereits erwähnt habe, habe ich den Zähler von Zeit zu Zeit verändert...
externstring sComment4 = "Max Hours allowed before pending orders are deleted";
externint pendinglimit = 4;
// * EVERYTIME A TRADE GETS TRIGGERED
bartraded = TimeHour(TimeCurrent());
if(TimeHour(TimeCurrent()) > (bartraded + pendinglimit) && Tradeopen()==true) // Check to see if pending orders have expired
{
for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--) //scan through open orders
{
if (OrderSelect(tnumber, SELECT_BY_POS) &&
((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) && // The order selected is either a pending buy on stop order or a buy on sell order
((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber3))) // The orders magic number is the same as the magic number used in this ea
{
OrderDelete(tnumber); // Delete it
}
}
}
dazamate: Ok danke Raptor, ich habe gerade den Code in meinem Beitrag aktualisiert. Ich erinnerte mich gerade, wie Sie Jungs erwähnt, es war nicht gut, um Bars für einen Zähler zu verwenden, so dass ich es geändert, um Bar Zeit zu verwenden. Ill fix up die Logik und sehen, ob es funktioniert.
"Balken ist unzuverlässig (sobald man die maximale Anzahl an Balken im Chart erreicht hat, ändert sich der Wert nicht mehr und der Code bricht ab.) Volume[0]==1 ist unzuverlässig, wenn man einen Tick verpasst, bricht der Code ab. Verwenden Sie immer time."
ist wahr, aber man muss den Kontext betrachten, in dem diese Bemerkung gemacht wurde... Balken sind unzuverlässig . . .
intBars
Number of bars in the current chart
Das heißt aber nicht, dass Sie keine Balkenanzahl anstelle der Stundenanzahl verwenden können. Wie wird Ihr Code z.B. am Freitagabend und bis in den Sonntag hinein funktionieren? Ist pendinglimit gleich 4 Stunden oder 4 Bars?
Und was passiert damit, wenn ein Handel um 22:00 Uhr platziert wird? 22 + 4 = 26?
if(TimeHour(TimeCurrent()) > (bartraded + pendinglimit) && Tradeopen()==true) // Check to see if pending orders have expired
Gut, ich sehe das Problem dort mit der Zeit-Strategie. Aber wenn wir Bars als Zähler verwenden, sobald das Diagramm max Bars erreicht wird es auch dort scheitern, nicht wahr?
Ich werde zurück zu ihm und sehen, was ich mit kommen kann...
externstring sComment4 = "Max Hours allowed before pending orders are deleted";
externint pendinglimit = 4;
// * EVERYTIME A TRADE GETS TRIGGERED*
bartraded = 0;
if (Time0 == Time[0]) return; Time0 = Time[0]; // make sure each bar is only scanned once
{
//-----------------------------------------------------------------------------------------------------------------------------------------------//TRADE COUNTER
bartraded++; // Each time a new bar opens add 1 to the counter//------------------------------------------------------------------------------------------------------------------------------------------------// DELETE PENDING ORDERS THAT HAVE NOT BEEN TRIGGERED WITHIN 'pendinglimit'if(bartraded > pendinglimit && Tradeopen()==true) // Check to see if pending orders have expired
{
for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--) //scan through open orders
{
if (OrderSelect(tnumber, SELECT_BY_POS) &&
((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) && // The order selected is either a pending buy on stop order or a buy on sell order
((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber3))) // The orders magic number is the same as the magic number used in this ea
{
OrderDelete(tnumber); // Delete it
}
}
}
Gut, ich sehe das Problem dort mit der Zeit-Strategie. Aber wenn wir Bars als Zähler verwenden, sobald das Diagramm erreicht max Bars wird es auch dort scheitern, nicht wahr?
Nein, der aktuelle H1-Balken ist immer Balken 0 ... in 60 Minuten wird der aktuelle H1-Balken Balken 0 sein ...das Problem mit den Balken ist, wenn Sie Balken verwenden , d.h. die Gesamtzahl der Balken in Ihrem Chart, oder wenn Sie die Balken ganz links in Ihrem Chart betrachten.
Die Balkenanzahl für TimeHour(TimeCurrent () ist 0, Sie können die Balkenanzahl für den Zeitpunkt, an dem Ihr Handel platziert wurde (Sie müssen dies berechnen, nicht speichern!!!) mit iBarShift ermitteln und dann etwas wie folgt tun...
if (iBarShift(symbol, TF, Time_order_Placed)+1 > pendinglimit) && Tradeopen()==true)
OK, das 3. Mal Glück gehabt, ich habe eine Weile gebraucht, um herauszufinden, was du da sagen wolltest. Also habe ich Folgendes getan. Aber die Bestellungen werden immer noch nicht gelöscht >:(
staticdatetime tradeopened;
//Everytime a trade is opened I run
tradeopened = TimeCurrent();
if((iBarShift(hothand(),60 ,tradeopened)>pendinglimit) && Tradeopen()==true) // Check to see if pending orders have expired
{
for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--) //scan through open orders
{
if (OrderSelect(tnumber, SELECT_BY_POS) &&
((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) && // The order selected is either a pending buy on stop order or a buy on sell order
((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber3))) // The orders magic number is the same as the magic number used in this ea
{
OrderDelete(tnumber); // Delete it
}
}
}
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Ich habe das nie ausprobiert, aber ich glaube nicht, dass es gültig ist...
Ich glaube, Sie müssen das tun...
Der Grund, warum ich das denke, ist... was bedeutet das? (OP_BUYSTOP||OP_SELLSTOP) Es könnte funktionieren, wenn die Variablen bool wären . . . aber ich glaube nicht, dass es mit int funktionieren kann.
Eine Kleinigkeit: Sie brauchen das OderSelect nicht vor dem OrderDelete. Im Allgemeinen brauchen Sie OrderSelect nur, wenn Sie eine Order-Funktion verwenden, die kein int-Ticket verwendet. z.B. OrderComment( ), OrderCommission( ), etc.
Ok, ich habe die Logik repariert. Aber es löscht die Aufträge immer noch nicht.
Wie ich bereits erwähnt habe, habe ich den Zähler von Zeit zu Zeit verändert...
Ok danke Raptor, ich habe gerade den Code in meinem Beitrag aktualisiert. Ich erinnerte mich gerade, wie Sie Jungs erwähnt, es war nicht gut, um Bars für einen Zähler zu verwenden, so dass ich es geändert, um Bar Zeit zu verwenden. Ill fix up die Logik und sehen, ob es funktioniert.
ist wahr, aber man muss den Kontext betrachten, in dem diese Bemerkung gemacht wurde... Balken sind unzuverlässig . . .
Das heißt aber nicht, dass Sie keine Balkenanzahl anstelle der Stundenanzahl verwenden können. Wie wird Ihr Code z.B. am Freitagabend und bis in den Sonntag hinein funktionieren? Ist pendinglimit gleich 4 Stunden oder 4 Bars?
Und was passiert damit, wenn ein Handel um 22:00 Uhr platziert wird? 22 + 4 = 26?
Gut, ich sehe das Problem dort mit der Zeit-Strategie. Aber wenn wir Bars als Zähler verwenden, sobald das Diagramm max Bars erreicht wird es auch dort scheitern, nicht wahr?
Ich werde zurück zu ihm und sehen, was ich mit kommen kann...
Ok, wie wäre es mit diesem Ansatz
Gut, ich sehe das Problem dort mit der Zeit-Strategie. Aber wenn wir Bars als Zähler verwenden, sobald das Diagramm erreicht max Bars wird es auch dort scheitern, nicht wahr?
Nein, der aktuelle H1-Balken ist immer Balken 0 ... in 60 Minuten wird der aktuelle H1-Balken Balken 0 sein ...das Problem mit den Balken ist, wenn Sie Balken verwenden , d.h. die Gesamtzahl der Balken in Ihrem Chart, oder wenn Sie die Balken ganz links in Ihrem Chart betrachten.
Die Balkenanzahl für TimeHour(TimeCurrent () ist 0, Sie können die Balkenanzahl für den Zeitpunkt, an dem Ihr Handel platziert wurde (Sie müssen dies berechnen, nicht speichern!!!) mit iBarShift ermitteln und dann etwas wie folgt tun...
OK, das 3. Mal Glück gehabt, ich habe eine Weile gebraucht, um herauszufinden, was du da sagen wolltest. Also habe ich Folgendes getan. Aber die Bestellungen werden immer noch nicht gelöscht >:(
tradeopened = TimeCurrent()gibt mir nicht die Öffnungszeit des Balkens, müsste ich Time[0] verwenden?Versuchen Sie das ;-)