MetaTrader 5 빌드 2121: 전략 테스터의 새로운 디자인 - 페이지 7

 
Roman :

테스트에 StringLen을 추가 하고 문자열을 다르게 초기화했습니다 . 문서화는 사실 완전히 다른 동작입니다.
그리고 이 경우 버퍼는 260이 아니라 0을 보여줍니다.

문서에 0이 반환되고 지정된 경우에 적합하다고 나와 있습니다.

 
A100 :

문서에 0이 반환되고 지정된 경우에 적합하다고 나와 있습니다.

문서가 현재 동작과 전혀 일치하지 않습니다!

두 가지 초기화 유형의 차이점은 무엇입니까?

 StringInit (str, 1 , "_");
 string str = "_" ;
그리고 결과는 다르다
그리고 왼쪽 숫자 260이 어디에서 왔는지 명확하지 않습니다.
 
Roman :

문서가 현재 동작과 전혀 일치하지 않습니다!

문서: 값 0은 문자열이 일정하고 버퍼의 내용을 변경할 수 없음을 의미합니다.

문자열은 상수 "_"로 초기화되고 컴파일러는 문자열을 조건부로(효율성을 위해) 상수로 취급합니다. 왜 안 될까요? 모순은 무엇입니까? 또한 더 이상 작업이 수행되지 않습니다.

 
Roman :
그리고 왼쪽 숫자 260이 어디에서 왔는지 명확하지 않습니다.

사회자는 케이스의 위치와 이유를 설명 했습니다.

 string str = "_" ;

나타나지 않음 - 확인 이유

 
A100 :

진행자 는 설명했습니다 .

숫자 260으로 컴파일러 자체가 StringBufferLen 버퍼를 할당한다는 것을 이해하는 것 같습니다.   초기 사이즈는 260입니다.
문자열의 길이가 260보다 작으면 StringBufferLen은 문자열의 실제 길이가 아니라 정확히 260을 출력합니다!
그리고 문자열의 길이가 260보다 크면 문자열의 실제 값이 표시됩니다.

즉, 문자열 길이가 260자 미만인 StringBufferLen 함수를 사용하면 문자열의 실제 길이를 얻지 못하고 항상 260을 얻습니다.
분명히 여기에는 오류가 있습니다.
용어가 260자를 초과하는 즉시 길이의 실제 값을 얻습니다.

ps 문서가 오래되었으므로 오해의 소지가 있습니다.

 
Roman :

즉, 문자열 길이가 260자 미만인 StringBufferLen 함수를 사용하면 문자열의 실제 길이를 얻지 못하고 항상 260을 얻습니다.
분명히 여기에는 오류가 있습니다.
용어가 260자를 초과하는 즉시 길이의 실제 값을 얻습니다.

엄밀히 말하면 문자열 길이: StringLen 및 버퍼 길이: StringBufferLen은 다소 드문 기능입니다. 그리고 일반적인 경우에는 일치하지 않을 수 있습니다.

전체적으로 적어도 두 가지 의심스러운 경우가 있습니다.

 void OnStart () 
{ 
         string s1 = "_" ;
         Print ( StringBufferLen (s1)); //(1)//Ожидалось 260 вместо 0 - строка s1 далее может быть увеличена
         StringInit (s1, 1 , '_' );
         const string s2 = s1;
         Print ( StringBufferLen (s2)); //(2)//Ожидалось 0\1 вместо 260 - строка s2 константная и не может быть далее увеличена
}
 
.
修正してください。
私 私 使っ 使っ いる 最 適 適 化 は は 、 、 バランス + シャー プレシオ プレシオ です です 、 、 、 ショット の 画像 の の よう よう に 異常 異常 な 最 最 適 化 数 数 が が 表示 れ 以降 の 適 の の の 不 可能 可能 に なっ て い ます ます。。 の の の

MetaQuotes Software Corp.
전략 테스터 최적화 버그는 아직 수정되지 않았습니다.
수정 해주세요.
제가 사용하는 최적화 설정은 밸런스 + 샤프 비율인데, 스크린샷과 같이 비정상적인 최적화 값이 출력되고, 이 비정상적인 값으로 인한 정상적인 최적화는 다음 최적화 생성에서 생성됩니다. 불가능하다.

전략 테스터 최적화 버그는 아직 수정되지 않았습니다.
이 문제를 해결하세요.
제가 사용하는 최적화는 밸런스 + 샤프 비율인데, 스크린샷과 같이 비정상적인 최적화 값이 출력되고, 이후 최적화 생성에서는 이 비정상적인 값으로 인해 정상적인 최적화가 생성됩니다. 그것은 불가능
 
문자열의 길이 는 StringLen입니다. 그리고 StringBufferLen은 미리 할당된 메모리 크기를 보여줍니다.

미리 할당된 문자열 메모리 크기는 컴파일러 내부 문제이므로 할당해서는 안 됩니다.
 
Renat Fatkhullin :
미리 할당된 문자열 메모리 크기는 컴파일러 내부 문제이므로 할당해서는 안 됩니다.

실행 결과 상수 string 의 경우 필요 이상으로 많은 메모리가 할당됩니다(원칙적으로 길이를 늘리는 것은 불가능합니다).

  • const가 아닌 문자열에는 추가 메모리가 할당되지 않습니다(길이가 증가하면 새 메모리 할당이 필요함).
  • 사용자가 StringInitInit를 통해 문자열을 초기화하면 버퍼 크기가 사용자에 의해 명시적으로 설정되고 대부분의 경우 증가하지 않기 때문에 필요한 것보다 더 많은 메모리가 할당됩니다(사용자는 이미 최종 버퍼에 대해 생각했습니다. 필요하고 크기를 명시적으로 설정)
  •  
    A100 :

    실행 결과 상수 string 의 경우 필요 이상으로 많은 메모리가 할당됩니다(원칙적으로 길이를 늘리는 것은 불가능합니다).

  • const가 아닌 문자열에는 추가 메모리가 할당되지 않습니다(길이가 증가하면 새 메모리 할당이 필요함).
  • 사용자가 StringInitInit를 통해 문자열을 초기화하면 버퍼 크기가 사용자에 의해 명시적으로 설정되고 대부분의 경우 증가하지 않기 때문에 필요한 것보다 더 많은 메모리가 할당됩니다(사용자는 이미 최종 버퍼에 대해 생각했습니다. 필요하고 크기를 명시적으로 설정)
  • 문자열에 대한 버퍼의 사전 할당 크기는 컴파일러의 내부 문제입니다.

    문자열로 작업을 반복적으로 변경합니다.