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

 

1. 왜 "응용 프로그램"섹션입니까? 2 단어로. 이해가 안 됩니다.

2. 서비스 데스크 섹션은 어디에 있습니까? 나는 그들이 누군가를 이 주제로 보내기를 원합니다:

https://www.mql5.com/ru/forum/290284

고맙습니다

 
다시, "홈" 버튼을 누를 때와 같이 차트 이동이 시작되었습니다. 패턴이 공개되지 않았고 약 반년 동안 문제가 없었고 이제 1940 빌드가 반환되었습니다.
 
포인터 버그
 class A {};

void OnStart ()
{
  A* a = NULL ;
  
   if ( true && a) // '&&' - illegal operation use
    ;
    
   if (a) // OK
    ;
}
 
Vladimir Pastushak :

이것이 정상적인 기능 동작입니까? 그렇다면 어떻게 시간을 줄일 수 있습니까? 기록이 미리 로드되었습니다.

결과 :

기호 ARSA 16 544 647

기호 AVAN 16 506 592

기호 AVAZ 16 553 408

기호 AVAZP 16 511 019

ASSB 기호 16 521 310


이 동작은 CFD에 나타납니다.


모두의 행동

다음은 가격 요청당 16초의 스크립트입니다. 이 순간에 프로그램이 단단히 멈춥니다...

 void OnStart ()
  {
   int      all_symbols = SymbolsTotal ( false );
   string   sym_name    = "";
   MqlRates    mas[];
   Print ("Symbols all ",all_symbols);
   ulong time_= GetMicrosecondCount ();
   
   for ( int i= 0 ;i<all_symbols;i++)
       if ((sym_name= SymbolName (i, false ))!="")
        {
         SymbolSelect (sym_name, true );
         ArrayResize (mas,i+ 1 , 100000 );

         time_= GetMicrosecondCount ();

         CopyRates (sym_name, PERIOD_D1 , 0 , 1 ,mas);

         Print ("Copy   N ",(i+ 1 )," Name ",sym_name," time = ",( GetMicrosecondCount ()-time_));

        }

   for ( int i= 0 ;i<all_symbols;i++)
       if ((sym_name= SymbolName (i, false ))!="")
        {
         SymbolSelect (sym_name, true );
         ArrayResize (mas,i+ 1 , 100000 );

         time_= GetMicrosecondCount ();

         double rez = iOpen (sym_name, PERIOD_D1 , 0 );

         Print (" iOpen    N ",(i+ 1 )," Name ",sym_name," time = ",( GetMicrosecondCount ()-time_));

        }
  }

그리고 여기에 로그의 일부가 있습니다

디제이 0 12:18:33.507 테스트카피(EURUSD,H1) N 63 이름 SGDJPY 시간 = 46076 복사

OP 0 12:18:33.552 테스트카피(EURUSD,H1) 복사 N 64 이름 USDEUR_BASKET 시간 = 44995

IG 0 12:18:33.597 테스트카피(EURUSD,H1) 복사 N 65 이름 EURRUB_TOD 시간 = 44863

0 12:18:33.642 테스트카피(EURUSD,H1) 복사 N 66 이름 EURRUB_TOM 시간 = 45040

GS 0 12:18:33.698 테스트카피(EURUSD,H1) 복사 N 67 이름 USDRUB_TOD 시간 = 56006

CF 0 12:18:33.743 테스트카피(EURUSD,H1) 복사 N 68 이름 USDRUB_TOM 시간 = 44925

CI 0 12:18:33.787 테스트카피(EURUSD,H1) 복사 N 69 이름 CNYRUB_TOD 시간 = 44820

에스 0 12:18:33.833 테스트카피(EURUSD,H1) 복사 N 70 이름 CNYRUB_TOM 시간 = 45086

CF 0 12:18:50.336 TestCopy (EURUSD,H1) 복사 N 71 이름 ABRD 시간 = 16503669

KL 0 12:19:06.836 TestCopy (EURUSD,H1) 복사 N 72 이름 AESL 시간 = 16499892

FF 0 12:19:06.881 테스트카피(EURUSD,H1) N 73 이름 AFKS 시간 복사 = 44842

채널 0 12:19:06.926 테스트카피(EURUSD,H1) 복사 N 74 이름 AFLT 시간 = 44963

DP 0 12:19:23.429 TestCopy (EURUSD,H1) 복사 N 75 이름 AKRN 시간 = 16502943

