Döngüler ve Emirleri Kapatma veya Silme - sayfa 3

 

Bunun gibi bir döngü yaparsak,

   for ( int i= 0 ; i< OrdersTotal (); i++) // For market and pending orders
     {
       if (( OrderSelect (i, SELECT_BY_POS )== true )     //If there is the next one
      && ( OrderSymbol ()== Symbol ()) && OrderMagicNumber () == Magic_A )               
        {

Bu, sipariş için dizi oluşturmak için mql4 kitabında verilen döngüdür.

OrdersTotal(), bir sipariş her kapatıldığında kendi kendine azalacak mı?

//******************************************************* ******************************

Kitaba bir göz attım, aşağıda bir siparişi kapatmak için verilen döngü var, yani cevaplar evet: ( https://book.mql4.com/trading/orderclose )

 for ( int i= 1 ; i<= OrdersTotal (); i++)           // Order searching cycle
     {
       if ( OrderSelect (i- 1 , SELECT_BY_POS )== true ) // If the next is available
        {                                       // Order analysis:
         //----------------------------------------------------------------------- 3 --
         if ( OrderSymbol ()!= Symb) continue ;   
 
ffoorr :

Bunun gibi bir döngü yaparsak,

Bu, sipariş için dizi oluşturmak için mql4 kitabında verilen döngüdür.

OrdersTotal(), bir sipariş her kapatıldığında kendi kendine azalacak mı?


Evet olacak. . . ama gerçek şu ki, tüm Siparişler kapatılacak. Bu konudaki ilk 2 mesajı okuyun. . . detaylı olarak anlatılıyor.
 
int TotalNumberOfOrders;   //  <-- this variable will hold the number of orders currently in the Trade pool

TotalNumberOfOrders = OrdersTotal ();     // <-- we store the number of Orders in the variable

for (PositionIndex = TotalNumberOfOrders - 1 ; PositionIndex >= 0 ; PositionIndex --)   //  <-- for loop to loop through all Orders . .   COUNT DOWN TO ZERO !  

TotalNumberOfOrders = OrdersTotal() ;

Demek istediğim, hemen OrdersTotal() kullanmaktı .

for ( x = OrdersTotal() - 1 ...... )

 
Sormak yerine neden denemiyorsunuz? Bu senin deneyimin olurdu.
 
Şu anda bunu kullanıyorum ama aynı olmasına rağmen çıktı alacağından emin değilim. OrdersTotal() for döngüsünde olduğundan, 1 siparişi kapatmak OrdersTotal'ı tekrar tekrar etkiler mi?
 
İkisini de deneyin ve farklılıkları tespit edip edemeyeceğinizi görün.
 
juniorlcq :
Şu anda bunu kullanıyorum ama aynı olmasına rağmen çıktı alacağından emin değilim. OrdersTotal() for döngüsünde olduğundan, 1 siparişi kapatmak OrdersTotal'ı tekrar tekrar etkiler mi?

Hayır, OrdersTotal'ı kontrol etmediğiniz için, döngüye devam etmenin koşulu olarak PositionIndex'i kontrol ediyorsunuz.

 for (PositionIndex = TotalNumberOfOrders - 1 ; PositionIndex >= 0 ; PositionIndex --)
 

Bu konuyu açıklamak için harika bir iş! Grafikler olmadan açıklamak imkansız... Aferin.

Geri sayım yöntemi yerine sayım yöntemini kullanmaya zorlandığım tek zaman bir komisyoncuydu.

bu gerçekten FIFO hakkında xxx oldu ve ilk önce en yeni ticareti kapatmama izin vermedi.... ne kadar aptalca.

Tekrar söylüyorum... Hayırlı olsun...

 
Jimdandy : Geri sayım yöntemi yerine geri sayım yöntemini kullanmaya zorlandığım tek zaman, FIFO hakkında gerçekten anal olan ve ilk önce en yeni ticareti kapatmama izin vermeyen bir komisyoncuydu... ne kadar aptalca.
Bu durumda, ilgili tüm bilet numaralarını (bir dizide) yakalayın ve ardından kapatın. Yukarı saymayın VE kapatmayın.
 

Merhaba uzmanlar, bu çözüm hakkında ne düşünüyorsunuz?

 while ( OrdersTotal ()> 0 )
  {
   if ( OrderSelect ( 0 ,SELECT_BY_POS,MODE_TRADES))
     {
       switch (OrderType())
        {
         case OP_BUY:   if (!OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),MaxSlippage,CloseColor)) Print ( "OrderClose error " , GetLastError ()); break ;
         case OP_SELL: if (!OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),MaxSlippage,CloseColor)) Print ( "OrderClose error " , GetLastError ()); break ;
         case OP_BUYSTOP:
         case OP_SELLSTOP:
         case OP_BUYLIMIT:
         case OP_SELLLIMIT: if (!OrderDelete(OrderTicket())) Print ( "OrderDelete error " , GetLastError ());
        }
     }
   else Print ( "OrderSelect error " , GetLastError ());
  }