Yarım lotları kapatmak. - sayfa 4

 
DomGilberto :
Bu çaylak hataları yaptığıma inanamıyorum... Canımı sıkıyor! Evet, şimdi yazdırdım ve siparişi seçtim. Bu, baskı açısından çalışan koddur - lotlar hala kapatılmıyor mu? Günlük mesajlarını da aşağıya yapıştırdım.

2013.07.31 11:13:52 2013.02.01 16:00 trendfishing_play_ground EURUSD,H1: Order Select returned the error of 0 // Not sure what is going on here?

if ( OrderSelect (c,SELECT_BY_TICKET,MODE_TRADES)== true )

c bir KONUM'dur, bilet numarası değil. . .

 

(facepalm - Açıkçası bir ara vermem gerekiyor!) tamam bunu sıraladı ve şimdi sırayı seçiyor. Bu artık günlük baskısıdır - "Close_Half_Order" hatası = 0? Bu gerçek OrderClose işlevi başarısız oluyor. "Kapanacak çok şey var" kısmındaki ikinci ondalık haneden sonraki "000" sayısıyla alakası yok, değil mi?

 2013.07 . 31 11 : 28 : 49      2013.02 . 01 15 : 00   trendfishing_play_ground EURUSD,H1: Close_Half_Order Last Error = 0
2013.07 . 31 11 : 28 : 49      2013.02 . 01 15 : 00   trendfishing_play_ground EURUSD,H1: Order Lots Open = 0.18
2013.07 . 31 11 : 28 : 49      2013.02 . 01 15 : 00   trendfishing_play_ground EURUSD,H1: Order Ticker Number = 9
2013.07 . 31 11 : 28 : 49      2013.02 . 01 15 : 00   trendfishing_play_ground EURUSD,H1: The Lots to close is: 0.09000
2013.07 . 31 11 : 28 : 49      2013.02 . 01 15 : 00   trendfishing_play_ground EURUSD,H1: The Lotstep is: 0.01000
2013.07 . 31 11 : 28 : 49      2013.02 . 01 15 : 00   trendfishing_play_ground EURUSD,H1: The minimum lots are: 0.01000
2013.07 . 31 11 : 28 : 49      2013.02 . 01 15 : 00   trendfishing_play_ground EURUSD,H1: FirstTarget_Buy: 1.37931
 
DomGilberto :

(facepalm - Açıkçası bir ara vermem gerekiyor!) tamam bunu sıraladı ve şimdi sırayı seçiyor. Bu artık günlük baskısıdır - "Close_Half_Order" hatası = 0? Bu gerçek OrderClose işlevi başarısız oluyor. "Kapanacak çok şey var" kısmındaki ikinci ondalık haneden sonraki "000" sayısıyla alakası yok, değil mi?

Braketler, parantezler, parantezler. . . bazen onları kullanmanız gerekir, bazen kullanmazsınız.

OrderClose() başarısız olmadı. . .

             if (OrderMagicNumber()==MagicNumber)
               if (OrderSymbol()== Symbol ())
                 if (OrderType()==OP_BUY)
                   if (OpenOrdersThisPair( Symbol ())== 1 )   //  if this is true . . . 

                 bool Close_Half_Order = OrderClose(OrderTicket(),half,FirstTarget_Buy, 3 , CLR_NONE ); // . . .  do this.

             if (Close_Half_Order!=TRUE) Print ( "Close_Half_Order Last Error = " , GetLastError ());   //  do this whatever happens . . .

bu nedenle OrderType() bir OP_BUY değilse, son satır yine de yürütülür, dolayısıyla 0 hatası oluşur. . . bunun gibi parantezler ekleyin:

             if (OrderMagicNumber() == MagicNumber)
               if (OrderSymbol() == Symbol ())
                 if (OrderType() == OP_BUY)
                   if (OpenOrdersThisPair( Symbol ()) == 1 ) 
                     {
                     bool Close_Half_Order = OrderClose(OrderTicket(), half, FirstTarget_Buy, 3 , CLR_NONE );
                     if (Close_Half_Order != TRUE) Print ( "Close_Half_Order Last Error = " , GetLastError () );   // only executed if the OrderClose() was also executed
                     } 
 
Tutarlı girintileme ayrıca neler olup bittiğini net bir şekilde görmenize yardımcı olur
 
Hmmm, hala @ "Close_Half_Order" kapatmak istemiyor mu? Herhangi bir hata mesajı da almıyor musunuz?
 
DomGilberto :
Hmmm, hala @ "Close_Half_Order" kapatmak istemiyor mu? Herhangi bir hata mesajı da almıyor musunuz?
Sipariş Tipiniz nedir?
 
OP_BUY?

   if ( OrderSelect ( OrdersTotal (),SELECT_BY_TICKET,MODE_TRADES)== true && OpenOrdersThisPair( Symbol ())== 1 ){
         
         double FirstTarget_Buy = OrderOpenPrice() + ( ( OrderTakeProfit()-OrderOpenPrice() ) / 2 );{
           Print ( "FirstTarget_Buy: " , DoubleToStr( FirstTarget_Buy, Digits ));
         }
         
         double minLot  = MarketInfo( Symbol (), MODE_MINLOT);{
                 Print ( "The minimum lots are: " , DoubleToStr( minLot, Digits ));
                }
                        
         double lotStep = MarketInfo( Symbol (), MODE_LOTSTEP);{
                 Print ( "The Lotstep is: " , DoubleToStr( lotStep, Digits ));
                }
                
         double half    = MathCeil (OrderLots()/ 2 /lotStep)*lotStep;{
                 Print ( "The Lots to close is: " , DoubleToStr( half, Digits ));
                }
       for ( int c= OrdersTotal ()- 1 ; c >= 0 ; c-- )
      {
         if ( OrderSelect (c,SELECT_BY_POS,MODE_TRADES)== true ){
             Print ( "Order Ticker Number = " ,OrderTicket());
             Print ( "Order Lots Open = " , OrderLots());
            } 
         else {
           Print ( "Order Select returned the error of " , GetLastError ()); // Order Select does not seem to want to work?
             continue ;
            }
             if (OrderMagicNumber()==MagicNumber)
               if (OrderSymbol()== Symbol ())
                 if (OrderType()==OP_BUY)
                   if (OpenOrdersThisPair( Symbol ())== 1 ){ 
                 bool Close_Half_Order = OrderClose(OrderTicket(),half,FirstTarget_Buy, 3 , CLR_NONE );
                 if (Close_Half_Order!=TRUE) Print ( "Close_Half_Order Last Error = " , GetLastError ());
                }
      } 
   }
 
DomGilberto :
OP_BUY?


Yine de öyle mi? Daha önce bekleyen siparişlerden bahsetmiştiniz, test ederken gerçekten bir OP_BUY açık mı? veya bekleyen bir siparişiniz var mı?
 

Bu arada bu diş telleri durumu karıştırmaktan başka bir şey yapmıyor. . .

         double FirstTarget_Buy = OrderOpenPrice() + ( ( OrderTakeProfit()-OrderOpenPrice() ) / 2 );  {  
           Print ( "FirstTarget_Buy: " , DoubleToStr( FirstTarget_Buy, Digits ));
         }  
         
         double minLot  = MarketInfo( Symbol (), MODE_MINLOT);  {  
                 Print ( "The minimum lots are: " , DoubleToStr( minLot, Digits ));
                 }  
                        
         double lotStep = MarketInfo( Symbol (), MODE_LOTSTEP);  {  
                 Print ( "The Lotstep is: " , DoubleToStr( lotStep, Digits ));
                 }  
                
         double half    = MathCeil (OrderLots()/ 2 /lotStep)*lotStep;  {  
                 Print ( "The Lots to close is: " , DoubleToStr( half, Digits ));
                 }  
 

Bekleyen bir "OP_BUYSTOP" emri verdim ama bunun "OP_BUY" olarak tetiklendiğinde değişeceği izlenimine kapıldım.

Tetiklenmiş olsaydı sipariş türünün "OP_BUY" olacağını düşündüm?

Sonuçta, sipariş tetiklendikten SONRA sadece ilgileniyorum?

Bu parantezler neden kafa karıştırıyor? Sol parantezin nerede olduğunu mu kastediyorsunuz? Eğer öyleyse, bu konuda defalarca düzeltildiğim için bu bireysel bir şey gibi görünüyor?