주문이 선택되었는지 확인하는 방법 - 페이지 19

 
원칙적으로는 그렇습니다. 그러나 "포인터"는 직접 시작해야 합니다. 기능이 있는 내 제안에 대해 생각해 보세요. 이것이 보편적인 솔루션이라고 생각합니다. 물론 이러한 코드의 속도에 대한 질문이 제기되지만 이것은 분명히 세 번째 질문입니다.
 
FAQ :
원칙적으로는 그렇습니다. 그러나 "포인터"는 직접 시작해야 합니다. 기능이 있는 내 제안에 대해 생각해 보세요. 이것이 보편적인 솔루션이라고 생각합니다. 물론 이러한 코드의 속도에 대한 질문이 제기되지만 이것은 분명히 세 번째 질문입니다.

감사합니다. 항상 건설적인 대화를 나눌 수 있어 기쁩니다.

 
Ant_TL :

이것은 프로그램의 함수 A가 루프에서 어떤 순서를 선택한 다음 라이브러리에서 보조 함수 B를 호출하는 경우 B가 작업 과정에서 다른 순서를 선택하더라도 함수 A의 순서 선택은 반환 시 위반됩니다.

함수의 값을 변수에 적용했다면 예입니다. 그렇지 않은 경우 이 함수는 전역적이며 처음 호출될 때 변경될 수 있습니다.
 
Ant_TL :

감사합니다. 항상 건설적인 대화를 나눌 수 있어 기쁩니다.


건강에. 성급하게 결론을 내리지 마십시오.
 
Roger :
함수의 값을 변수에 적용했다면 예입니다. 그렇지 않은 경우 이 함수는 전역적이며 처음 호출될 때 변경될 수 있습니다.

잘 이해하지 못했습니다. 나는 다음 상황을 염두에 두었습니다. 예를 들어, 단순히 목록의 첫 번째 순서를 선택하는 메인 프로그램 모듈의 함수 A()에서 라이브러리 함수 B()를 호출합니다(선험적으로 순서가 있다고 가정) :

무효 B(){

주문 선택(0,SELECT_BY_POS);

}

이 함수를 호출한 후 컨트롤이 라이브러리에서 기본 모듈로 반환될 때 OrderTicket() 함수 또는 미리 주문이 선택되었다고 가정하는 다른 함수를 호출하면 정확히 동일한 오류 4105가 발생합니다. 그러나 기본 모듈에서 함수 B를 호출 하기 전에 다른 순서가 이미 선택되어 있으면 라이브러리의 새 선택에 관계없이 선택된 상태로 유지됩니다. 모듈.

그러나 메인 모듈의 함수 A에서 동일한 함수 B를 호출하면 B를 호출하기 전에 함수 A에서 선택한 순서가 0으로 변경됩니다(즉, 함수 B에서 반환된 후 현재 선택된 순서는 B)를 호출하기 전에 현재 선택된 주문이 무엇인지 여부

그렇기 때문에 자체적으로 OrderSelect를 사용하는 함수를 호출하는 경우 이 함수에서 반환될 때 선택한 순서가 여전히 이 함수를 호출하기 전에 선택한 순서인지 확인해야 합니다. 이를 확인하지 않으면 코드에서 찾기 어려운 논리적 오류가 발생할 수 있습니다.

 
Ant_TL :

특히 "포인터"(현재 주문 선택의 상태)는 모듈 내에서 전역적입니다. 라이브러리의 경우 이 포인터는 하나이고 프로그램 모듈의 경우 다릅니다. 이것은 프로그램의 함수 A가 루프에서 어떤 순서를 선택한 다음 라이브러리에서 보조 함수 B를 호출하는 경우 B가 작업 과정에서 다른 순서를 선택하더라도 함수 A의 순서 선택은 반환 시 위반됩니다. 그러나 두 함수가 모두 모듈 내에 있는 경우 함수 B에서 돌아올 때 함수 A 자체에서 B를 호출하기 전과 후에 또는 작업 시작과 완료 시 함수 B에서 기억하고 복원해야 합니다. 이 장소에서 작업 기능 A의 논리가 위반되지 않도록 현재 주문 선택.


당신의 생각은 분명합니다.

티켓 번호를 변수에 입력하고 나중에 사용할 때(예: 다음 틱에서 바이트 티켓이 열렸을 때 등) 일반적으로 접하게 되는 EA 디자인과 유사합니다.

한때 나도 이것을 남겼습니다. 왜냐하면. 이 모든 장점은 끊임없는 오류로 이어졌습니다 .. 따라서 고문이 계산해야 하는 모든 것, 특히 시간이 거의 걸리지 않기 때문에 .. 마지막으로 열린 주문의 티켓을 가져와야 합니다. 받으려면 속성을 사용해야 합니다. 수신된 주문 중 OrderSelect()를 수행하면 모든 것이 정상이므로 어드바이저의 작업 알고리즘이 복잡해집니다. 고문은 터미널에서 전기 및 기타 작업 고문에게 무슨 일이 발생하든 상관없이 언제든지 거래 전술이 어떤 상태에 있는지 "이해"하고 이 상태에 따라 행동해야 합니다.

