불균형 괄호

 

괄호를 올바르게 배치하는 방법을 알 수 없습니다. 내 실수가 무엇인지 설명하십시오.

 int start()
  { 
//----
   { 
   pending = ExistOrders( NULL );
   if (pending > 0 ) { return ;}
   positions = ExistPositions( NULL );
   if (positions > 0 ) { return ;}
   } else { 
   ticket= OrderSend ( Symbol (),OP_SELL, 0 , 1 ,Bid, 3 ,Bid+ 20 * Point ,Bid- 40 * Point , "" ,magic, 0 , Red );}
   }
   
//----
   return ( 0 );
  }
 
liana :

괄호를 올바르게 배치하는 방법을 알 수 없습니다. 내 실수가 무엇인지 설명하십시오.

가장 긴 줄 의 추가 중괄호
 
int start() { 
//----
   pending = ExistOrders( NULL );
   if (pending > 0 ) return ( 0 ); // если оператор одиночный фигурные скобки можно не ставить
   positions = ExistPositions( NULL );
   if (positions > 0 ) {
       return ( 0 );     // хотя со скобками тоже правильно
   }
   else { // else относится к ближайшему if
      ticket= OrderSend ( Symbol (),OP_SELL, 0 , 1 ,Bid, 3 ,Bid+ 20 * Point ,Bid- 40 * Point , "" ,magic, 0 , Red );   
   }
//----
   return ( 0 );
}

이 작업을 수행할 수 있지만 코드는 다음과 같이 더 많은 행을 사용합니다.

 int start() 
{ 
//----
   pending = ExistOrders( NULL );
   if (pending > 0 ) 
       return ( 0 ); // если оператор одиночный фигурные скобки можноне ставить
   positions = ExistPositions( NULL );
   if (positions > 0 ) 
   {
       return ( 0 );     // хотя со скобками тоже правильно
   }
   else 
   { 
      // else относится к ближайшему if
      ticket= OrderSend ( Symbol (),OP_SELL, 0 , 1 ,Bid, 3 ,Bid+ 20 * Point ,Bid- 40 * Point , "" ,magic, 0 , Red );   
   }
//----
   return ( 0 );
}

이 작업을 수행할 수도 있지만 편집할 때 다음과 같은 불편이 있습니다.

 int start() 
{  pending = ExistOrders( NULL );
   if (pending > 0 ) 
       return ( 0 ); // если оператор одиночный фигурные скобки можноне ставить
   positions = ExistPositions( NULL );
   if (positions > 0 ) 
   {   return ( 0 );     // хотя со скобками тоже правильно
   }
   else 
   { // else относится к ближайшему if
      ticket= OrderSend ( Symbol (),OP_SELL, 0 , 1 ,Bid, 3 ,Bid+ 20 * Point ,Bid- 40 * Point , "" ,magic, 0 , Red );
   }
//----
   return ( 0 );
}

예를 들어 여는 괄호가 있는 줄을 삭제하거나 이동해야 하는 경우 추가 조작을 수행해야 합니다.

따라서 옵션 1이 더 좋습니다.

 
ilunga :
가장 긴 줄의 추가 중괄호

제거하면 "종료 브레이크가 예상됨"이라고 씁니다.
 
valenok2003 :


귀하의 버전을 복사했습니다 - 다시 "불균형 괄호"라고 표시됩니다.
 
liana :

귀하의 버전을 복사했습니다 - 다시 "불균형 괄호"라고 표시됩니다.

네 알겠습니다 바로 수정하겠습니다
 
int start() { 
//----
   pending = ExistOrders(NULL);
   if(pending > 0 ) return(0); // если оператор одиночный фигурные скобки можно не ставить
   positions = ExistPositions(NULL);
   if(positions > 0 ) {
      return(0);     // хотя со скобками тоже правильно
   }
   else { // else относится к ближайшему if
      ticket=OrderSend(Symbol(),OP_SELL,0,1,Bid,3,Bid+20*Point,Bid-40*Point,"",magic,0,Red);
   }
//----
   return(0);
}
 

어떤 이유에서인지 모든 옵션에 "종료 브레이크가 예상됨"이 표시됩니다. 그 이유는 무엇입니까?

valenok2003 :

이 작업을 수행할 수 있지만 코드는 더 많은 행을 사용합니다.

이 작업을 수행할 수도 있지만 편집할 때 다음과 같은 불편이 있습니다.

예를 들어 여는 괄호가 있는 줄을 삭제하거나 이동해야 하는 경우 추가 조작을 수행해야 합니다.

따라서 옵션 1이 더 좋습니다.

 

다음은 전체 코드입니다. 내가 수정하지 않아서 "종료 브레이크 예상", "불균형 괄호"라고 씁니다.

