Probleme bei der Prüfung auf offenen Handel - Seite 6

 

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 order
OrderMagicNumber()==(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...


extern string  sComment4                = "Max Hours allowed before pending orders are deleted";
extern int     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 . . .

int Bars 

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...

 

Ok, wie wäre es mit diesem Ansatz


extern string  sComment4                = "Max Hours allowed before pending orders are deleted";
extern int     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
               }
        }
     }
 
dazamate:

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 >:(


static datetime 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
               }
        }
     }
 
Ja, ich habe gerade noch einmal über Ihren Kommentar gelesen, und was ich getan habe, ist falsch,
tradeopened = TimeCurrent()
gibt mir nicht die Öffnungszeit des Balkens, müsste ich Time[0] verwenden?
 

Versuchen Sie das ;-)

OrderDelete(OrderTicket( ) );                    // Delete it