x64 플랫폼용 새로운 MQL5 컴파일러 테스트 - 계산 속도가 2배에서 10배로 빨라졌습니다! - 페이지 14

 

오늘 나는 초고속을 예상하여 Expert Advisor에서 계산 가속을 확인하고 싶었고(더 강력한 백분율을 사용하기도 했습니다)... 어떤 이유로 최적화 기능이 있는 Expert Advisor는 테스터에서 3배 느리게 작동했습니다. 당신은 그것을 가지고 있지 않았다? 문제를 현지화하고 재현하면서 코드를 작성하겠습니다. 시스템 호출이 없으며 많은 배열과 기본 산술 연산 으로만 작동합니다.

몇 가지 더 바라는 점:

1. 디버깅하지 않고 편집기에서 스크립트를 실행하는 기능을 추가할 수 있습니다. 마치 네비게이터에서 온 것처럼. 이러한 유형의 시작은 모든 개발 환경에 있습니다. 나는 syah에서와 같이 Ctrl + F5를 제공한다고 생각했지만 이미이 조합을 사용했습니다 :)

2. 스크립트의 결과를 보기 위해 매번 터미널로 전환하지 않도록 스크립트에서 Windows stdout 콘솔에 대한 호출을 추가합니다. 내가 이해하는 한 WinAPI를 사용하여 직접 호출할 수 있습니다.

3. 유전 알고리즘에 대해 최소한 몇 가지 최적화 설정을 추가합니다. 예를 들어 조합의 수는 1e35일 수 있고 10k 패스로는 항상 충분하지 않습니다(옵티마이저는 10k 이후에 새 패스를 생성하지도 않음). 방법. 반면에 일부 매개변수를 수정하고 분포를 더 정밀하게 조정하고 연구하기 위해 일부 매개변수를 남겼을 때... 음, 조합 수가 적은 경우(예: 50k) GA 옵티마이저는 2k 실행만 제공합니다. 이 특정 작업에는 충분하지 않습니다. 이러한 매개변수에 대한 함수의 동작을 더 잘 연구하는 것입니다. 저것들. 50k를 모두 정렬하는 것은 어리석은 일이며 GA는 2k 실행만 생성하고 충분한 그림을 제공하지 않습니다. 내가 무슨 말을 하는지 이해하길 바랍니다.

 
Renat Fatkhullin :

개선이 필요합니다.

전략 테스터 에서 히스토리에 대한 디버깅을 이미 테스트한 사람이 있습니까?

많은 사람들이 기꺼이 테스트할 것이라고 생각하지만 복잡성과 현실은 일반적으로 코드를 작성하고 거래할 위치를 테스트한다는 것입니다. MT5를 제공하는 중개인은 거의 없으며, 이는 트레이더의 모든 혁신 테스트 속도를 현저히 늦추고 불가피하게 MT5 개발 속도를 늦출 것입니다. 따라서 이 문제를 해결하고 MT5를 사용하려는 동기를 높일 수 있는 간단한 솔루션을 찾는 것이 좋습니다.
 
Renat Fatkhullin :

개선이 필요합니다.

전략 테스터 에서 히스토리에 대한 디버깅을 이미 테스트한 사람이 있습니까?

내가 뭔가 잘못하고 있어. 시각화 도우미가 저를 위해 열리고 평소와 같이 작동합니다. 중단점은 OnInit() 함수의 첫 번째 명령문에 있지만 실행되지는 않습니다.
 
Renat Fatkhullin :

개선이 필요합니다.

전략 테스터 에서 히스토리에 대한 디버깅을 이미 테스트한 사람이 있습니까?

컨텍스트 메뉴에서 "사용처 찾기"를 선택할 수 있는 것도 좋을 것입니다.

주제에서 조금 벗어난 것은 이해하지만 전역 변경 사항을 작성할 필요가 없으며 개발자를 위한 이러한 칩이 있다는 것이 좋습니다.

나는 새로운 이동 평균 컴파일러에 대해 철저히 검사했고 MACD 샘플은 불일치를 찾지 못했고 분명히 잘 테스트되었습니다. 나는 나의 고문에게 그것을 시도할 것이다.

 

나는 그것을 끝까지 디버그하지 않았고 버그가 어떻게 (매우 다르게) 나오는지 찾지 못했지만 지금까지는 Optimize=1에서 다음과 같은 문제를 발견했습니다. 내 Expert Advisor에는 약 100개의 입력 매개변수가 있으며 배열과 함께 많이 작동한다고 즉시 말해야 합니다. 또한 그는 거래하지 않고 계산만합니다.

나는 나의 절차를 설명할 것이다:

1. 터미널을 실행하고 테스터에서 "최적화 = 비활성화"를 선택하고 매개변수의 참조 입력 세트를 제공합니다. 테스터는 올바른 결과를 제공합니다.

2. "최적화 = 빠름(유전 알고리즘)"을 선택하고 실행합니다. 테스터는 첫 번째 단계도 생성하지 않습니다. 에이전트(프로세서)가 응답하지 않습니다. 처음에는 잘못된 매개변수 세트로 인해 일부 계산 오류가 발생할 수 있고 테스터가 단순히 죽을 수 있다고 생각했습니다.

3. 다시 "최적화 = 비활성화"를 선택하고 다시 참조 세트를 제공합니다. 이제 테스터는 결과를 전혀 생성하지 않습니다.

4. 편집기에서 EA 코드를 열고 F5 키를 눌러 최적화되지 않은 코드를 생성합니다. 테스터에서 참조 세트에서 다시 실행합니다. 짜잔, 결과가 있습니다. 일반적으로 그의 내부에는 최적화로 인해 버그가 있습니다.

EA의 입력 매개변수를 파일에 기록하는 기능을 추가했습니다. 따라서 2단계(최적화가 시작되고 테스터 단계가 거의 생성되지 않음)에서 일부 매개변수의 경우 매개변수가 변경되지 않거나 값이 포함되지 않기 때문에 전혀 제공되지 않는 임의의 값이 점프합니다. 설정된 범위에서. 예를 들어, 하나의 매개변수가 80으로 설정되었고 변경할 수 없었습니다. 로그에는 0.01355835795402527(?)이라는 값이 있었습니다. 다른 하나는 로그 4.940656458412465e-324에서 0으로 설정됩니다. 두 매개변수 모두 두 배였습니다. 그러나 그 다음 나는 int에 대해서도 완전히 부적절한 값을 미끄러지는 것을 발견했습니다.

두 번째로, "추가" EA 코드를 잘라내어 이러한 코드만 남겼습니다. 이 또한 오류로 이어집니다. 그것은 여전히 많은 것으로 밝혀졌습니다. 또한 로깅 기능은 모든 매개변수의 값을 표시합니다. 그러나 대부분의 매개변수를 제거했을 때(그리고 64개 또는 80개 미만이 있었음) 테스터는 죽지 않았습니다. 동시에 오류와 내 로깅 기능 사이의 이상한 연결도 발견되었습니다. 주석 처리되면(즉, 모든 매개변수가 코드에서 사용되지 않음) 테스터가 종료됩니다. 기록할 때 테스터는 죽습니다. 아주 이상한.

그리고 세 번째. 나는 계산의 병렬화가 전체 발사 속도의 선형 증가로 이어지지 않는다는 것을 알아차렸다. 예를 들어, 동일한 코드를 사용하는 스크립트와 전문가 파일을 첨부합니다. 이것은 내 전문가가 잘라낸 실제 코드이며 배열만 이름이 바뀌었습니다. Optimize=1을 사용하면 스크립트가 156ms 안에 실행됩니다. 초당 6회가 될 수도 있습니다. (최적화 도구를 사용하지 않으면 3배 더 오래). 8개의 스레드가 있습니다. 이론적으로 초당 48회 실행이 가능합니다. 테스터에서 EA를 실행할 때(저속 최적화를 수행하고 더미 매개변수를 켭니다. 예를 들어 2000번 실행) 초당 4번만 실행했습니다. 단일 코어보다 훨씬 느립니다! 작업 관리자가 정직하게 8 프로세스를 중단했지만. 왜 그래? 여러 프로세스의 메모리 액세스 차단? 긴 배열 초기화? (사실, 배열이 작습니다).

테스터에서 단일 실행을 시작하면 출력 Print: 156ms가 로그에 나타납니다. 저것들. 전문가와 함께라면 모든 것이 정상입니다.

그런데 MQL에 포인터가 있습니까? :) 그리고 복사 배열을 만들어야 했습니다.

 
xfo :

어떤 이유로 최적화된 EA는 테스터에서 3배 느리게 작동했습니다.

이제 왜 속도가 느려지는지 이해합니다. 하나의 에이전트(임의)만 작동하고 다른 에이전트는 실패하여 몇 초마다 한 번씩 계속 시도합니다. 테스터 로그에서 명확한 것은 없습니다. 내가 알기로는 최신 에이전트가 실패하면 이전에 썼던 일이 발생합니다. 테스터 단계는 전혀 생성되지 않습니다.

빌드 1117은 위에서 설명한 모든 문제(구조체 배열 포함)를 해결하지 못했습니다.

 

오늘 1117로 업데이트되었지만 기록 데이터에 대한 디버깅은 여전히 작동하지 않습니다.

