Yarım lotları kapatmak. - sayfa 7

 
   if ( OrderSelect ( OrdersTotal (),SELECT_BY_TICKET,MODE_TRADES)== true && OpenOrdersThisPair( Symbol ())== 1 && OrderType()==OP_BUY){ // Even though I am calling "OP_BUY" here, it doesn't seem to work?
         
         }
         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 ;
            }
            
           double FirstTarget_Buy = OrderOpenPrice() + ( ( OrderTakeProfit()-OrderOpenPrice() ) / 2 );
           {
           Print ( "FirstTarget_Buy: " , DoubleToStr( FirstTarget_Buy, Digits ));
           }
             if (OrderMagicNumber()==MagicNumber)
               if (OrderSymbol()== Symbol ())
                
               Print ( "Current Bid: " , DoubleToStr(Bid, Digits ), " FirstTarget_Buy: " , DoubleToStr(FirstTarget_Buy, Digits )  );
                 if (OrderType()==OP_BUY && Bid >= FirstTarget_Buy +( Point / 2 ))
                  {
                   Print ( "Bid >= FirstTarget_Buy - Current Bid: " , DoubleToStr(Bid, Digits ), " FirstTarget_Buy: " , DoubleToStr(FirstTarget_Buy, Digits )  );
                   bool Close_Half_Order_Buy = OrderClose(OrderTicket(),half,Bid, 3 , CLR_NONE );
                   if (Close_Half_Order_Buy!=TRUE) Print ( "Close_Half_Order_Buy Last Error = " , GetLastError ());
                  }

         } 
   }
     
Biraz pasaklı olduğunu biliyorum! Yüklerle oynuyordum - o kadar çabuk konuştuğumuz yere geri koydum? Bu kısmı kastettiğini varsayıyorum, değil mi?
 
   if (direction== 0 ){ //--Buy--//
      
       double bsl=buy_stop_price;
       double btp=buy_takeprofit_price;
      LotSize = (RiskedAmount/(pips_to_bsl/pips))/ 10 ;
      
       if (OpenOrdersThisPair( Symbol ())== 0 ){
         int BuyTicketOrder = OrderSend ( Symbol (),OP_BUYSTOP,LotSize,buyPrice, 3 ,bsl,btp, NULL ,MagicNumber, 0 ,Green); // This puts out the initial order.
      }
      
         if (OrderStopLoss()< iMA ( NULL , 0 ,MA_Period, 0 , 1 , 0 , 0 )-MA_PadAmount*pips){ // This triggers the For loop if the pending order needs adjusting relative to where the MA is.
         
               for ( int b= OrdersTotal ()- 1 ; b >= 0 ; b--) 
                  {
    
                     if ( OrderSelect (b,SELECT_BY_POS,MODE_TRADES)== true ){
                     Print ( " Stop loss value for the order is " , OrderStopLoss());
                     }
    
                     else if ( OrderSelect (b,SELECT_BY_POS,MODE_TRADES)== false ){
                     Print ( " OrderSelect failed error code is " , GetLastError ());
                     }
                     if (OrderMagicNumber()==MagicNumber)
                         if (OrderSymbol()== Symbol ())
                           if (OrderType()==OP_BUYSTOP)
                               if (OrderStopLoss()< iMA ( NULL , 0 ,MA_Period, 0 , 1 , 0 , 0 )-MA_PadAmount*pips)
                                 if (OpenOrdersThisPair( Symbol ())== 1 ) 
                                 DeleteOrder = OrderDelete(OrderTicket());
                                     if (DeleteOrder!=TRUE) Print ( "DeleteOrder Last Error = " , GetLastError ());
                                  
                                 if (OpenOrdersThisPair( Symbol ())== 0 ) 
                                  NewBuyOrder = OrderSend ( Symbol (),OP_BUYSTOP,LotSize,buyPrice, 3 ,bsl,btp, NULL ,MagicNumber, 0 ,Green); // New Pending order with calibrated stops, lots and targets.
                                   if (NewBuyOrder!=TRUE) Print ( "New Buy Order Last Error = " , GetLastError ());   // This is giving me an "Error 0", despite the trade ACTUALLY being placed correctly...?   

                  }
                 } 
             
               if (NewBuyOrder == true ){
               Print ( "New Buy Order Placed #" , NewBuyOrder);
               }
               else {
               Print ( "New Buy Order Send Failed, error # " , GetLastError ());   
               }
               }
Bu Satın Al bölümüdür - sadece bir "OP_BUYSTOP" tükürür
 
DomGilberto :
Biraz pasaklı olduğunu biliyorum! Yüklerle oynuyordum - o kadar çabuk konuştuğumuz yere geri koydum? Bu kısmı kastettiğini varsayıyorum, değil mi?

erm. . . bir adım geri çekilmeniz, derin bir nefes almanız ve kodunuzu dikkatlice okumanız, fonksiyon satır, satır satır yazmanız gerekir. . . kendinize "burada ne yapmaya çalışıyorum?" diye sorun. ve ardından kodunuzun bunu yapıp yapmayacağını kontrol edin. . . örneğin:

   if ( OrderSelect ( OrdersTotal (), SELECT_BY_TICKET,   MODE_TRADES)== true && OpenOrdersThisPair( Symbol ())== 1 && OrderType()==OP_BUY)

         { // Even though I am calling "OP_BUY" here, it doesn't seem to work?
         
         }

Bu, eğer test doğruysa bir yorum yürütürse? ? ? ? ? bir an bunu görmezden gelerek. . . OrdersTotal() nasıl bir bilet numarasıdır? SELECT_BY_TICKET SELECT_BY_POS kullandıysanız bu geçerli bir Konum bile değil


Bu kodun size sorununuzu verdiğini sanmıyorum. . . bazı sorunları olsa da.

 

Evet - iyi nokta, gerçi bu dürüst olmak gerekirse önemli bir fark yaratmaz.

hmmm...

 
DomGilberto :

Evet - iyi nokta, gerçi bu dürüst olmak gerekirse önemli bir fark yaratmaz.

hmmm...

Hayır değil. . .

Raptorİngiltere :


Bu kodun size sorununuzu verdiğini sanmıyorum. . . bazı sorunları olsa da.

Sorunu oluşturan kodu gösterdiğinizi sanmıyorum. . .

 
DomGilberto :
Bu Satın Al bölümüdür - sadece bir "OP_BUYSTOP" tükürür

Bu . . .

 if (OpenOrdersThisPair( Symbol ())== 0 ) 
   NewBuyOrder = OrderSend ( Symbol (),OP_BUYSTOP,LotSize,buyPrice, 3 ,bsl,btp, NULL ,MagicNumber, 0 ,Green); // New Pending order with calibrated stops, lots and targets.

if (NewBuyOrder!=TRUE) Print ( "New Buy Order Last Error = " , GetLastError ());   // This is giving me an "Error 0", despite the trade ACTUALLY being placed correctly...? 

. . . {} ayraç sorunudur. . .

 if (OpenOrdersThisPair( Symbol ())== 0 ) 
   {
   NewBuyOrder = OrderSend ( Symbol (),OP_BUYSTOP,LotSize,buyPrice, 3 ,bsl,btp, NULL ,MagicNumber, 0 ,Green); // New Pending order with calibrated stops, lots and targets.

   if (NewBuyOrder != TRUE) Print ( "New Buy Order Last Error = " , GetLastError ());   // This is giving me an "Error 0", despite the trade ACTUALLY being placed correctly...? 
   }

girintilerinizi sıralayın ve bu sorunları hızlı bir şekilde "göreceksiniz".

 
Evet, tekrar hayırlı olsun, birkaç girinti sorununu çözdüm ve çözdüm... yine de aynı sorunlarla mı takıldınız? Başka hangi kod olabileceğini ima ediyorsun? Kodlamamın başka bir bölümünden olduğunu hayal edemedim ...?
 
