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

 
Igor Makanu :

여기 @Vict 는 매크로 대체를 통해 OS 종료와 함께 예외를 만드는 데 도움을 주었습니다. https://www.mql5.com/ru/forum/318246/page10#comment_12651045

, 일반적으로 실행 가능한 솔루션이지만 ...하지만 소름 끼치고 역겨워 보입니다! )))

예, 이것은 일반적으로 일종의 주석입니다 ... 매크로에서 반환 래핑 - 변태에 대해 많이 알아야 함) 나중에 이러한 코드를 이해하는 방법 ... 그런 다음 적어도 매크로 이름을 더 자체적으로 만들어야합니다. -설명, 예: TRY_OR_RETURN
 
Alexey Navoykov :
예, 이것은 일반적으로 일종의 주석입니다 ... 매크로에서 반환 래핑 - 변태에 대해 많이 알아야 함) 나중에 이러한 코드를 이해하는 방법 ... 그런 다음 적어도 매크로 이름을 더 자체적으로 만들어야합니다. -설명, 예: TRY_OR_RETURN

)))

나는 그것이 어떻게 보이는지 보았고 그것을 사용하지 않았습니다. 나는 구식 방식으로 작성합니다 if(!myfunc()) return; OnTick()에서 - solid ifs의 전체 코드 ... 또한 꽤 감동적이고 재미있어 보입니다. ))))

 

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

MetaTrader 5 플랫폼 빌드 2085의 새 버전: Python과의 통합 및 전략 테스터의 대대적인 개선

안드레이 바리노프 , 2019.09.06 06:25

이 코드에 경고가 표시되는 이유를 설명할 수 있습니까?

메서드에 다른 서명이 있습니다...

 class A
  {
   public :
                     A( void ) {}
                    ~A( void ) {}
       //===============
       void            Test( void ) {}
       //===============
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+  
class B : public A
  {
   public :
                     B( void ) {}
                    ~B ( void ) {}
       //===============
       void            Test( int a) {}
       //===============
  };
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   B b;

   b.Test(); //deprecated behavior, hidden method calling will be disabled in a future MQL compiler versions
   b.Test( 5 );
//---
   return ( INIT_SUCCEEDED );
  }

 

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

MetaTrader 5 플랫폼 빌드 2085의 새 버전: Python과의 통합 및 전략 테스터의 대대적인 개선

안드레이 바리노프 , 2019.09.06 06:11

Typename()이 빌드 2136에서 손상되었습니다.

다시 고쳐주세요.

 enum eTest
  {
   TEST
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   Alert ( typename (eTest)); // eTest::eTest а правильно (и раньше так было) eTest
//---
   return ( INIT_SUCCEEDED );
  }

유형 이름


 
@일리아스

이 표시기는 시스템을 충돌시킵니다.
또한 화면 해상도가 변경되고 픽셀이 깜박이고 컴퓨터를 다시 시작해야 합니다.
또한 겉보기에 무해해 보이는 Crash() 함수를 호출 하지 않으면 충돌이 발생하지 않습니다.
다음과 같이 재생:

  • 표시기를 실행
  • 우리는 일부 브레이크가 시작될 때까지 기간을 변경하기 시작합니다
  • 그 후 우리는 MT5를 최소화하려고 노력합니다



이 작업을 수행할 때마다 이 충돌을 재생했습니다(6-8회).

파일:
AnyTF.mq5  10 kb
iCanvas.mqh  21 kb
 
LTSC에서 충돌하지 않고 로그에 오류가 있습니다. MemoryException 4424265936 바이트를 사용할 수 없음, 0 heapmin 결과

그래도 몇 번 더 TF 변경 후 시스템이 간신히로드되고 로딩 휠이 한 번 100 회전을 한 후 충돌했습니다.로드되지 않을 것이라고 생각했습니다. 확인하지 않는 것이 좋습니다)
 