도와주세요, 저는 지금 한 시간 동안 이 브래킷과 씨름하고 있습니다.
미결제 주문과 미결제 주문 이 있는지 확인하고 주문을 개설하고 싶습니다.

 int pending;
int positions;
int ticket;
int magic= 576 ;

int start() { 
//----
   pending = ExistOrders( NULL );
   if (pending = True ) return ( 0 ); // ???? ???????? ????????? ???????? ?????? ????? ?? ???????
   positions = ExistPositions( NULL );
   if (positions = True ) {
       return ( 0 );     // ???? ?? ???????? ???? ?????????
   }
   else { // else ????????? ? ?????????? if
      ticket= OrderSend ( Symbol (),OP_SELL, 0 , 1 ,Bid, 3 ,Bid+ 20 * Point ,Bid- 40 * Point , "" ,magic, 0 , Red );   
   }
//----
   return ( 0 );
}
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Exist pending. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+

bool ExistOrders( string sy= "" , int op=- 1 , int mn=- 1 , datetime ot= 0 ) {
   int i, k= OrdersTotal (), ty;
 
   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
      ty= OrderType ();
       if (ty> 1 && ty< 6 ) {
         if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || ty==op)) {
           if (mn< 0 || OrderMagicNumber ()==mn) {
             if (ot<= OrderOpenTime ()) return (True);
          }
        }
      }
    }
  }
   return (False);
}
//+----------------------------------------------------------------------------+
//| Exist open Positions. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+

bool ExistPositions( string sy= "" , int op=- 1 , int mn=- 1 , datetime ot= 0 ) {
   int i, k= OrdersTotal ();
 
   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if ( OrderSymbol ()==sy || sy== "" ) {
         if ( OrderType ()==OP_BUY || OrderType ()==OP_SELL) {
           if (op< 0 || OrderType ()==op) {
             if (mn< 0 || OrderMagicNumber ()==mn) {
               if (ot<= OrderOpenTime ()) return (True);
            }
          }
        }
      }
    }
  }
 

liana :

다음은 전체 코드입니다. 내가 수정하지 않아서 "종료 브레이크 예상", "불균형 괄호"라고 씁니다.

도와주세요, 저는 지금 한 시간 동안 이 브래킷과 씨름하고 있습니다.
미결제 주문과 미결제 주문이 있는지 확인하고 주문을 개설하고 싶습니다.


마지막 ExistPositions 기능이 닫히지 않았습니다. 그리고 bool 반환 값이 없으며 오류도 있습니다. 즉, 조건이 충족되지 않으면 함수는 여전히 무언가를 반환해야 합니다.

코드를 복사할 때 주의하십시오.

 
valenok2003 :

마지막 ExistPositions 기능이 닫히지 않았습니다. 그리고 bool 반환 값이 없으며 오류도 있습니다.
감사합니다 (Kim의 기능을 잘못 복사했습니다).
이제 수정됨 - 다시 "종료 브레이크가 예상됨
 int pending;
int positions;
int ticket;
int magic= 576 ;

int start() { 
//----
   pending = ExistOrders( NULL );
   if (pending = True ) return ( 0 ); // ???? ???????? ????????? ???????? ?????? ????? ?? ???????
   positions = ExistPositions( NULL );
   if (positions = True ) {
       return ( 0 );     // ???? ?? ???????? ???? ?????????
   }
   else { // else ????????? ? ?????????? if
      ticket= OrderSend ( Symbol (),OP_SELL, 0 , 1 ,Bid, 3 ,Bid+ 20 * Point ,Bid- 40 * Point , "" ,magic, 0 , Red );
   }
//----
   return ( 0 );
}
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Exist pending. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+

bool ExistOrders( string sy= "" , int op=- 1 , int mn=- 1 , datetime ot= 0 ) {
   int i, k= OrdersTotal (), ty;
 
   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
      ty= OrderType ();
       if (ty> 1 && ty< 6 ) {
         if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || ty==op)) {
           if (mn< 0 || OrderMagicNumber ()==mn) {
             if (ot<= OrderOpenTime ()) return (True);
          }
        }
      }
    }
  }
   return (False);
}

//+----------------------------------------------------------------------------+
//|  Exist open positions. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+

bool ExistPositions( string sy= "" , int op=- 1 , int mn=- 1 , datetime ot= 0 ) {
   int i, k= OrdersTotal ();
 
   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if ( OrderSymbol ()==sy || sy== "" ) {
         if ( OrderType ()==OP_BUY || OrderType ()==OP_SELL) {
           if (op< 0 || OrderType ()==op) {
             if (mn< 0 || OrderMagicNumber ()==mn) {
               if (ot<= OrderOpenTime ()) return (True);
            }
          }
        }
      }
    }
  }
   return (False);