if ( OrderSelect ( OrdersTotal (),SELECT_BY_POS,MODE_TRADES)== true && OpenOrdersThisPair(Symbol())==1) // If I put "OrderType() == OP_BUY" it won't work at all. This means that it could just grab a pending order - which is wrong.
  { 
         
         
         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 ()); 
           continue ;
           }

           double FirstTarget_Buy = OrderOpenPrice() + ( ( OrderTakeProfit()-OrderOpenPrice() ) / 2 );
           {
           Print ( "FirstTarget_Buy: " , DoubleToStr( FirstTarget_Buy, Digits ));
           }
            
             if (OrderMagicNumber()==MagicNumber)
               if (OrderSymbol()== Symbol ())
                
               Print ( "Current Bid: " , DoubleToStr(Bid, Digits ), " FirstTarget_Buy: " , DoubleToStr(FirstTarget_Buy, Digits )  );
                
                 if (OrderType()==OP_BUY && Bid >= FirstTarget_Buy +( Point / 2 )) // Does not go further than this. I do not get an error from OrderClose?
                  {
                   Print ( "Bid >= FirstTarget_Buy - Current Bid: " , DoubleToStr(Bid, Digits ), " FirstTarget_Buy: " , DoubleToStr(FirstTarget_Buy, Digits )  );
                   bool Close_Half_Order_Buy = OrderClose(OrderTicket(),half,Bid, 3 , CLR_NONE );
                   if (Close_Half_Order_Buy!=TRUE) Print ( "Close_Half_Order_Buy Last Error = " , GetLastError ());
                  }
                   
       } 
   }
Sıkıştım - Çok fazla yer değiştirmeyi ve değiştirmeyi denedim ve şimdi var olduğunu bilmediğim bir şeyi kaçırma durumu olmalı... öyle mi olmalı? OrderType()==OP_BUY çalışmıyor gibi mi? Yukarıdaki koddaki notlara bakın - Girintiyi kontrol ettim ... Bu epik! hah...
 
DomGilberto :
Evet, tekrar hayırlı olsun, birkaç girinti sorununu çözdüm ve çözdüm... yine de aynı sorunlarla mı takıldınız? Başka hangi kod olabileceğini ima ediyorsun? Kodlamamın başka bir bölümünden olduğunu hayal edemedim ...?
LOL, bilmiyorum, hepsini görmedim. . . ancak bir OP_BUY'unuz olduğunda yazdırmayı yapan kodun çalışmasını engelleyen bir şey var
 
2013.08.02 10:52:47	2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: NEW BUY ORDER:-  Lots to open: 0.18215 Entry Price: 1.36790 Buy Stop Loss: 1.35649 Buy Take Profit: 1.39072 Magic Number is: 1234.00000

Bu, for döngüsüm sırasında Günlük'te yazdırılıyor, burada, bekleyen bir Satın Alma Durdurma Emri olması durumunda, 60 EMA, OrderStopLoss'tan > ise, bekleyen siparişi kapatacak, yeni SL ile yeni bir tane açacaktır. 60EMA'nın arkasında), 1:2 ödülünü eğlendirmek için kârı al ayarını yapın ve puanlardaki durma noktasına ve risk profilime göre lotları değiştirin (%2 diyelim).

Yani tüm bunlar yapılırken, OrderSend içindeki "LotSize" özel değişkeni olan "Mevcut Lotlar" çalışıyor, sunucunun alması için doğru olmayan bir lot boyutu mu gönderiyor? "0.18215"? Bu, siparişlerin her halükarda gönderilmesine rağmen bir sorun olabilir mi - bu soru daha çok ""OrderType==OP_BUY" arayamamın nedeni bu olabilir mi?

Bu uzun bir ggggg süreci lol ...