Fast235 :
LTSC에서 충돌하지 않고 로그에 오류가 있습니다. MemoryException 4424265936 바이트를 사용할 수 없음, 0 heapmin 결과

그래도 몇 번 더 TF를 변경하고 시스템이 간신히 로드된 후 충돌이 발생했습니다. 로드 휠은 한 번 100회 회전했습니다. 로드되지 않을 것이라고 생각했습니다. 확인하지 않는 것이 좋습니다.

예, 충돌이 매우 어렵습니다. 위험을 감수하지 않는 것이 좋습니다.
물론 모두 메모리에 관한 것입니다.
다음과 같은 핸들로 메모리를 정리하면:

 int OnInit ()
  {
   ChartSetInteger ( 0 , CHART_FOREGROUND , false );
   if (erase)
       ChartSetInteger ( 0 , CHART_SHOW , false );
   Canvas.Erase();
   Canvas.Comm( "Идет загрузка всех тиков. Подождите пожалуйста" );
   Canvas.Update();
   N= CopyTicks ( _Symbol ,ticks, COPY_TICKS_ALL ,( TimeCurrent ()-Weeks* 7 * 24 * 60 * 60 )* 1000 , INT_MAX );
   Print ( "Скачено " + string (N)+ " тиков" );
   if (N> 0 ) N=CalculateNewTF(ticks,bars,TF);
   ArrayFree (ticks);
   Print ( "Сформировано " + string (N)+ " баров" );
   if (N> 0 ) ShowBars(bars);
   Crash();
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
void OnDeinit ( const int reason) 
  {
     ArrayFree (bars); 
     if (erase) ChartSetInteger ( 0 , CHART_SHOW , true ); 
  }

충돌도 일어나지 않는다. 어쨌든 나는 성공하지 못했다.
그러나 결국 TF를 변경할 때 어레이의 자동 정리 가 발생해야 합니다!

그리고 표시기에 대한 정보만 읽기 때문에 충돌이 없는 Crash() 함수와 관련이 있는지 명확하지 않습니다.
이 기능을 실행하면 TF를 변경할 때 OnDeinit가 느려질 수 있으므로 MT5가 메모리를 정리할 시간이 없습니다.
OnDeinit 비동기에 오랜 시간 문제가 있습니다. 무질서! 결국 시스템이 비동기로 인해 붕괴되어서는 안됩니다 ...

 

표시기가 있는 차트를 스크롤할 때 프로세서가 코어를 100%로 로드하는 이유는 무엇입니까?

결국, 아이디어에 따라 표시기가 계산되고 그려지며 메모리에서로드 만해야합니다.

 
Aleksey Vyazmikin :

표시기가 있는 차트를 스크롤할 때 프로세서가 코어를 100%로 로드하는 이유는 무엇입니까?

결국, 아이디어에 따라 표시기가 계산되고 그려지며 메모리에서로드 만해야합니다.

차트를 그릴 때 프로세서 로드는 비디오 카드의 성능에 직접적으로 의존합니다.

카드가 약한 구형 랩톱이나 비디오 카드/드라이버가 없는 서버에서는 불가피하게 CPU 사용량이 순간적이지만 짧은 스파이크가 발생합니다.

글쎄요, CPU 자체는 흔적도 없이 증가된 요청을 잡아먹기 위해 더 강력하게 필요합니다.
 
Renat Fatkhullin :

차트를 그릴 때 프로세서 로드는 비디오 카드의 성능에 직접적으로 의존합니다.

카드가 약한 구형 랩톱이나 그래픽 카드/드라이버가 없는 서버에서는 불가피하게 CPU 사용량이 순간적이지만 짧은 스파이크가 발생합니다.

글쎄요, CPU 자체는 흔적도 없이 증가된 요청을 잡아먹기 위해 더 강력하게 필요합니다.

FX-8350 프로세서와 Radeon HD 7950 비디오 카드에 대해 이야기하고 있습니다. 비디오 카드가 MT5에서 로드되었다는 느낌이 없습니다.