보다 정확하게는 기술 지표를 더 잘 초기화하는 방법
일반적으로 데이터 확인 기능이 구현됩니다.
그러나 초기화의 예는 정확히 고려되지 않았습니다.
도움말에서 알려진 한
Нельзя обратиться к данным индикатора сразу после его создания, так как на расчет значений индикатора требуется некоторое время, и поэтому создавать хэндлы индикаторов лучше всего в OnInit(). Функция iCustom() создает соответствующий пользовательский индикатор и при успешном создании возвращает его хэндл. Пользовательские индикаторы могут содержать до 512 индикаторных буферов, содержимое которых также можно получать при помощи функции CopyBuffer(), используя полученный хэндл.
이 기능을 우회하는 가장 좋은 방법....
저도 항상 같은 생각이 들어요.
if (Handle == INVALID_HANDLE) Print("SMA 표시기 핸들을 가져오는 데 실패했습니다.");
이 조건이 작동하면 어떻게해야합니까? 챔피언십이라고 가정 해 봅시다.... 초기화가 더 이상 실행되지 않습니다.
저도 같은 궁금증을 계속 가지고 있었습니다.
이 조건이 작동하면 어떻게해야합니까? 챔피언십이라고 가정 해 봅시다.... 초기화가 더 이상 실행되지 않습니다.
네! 문서화되지 않은 사실입니다. 저도 몰랐어요! 꼭 조사해봐야겠어요! 하지만 저에게는 더 쉽습니다. 모든 칠면조를 Expert Advisor 자체에 포장하고 그게 다입니다. 그러면 Expert Advisor가 마라톤 거리에서 단거리 선수처럼 달리고 어디에서도 비틀 거리지 않습니다!
나는 항상 같은 것을 궁금해합니다.
이 조건이 작동하면 어떻게 해야 하나요? 챔피언십이라고 가정하면 초기화가 더 이상 실행되지 않습니다.

- www.mql5.com
우선 오류 코드를 가져와 로그에 출력합니다. 그리고 온틱() 또는 온계산()에서 다시 접근을 시도해 보세요. 인디케이터 핸들을 얻지 못하면 해당 인디케이터가 없거나 메모리가 부족할 가능성이 높습니다. 이 경우 전문가 고문은 거래할 권한이 없습니다.
자, 여기 있습니다! 우리가 직접 할 수 있습니다! 이러한 상황에서 OnInit() 함수에서 마이너스 1을 반환하여 핸들이 나타날 때까지 OnInit()을 다시 호출하는 식으로 할 수 있습니다! 하지만 이제 컴퓨터에 과도한 스트레스를 주지 않는다면 핸들을 얻지 못할 이유가 없다는 것이 분명해졌습니다. 하지만 빌드를 업데이트할 때 이 문제를 본 적이 있는데, 인디케이터를 다시 컴파일하면 해결할 수 있습니다!

- www.mql5.com
새로운 기고글 인디케이터의 경제적 계산 원칙 가 게재되었습니다:
사용자 및 기술 인디케이터에 대한 호출은 자동 거래 시스템의 프로그램 코드에서 매우 적은 공간을 차지합니다. 종종 단순히 몇 줄의 코드 일뿐입니다. 그러나 가장 많은 시간을 사용하는 몇 줄의 코드로 Expert Advisor를 테스트하는 데 소비해야 하는 경우가 종종 있습니다. 따라서 인디케이터 내 데이터 계산과 관련된 모든 것은 언뜻 보기 보다 훨씬 더 철저히 고려되어야 합니다. 이 글은 이것에 대해 정확하게 이야기 할 것입니다.
이제 Expert Advisor의 코드에서 인디케이터 값의 복사 함수에 대한 합리적인 호출의 세부 사항이 명확해졌으므로 Expert Advisors에서 IsNewBar () 함수를 적용하여 얻을 수 있는 이점을 테스트 할 수 있습니다.
따라서 전략 테스터에서 테스트 할 수 있는 두 가지 Expert Advisors 옵션이 있는데, 첫 번째 옵션은 AMA_Test.ex5입니다. 각 틱에서 인디케이터 버퍼의 데이터를 복사합니다.
두 번째 - IsNewBar_AMA_Test.mq5는 바의 변경 중에만 데이터를 복사합니다.
네! 테스트 결과는 다소 실망스럽습니다. 각 틱마다 IsNewBar () 함수를 호출하는 것이 사용자 배열의 세 셀에 데이터를 복사하는 것보다 훨씬 더 비쌉니다!
여기에서 중요하지만 눈에 띄지 않는 인디케이터의 또 다른 부분에 주의를 기울이고 싶습니다. 사실 OnInit () 함수에서 인디케이터의 핸들을 얻으면 OnTick () 함수 내에서 이 인디케이터의 데이터를 복사하는지 여부에 관계없이 아직 계산되지 않은 현재 바에 대한 계산, 틱마다 계속 수행됩니다.
작성자: Nikolay Kositsin