CG 0 12:19:39.929 TestCopy (EURUSD,H1) 복사 N 76 이름 ALBK 시간 = 16499755

RL 0 12:19:56.433 TestCopy (EURUSD,H1) 복사 N 77 이름 ALNU 시간 = 16503651

EG 0 12:19:56.478 TestCopy (EURUSD,H1) 복사 N 78 이름 ALRS 시간 = 44989

확인 0 12:20:12.978 TestCopy (EURUSD,H1) 복사 N 79 이름 AMEZ 시간 = 16500788

QS 0 12:20:13.034 TestCopy (EURUSD,H1) 복사 N 80 이름 APTK 시간 = 55954

GF 0 12:20:29.541 TestCopy (EURUSD,H1) 복사 N 81 이름 ARMD 시간 = 16506946

HM 0 12:20:46.051 TestCopy (EURUSD,H1) 복사 N 82 이름 ARSA 시간 = 16509620

DD 0 12:21:02.553 TestCopy (EURUSD,H1) 복사 N 83 이름 ASSB 시간 = 16501809

GK 0 12:21:19.083 TestCopy (EURUSD,H1) 복사 N 84 이름 AVAN 시간 = 16529765

HP 0 12:21:35.586 TestCopy(EURUSD,H1) 복사 N 85 이름 AVAZ 시간 = 16502812

HK 0 12:21:52.085 TestCopy (EURUSD,H1) 복사 N 86 이름 AVAZP 시간 = 16499796

NO 0 12:21:52.130 TestCopy (EURUSD,H1) 복사 N 87 이름 BANE 시간 = 44973


전체 로그는 아래에 있습니다.

파일:
20181120.log  196 kb
 
fxsaber :
포인터 버그

그리고 그 차이점은 무엇입니까?

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

오류, 버그, 질문

fxsaber , 2018.09.17 14:17

버그인가요?
 class A {};

A* a = NULL ;

bool b1 = a && true ; // OK
bool b2 = true && a; // '&&' - illegal operation use

 
A100 :

그리고 그 차이점은 무엇입니까?

나는 아주 나쁜 기억을 가지고 있습니다. 내가 여러 번 발명한 일부 "자전거".

 
나는 그러한 오류가 이유가 없다고 생각합니다. 왜냐하면 (bool에 대한 포인터의 무료 암시적 캐스팅이 있는 경우) 해석하는 방법이 명확하지 않기 때문입니다.
 class A {
public :
         bool operator &&( bool a ) { return a; }
};
void OnStart ()
{
        A *a, *b;
         if (a && b);
}

또는 어떻게

         if (( bool )a &&( bool )b);       //(1)

또는 어떻게

         if ((*a). operator &&(( bool )b));//(2)
 
A100 :
나는 그러한 오류가 이유가 없다고 생각합니다. 왜냐하면 (bool에 대한 포인터의 무료 암시적 캐스팅이 있는 경우) 해석하는 방법이 명확하지 않기 때문입니다.

예, 귀하의 경우에는 모호성이 있습니다. 좋은 방법으로, 이에 대한 컴파일러 경고 가 최소한 있어야 합니다.

훨씬 단순한 경우에는 모든 것이 명확합니다. C++도 이에 동의한다고 생각합니다.

 

fxsaber :
Это баг?

 class A {};

A* a = NULL ;

bool b1 = a && true ; // OK
bool b2 = true && a; // '&&' - illegal operation use

임시 해결책으로 '!' 연산자를 사용하십시오. (논리적 아님)

 class A {};

A* a = NULL ;

bool b1 = !!a && true ;
bool b2 = true && !!a;


우리는 해결책을 생각할 것입니다(많은 코드가 있는 지금 동작을 변경할 수 있습니까?)
포인터의 경우 bool 캐스트 작업은 포인터가 가리키는 개체가 아니라 포인터에 대한 작업일 수 있습니다.

이 경우 객체에 대한 작업을 수행하려면 다음과 같은 코드를 작성해야 합니다.

 class A {};

A* a = NULL ;

bool b1 = *a && true ;
bool b2 = true && *a;

캐스트 연산자도 추가하고 싶지만 이 작업은 (매우) 우선 순위가 낮습니다.
 
Ilyas :

임시 해결책으로 '!' 연산자를 사용하십시오. (논리적 아님)

컴파일러가 이중 부정을 최적화합니까?

사유: