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

 
Slava :
그리고 그것은 가능해서는 안됩니다


1. 노동조합 도입은 언제 예정인가요?

2. typedef가 통합 입력과 함께 도입됩니까?

3. 기본 유형에 대한 포인터를 도입할 계획입니까?
 
Konstantin :


1. 노동조합 도입은 언제 예정인가요?

2. typedef가 통합 입력과 함께 도입됩니까?

3. 기본 유형에 대한 포인터를 도입할 계획입니까?

1. 곧 출시됩니다. 컴파일러에서 모든 것이 준비되었으며 테스트 중입니다. 테스트 후 출시됩니다.

2. 언제인지는 아직 알 수 없다.

3. 계획되지 않음.

 

어떤 이유로 CopyTime 함수 (또는 유사한 기능) 수신 배열의 크기가 복사 해야 하는 것보다 크 더라도 수신 배열의 크기를 조정합니다.

여러분, 괜찮습니까? 항상 이런 식이었나요? 아니면 버그?

예를 들어:

 static datetime TimeBuf[]; 

if ( ArraySize (TimeBuf) == 0 ) ArrayResize (TimeBuf, 10 );

CopyTime ( _Symbol , _Period , 0 , 1 , TimeBuf);

CopyTime 함수 는 TimeBuf 배열의 크기를 1로 변경합니다.

이것은 원칙적으로 잘못된 것입니다.

중요한 뉘앙스가 아니라면 무섭지 않을 것입니다. 데이터가 배열의 시작 부분에 복사되고 결과적으로 최적화의 전체 본질이 새싹에서 손실됩니다.

 
Marat Sultanov :

어떤 이유로 CopyTime 함수 (또는 유사한 기능) 수신 배열의 크기가 복사 해야 하는 것보다 크 더라도 수신 배열의 크기를 조정합니다.

여러분, 괜찮습니까? 항상 이런 식이었나요? 아니면 버그?

예를 들어:

CopyTime 함수 는 TimeBuf 배열의 크기를 1로 변경합니다.

이것은 원칙적으로 잘못된 것입니다.

중요한 뉘앙스가 아니라면 무섭지 않을 것입니다. 데이터가 배열의 시작 부분에 복사되고 결과적으로 최적화의 전체 본질이 새싹에서 손실됩니다.

배열이 동적입니다! 즉, 크기 조정이 가능합니다. 대괄호로 치수를 표시하지 않았기 때문입니다.

정적이라는 단어는 이 배열의 개체가 Expert Advisor가 로드될 때 생성되고 언로드될 때 소멸됨을 의미합니다.

 
Slava :

배열이 동적입니다! 즉, 크기 조정이 가능합니다. 대괄호로 치수를 표시하지 않았기 때문입니다.

정적이라는 단어는 이 배열의 개체가 Expert Advisor가 로드될 때 생성되고 언로드될 때 소멸됨을 의미합니다.

죄송합니다만 요점을 잘못 이해하셨습니다.

전역 범위에서 배열을 선언하게 하십시오.

 datetime _TimeBuf[]; 

void OnTick ()
{}

그 다음에:

1) 처음으로 (CopyTime) 막대가 몇 개 있는지 배열에 복사합니다.

 datetime _TimeBuf[];
int       _BarsCountReserveSize;

void OnTick ()
{
   int BarsCount = Bars ( _Symbol , _Period );
   
   if ( ArraySize (_TimeBuf) == 0 )
   { 
       if (_BarsCountReserveSize <= BarsCount) _BarsCountReserveSize = ( int ) ceil (BarsCount* 1.3 );

       ArrayResize (_TimeBuf, BarsCount, _BarsCountReserveSize);

       CopyTime ( _Symbol , _Period , 0 , BarsCount, _TimeBuf);
   }
}

2) 최적의 디자인에 따르면 새로운 막대 가 나타날 때 모든 막대를 복사하는 것은 의미가 없겠죠? 따라서 마지막 2개의 수정된 막대만 복사하기로 결정합니다.

 datetime _TimeBuf[];
int       _BarsCountReserveSize;

void OnTick ()
{
   int BarsCount = Bars ( _Symbol , _Period );
   
   if ( ArraySize (_TimeBuf) == 0 )
   { 
      _BarsCountReserveSize = ( int ) ceil (BarsCount* 1.3 );

       ArrayResize (_TimeBuf, BarsCount, _BarsCountReserveSize);

       CopyTime ( _Symbol , _Period , 0 , BarsCount, _TimeBuf);
   }
   else
   {
       int RequiredCount = BarsCount - ArraySize (_TimeBuf) + 1 ;
      
       ArrayResize (_TimeBuf, RequiredCount, _BarsCountReserveSize);

       CopyTime ( _Symbol , _Period , 0 , RequiredCount, _TimeBuf);
   }
}

3) 결과적으로 최적화가 작동하지 않습니다. CopyTime 은 배열의 크기를 조정하고 size = RequiredCount 로 설정하고 대체 크기를 잃습니다( CopyTime 은 이를 인식하지 못함).

 

CopyTime 이 어레이의 끝에서 시작 부분으로 즉시 복사되는 경우 이러한 상황은 존재하지 않습니다.

대신에:

_TimeBuf[ 0 ] = D'2017.01.01' ;
_TimeBuf[ 1 ] = D'2017.01.02' ;
_TimeBuf[ 2 ] = D'2017.01.03' ;

이것:

 const int ArrSize = ArraySize (_TimeBuf);

_TimeBuf[ArrSize- 3 ] = D'2017.01.01' ;
_TimeBuf[ArrSize- 2 ] = D'2017.01.02' ;
_TimeBuf[ArrSize- 1 ] = D'2017.01.03' ;
 

복사 기능은 항상 동적 배열 의 크기를 변경했습니다. 위 또는 아래. 그러나 요청의 결과로 반환된 레코드 수와 항상 명확한 일치가 있었습니다.

귀하의 경우 초기 요청은 동적으로 크기 조정 가능한 배열에 대한 것입니다. 한 번에 하나의 요소를 요청하는 다른 모든 요청은 재할당이 없도록 알려진 크기(datetime _TimeBuf1[1])의 배열로 보내야 합니다. 수신된 요소를 자체적으로 큰 동적 배열로 전송

 

그래서 항상 그래왔고 괜찮습니다. 이해했다. 당신의 답변에 감사드립니다!

확장은 알고 있었지만 요청한 데이터의 크기로 줄이는 것은 아닙니다. 이제 알겠습니다. 감사합니다!

 

MT4 빌드 1065

USDJPY TF M15 테스트

결과 로그에서:

406 2014.11.28 20:30 매도 18 5.50 118.641 0.000 117.015 0.00
521 2014.12.09 17:15 t/p 18 5.50 118.386 0.000 118.386 -148.95

손실은 어떻게 이루어지나요?
 
-Aleks- :

손실은 어떻게 이루어지나요?

교환.