전역 초기화 실패!!!!!!!

 

누군가 도움을 줄 수 있다면 ... 4 개의 차트 쌍에 대해 전문 고문을 실행하고 5 번째로 실행하기 위해 성공적으로로드 한 후 전역 초기화에 실패하고 제거 했습니다 ...

무엇을 찾아야할지 최소한 지침을 주시면 감사하겠습니다.

감사해요...

 
HELLAS :

누구든지 도움이 될 수 있다면 4 개의 차트 쌍에 대해 전문 고문을 실행하고 5 번째로 실행하기 위해 성공적으로로드 한 후 전역 초기화에 실패하고 제거했습니다 ...

무엇을 찾아야할지 최소한 지침을 주시면 감사하겠습니다.

감사해요...

초기화 중에 문제가 있는 것 같습니다. 코드를 확인 하세요. 도움이 필요한 경우 관련 코드를 게시할 수 있습니다.
 
angevoyageur :
초기화 중에 문제가 있는 것 같습니다. 코드를 확인하세요. 도움이 필요한 경우 관련 코드를 게시할 수 있습니다.


답변해주셔서 감사합니다..

문제는 내 코드가 4개의 차트(쌍)에서 제대로 작동하지만 하나 더 실행하려고 하면 이런 일이 발생한다는 것입니다.

그리고 코드가 너무 커서 도움이 될지 모르겠습니다.

 
코드가 아닐 수도 있습니다. 터미널 창을 드래그할 때 터미널이 충돌했고 부분적으로 복구되었지만 전역 초기화에 실패했다고 말했습니다. 터미널을 다시 시작해야 했습니다. 저는 빌드 625 이전에 그 오류를 본 적이 없으며 지난 주 정도 동안 이에 대한 보고가 두 번 이상 있었습니다.
 
SDC :
코드가 아닐 수도 있습니다. 터미널 창을 드래그할 때 터미널이 충돌했고 부분적으로 복구되었지만 전역 초기화에 실패했다고 말했습니다. 터미널을 다시 시작해야 했습니다. 저는 빌드 625 이전에 그 오류를 본 적이 없으며 지난 주 정도 동안 이에 대한 보고가 두 번 이상 있었습니다.
터미널을 다시 시작했을 때 모든 것이 좋았습니까? 몇 번을 다시 시작했지만 동일한 결과를 얻었기 때문입니다. 사실은 주제에 대한 도움을 제공하는 특정 문서를 찾을 수 없다는 것입니다...
 
예, 다시 시작했을 때 모두 좋았습니다.
 

여러분, 이 스레드가 이제 한 달 정도 된 것으로 알고 있지만 이것은 코드 문제가 아니라 MetaTrader 문제라고 생각합니다. 작업 중인 지표에서 무작위로 이런 일이 발생했습니다. 표시기의 속성 을 보거나 변경하면 발생하기도 하고, 터미널을 종료했다가 다시 시작하면 발생하기도 하고, 그냥 저절로 발생하기도 합니다. 확실히 일종의 초기화 문제입니다. 내가 이것을 확신하는 이유는 내가 현재 있는 것과 다른 시간 프레임에서 MA를 보기 위해 만든 일련의 버튼이 있기 때문입니다. 모든 경우에 실패하면 TF 버튼은 여전히 차트에 있지만 표시기는 제거되었습니다. 당연히 버튼은 더 이상 아무 것도 하지 않습니다. 정상으로 돌아가려면 버튼을 수동으로 삭제하고 지표를 차트에 다시 놓아야 합니다. 잠시 동안 잘 작동한 다음 BOOM! 또 죽었다. 이유에 대한 운율이나 이유가 없습니다. 문제가 우리 코드라고 생각하지 않습니다. MT4에 문제가 있는 것 같아요. 그건 그렇고, 나는 v625를 실행하고 있습니다. 이를 우회할 수 있는 방법이 있으면 게시하겠습니다.

교수

 
코드를 보여주세요. 코드가 범인이 아닌지 확인하기 위해서입니다. 그렇지 않으면 MetaQuotes가 당신을 비웃을 것입니다.
 

나는이 "전역 초기화 실패"도 겪었습니다.

차트 기간을 변경했을 때 발생했습니다.

나는 그것에 대한 어떤 이유도 볼 수 없으며 그것을 복제할 수 없습니다.

이상한 점은 init의 마지막 2개의 코드 블록이 객체 를 생성하고 차트에 생성되었다는 것입니다.

deinit가 호출되지 않았기 때문에 삭제되지 않았습니다.

int OnInit ()
  {
//--- indicator buffers mapping
       IndicatorBuffers ( 4 );

       //---- drawing settings
       SetIndexArrow ( 0 , 250 );
       SetIndexArrow ( 1 , 250 );

       SetIndexStyle ( 0 , DRAW_NONE );
       SetIndexDrawBegin ( 0 ,i- 1 );
       SetIndexBuffer ( 0 ,CTFresistancetBuffer);
       SetIndexLabel ( 0 , "Resistance" );

       SetIndexStyle ( 1 , DRAW_NONE );
       SetIndexDrawBegin ( 1 ,i- 1 );
       SetIndexBuffer ( 1 ,CTFsupportBuffer);
       SetIndexLabel ( 1 , "Support" );

       SetIndexBuffer ( 2 ,HTFresistancetBuffer, INDICATOR_CALCULATIONS );
       SetIndexBuffer ( 3 ,HTFsupportBuffer, INDICATOR_CALCULATIONS );

       switch (S_R_TimeFrame)
        {
         case M5:
            SRPeriod= PERIOD_M5 ;
             break ;
         case M15:
            SRPeriod= PERIOD_M15 ;
             break ;
         case M30:
            SRPeriod= PERIOD_M30 ;
             break ;
         case H1:
            SRPeriod= PERIOD_H1 ;
             break ;
         case H4:
            SRPeriod= PERIOD_H4 ;
             break ;
         case Daily:
            SRPeriod= PERIOD_D1 ;
             break ;
         case Weekly:
            SRPeriod= PERIOD_W1 ;
             break ;
         case Monthly:
            SRPeriod= PERIOD_MN1 ;
             break ;
         case Current_Chart:
            SRPeriod= PERIOD_CURRENT ;
             break ;
        }
        
       if ( Digits == 3 || Digits == 5 )
         NewPip= Point * 10 ;
       else
         NewPip= Point ;
      
       string obj_name = "TDR_ARROW" ;
       ObjectCreate (obj_name, OBJ_LABEL , 0 , 0 , 0 );
       ObjectSet (obj_name, OBJPROP_CORNER , 1 );
       ObjectSet (obj_name, OBJPROP_XDISTANCE ,   30 );
       ObjectSet (obj_name, OBJPROP_YDISTANCE ,   30 );
       ObjectSetText (obj_name, CharToStr ( 243 ), 30 , "Wingdings" , clrBlue );
      
      obj_name = "TDR_LINE" ;
       ObjectCreate (obj_name, OBJ_TREND , 0 , 0 , 0 );
       ObjectSetInteger ( 0 ,obj_name, OBJPROP_WIDTH ,LineWidth+ 1 );
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                         |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {

   for (i= ObjectsTotal ()- 1 ;i>= 0 ;i--)
     {
       string ObName= ObjectName (i);
       if ( StringFind (ObName, "TDR" , 0 )!=- 1 )
         ObjectDelete (ObName);
     }

   return ;
  }
//+------------------------------------------------------------------+
 

내 문제는 새로운 OnInit() 및 OnDeinit() 대신 init() 및 deinit()을 사용하는 것 같습니다. 새 통화로 전환한 후 일이 제대로 작동하는 것 같습니다. MetaQuotes는 나를 웃지 않는 것이 좋습니다. 이전 호출이 여전히 MQL4와 호환된다는 방대한 변경 목록의 어딘가에서 읽은 것을 기억하는 것 같습니다. 사실, 나는 여전히 그것들을 사용하고 딸꾹질 없이 많은 레이블 객체 를 생성하는 또 다른 지표를 가지고 있습니다. 준비가 되면 두 지표를 모두 판매할 계획이므로 안전한 면을 위해 이 값을 변경할 가능성이 높습니다.

어쨌든 문제는 표시기가 초기화 해제될 때 deinit()이 호출되지 않아 객체가 원래대로 삭제되지 않았다는 것입니다. 개체가 아직 존재하기 때문에 초기화에 실패했습니다. 모든 항목에 대해 오류 검사를 수행했지만 개체 생성 실패가 보고되지 않았습니다. 분명히, 그것은 내 오류 처리 코드에 도달하기 전에 MQL의 오류를 날리고 나에게 주었습니다.

GumRai, StringFind 대신 SubStr을 사용해 볼 수 있습니다. 그것은 중요하지 않아야하지만 MQL이 때때로 squirrely 할 수 있음을 발견했습니다. OnDeinit()가 호출되지 않았습니까? 내 문제에 대한 단서가 된 것은 내 deinit() 메서드에 Alert 문을 넣고 호출되지 않았다는 것을 알아차리는 것이었습니다. 또한 오류 처리 코드로 삭제 코드를 래핑하여 어떤 작업을 수행하는지 확인할 수도 있습니다.

교수

 
ProfessorMetal :

내 문제는 새로운 OnInit() 및 OnDeinit() 대신 init() 및 deinit()을 사용하는 것 같습니다. 새 통화로 전환한 후 일이 제대로 작동하는 것 같습니다. MetaQuotes는 나를 웃지 않는 것이 좋습니다. 이전 호출이 여전히 MQL4와 호환된다는 방대한 변경 목록의 어딘가에서 읽은 것을 기억하는 것 같습니다. 사실, 나는 여전히 그것들을 사용하고 딸꾹질 없이 많은 레이블 객체를 생성하는 또 다른 지표를 가지고 있습니다. 준비가 되면 두 지표를 모두 판매할 계획이므로 안전한 면을 위해 이 값을 변경할 가능성이 높습니다.

어쨌든 문제는 표시기가 초기화 해제될 때 deinit()이 호출되지 않아 객체가 원래대로 삭제되지 않았다는 것입니다. 개체가 아직 존재하기 때문에 초기화에 실패했습니다. 모든 항목에 대해 오류 검사를 수행했지만 개체 생성 실패가 보고되지 않았습니다. 분명히, 그것은 내 오류 처리 코드에 도달하기 전에 MQL의 오류를 날리고 나에게 주었습니다.

GumRai, StringFind 대신 SubStr을 사용해 볼 수 있습니다. 그것은 중요하지 않아야하지만 MQL이 때때로 squirrely 할 수 있음을 발견했습니다. OnDeinit()이 호출되지 않았습니까? 내 문제에 대한 단서가 된 것은 내 deinit() 메서드에 Alert 문을 넣고 호출되지 않았다는 것을 알아차리는 것이었습니다. 또한 오류 처리 코드로 삭제 코드를 래핑하여 어떤 작업을 수행하는지 확인할 수도 있습니다.

교수

문제를 재현하기 위해 예제 코드를 게시할 수 있습니까?
사유: