사용자 지정 지표를 사용할 때 Expert Advisor의 속도를 높이는 이론(기능 - iCustom) - 페이지 5

 
Alexander Laur :
작업을 설명할 수 있습니다. 스크립트는 모든 막대에서 무엇을 해야 합니까? 나는 당신이 문제를 정면으로 해결하려고 노력하고 있다고 생각합니다. 해결해야 할 문제를 보지 않고는 어떤 것도 조언하기 어렵습니다.

스크립트가 있는데 여기 TOR https://www.mql5.com/p/21/234411 인데 작업중 메모리 부족으로 어려움이 있습니다....더 정확히는 짧은 스크립트 작업후 종료됩니다. .

 
Alexander Laur :
금지된 페이지입니다. 스크립트가 있다는 사실은 훌륭하지만 문제가 해결되지는 않습니다. 스크립트는 무엇을 합니까?
스크립트는 가격을 기준으로 표시기의 위치를 분석합니다. 많은 기준이 있습니다. 목표는 표시기가 지원 또는 저항 영역인 표시기에 대한 최적의 설정을 선택하는 것입니다. 스크립트를 사용하면 이동 평균 과 같은 지표를 연결하고 매개변수를 열거할 수 있습니다.
 
Alexander Laur :

Renat는 지표의 계산된 부분을 스크립트로 전송하는 단 하나의 방법이 있다고 대답했습니다.

나는 이것을 이해했지만 작업을 복잡하게 만들고 비용을 크게 증가시킵니다. 도구(스크립트)를 범용이 아닌 것으로 만듭니다.

알렉산더 라우르 :

여전히 마조히즘에 참여하고 계산된 매개변수 범위를 하위 범위로 나눌 수 있습니다. 그리고 각 하위 범위의 매개변수를 변경하여 스크립트를 실행합니다. 시간이 많이 걸리는 것은 이해하지만 어떻게 해야 합니까?

이제 솔루션이 스크립트로 차트를 열고, 차트의 일부 지표를 계산하고, 스크립트로 차트를 닫고, 새 차트를 여는 프로세스를 자동화할 수 있다고 생각합니다. 이렇게 하면 메모리를 지울 수 있습니까?

알렉산더 라우르 :

두 번째 옵션은 5-ku로 전환하는 것입니다. 즉, 5일째에 최적의 파라미터를 검색한 후 4번째 지표에 최적의 파라미터를 대입한다. 5-ke에서는 표시기의 로드 및 언 로딩을 관리할 수 있습니다. 그러나 로딩/언로딩 작업은 리소스를 많이 소모합니다.

비용이 많이 드는 작업은 없는 것보다 낫고 상위 5개에서 더 많은 메모리를 사용할 수 있다는 것을 이해하지만 4개를 거래하기 때문에 4개에 대해 작성된 지표가 필요합니다...

MT 개발자가 컴파일 후에도 지표를 서로 호환되도록 만드는 것은 가능하지만 지표를 5로 변환하는 보편적인 메커니즘은 모르겠습니다...

 
Alexander Laur :

차트에 지표를 추가하는 명령을 찾지 못했습니다. 물론 그래프를 삭제하면 메모리가 확보됩니다. 그러나 차트가 닫히면 차트의 모든 지표도 닫힙니다.

새 차트를 여는 명령은 있지만 새로 열린 이 차트에 지표를 매달아 두는 명령은 없습니다. 따라서 이 경우에도 실제 자동화가 작동하지 않습니다.

그러나 iCustom은 어떻습니까? 우리는 그것을 통해 지표를 호출합니다. 이는 차트를 추가하는 것과 같습니다. 사실, 저는 차트를 차트에 넣지 않습니다.
 
Alexander Laur :

iCustom()을 통해 지표 를 호출하면 차트에 차트가 추가되지 않습니다.

차트를 차트에 넣지 않으면 메모리를 확보하기 위해 어떤 차트를 죽일 것입니까?

시간을 낭비하지 말고 Renat를 믿으십시오.

아마도 내가 착각한 것 같다. 다시 해보자:

1. iCustom 함수를 사용하여 인디케이터를 호출하고 그래픽 버퍼를 메모리에 저장하는 스크립트가 있습니다.

2. iCustom 함수를 여러 번 호출하면 RAM이 채워지고 표시기에서 0이 반환됩니다.

3. 단말기는 메모리로 작업할 수 있어야 합니다. 맞죠? 캐시 지우기는 데이터가 필요하지 않은 경우 가능하지만 데이터 차트가 삭제되면 필요하지 않은 것으로 이해합니다.

4. 차트를 삭제하고 1단계에서 추가 계산을 위해 RAM을 확보합니다.

내가 어디에서 잘못 되었습니까?


추신: 내가 이해하는 한, 데이터는 계산이 수행되는 차트와 연결되어 있습니다. 여기에 어떤 따옴표가 사용되는지는 중요하지 않습니다.

 
-Aleks- :

아마도 내가 착각한 것 같다. 다시 해보자:

1. iCustom 함수를 사용하여 인디케이터를 호출하고 그래픽 버퍼를 메모리에 저장하는 스크립트가 있습니다.

2. iCustom 함수를 여러 번 호출하면 RAM이 채워지고 표시기에서 0이 반환됩니다.

3. 단말기는 메모리로 작업할 수 있어야 합니다. 맞죠? 캐시 지우기는 데이터가 필요하지 않은 경우 가능하지만 데이터 차트가 삭제되면 필요하지 않은 것으로 이해합니다.

4. 차트를 삭제하고 1단계에서 추가 계산을 위해 RAM을 확보합니다.

내가 어디에서 잘못 되었습니까?


추신: 내가 이해하는 한, 데이터는 계산이 수행되는 차트와 연결되어 있습니다. 여기에 어떤 따옴표가 사용되는지는 중요하지 않습니다.

단락 3에서.

터미널은 종료 후 일정 시간 동안 이를 기반으로 하는 시계열 및 표시기의 캐시를 유지하므로 다시 액세스할 때 한 번에 모든 것을 다시 계산할 필요가 없습니다.

 
Andrey Khatimlianskii :

단락 3에서.

터미널은 종료 후 일정 시간 동안 이를 기반으로 하는 시계열 및 표시기의 캐시를 유지하므로 다시 액세스할 때 한 번에 모든 것을 다시 계산할 필요가 없습니다.

그러나 이 "일부" 시간은 무엇입니까? 리소스 해제(메모리에서 캐시 삭제)에 대한 더 많은 기준/방법이 있습니까?
 
-Aleks- :
그러나 이 "일부" 시간은 무엇입니까? 리소스 해제(메모리에서 캐시 삭제)에 대한 더 많은 기준/방법이 있습니까?

아니요, Renat는 이미 대답했습니다.

MT5에서 표시기를 리소스로 사용하는 Expert Advisor가 언로드되면 캐시가 지워집니다. 저것들. 전문가와 함께 차트를 로드하고 일부를 읽고 차트를 닫을 수 있습니다. 그러나 여전히 빠르지 않습니다.

MT4는 잘 모르겠습니다.

 
Andrey Khatimlianskii :

아니요, Renat는 이미 대답했습니다.

MT5에서 표시기를 리소스로 사용하는 Expert Advisor가 언로드되면 캐시가 지워집니다. 저것들. 전문가와 함께 차트를 로드하고 일부를 읽고 차트를 닫을 수 있습니다. 그러나 여전히 빠르지 않습니다.

MT4는 잘 모르겠습니다.

스크립트가 실행된 후 메모리가 해제됩니다. 인디케이터로부터 받은 데이터를 계산하기 위한 메모리가 비워진다는 뜻인데, 그래픽 버퍼에만 해당되는 것은 아니겠죠?

그리고 그래픽 버퍼를 통해서가 아니라 어떻게든 다르게 데이터를 브로드캐스트한다면, 예를 들어 전역 변수를 통해(버퍼를 생성할 수 있는지는 모르겠습니다), 메모리 부족의 영향을 극복할 수 있습니까?

 
여기 실험이 있습니다
1. 차트를 열고 "작업 관리자" - 215692kb 메모리 사용
2. 인디케이터 적용 - 219612kb 메모리 점유(3920kb 증가)
3. 표시기를 삭제합니다 - 217984kb의 메모리가 점유되었습니다(1628kb가 해제됨)
그리고 나머지 미공개 메모리 2292kb는 제가 알기론 캐시에 들어갔나요?
버퍼가 너무 많은 데이터를 차지하지 않습니까? 2013년 2월의 기록입니다.