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

 

알렉산더 라우르, 즉. 스크립트/EA가 실행되는 동안 메모리는 예약되어 지울 수 없습니다. 슬픈 결론입니다.
스크립트가 다른 스크립트를 실행한 다음 스크립트가 실행한 스크립트를 닫으면 메모리가 지워져야 합니까, 아니면 복잡한 데이터 처리 환경으로 간주됩니까?

 
-Aleks- :

알렉산더 라우르, 즉. 스크립트/EA가 실행되는 동안 메모리는 예약되어 지울 수 없습니다. 슬픈 결론입니다.
스크립트가 다른 스크립트를 실행한 다음 스크립트가 실행한 스크립트를 닫으면 메모리가 지워져야 합니까, 아니면 복잡한 데이터 처리 환경으로 간주됩니까?

나는 즉시 "실행 중인 전문가와 차트 열기 "를 제안했습니다. 이것은 수행할 수 있습니다. - ChartOpen + ChartApplyTemplate

유일한 질문은 메모리가 닫힐 때 해제될 것인지 여부입니다(Expert Advisor 삭제).

확인하다.

 
Andrey Khatimlianskii :

나는 즉시 "실행 중인 전문가와 차트 열기 "를 제안했습니다. 이것은 수행할 수 있습니다. - ChartOpen + ChartApplyTemplate

유일한 질문은 메모리가 닫힐 때 해제될 것인지 여부입니다(Expert Advisor 삭제).

확인하다.

나는 많은 지표가있는 템플릿을 거의 비어있는 템플릿으로 변경하여 손으로 시도했습니다. 효과가 있습니다 (그러나 캐시는 남아 있음 - 이것이 중요하지 않다고 생각합니다). 하지만 템플릿 스크립트를 통해 열고 닫는 방법 - 방법을 모르겠습니다. 제가 알기로는 스크립트가 실행되는 동안 메모리가 지워지지 않을지 의문이 듭니다... Andrey님, 실험을 도와주세요.
 

추가 질문, 표시기 내부 계산 을 위한 실제 버퍼 유형의 선택이 그래픽 버퍼의 크기에 영향을 줍니까?

유형

크기(바이트)

최소 양수 값

최대값

표현 정확도

C++의 아날로그

뜨다

4

1.175494351e-38

3.402823466e+38

7 유효숫자

뜨다

더블

여덟

2.2250738585072014e-308

1.7976931348623158e+308

15개의 유효 숫자

더블


그리고 미친 생각이지만 그래픽 버퍼 대신 TextOut을 사용하면 어떻게 될까요? 거기에서 데이터를 읽는 방법을 모르겠습니다 ...

 
-Aleks- :

추가 질문, 표시기 내부 계산 을 위한 실제 버퍼 유형의 선택이 그래픽 버퍼의 크기에 영향을 줍니까?

"그래픽 버퍼"라는 용어는 기존 표시기의 그래픽 표시를 의미합니까?
 
Dennis Kirichenko :
"그래픽 버퍼"라는 용어는 기존 표시기의 그래픽 표시를 의미합니까?

문제는 계산을 위해 표시기 코드에서 double 대신 float를 사용하는 경우 그래픽 버퍼에 할당된 메모리 크기에 한 막대 영향을 줄 수 있는지 여부입니다.

//---- buffers

double Vy[];
double bufDirSoft[];

extern int n=3;
extern int BarsN=100;
//----
int ExtCountedBars=0;

 
그러나 메모리가 끝났는지 확인하는 방법에는 어떤 기능이 있습니까?
 
-Aleks- :

문제는 계산을 위해 표시기 코드에서 double 대신 float를 사용하는 경우 그래픽 버퍼에 할당된 메모리 크기에 한 막대가 영향을 미칠 수 있는지 여부입니다...

아니요. 모든 시도를 갈아엎는 마법 같은 기능이 있습니다.

 bool    SetIndexBuffer (
   int                     index,         // индекс буфера
   double                  buffer[],       // массив
   ENUM_INDEXBUFFER_TYPE   data_type       // что будем хранить
   );

이 메커니즘은 언어/터미널 자체에 내장되어 있습니다. 아이디어가 재미있으면서도...

 
-Aleks- :
그러나 메모리가 끝났는지 확인하는 방법에는 어떤 기능이 있습니까?

끝났다은 무슨 뜻인가요? :-)

여기에 뭔가가 있습니다:

https://www.mql5.com/ru/docs/constants/environment_state/terminalstatus#enum_terminal_info_integer

지표 리소스에 대한 메모리를 관리하는 가장 효율적인 방법인 IMHO는 "기록의 최대 막대" 매개변수(설정 --> 차트)를 최소화하는 것입니다. 내가 기억하는 한 매개변수의 최소값은 5,000입니다.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
-Aleks- :
그러나 메모리가 끝났는지 확인하는 방법에는 어떤 기능이 있습니까?

터미널에 대한 정보를 얻을 수 있습니다.

TERMINAL_MEMORY_TOTAL

터미널(에이전트) 프로세스에 사용 가능한 메모리 크기(MB)

정수

TERMINAL_MEMORY_AVAILABLE

터미널(에이전트) 프로세스의 여유 메모리 크기(MB)

정수

TERMINAL_MEMORY_USED

터미널(에이전트)이 사용하는 메모리 크기(MB)

정수