Закрытие половинных участков. - страница 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());
                  }

         } 
   }
     
Я знаю, что он немного неряшливый! Я много игрался с ним - так быстро вернул его к тому, о чем мы говорили? Я полагаю, вы имели в виду всю эту часть, верно?
 
   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());   
               }
               }
Это раздел "Купить" - просто выдает "OP_BUYSTOP".
 
DomGilberto:
Я знаю, что он немного корявый! Я много играл с ним - так что быстро верните его к тому, о чем мы говорили? Я полагаю, вы имели в виду всю эту часть, верно?

Вам нужно сделать шаг назад, глубоко вздохнуть и внимательно прочитать свой код, функцию за функцией, строку за строкой... спросить себя "что я пытаюсь сделать здесь?", а затем проверить, будет ли ваш код делать это... например:

  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?
         
         }

Этот тест if выполняет комментарий, если он истинен ? ? ? ? Игнорируя это на мгновение. ... как OrdersTotal() является номером билета? SELECT_BY_TICKET это даже не действительная Позиция, если вы использовали SELECT_BY_POS


Я не думаю, что этот код является тем, что дает вам проблему ... хотя у него есть некоторые проблемы.

 

Да - хорошее место, хотя это не имеет существенного значения, если честно.

Hmmm....

 
DomGilberto:

Да - хорошее место, хотя это не имеет существенного значения, если честно.

Hmmm....

Нет, не имеет...

RaptorUK:


Я не думаю, что этот код - это то, что создает вашу проблему... хотя у него есть некоторые проблемы.

Я не думаю, что вы показываете код, который создает проблему...

 
DomGilberto:
Это раздел "Купить" - просто выдает "OP_BUYSTOP".

Это . . . .

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(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(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());
                  }
                   
       } 
   }
Я застрял - я пробовал переставлять и менять многое, и теперь, должно быть, дело в том, что я упустил что-то, о существовании чего я не знаю... должно быть? OrderType()==OP_BUY, похоже, не работает? См. примечания в коде выше - я проверил отступы... Это эпично! хаха...
 
DomGilberto:
Да, снова хороший крик, я просмотрел и разобрался с некоторыми проблемами с отступами... но все равно остались те же проблемы? На какой другой код вы намекаете, что это может быть? Я не могу представить, что это может быть из-за какой-либо другой части моего кода...?
Лол, я не знаю, я не видел всего этого... но что-то мешает коду, который выполняет печать, работать, когда у вас есть OP_BUY.
 
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

Это печатается в журнале во время моего цикла for, где в случае отложенного ордера Buy Stop, если 60 EMA >, чем OrderStopLoss, он закроет отложенный ордер, откроет новый с новым SL (который находится за 60EMA), настроит тейк-профит для получения вознаграждения 1:2, и изменит лоты относительно стопа в пунктах и моего профиля риска (скажем, 2%).

Итак, когда все это делается, пользовательская переменная "Current Lots", которая является "LotSize" в OrderSend, работает, она отправляет размер лота, который не является правильным для сервера, чтобы получить "0.18215"? Может ли это быть проблемой, несмотря на то, что ордера все равно отправляются - этот вопрос больше связан с "может ли это быть причиной того, что я не могу вызвать "OrderType==OP_BUY"?

Это долгий процесс lol...

Причина обращения: