초보자의 질문 MQL4 MT4 MetaTrader 4 - 페이지 116

 
novichok2018 :

고맙습니다. 휴식이 도움이 된 것 같습니다. 다음에 무슨 일이 일어날지 봅시다.

아니, 별로 도움이 되지 않았다. 동일한 유형의 위치가 열린 경우에만 제대로 작동합니다. 예를 들어, CELL이 먼저 열리고 아직 닫히지 않은 상태에서 BUY가 열리고 닫히면 CELL은 다른 CELL이 열리고 닫힐 때까지(자체 조건에 따라) 닫는 조건을 더 이상 볼 수 없습니다. 그리고 BAI가 갑자기 열리고 닫히면 다시 닫히는 조건을 놓치게 됩니다. I.Kim의 ExistPositions() 함수를 사용하여 BAY를 닫은 후 열린 위치 가 있는지 확인하려고 시도했지만 실행을 제어하기 위해 어디에 삽입해야 하는지, 어디에 Print를 배치해야 하는지 모르겠습니다. 말하다.

 
novichok2018 :

아니, 별로 도움이 되지 않았다. 동일한 유형의 위치가 열린 경우에만 제대로 작동합니다. 예를 들어, CELL이 먼저 열리고 아직 닫히지 않은 상태에서 BUY가 열리고 닫히면 CELL은 다른 CELL이 열리고 닫힐 때까지(자체 조건에 따라) 닫는 조건을 더 이상 볼 수 없습니다. 그리고 BAI가 갑자기 열리고 닫히면 다시 닫히는 조건을 놓치게 됩니다. I.Kim의 ExistPositions() 함수를 사용하여 BAY를 닫은 후 열린 위치 가 있는지 확인하려고 시도했지만 실행을 제어하기 위해 어디에 삽입해야 하는지, 어디에 Print를 배치해야 하는지 모르겠습니다. 말하다.

해결책을 아는 사람이 없습니까? 난 믿지 않아.

 
novichok2018 : 정말 아무도 해결책을 몰라? 난 믿지 않아.

나는 포럼에 입장했습니다 - 당신이 자신에게 이야기하고 있음을 알았습니다 ... 당신의 대화의 시작과 그것이 무엇에 관한 것인지 이해하기 어려운 곳. 프로그램 디버깅을 위해 Print 대신 Alert를 사용 하는 것이 더 편리합니다. 그러면 즉시 화면에 나타납니다. 이러한 경고는 if 조건 검사 전에 배치됩니다. 연필로 디버그하는 방법도 있습니다. 실행해야 할 프로그램을 살펴보고 변수의 값을 적어 두십시오. 변경됨 - 이전 값을 지우고 새 값을 씁니다. 그것이 그들이 전에 했던 방식입니다. 이제 MetaEditor에는 변수 값을 추적할 수 있는 디버거가 있습니다. 가장 간단한 구성은 스크립트를 작성하여 별도로 확인해야 합니다.

 
novichok2018 :

해결책을 아는 사람이 없습니까? 난 믿지 않아.

다음과 같이 시도하십시오.

 //+------------------------------------------------------------------+
void OnTick ()
  {
   int total= OrdersTotal ();
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( TimeCurrent ()> OrderOpenTime ()+ 100 )
           {
             switch ( OrderType ())
              {
               //_______________________________________________________________________
               case OP_BUY :
                 {
                   if ( OrderMagicNumber ()== 101 && MathAbs (WPR1)< 5 )
                    {
                     ClosePosBySelect(slippage,Yellow);
                     break ;
                    }
                   if ( OrderMagicNumber ()== 111 && MathAbs (WPR1)< 20 )
                    {
                     ClosePosBySelect(slippage,Yellow);
                     break ;
                    }
                   break ;
                 }
               //_______________________________________________________________________                 
               case OP_SELL :
                 {
                   if ( OrderMagicNumber ()== 222 && MathAbs (WPR1)> 97.55 )
                    {
                     ClosePosBySelect(slippage,Yellow);
                     break ;
                    }
                   if ( OrderMagicNumber ()== 201 && MathAbs (WPR1)> 96 )
                    {
                     ClosePosBySelect(slippage,Yellow);
                     break ;
                    }
                   break ;
                 }
              }
           }
        }
     }
  }
//_______________________________________________________________________
void ClosePosBySelect( int slip, color col) 
  {
   RefreshRates ();
   if ( OrderType ()== OP_BUY )   OrderClose ( OrderTicket (), OrderLots (), MarketInfo ( OrderSymbol (), MODE_BID ), slip, col);
   if ( OrderType ()== OP_SELL ) OrderClose ( OrderTicket (), OrderLots (), MarketInfo ( OrderSymbol (), MODE_ASK ), slip, col);
  }
//_______________________________________________________________________
 
iCustom은 어디에서 데이터를 가져옵니까?
 
Igor Makanu :

다음과 같이 시도하십시오.

고마워, 나는 그것을 시도했다. 컴파일러가 맹세하지 않도록 약간의 조정 후에도 어떤 위치도 닫히지 않는다.

 
STARIJ :

나는 포럼에 입장했습니다 - 당신이 자신에게 이야기하고 있음을 알았습니다 ... 당신의 대화의 시작과 그것이 무엇에 관한 것인지 이해하기 어려운 곳. 프로그램 디버깅을 위해 Print 대신Alert를 사용 하는 것이 더 편리합니다. 그러면 즉시 화면에 나타납니다. 이러한 경고는 if 조건 검사 전에 배치됩니다. 연필로 디버그하는 방법도 있습니다. 실행해야 할 프로그램을 살펴보고 변수의 값을 적어 두십시오. 변경됨 - 이전 값을 지우고 새 값을 씁니다. 그것이 그들이 전에 했던 방식입니다. 이제 MetaEditor에는 변수 값을 추적할 수 있는 디버거가 있습니다. 가장 간단한 구성은 스크립트를 작성하여 별도로 확인해야 합니다.

조언 감사합니다만 제 상황에는 맞지 않습니다. 이해를 위해 반복하겠습니다. 아래는 클로징 포지션을 위한 커스텀 함수의 코드입니다.

, 제대로 작동하지 않음 - 포지션 닫기   첫 번째 열린 위치를 닫는 조건에서 발생합니다. 즉, 폐쇄 조건이 1인 BUY 또는 CELL을 처음 개설한 다음 유사한 두 번째 포지션이 열렸지만 폐쇄 조건이 2인 경우 이 폐쇄 조건은 무시되고 두 번째 포지션은 다른 마법에도 불구하고 도 조건 1에 따라 닫힙니다.

주문을 마감한 후 break를 적용했지만 솔루션은 절반으로 밝혀졌습니다 . 동일한 유형의 위치가 열린 경우에만 해당됩니다. 예를 들어, CELL이 먼저 열리고 아직 닫히지 않은 상태에서 BUY가 열리고 닫히면 CELL은 다른 CELL이 열리고 닫힐 때까지(자체 조건에 따라) 닫는 조건을 더 이상 볼 수 없습니다. 그리고 BAI가 갑자기 열리고 닫히면 다시 닫히는 조건을 놓치게 됩니다. 그리고 어떻게 될 것인가?

 void ClosePoz()
  { RefreshRates ();
         double WPR0 = iWPR ( NULL , 0 ,bars, 0 );
         double WPR1 = iWPR ( NULL , 0 ,bars, 1 );
         bool rez = false ;
           
   int total= OrdersTotal ();
       for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
      {
         if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
         {
               if ( TimeCurrent ()> OrderOpenTime ()+ 300 )
               {
               if ( OrderMagicNumber == 101 || OrderMagicNumber == 102 || OrderMagicNumber == 103 || OrderMagicNumber == 104 )
                 {
                 if ( MathAbs (WPR1)< 5 )
                 rez =   OrderClose ( OrderTicket (), OrderLots (), NormalizeDouble ( MarketInfo ( OrderSymbol (), MODE_BID ), int ( MarketInfo ( OrderSymbol (), MODE_DIGITS ))),slippage,Yellow);
                 break ; 
                 }
               if ( OrderMagicNumber == 111 )
                 {
                   if ( MathAbs (WPR1)< 17 ) 
                  rez =   OrderClose ( OrderTicket (), OrderLots (), NormalizeDouble ( MarketInfo ( OrderSymbol (), MODE_BID ), int ( MarketInfo ( OrderSymbol (), MODE_DIGITS ))),slippage,Yellow);
                   break ;
                 }
               if ( OrderMagicNumber == 222 )
                 {
                   if ( MathAbs (WPR1)> 96 )
                  rez =   OrderClose ( OrderTicket (), OrderLots (), NormalizeDouble ( MarketInfo ( OrderSymbol (), MODE_ASK ), int ( MarketInfo ( OrderSymbol (), MODE_DIGITS ))),slippage,Yellow);
                   break ; 
                 }
               if ( OrderMagicNumber == 201 )
                 {
                   if ( MathAbs (WPR1)> 97 )
                  rez =   OrderClose ( OrderTicket (), OrderLots (), NormalizeDouble ( MarketInfo ( OrderSymbol (), MODE_ASK ), int ( MarketInfo ( OrderSymbol (), MODE_DIGITS ))),slippage,Yellow);
                   break ;
                 }
               if ( OrderMagicNumber == 202 )
                 {
                   if ( MathAbs (WPR1)> 96 )
                  rez =   OrderClose ( OrderTicket (), OrderLots (), NormalizeDouble ( MarketInfo ( OrderSymbol (), MODE_ASK ), int ( MarketInfo ( OrderSymbol (), MODE_DIGITS ))),slippage,Yellow);
                   break ;
                 }
                
                } 
              }
       break ;  
      }
  }
 
Mickey Moose :
iCustom은 어디에서 데이터를 가져옵니까?

예를 들어 MA에서 사용자 지정 표시기 버퍼에서 연습

novichok2018 :

주문을 마감한 후 break를 적용했지만 솔루션은 절반으로 밝혀졌습니다 . 동일한 유형의 위치가 열린 경우에만 해당됩니다. 예를 들어, CELL이 먼저 열리고 아직 닫히지 않은 상태에서 BUY가 열리고 닫히면 CELL은 다른 CELL이 열리고 닫힐 때까지(자체 조건에 따라) 닫는 조건을 더 이상 볼 수 없습니다. 그리고 BAI가 갑자기 열리고 닫히면 다시 닫히는 조건을 놓치게 됩니다. 그리고 어떻게 될 것인가?

break를 계속으로 바꾸십시오.

내 코드 예제가 아무 것도 닫지 않는 것이 이상합니다. 아마도 가격 정규화 일 것입니다.

 
Igor Makanu :


break를 계속으로 바꾸십시오.


교체됨. 138 오류로 맹세합니다(인용) . 그런 다음 그는 휴식을 취하고 다시 138을 반환했습니다. 이상합니다. 아마도 전에 눈치 채지 못했을 것입니다.

 
Igor Makanu :

예를 들어 MA에서 사용자 지정 표시기 버퍼에서 연습


터미널 데이터 창에 나타나는 필드에서입니까?