절반 부지를 폐쇄합니다. - 페이지 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는 티켓 번호가 아닌 POSITION입니다. . .

 

(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"가 될 것이라고 생각했습니까?

결국, 나는 주문이 실행된 후에만 관심이 있습니까?

왜 그 중괄호가 혼란스럽습니까? 왼쪽 괄호가 어디에 있는지를 의미합니까? 그렇다면 이 부분에 대해 여러 번 수정을 해서 개인차가 있는 것 같은데요?