오류, 버그, 질문 - 페이지 2741

 
Ilyas :

MT4의 디버거는 변경되지 않습니다.

우리는 MQL 코드 디버깅 및 프로파일링 시스템을 완전히 재설계하고 있으며 새 시스템은 MT4와 호환되지 않습니다.

MT 4 BUILD 1262 드랍스 터미널


2020.05.13 18:05:09.335 0x0335346E에 대한 액세스 위반 쓰기

2020.05.13 18:05:09.276 VR EURUSD,H4: 1줄 남음

2020.05.13 18:11:11.126 0x033403B7에 대한 액세스 위반 쓰기

2020.05.13 18:37:13.585 0x03093648에 대한 액세스 위반 쓰기


이에 대해 말씀해 주시겠습니까? 문제를 재현하는 미니 소스를 만들었습니다.

 
Vladimir Pastushak :

MT 4 BUILD 1262 드랍스 터미널


2020.05.13 18:05:09.335 0x0335346E에 대한 액세스 위반 쓰기

2020.05.13 18:05:09.276 VR EURUSD,H4: 1줄 남음

2020.05.13 18:11:11.126 0x033403B7에 대한 액세스 위반 쓰기

2020.05.13 18:37:13.585 0x03093648에 대한 액세스 위반 쓰기


이에 대해 말씀해 주시겠습니까? 문제를 재현하는 미니 소스를 만들었습니다.

비공개 메시지 로 출처를 보내주시면 확인하겠습니다.

 
Ilyas :

MT4의 디버거는 변경되지 않습니다.

우리는 MQL 코드 디버깅 및 프로파일링 시스템을 완전히 재설계하고 있으며 새 시스템은 MT4와 호환되지 않습니다.

시원한. MT4에 대한 심각한 지표 개발은 잊어도 됩니다.

감사합니다.

 
Andrey Khatimlianskii :

인터페이스 스트림의 표시기는 계산될 때까지 터미널에서 아무 것도 그리지 않습니다. 여기 걸려있습니다.

4개는 지배되지 않을 가능성이 높습니다.

상위 5개에서 지표는 유사하게 작동하지만 정지 없이 모든 것이 정상입니다.

 
MT5(빌드 2419)는 디버거와 함께 작동하고 몇 분 동안 브라우저로 갔다가 다시 MT로 돌아갔고 어떤 이유로 완전히 비어 있는 것으로 판명되었습니다.
- 창문도, 패널도, 도구도, 아무것도...

 
MT5, Ctrl + 마우스 휠을 통해 프로그래밍 방식으로 가격 조정을 비활성화하는 방법은 무엇입니까?
패널을 만들고 프로그래밍 방식으로 Ctrl + 마우스 휠을 잡고 패널 요소의 크기를 조정합니다.
그러나 동일한 이벤트에서 가격 조정이 트리거되고 "업데이트 대기 중"이라는 문구가 로드되어 무기한 동안 패널과 완전히 겹칩니다.

코드 예제에서 주석 처리된 내용은 프로젝트 에서도 사용되지만 위의 문제에는 어떤 식으로든 영향을 주지 않습니다.
 void HideChart( long achart, color BackClr){     
   //ChartSetInteger(achart, CHART_SHOW, false);
         //ChartSetInteger(achart, CHART_SHOW_OHLC, false);
         //ChartSetInteger(achart, CHART_SHOW_BID_LINE, false);
         //ChartSetInteger(achart, CHART_SHOW_ASK_LINE, false);
         //ChartSetInteger(achart, CHART_SHOW_LAST_LINE, false);
         //ChartSetInteger(achart, CHART_SHOW_PERIOD_SEP, false);
         //ChartSetInteger(achart, CHART_SHOW_GRID, false);
         //ChartSetInteger(achart, CHART_SHOW_VOLUMES, CHART_VOLUME_HIDE);
         //ChartSetInteger(achart, CHART_SHOW_OBJECT_DESCR, false);
         //ChartSetInteger(achart, CHART_SHOW_TRADE_LEVELS, false);
         //ChartSetInteger(achart, CHART_SHOW_DATE_SCALE, false);
         //ChartSetInteger(achart, CHART_SHOW_PRICE_SCALE, false);
         //ChartSetInteger(achart, CHART_FOREGROUND, false);
         //ChartSetInteger(achart, CHART_SHIFT, false);
         //ChartSetInteger(achart, CHART_MODE, CHART_LINE);

         //ChartSetInteger(achart, CHART_SCALE, 0);
         ChartSetInteger (achart, CHART_SCALEFIX , 0 );
         ChartSetInteger (achart, CHART_SCALEFIX_11 , 0 );
         ChartSetInteger (achart, CHART_SCALE_PT_PER_BAR , 0 );
         ChartSetInteger (achart, CHART_EVENT_OBJECT_DELETE , 0 );
         ChartSetInteger (achart, CHART_EVENT_OBJECT_CREATE , 0 );

   	ChartSetInteger (achart, CHART_EVENT_MOUSE_WHEEL , 1 ); 
         ChartSetInteger (achart, CHART_EVENT_MOUSE_MOVE , 0 );
         ChartSetInteger (achart, CHART_MOUSE_SCROLL , 0 );
         ChartSetInteger (achart, CHART_KEYBOARD_CONTROL , 0 );
         ChartSetInteger (achart, CHART_QUICK_NAVIGATION , 0 );
        
         //ChartSetInteger(achart, CHART_COLOR_BACKGROUND, BackClr);
         //ChartSetInteger(achart, CHART_COLOR_FOREGROUND, BackClr);
         //ChartSetInteger(achart, CHART_COLOR_CHART_LINE, BackClr);
         //ChartSetInteger(achart, CHART_COLOR_ASK, BackClr);
         //ChartSetInteger(achart, CHART_COLOR_BID, BackClr);
         //ChartSetDouble(achart, CHART_FIXED_MAX, 1);
         //ChartSetDouble(achart, CHART_FIXED_MIN, 1);
         //ChartSetString(achart, CHART_COMMENT, "");
         //ChartSetInteger(achart, CHART_CROSSHAIR_TOOL, 0);
         //ChartSetInteger(achart, CHART_SHOW_ONE_CLICK, 0);
         //ChartSetInteger(achart, CHART_CONTEXT_MENU, 0);
         ChartRedraw (achart);
}

void OnInit () {
   HideChart( 0 , clrWhite );
} 
 

버그 같나요? 문서의 레이블 너비에는 읽을 수 있다고 나와 있지만

 Print (i, " - " , ObjectGetInteger ( 0 ,name, OBJPROP_XDISTANCE ), " - " , ObjectGetInteger ( 0 ,name, OBJPROP_XSIZE ));

문제

차트의 텍스트는 다음과 같습니다.

전체 코드 첨부

파일:
 
Igor Zakharov :

버그 같나요? 문서의 레이블 너비에는 읽을 수 있다고 나와 있지만

너비는 개체가 완전히 렌더링된 후에만 사용할 수 있습니다.
최근에는 이 문제도 해결했습니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

Sergey Dzyublik , 2020.05.12 19:32

OBJ_EDIT를 사용할 때 문제가 있었습니다. 모든 텍스트가 적절한 개체 크기에 맞도록 OBJPROP_XSIZE 및 OBJPROP_YSIZE의 크기를 설정해야 합니다.

질문: 모든 텍스트가 거기에 맞도록 OBJPROP_XSIZE 및 OBJPROP_YSIZE의 크기를 결정하는 방법은 무엇입니까?
두 가지 옵션을 고려했습니다.
1. OBJ_LABLE 개체를 만들고, 차원을 읽고, OBJ_LABLE 개체를 삭제합니다.
치수 읽기는 개체가 실제로 생성된 후에만 가능하고 개체가 ChartRedraw에 대해 대기열에 있을 때는 불가능하기 때문에 적합하지 않습니다.

2. TextSetFont 다음에 TextGetSize 사용.
1번 방법의 결과와 근본적으로 다르기 때문에 글자 크기에 따라 2.5~2.9배 차이가 나므로 적합하지 않다.
아마도 그 이유는 4K 모니터와 175% DPI일 것입니다.

 #define PRINT(x) ; Print ( #x, ":" , string (x))
          
void SetLabel( long achart, string name, int wnd, string text, color clr, int x, int y, int corn= 0 , int fontsize= 8 , string font= "Tahoma" )
{
   ObjectCreate (achart, name, OBJ_LABEL , wnd, 0 , 0 ); 
   ObjectSetInteger (achart, name, OBJPROP_CORNER , corn); 
   ObjectSetString (achart, name, OBJPROP_TEXT , text); ObjectSetInteger (achart, name, OBJPROP_COLOR , clr); 
   ObjectSetInteger (achart, name, OBJPROP_FONTSIZE , fontsize); ObjectSetString (achart, name, OBJPROP_FONT , font);
   ObjectSetInteger (achart, name, OBJPROP_SELECTABLE , false ); 
   ObjectSetInteger (achart, name, OBJPROP_BORDER_TYPE , 0 );
   ObjectSetInteger (achart, name, OBJPROP_XDISTANCE , x); ObjectSetInteger (achart, name, OBJPROP_YDISTANCE , y);
}

void OnStart (){     
   string obj_name = "test_obj" ;   
   string text = "AAAA::BBBB" ;
   int font_size = 7 ;
   string font_name = "Tahoma" ;
   
   SetLabel( 0 , obj_name, 0 , text, clrWhite , 100 , 100 , 0 , font_size, font_name);
   ChartRedraw ( 0 );
   Sleep ( 1000 );
   
   uint dx_fixed_0 = int ( ObjectGetInteger ( 0 , obj_name, OBJPROP_XSIZE ));
   uint dy_fixed_0 = int ( ObjectGetInteger ( 0 , obj_name, OBJPROP_YSIZE ));
   ObjectDelete ( 0 , obj_name);
   
   PRINT(dx_fixed_0);
   PRINT(dy_fixed_0);
   
   
   uint dx_fixed_1;
   uint dy_fixed_1;
   TextSetFont (font_name, -10 * font_size);
   TextGetSize (text, dx_fixed_1, dy_fixed_1);
   
   PRINT( 1.0 * dx_fixed_0 / dx_fixed_1);  	// Result: 1.0
   PRINT( 1.0 * dy_fixed_0 / dy_fixed_1);  	// Result: 1.0
}  


솔루션 에 대해 Geess 에게 감사드립니다.
TextSetFont 에 전달할 때 글꼴 크기에 -10을 곱해야 합니다.

 
Sergey Dzyublik :

너비는 개체가 완전히 렌더링된 후에만 사용할 수 있습니다.
최근에는 이 문제도 해결했습니다.

고맙습니다! 솔루션 첨부


파일:
 
항상 한 MQL 프로그램에서 파일(RAM 드라이브)에 무언가를 추가해야 하고 다른 MQL 프로그램(및 다른 터미널)에서 이 추가된 모든 데이터를 읽어야 하는 경우 어떤 플래그와 함정이 있을 수 있습니까?