ExpertMACD.mt5를 사용하고 Init 기능 입구에 중단점을 바로 설정하고 기록 데이터에 대한 디버깅을 시작하고(버튼을 누름) 편집기 창이 숨겨지고 전략 테스터 설정 이 열립니다. 기간(2015년, 요일, 모든 틱)을 설정하고 시각화 - 확인 표시가 있고 시작 버튼을 누르면 시각화가 시작됩니다. 중단점이 작동하지 않았습니다.

내가 무엇을 잘못하고 있지 ?

 
George Merts :

오늘 1117로 업데이트되었지만 기록 데이터에 대한 디버깅은 여전히 작동하지 않습니다.

저는 ExpertMACD를 사용합니다. mt5 , Init 함수 입구에서 바로 중단점을 설정하고, 과거 데이터에 대한 디버깅을 시작하고(버튼을 누름), 편집기 창을 덮고, 전략 테스터 설정 을 엽니다. 기간(2015년, 요일, 모든 틱)을 설정하고 시각화 - 확인 표시가 있고 시작 버튼을 누르면 시각화가 시작됩니다. 중단점이 작동하지 않았습니다.

내가 무엇을 잘못하고 있지 ?

MetaQuotes-Demo에서 데모 계정을 개설해야 합니다.

moex 데모 계정의 MACD Sample.mq5에서 USDRUB_TOM 기호가 작동하지 않으며(처음에는 작동을 시작한 다음 몇 단계 후에 중지됨) 간단한 백테스트도 작동하지 않습니다.

그리고 moex 데모 계정의 Moving Average.mq5에서는 USDRUB_TOM 기호가 제대로 작동합니다(간단한 백테스트도 가능).

demoforex 데모 계정에서 EURUSD 기호는 잘 작동합니다(간단한 백테스트도 가능) MACD Sample.mq5 및 Moving Average.mq5

demoforex 데모 계정의 MACD Sample.mq5 EURUSD 기호에 디버깅 비디오를 녹화했습니다. (일도 잘 작동합니다)

파일:
capture-mt5-1.zip  5457 kb
 
xfo :

나는 그것을 끝까지 디버그하지 않았고 버그가 어떻게 (매우 다르게) 나오는지 찾지 못했지만 지금까지는 Optimize=1에서 다음과 같은 문제를 발견했습니다. 내 Expert Advisor에는 약 100개의 입력 매개변수가 있으며 배열과 함께 많이 작동한다고 즉시 말해야 합니다. 또한 그는 거래하지 않고 계산만합니다.

...........................

...........................

그런데 MQL에 포인터가 있습니까? :) 그리고 복사 배열을 만들어야 했습니다.

좋은 오후, 더 자세한 정보를 원합니다.

1. 전문가 고문이 계산은 하지만 거래는 하지 않습니다. 전문가는 무엇을 어떻게 출력합니까? Strategy Tester 에서 출시될 때 Expert Advisor에게 무엇을 기대합니까? 최적화로 테스트할 때 어떤 데이터를 얻을 것으로 예상합니까? 우리 측에서는 귀하가 적용한 Expert Advisor의 테스트에서 오류가 발견되지 않았습니다. 당신이 설명한 오류가 그에게 적용됩니까?

2. 사용된 코드의 적용과 함께 당신의 행동과 기대를 단계별로 기술하십시오.

3. 최적화가 있거나 없는 테스트 로그를 첨부할 수 있습니까?

4. 터미널 버전, OS는?

 

Eduard Vavrin , 첨부 파일은 설명된 오류에 적용되지 않습니다. 오류가 나는 코드를 준비해서 보내드리도록 하겠습니다. 시간이 걸리고 지금까지 이 코드에는 원래 Expert Advisor의 내용이 너무 많이 포함되어 있습니다.

내가 첨부한 파일에 대해: 첨부된 Expert Advisor를 한 번 실행하는 데 156ms가 걸린다고 합니다. 1/6초. 우리는 8개의 쓰레드에서 초당 48번의 실행 을 얻을 것이라고 가정할 수 있습니다. 실제로 8개 스레드에서 여러 번 실행(이에 대한 더미 매개변수, 느린 최적화 모드가 있음)할 때 속도는 초당 4-5회 에 불과합니다. 문제는 속도가 왜 떨어지는가 하는 것이었습니다. 에이전트 탭에서 모든 스레드가 실행 중이고 각 스레드가 실행하는 데 1초 이상을 소비하는 것을 볼 수 있습니다. Expert Advisor가 rand()에 의해 반환된다는 사실은 결과를 보기 위한 표시용일 뿐입니다.