Açık ticareti kontrol etme sorunları - sayfa 6

 

Bunu hiç denemedim ama geçerli olduğunu düşünmüyorum. . .

 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

Bunu yapmanız gerektiğini düşünüyorum. . .

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

neden böyle olduğunu düşünüyorum. . . bu neye eşittir? (OP_BUYSTOP||OP_SELLSTOP) Değişkenler bool olsaydı işe yarayabilirdi. . . ama int ile çalışabileceğini sanmıyorum.

Küçük bir şey, OrderDelete'den önce OderSelect'e ihtiyacınız yok. Genel olarak OrderSelect'e yalnızca int bileti kullanmayan bir Order işlevi kullandığınızda ihtiyacınız olur. örneğin SiparişYorumu ( ), Sipariş Komisyonu ( ), vb

 
Tamam teşekkür ederim Raptor, yazımdaki kodu yeni güncelledim. Sayaç için çubuk kullanmanın iyi olmadığını söylediğinizi hatırladım, bu yüzden çubuk zamanını kullanmak için değiştirdim. Mantığını düzelteceğim ve işe yarayıp yaramadığına bakacağım.
 

Tamam mantığı düzelttim. Ama yine de siparişleri silmiyor.


Daha önce de bahsettiğim gibi sayacı zaman zaman çubuklardan değiştirdim...


 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 :
Tamam teşekkür ederim Raptor, yazımdaki kodu yeni güncelledim. Sayaç için çubuk kullanmanın iyi olmadığını söylediğinizi hatırladım, bu yüzden çubuk zamanını kullanmak için değiştirdim. Mantığını düzelteceğim ve işe yarayıp yaramadığına bakacağım.
" Çubuklar güvenilmezdir (grafikte maksimum çubuğa ulaştığınızda değişmez ve kod kırılmaz.) Volume[0]==1 güvenilir değildir, bir işareti kaçırırsanız kod kırılır. Daima süreyi kullanın."

doğrudur, ancak bu yorumun ne zaman yapıldığına bakmanız gerekir. . . Barlar güvenilmezdir. . .

 int Bars 

Number of bars in the current chart

ancak bu, saat sayısı yerine çubuk sayılarını kullanamayacağınız anlamına gelmez. Örneğin, kodunuz Cuma akşamı ve Pazar gününe kadar nasıl başa çıkacak? bekleyen limit 4 saat mi yoksa 4 bar mı?

Ayrıca saat 22:00'de işlem yapılırsa bununla ne olur? 22 + 4 = 26 ?

 if ( TimeHour ( TimeCurrent ()) > (bartraded + pendinglimit) && Tradeopen()==true)       // Check to see if pending orders have expired
 

Pekala, orada zaman stratejisiyle ilgili sorunu görüyorum. Ancak çubukları sayaç olarak kullanırsak, grafik maksimum çubuklara ulaştığında orada da başarısız olur, değil mi?

Ona geri döneceğim ve ne bulabileceğime bakacağım ...

 

tamam bu yaklaşıma ne dersin


 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 :

Pekala, orada zaman stratejisiyle ilgili sorunu görüyorum. Ancak çubukları sayaç olarak kullanırsak, grafik maksimum çubuklara ulaştığında orada da başarısız olur, değil mi?


Hayır, mevcut H1 çubuğu her zaman bar 0 . . 60 dakika içinde mevcut H1 çubuğu 0 çubuğu olacaktır. . Çubuklar , grafiğinizdeki toplam çubuk sayısı anlamına gelen Çubuklar'ı kullanmanız veya grafiğinizin en solundaki çubuklara bakıyor olmanızdır.

için çubuk numarası TimeHour ( TimeCurrent () 0'dır, işleminizin yapıldığı zamanın çubuk numarasını alabilirsiniz (bunu saklamanız değil hesaplamanız gerekir! ! !) iBarShift kullanarak böyle bir şey yapın . . .

 if ( iBarShift (symbol, TF, Time_order_Placed)+ 1 >  pendinglimit) && Tradeopen()==true)  
 

Tamam 3. kez şanslı, Orada ne demeye çalıştığını anlamam biraz zaman aldı. İşte yaptığım şey burada. Ama siparişler hala silinmiyor > :(


 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
               }
        }
     }
 
Evet, yorumunuzu tekrar okudum ve yaptığım şey yanlış.
tradeopened = TimeCurrent ()
barın açılış saatini bana vermeyecek mi Time[0] kullanmam gerekecek mi?
 

Bunu dene ;-)

 OrderDelete ( OrderTicket ( ) );                     // Delete it