최적화 결과는 단일 테스트와 다릅니다. - 페이지 6

 

여기에서 테스트 중 확산에 대한 질문이 다시 한번 언급됩니다. 최근에 (실제 거래의 관점에서) 다소 심각해 보이기 때문에 철저한 테스트가 필요한 시스템에 도달했습니다. 그리고 나는 또한 이 문제에 대해 걱정했다. 그 결과 오프라인 테스트에 필요한 스프레드를 설정하는 간단한 스크립트를 작성했습니다.

원칙은 잘 알려져 있습니다. Ask는 symbol.sel 파일에 다시 작성됩니다. 즉, history 폴더에서 오프라인 터미널의 전문가/파일 폴더로 복사하고 스크립트를 실행한 다음 터미널을 닫고 symbol.sel을 다시 복사 하고 터미널을 다시 시작해야 합니다.

추신: 스크립트를 교체했는데 약간의 실수가 있었습니다. 누군가 갑자기 SetSpread_1이 아닌 SetSpread를 가져갔다면 다시 다운로드해야 합니다.

파일:
 
같은 문제. 최적화를 사용하면 단일 실행-재검사를 통해 근본적으로 다른 일부 결과가 나타납니다. 감사합니다 Mathemat는 발굴할 곳을 제안했습니다.

수학 :
테스트할 때 개체에 주의해야 합니다. 전혀 사용하지 않는 것이 좋습니다.

나는 무슨 일이 일어났고 어떻게 해결되었는지 공유할 것입니다. 아마도 누군가에게 유용할 것입니다. 일반적으로 추세선을 사용하여 나만의 지표를 작성했습니다. Expert Advisor의 경우 지표는 깨진 추세선 번호를 터미널의 전역 변수에 전달했습니다. 이와 같이:

 GlobalVariableSet ( "GV_name" , number);

그리고 EA에서 가치를 취했습니다.

 int dc = GlobalVariableGet ( "GV_name" );

시각화 도우미와 단일 테스트에서는 모든 것이 정상이었습니다. 저것들. 코드를 더 작게 만들기 위해 "추가" 변수 선언을 저장하기로 결정했습니다. 다음과 같이 코드를 수정한 후 최적화와 단일 실행 모두에서 동일한 결과로 모든 것이 작동하기 시작했습니다.

 string GlobVar = "GV_name" ;   // объявил переменную в индикаторе на глобальном уровне программы

int start(){
   GlobalVariableSet (GlobVar, number);
}
string GlobVar;   // объявил переменную в советнике на глобальном уровне программы
int dc;

int start(){
  dc = GlobalVariableGet (GlobVar);
}

저것. 지표와 EA에서 전역 변수를 선언하면 모든 것이 올바르게 작동합니다.

 

좋은 저녁입니다, 동료들.

나는 이 주제를 되살리기로 결정했습니다. 왜냐하면. 동일한 문제에 직면했습니다.

Expert Advisor는 그래픽 개체를 사용하지 않습니다. 나는 어디에서나 같은 맞춤 스프레드를 설정했습니다. 그러나 단일 테스트는 최적화 결과 와 매우 다릅니다. 게다가, 나는 다른 컴퓨터에서 단일 테스트를 실행했는데 카본 카피처럼 일대일로 나왔지만 최적화 결과와 절대 일치하지 않았습니다.

누군가가 해결책을 찾았을까요?

 
Andrey Kaunov :

좋은 저녁입니다, 동료들.

나는 이 주제를 되살리기로 결정했습니다. 왜냐하면. 동일한 문제에 직면했습니다.

Expert Advisor는 그래픽 개체를 사용하지 않습니다. 나는 어디에서나 같은 맞춤 스프레드를 설정했습니다. 그러나 단일 테스트는 최적화 결과 와 매우 다릅니다. 게다가, 나는 다른 컴퓨터에서 단일 테스트를 실행했는데 카본 카피처럼 일대일로 나왔지만 최적화 결과와 절대 일치하지 않았습니다.

누군가가 해결책을 찾았을까요?

왜 일치해야 합니까? 매개변수의 완전한 열거와 최선의 선택만 있다면. 하지만 값비싼 자원이다. 따라서 유전자 알고리즘. 그리고 그것들은 본질적으로 최적화된 것에서 매개변수 세트를 무작위 로 선택한 다음 최상의 클리어링을 선택한 다음 더 자세한 검색과 같이 구성됩니다. 예를 들어 6개의 매개변수. 6차원 공간에서 가장 높은 밀도와 같은 최상의 솔루션을 상상해 보십시오. 그리고 많은 밀봉 지점이 있을 수 있습니다. 좋은 알고리즘은 압축 횟수가 적고 완만한 6차원 체적 빈터도 제공하며 최적화를 통해 이를 찾을 수 있으며 알고리즘이 날카로운 압축을 제공하면 결과가 무작위일 수 있습니다. 저것들. 최적화는 봉인을 찾지만 매번 동일한 매개변수 세트(동일한 모델)를 찾지는 않습니다.

 

Valery, 대답하는 대신 인용하겠습니다. 당신은 할 수 있습니다 ...

eugene-last :

흠... 많은 사람들이 문제의 본질을 이해하기를 거부한다고 생각합니다. 아니면 일부러 떠나

최적화란 무엇이며 단일 테스트란 무엇입니까? 답변: 최적화는 몇 가지 단일 테스트입니다.
이것은 무엇을 의미 하는가? 답변: 이것은 이론적으로 최적화 통과가 동일하고 단일 테스트와 동일한 결과로 끝난다는 것을 의미합니다.

