Yarım lotları kapatmak. - sayfa 2

 

MathFloor'u ve oradaki bağlantınızı okumam gerekiyor - bu benim için tamamen yeni ve anlamakta zorlanıyorum. Yarın hallederim.

Teşekkürler beyler!

 
         if (Bid == btp-OrderOpenPrice()/ 2 +OrderOpenPrice()){ // need to double check this.
               
               
         double   minLot  = MarketInfo( Symbol (), MODE_MINLOT),
                 lotStep = MarketInfo( Symbol (), MODE_LOTSTEP),
                 Lots    = OrderLots(),
                 half_close = MathFloor (Lots/ 2 /lotStep)*lotStep;
                 
                    
               
         for ( int q= OrdersTotal ()- 1 ; q >= 0 ; q--)
         {
             if ( OrderSelect (q,SELECT_BY_POS,MODE_TRADES)== true ){
               Print ( " Stop loss value for the order is " , OrderStopLoss());
               Print ( "lots for the order " ,OrderLots());
            }
             else if ( OrderSelect (q,SELECT_BY_POS,MODE_TRADES)== false ){
               Print ( " OrderSelect failed error code is " , GetLastError ());
            }
             if (OrderMagicNumber()==MagicNumber)
             if (OrderSymbol()== Symbol ())
               if (OrderType()==OP_BUYSTOP)
               if (half_close > minLot)

                
               CloseHalfLong = OrderClose(OrderTicket(),half_close,Bid, 3 , CLR_NONE );
               if (CloseHalfLong!=TRUE) Print ( "LastError = " , GetLastError ());
         }
         } 
Birisi bana nerede yanlış yaptığım konusunda biraz rehberlik edebilir mi? Buna şimdi bakmaya başladım. Not yazdığım satır dışında biri beni doğru yöne yönlendirebilir mi?
 
Herhangi bir fikir?
 
DomGilberto :
Herhangi bir fikir?
OrderLots() öğesinin yarısını kapatmak mı istiyorsunuz? ancak bir Order seçmeden önce OrderLots()'u nasıl kullanabilirsiniz?
 
Whoops - evet o lol sıraladı. Yine de bu hiçbir şeyi değiştirmedi mi?

Bir şey mi kaçırıyorum?
 
DomGilberto :
Whoops - evet o lol sıraladı. Yine de bu hiçbir şeyi değiştirmedi mi?

Bir şey mi kaçırıyorum?

OrderSelect()'iniz başarısız olsa bile neden aşağıdakileri yapıyorsunuz?

 if (OrderMagicNumber()==MagicNumber)
             if (OrderSymbol()== Symbol ())
               if (OrderType()==OP_BUYSTOP)
               if (half_close > minLot)

Bekleyen bir Siparişi kapatmıyorsunuz, hata raporlamanız size ne söyledi?

 

Aynı ticareti iki kez seçmeye çalıştığınıza inanıyorum.

bu sadece "başka" olması gerekmez mi?

 else if ( OrderSelect (q,SELECT_BY_POS,MODE_TRADES)== false ){

Ticareti ilk kez seçmeye çalıştığınızda, başarısız, ancak 2. kez başarılı olursa, çelişkili mesajlar alabilirsiniz.

 
herhangi bir hata almıyorum...

Bu konuda biraz hayal kırıklığına uğradım... Sürekli "OrderModify hatası 1" alıyorum - ama buna daha sonra bakacağım. Bunun dışında hiçbir şey!
              if ( OrderSelect (NewOrder,SELECT_BY_TICKET,MODE_TRADES)== true ){
               Print ( " Stop loss value for the order is " , OrderStopLoss());
               Print ( "lots for the order " ,OrderLots());
            }
             else if ( OrderSelect (NewOrder,SELECT_BY_TICKET,MODE_TRADES)== false ){
               Print ( " OrderSelect failed error code is " , GetLastError ());
            }
            
             double   minLot = MarketInfo( Symbol (), MODE_MINLOT),
            lotStep     = MarketInfo( Symbol (), MODE_LOTSTEP),
            sizeCurr    = OrderLots(),
            sizeClose   = MathFloor (sizeCurr/lotStep)*lotStep/ 2 ,
            sizeRem     = sizeCurr - sizeClose;
           //if (sizeClose < minLot)                                     return(false);
             //if (sizeRem   < minLot){ sizeClose = sizeCurr;
                 
           if (OrderTakeProfit()-OrderOpenPrice()/ 2 +OrderOpenPrice() == Bid) // Does this make sense? I am wanting this "if" statement to be true, if price (bid) reaches the price in this comparison statement?

             if (OpenOrdersThisPair( Symbol ())== 1 )
               
               CloseHalfLong = OrderClose(OrderTicket(),sizeClose,Bid, 3 , CLR_NONE );
                
                 if (CloseHalfLong!=TRUE) Print ( "Last Error = " , GetLastError ());
         
         } 
MathFloor'un cevabı tam sayıya yuvarladığı izlenimi altındaydım? Yani MathFloor'un doğru olup olmadığından emin değilim? Kullandığım brokerler çok adım olarak 0.01 kullanacak... (ileri testte başlamak için IBFX - yani nano boyutta)
 
DomGilberto :
herhangi bir hata almıyorum...

Bu konuda biraz hayal kırıklığına uğradım... Sürekli "OrderModify hatası 1" alıyorum - ama buna daha sonra bakacağım. Bunun dışında hiçbir şey! MathFloor'un cevabı tam sayıya yuvarladığı izlenimi altındaydım? Yani MathFloor'un doğru olup olmadığından emin değilim? Kullandığım brokerler çok adım olarak 0.01 kullanacak... (ileri testte başlamak için IBFX - yani nano boyutta)

İşe yarayacak bir kod verdim, neden kullanmıyorsun? ne olduğunu görmek için neden değişkenlerinizi yazdırmıyorsunuz? gönderdiğiniz kodda OrderModify() yok, ne kadar alakalı? zaten dediğim gibi. . . OrderSelect() başarısız olursa neden OrderSelect()'e dayanan ticaret işlevlerini çağırıyorsunuz?

Kodlamayı bırakın, kodunuza bakın, satır satır okuyun, gerçekte ne yaptığını anlayın ve istediğiniz gibi değilse, düzeltmeniz gereken bir sorununuz var demektir.

 

MathFloor ondalık basamakları AŞAĞI en yakın BÜTÜN sayıya yuvarlar mı?

FirstTarget, "OrderClose()" içinde özel bir parametre olarak anlamlı mı - "sizeClose"un doğru olduğunu varsayarsak? (alıntılanan koda bakın)

Kodunuz yardımcı olmadı - üzgünüm.

Özel değişkenleri yazdırabilir misiniz? Eğer öyleyse, dergide görünmediği için yanlış yapıyor olmalıyım.

OrderModify alakalı değil, haklısın.

           double FirstTarget = OrderTakeProfit()-OrderOpenPrice()/ 2 +OrderOpenPrice();
              CloseHalfLong = OrderClose(OrderTicket(),sizeClose,FirstTarget, 3 , CLR_NONE );