MQL4 프로그래밍에 대한 온라인 책의 베타 버전 - Sergey Kovalev(SK.) - 페이지 10

 
죄송합니다 찾았어요!
예, 설명서는 정말 멋지지만 이전 요청으로 돌아가서 빠르게 볼 수 있으려면 손에 있어야 합니다.
이상적으로는 새 버전의 MT에서 표준 도움말을 교체해야 합니다.
 

SK로

이중 my_search_and_etc()
{ 이중 합계[]; //함수 내부의 배열
//............
i=ArrayMinimum(합계, 반복, 0); // Tracer: < ArrayMinimum 함수 에 대해 잘못된 시작 위치 0>

//두 번째 오류 변형
정적 이중 합계[]; //
//............
i=ArrayMinimum(합계, 반복, 0); // Tracer: <ArrayMinimum 함수의 잘못된 시작 위치 0>
//저것들. 두 번째 틱에서 배열의 초기 요소를 동적으로 주소 지정하는 동안 오류가 발생했습니다.
//...........................

//...........................
// 적절한 시간
이중 합계[1000]; // 명시적 크기를 지정하는 것은 정적 유형을 의미합니다.
//............
i=ArrayMinimum(합계, 반복, 0); // 확인
//2개 수정
정적 이중 합계[1000]; // 명시적 크기로 재보험
//............
i=ArrayMinimum(합계, 반복, 0); // 확인
}

 
아니요, 표준 도움말을 교체할 필요가 없습니다. 그대로 두십시오. 일반 언어 소프트웨어 개발자는 언어에 대한 설명과 그에 대한 모든 종류의 자습서를 공유합니다.
 
Korey :

SK로


질문의 내용이 명확하지 않습니다. 당신이 제시한 일련의 행은 완전한 코드(그런 다음 초기화가 반복되는 이유는 무엇입니까?) 또는 단편적인 행(중괄호가 있는 이유는 무엇입니까?)입니다. 완성된 코드를 제출하고 질문을 공식화하십시오. 코드를 게시하려면 MQL 버튼(편집 창의 맨 윗줄에 있음)을 사용합니다.
 
Renat :
세르게이 코발레프 축하합니다!

MQL4 언어 튜토리얼의 출시는 2월 1일로 예정되어 있으며 이미 MQL4.community 웹사이트에 통합되었습니다. 영어 번역이 한창입니다.

축하해주셔서 감사합니다, 레나트.

이번 기회에 MetaQuotes Software Corp. 에 MQL4 튜토리얼이 게시되었음을 다시 한 번 말씀드리고 싶습니다. 그것은 나에게 큰 영광입니다. 귀하의 신뢰, 지원 및 전방위적인 지원에 진심으로 감사드립니다. 또한 교과서 준비에 귀중한 조언과 도움을 준 회사 직원 Stanislav Starikov와 Rashid Umarov에게도 감사드립니다.

 
SK로
동일한 ArrayMinimum () 호출로 배열을 초기화하는 방법에는 4가지가 있습니다.
배열 []의 차원을 지정하지 않고 서브루틴에서 배열을 초기화하면 "RunTime" 오류가 발생하는 것으로 표시됩니다.
- 처음 두 옵션, 번역에서 오류가 인용되었습니다: "배열 시작 부분의 잘못된 주소."
-두 번째 두 가지 옵션이 작동 중이며 [1000] 차원을 지정하면 자동으로 배열이 정적으로 만들어집니다.
결과:
1) MQL4 어레이가 항상 정적이지는 않습니다.
2) 정적 a[]의 정의 즉. 명시적 차원 없이는 실행되지 않지만 오류 경고는 없습니다. 오류는 전문가 창의 두 번째 및 후속 틱에서 런타임에 발생합니다.
3) 설명된 정적/동적 오류는 배열이 sub/func에 정의되어 있고 "전문가" 창을 통해 보는 사람만 포착하는 경우 나타납니다.
그리고 두 번째 틱이 올 때만. 예를 들어 주말에 전략 테스터를 사용하지 않고 지표를 디버깅하면 오류가 감지되지 않습니다.
4) 교과서의 "MQL4 어레이는 항상 정적이다"라는 문구는 초기 빌드를 참조할 수 있습니다.
 

나는 텍스트 튜토리얼에 추가하고 싶습니다. 일련의 비디오 수업이 있습니다. 특히 프로그램을 다운로드하고 설치하고 첫 구매 또는 쉘 거래를 하는 방법에 대한 첫 번째 교훈을 선택합니다.

 
Korey :
SK로
동일한 ArrayMinimum () 호출로 배열을 초기화하는 방법에는 4가지가 있습니다.
배열 []의 차원을 지정하지 않고 서브루틴에서 배열을 초기화하면 "RunTime" 오류가 발생하는 것으로 표시됩니다.
- 처음 두 옵션, 번역에서 오류가 인용되었습니다: "배열 시작 부분의 잘못된 주소."
-두 번째 두 가지 옵션이 작동 중이며 [1000] 차원을 지정하면 자동으로 배열이 정적으로 만들어집니다.
결과:
1) MQL4 어레이가 항상 정적이지는 않습니다.
2) 정적 a[]의 정의 즉. 명시적 차원 없이는 실행되지 않지만 오류 경고는 없습니다. 오류는 전문가 창의 두 번째 및 후속 틱에서 런타임에 발생합니다.
3) 설명된 정적/동적 오류는 배열이 sub/func에 정의되어 있고 "전문가" 창을 통해 보는 사람만 포착하는 경우 나타납니다.
그리고 두 번째 틱이 올 때만. 예를 들어 주말에 전략 테스터를 사용하지 않고 지표를 디버깅하면 오류가 감지되지 않습니다.
4) 교과서의 "MQL4 어레이는 항상 정적이다"라는 문구는 초기 빌드를 참조할 수 있습니다.


당신의 추론은 매우 명확하지 않습니다. 차원이 없는 배열을 선언하고(본질적으로 프로그램에는 배열의 이름만 제공되며 요소가 정의되지 않고 메모리가 할당되지 않음) ArrayMinimum() 함수를 사용하여 최소값을 찾으려고 합니다. 존재하지 않는 요소 중에서 물론 배열이 정적으로 선언되었는지 여부에 관계없이 오류가 팝업됩니다. 동시에 실행 오류를 배열 속성이 정적인지 아닌지를 나타내는 표시로 해석합니다.

MQL4의 어레이는 정의상 정적입니다. 이것은 (물론, 배열에 적어도 하나의 요소가 있는 경우) 배열 요소의 값이 이전에 함수가 완료된 순간부터 기간 내에 저장된다는 것을 의미합니다(여기서 배열은 선언) 배열 식별자 앞에 또는 정적 키워드가 있는지 여부에 관계없이 다음에 호출할 때까지.

 
SK로
나에게 우리는 이러한 메모리 할당 트릭을 오랫동안 사용해 왔습니다.
나는 배열의 내용이 아니라 배열의 주소 지정에 대해 썼습니다. 컴파일 오류, 연결 오류가 없지만 ADDRESS 런타임 오류가 있습니다.
저것들. 컴파일러는 후속 성장을 위해 서브루틴에서 배열 []을 정의할 수 있도록 했습니다. - 이것은 좋습니다(!).
이것은 배열에 의한 메모리의 동적 할당입니다.
그러나 이 배열에 대한 모든 포인터는 직접 포인터로 연결 해제됩니다(포인터에 대한 포인터는 아님).
메모리의 후속 동적 할당 중에 연결된 정적 주소와 배열의 새로 할당된 주소 간에 불일치가 발생합니다.
저것들. MQL4의 배열(포인터)에 대한 참조는 이제 정적이며 배열이 실제로 정적일 때만 올바르게 작동합니다.
컴파일러는 서브루틴 내부에 명시적 크기가 없는 성장용 배열이 더 이동한다는 것을 감지하지 못합니다.
프로그래머는 정적이고 생각합니다. 모든 것이 정확하지만 명시적인 크기를 지정하지 않으면 정적 배열이 없으며 배열은 실제로 동적(컴파일/로드 오류 없이)으로 판명됩니다.
문제는 그리 크지 않으며 일반적으로 모든 사람이 전역 수준에서 어레이를 유지합니다.
그러나 교과서에서는 모든 배열이 이미 정적이라고 가정할 뿐만 아니라 로컬 배열을 명시적 크기의 정적 배열로 규정할 필요가 있다고 규정하는 것이 바람직합니다.
 
Korey :
SK로
프로그래머는 정적이고 생각합니다. 모든 것이 정확하지만 명시적인 크기를 지정하지 않으면 정적 배열이 없으며 배열은 실제로 동적(컴파일/로드 오류 없이)으로 판명됩니다.

MQL4에서 모든 배열이 정적이라는 것을 알고 있는 프로그래머는 단순히 필요하지 않기 때문에 정적을 설정하지 않을 것입니다.

그러나 교과서에서는 모든 배열이 이미 정적이라고 가정할 뿐만 아니라 로컬 배열을 명시적 크기로 정적으로 규정할 필요가 있다고 규정하는 것이 바람직합니다.

아마도 당신은 개념을 혼동하고 있을 것입니다. 이 경우 "정적"은 함수 실행 사이의 간격으로 배열 요소의 값을 고양이에 저장하는 속성을 의미합니다. 발표된다. 배열은 이름 앞에 정적 항목이 있다는 사실에 관계없이 이 시간 동안 항상 값을 유지합니다(그러나 이것은 지역 변수에 해당되지 않으며 명시적 정적이 필요함).

동시에 ArrayResize () 함수를 사용하여 첫 번째 차원의 배열 크기를 조정할 수 있습니다.