개미_TL :

이 함수를 호출한 후 컨트롤이 라이브러리에서 기본 모듈로 반환될 때 OrderTicket() 함수 또는 미리 주문이 선택되었다고 가정하는 다른 함수를 호출하면 정확히 동일한 오류 4105가 발생합니다. 그러나 기본 모듈에서 함수 B를 호출하기 전에 다른 순서가 이미 선택되어 있으면 라이브러리의 새 선택에 관계없이 선택된 상태로 유지됩니다. 모듈.

그것이 작동하도록 테스트되었습니까? 아니면 그렇게 작동한다고 생각하십니까?


저에게는 모듈과 라이브러리로 구분이 없습니다.. 컴파일 후 코드는 단일 구조로 작동합니다..


OrderSelect() 가 호출되는 곳마다 마지막으로 선택한 주문의 동일한 OrderTicket()이 모든 곳에서 반환됩니다.

이렇게 하면 될 것 같아요..

 
keekkenen :

그것이 작동하도록 테스트되었습니까? 아니면 작동한다고 생각하십니까?

저에게는 모듈과 라이브러리로 구분이 없습니다.. 컴파일 후 코드는 단일 구조로 작동합니다..

OrderSelect()가 호출되는 곳마다 마지막으로 선택한 주문의 동일한 OrderTicket()이 모든 곳에서 반환됩니다.

이렇게 하면 될 것 같아요..

메인 모듈로 복귀 시 라이브러리에서 선택한 순서가 선택한 순서가 아닌 것을 확인하였습니다. 이를 바탕으로 논리적으로 아직 구체적으로 확인하지는 않았지만 반품 시 선택한 주문은 메인 모듈에서 마지막으로 선택한 주문이어야 합니다.

다음과 같이 포함된 mqh 라이브러리 파일에 라이브러리 함수용 래퍼를 만들어 이 문제를 직접 해결했습니다.

부울 GetOrder(int a=0){
return(OrderSelect(_GetOrder(a),SELECT_BY_TICKET));
}

그런데 기본 매개변수도 라이브러리 함수에 전달할 수 없으며 이 예제에서도 반영됩니다.

여기서 _GetOrder(int a)는 라이브러리 함수 자체로, 어떤 순서를 찾아 반환합니다. 라이브러리 의 함수 호출 은 "a" 매개변수의 명시적 표시와 함께 발생합니다. 래퍼 함수에서는 기본적으로 0이고 래퍼에서 반환된 티켓은 기본 프로그램 모듈에서 다시 선택됩니다. 라이브러리 기능에서 선택하면 "수신기"에 도달하지 않습니다.

 

나는 또한 그렇게 생각합니다. 이 함수가 어디에서 호출되든 상관없이 특정 순서의 선택된 매개변수 세트를 제공하고 이 호출이 어디에서 왔는지에 상관없이 프로그램은 이 함수에 대한 다음 호출까지 이를 변경하지 않을 것입니다.

파이시. 이 기능을 완전히 불필요한 추가 기능으로 래핑하는 이유는 무엇입니까?

파이파이. 팁 - 정적 정수 변수를 생성하고, 개봉 후 주문 값을 이 변수에 전달합니다. 사용자가 원할 때까지 변경되지 않으며 의도한 대로 정확하게 수행됩니다.

 
Ant_TL :

메인 모듈로 복귀 시 라이브러리에서 선택한 순서가 선택한 순서가 아닌 것을 확인하였습니다. 이를 바탕으로 논리적으로 아직 구체적으로 확인하지는 않았지만 반품 시 선택한 주문은 메인 모듈에서 마지막으로 선택한 주문이어야 합니다.

그리고 이 진술은 설명이 필요합니다. 컴파일되는 모듈(라이브러리)에 대해서만 이야기하는 경우 이 진술은 참입니다(*.mg4-libraries 폴더의 라이브러리). 기본 컴파일된 파일(*.mgh 라이브러리)의 일부인 모듈의 경우 이 명령문은 잘못되었습니다!
 
TarasBY :
그리고 이 명령문은 설명이 필요합니다. 컴파일되는 모듈(라이브러리)에 대해서만 이야기하는 경우 명령문이 참입니다(*.mg4-libraries 폴더의 라이브러리). 기본 컴파일된 파일(*.mgh 라이브러리)의 일부인 모듈의 경우 이 명령문은 잘못되었습니다!

MQH는 별도의 모듈이 아니라 다른 파일에 있는 기본 모듈에 삽입합니다. 물론 우리는 별도의 .ex4 라이브러리에 대해 이야기하고 있습니다.