Закрытие половинных участков. - страница 4

 
DomGilberto:
Не могу поверить, что я делаю эти ошибки новичков... Бесит! Да, у меня теперь печатается и выбирается ордер. Это код, который работает в плане печати - лоты все еще не закрываются? Я также вставил сообщения журнала ниже.

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 - это ПОЗИЦИЯ, а не номер билета...

 

(facepalm - мне явно нужно отдохнуть от этого!) Ок, с этим разобрались, и теперь он выбирает заказ. Вот печать журнала - ошибка "Close_Half_Order" = 0? Это ошибка функции OrderClose. Это никак не связано с числом "000" после второго знака после запятой в части "лоты для закрытия", не так ли?

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 - мне явно нужно отдохнуть от этого!) Ок, с этим разобрались, и теперь он выбирает заказ. Вот печать журнала - ошибка "Close_Half_Order" = 0? Это ошибка функции OrderClose. Это не имеет ничего общего с числом "000" после второго десятичного знака в части "лоты для закрытия", не так ли?

Скобки, скобки, скобки. ... иногда их нужно использовать, иногда нет.

OrderClose() не завершился неудачей. . .

            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 . . .

поэтому, если OrderType() не является OP_BUY, последняя строка все равно будет выполнена, отсюда и ошибка 0. ... добавьте скобки, как здесь:

            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
                     } 
 
Последовательные отступы также помогают ясно видеть, что происходит
 
Хммм, все еще не хочет закрывать @ "Close_Half_Order"? Не получаем никакого сообщения об ошибке?
 
DomGilberto:
Хммм, все еще не хочет закрывать @ "Close_Half_Order"? Сообщение об ошибке тоже не появляется?
Какой у вас тип заказа?
 
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?


Так ли это? Вы говорили об отложенных ордерах, действительно ли у вас открыт OP_BUY во время тестирования? или у вас открыт отложенный ордер?
 

Кстати, эти скобки ничего не делают, кроме как запутывают ситуацию. ...

         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 ));
                }  
 

Я установил отложенный ордер "OP_BUYSTOP", но у меня сложилось впечатление, что он изменится при срабатывании на "OP_BUY"?

Я думал, что тип ордера будет "OP_BUY", если он сработал?

В конце концов, меня интересует только ПОСЛЕ срабатывания ордера?

Почему эти скобки сбивают с толку? Вы имеете в виду, где находится левая скобка? Если да, то, похоже, это индивидуальная вещь, так как меня уже несколько раз поправляли?