글쎄, 실제로는 그렇지 않다는 것이 밝혀졌습니다. 그리고 고문(막시무스가 아니라 여기 있는 누군가가 너무 동요하는 것을 봅니다)은 단일 테스트가 절대적으로 동일한 결과를 보여주기 때문에 엉망이 되지 않습니다. 그렇다면 최적화에서 이 단일 테스트가 다른 결과를 제공하는 이유는 무엇입니까?!?!?!?!?!?!?!

 
Andrey Kaunov :

좋은 저녁입니다, 동료들.

나는 이 주제를 되살리기로 결정했습니다. 왜냐하면. 동일한 문제에 직면했습니다.

Expert Advisor는 그래픽 개체를 사용하지 않습니다. 나는 어디에서나 같은 맞춤 스프레드를 설정했습니다. 그러나 단일 테스트는 최적화 결과 와 매우 다릅니다. 게다가, 나는 다른 컴퓨터에서 단일 테스트를 실행했는데 카본 카피처럼 일대일로 나왔지만 최적화 결과와 절대 일치하지 않았습니다.

누군가가 해결책을 찾았을까요?

1. 모든 변수가 초기화되었는지 확인합니다. MQL4에서는 초기에 초기화되지 않은 변수가 0과 같았지만 지금은 모르겠습니다. 그런데 이것은 지표에도 적용됩니다.

2. 동적 배열을 사용하는 경우 - ArrayResize()의 결과를 확인해야 합니다. - 이에 대해 알아보았는데, 4-5개의 표시기로 EA를 수행했는데, 하나의 표시기가 모든 메모리를 먹었고 EA에서는 내 ArrayResize( )이(가) 요청된 배열 크기를 항상 할당하지는 않았습니다. 내가 틀리지 않았다면 MQL4 는 MQL 프로그램용으로 약 3GB의 메모리를 가지고 있는 반면 터미널은 32비트입니다.

 
Andrey Kaunov :

Valery, 대답하는 대신 인용하겠습니다. 당신은 할 수 있습니다 ...

정확히는 모르겠습니다. 최적화는 여전히 몇 가지 단일 테스트가 아니라 많은 테스트입니다. 따라서 속도를 위해 입력 데이터가 다를 수 있습니다. 진실의 바닥에 도달하려면 간단하고 문제를 재현할 수 있는 코드가 필요합니다. 그러면 아마도 개발자들이 대답할 것입니다.

 
Igor Makanu :

1. 모든 변수가 초기화되었는지 확인합니다. MQL4에서는 초기에 초기화되지 않은 변수가 0과 같았지만 지금은 모르겠습니다. 그런데 이것은 지표에도 적용됩니다.

2. 동적 배열을 사용하는 경우 - ArrayResize()의 결과를 확인해야 합니다. - 이에 대해 알아보았는데, 4-5개의 표시기로 EA를 수행했는데, 하나의 표시기가 모든 메모리를 먹었고 EA에서는 내 ArrayResize( )이(가) 요청된 배열 크기를 항상 할당하지는 않았습니다. 내가 틀리지 않았다면 MQL4 는 MQL 프로그램용으로 약 3GB의 메모리를 가지고 있는 반면 터미널은 32비트입니다.

Igor, 팁 주셔서 감사합니다. 그런 방향으로 파고들도록 노력하겠습니다.

발레리 야스트렘스키 :

정확히는 모르겠습니다. 최적화는 여전히 몇 가지 단일 테스트가 아니라 많은 테스트입니다. 따라서 속도를 위해 입력 데이터가 다를 수 있습니다. 진실의 바닥에 도달하려면 간단하고 문제를 재현할 수 있는 코드가 필요합니다. 그러면 아마도 개발자들이 대답할 것입니다.

글쎄, 아무것도 다르지 않아야합니다. 그렇지 않으면 최적화의 전체 요점이 사라집니다. 그리고 개발자들은 10년 동안 응답하지 않았습니다 ...

 
Andrey Kaunov :

Igor, 팁 주셔서 감사합니다. 그런 방향으로 파고들도록 노력하겠습니다.

글쎄, 아무것도 다르지 않아야합니다. 그렇지 않으면 최적화의 전체 요점이 사라집니다. 그리고 개발자들은 10년 동안 응답하지 않았습니다 ...

개발 된 단어와 불만 사항을 이해하지 못합니다. 문제를 재현하는 이해할 수 있는 코드만)

 
Igor Makanu :

1. 모든 변수가 초기화되었는지 확인합니다. MQL4에서는 초기에 초기화되지 않은 변수가 0과 같았지만 지금은 모르겠습니다. 그런데 이것은 지표에도 적용됩니다.

2. 동적 배열을 사용하는 경우 - ArrayResize()의 결과를 확인해야 합니다. - 이에 대해 알아보았는데, 4-5개의 표시기로 EA를 수행했는데, 하나의 표시기가 모든 메모리를 먹었고 EA에서는 내 ArrayResize( )이(가) 요청된 배열 크기를 항상 할당하지는 않았습니다. 내가 틀리지 않았다면 MQL4 는 MQL 프로그램용으로 약 3GB의 메모리를 가지고 있는 반면 터미널은 32비트입니다.

4에 0, 5에 쓰레기. 지난 번에는 OnInit 외부에서 초기화된 변수를 찾았지만 동시에 작동 중에 변경된 변수를 찾기 때문에 비슷한 문제가 정확히 종료된 것처럼 보였습니다. 최적화 과정 중

다음 패스에서는 원래 값으로 떨어지지 않았습니다.