나는 1시간의 수명으로 보류 주문을 합니다. 1시간 후 활성화되지 않은 주문은 주문 만료 시간에 마감됩니다. 여러 주문이 동시에 마감되고 HistoryOrdersTotal() 함수가 닫기 전에 0이 아닌 값을 갖는 경우 일부 주문이 손실됩니다. 예를 들어, 8개의 주문을 마감하기 전에 함수의 값은 = 4이고 마감된 후에는 10의 값이 있었습니다. 두 개의 주문이 손실되었습니다.
"orders lost"은(는) 무슨 뜻인가요? OnTrade()로 오는 메시지에는 하나 이상의 거래 이벤트에 대한 정보가 포함될 수 있습니다. 또한 여러 메시지가 동시에 실패하는 경우 첫 번째 메시지가 처리될 때 히스토리 캐시가 이미 변경되었을 수 있으며 "이벤트 손실"을 느낄 수 있습니다.
MetaTrader 5 거래 및 분석 플랫폼의 모든 작업은 비동기식으로 수행되며 거래 계정의 모든 변경 사항에 대한 메시지는 서로 독립적으로 전송됩니다. 따라서 "한 번의 요청 - 한 번의 거래 이벤트" 규칙에 따라 단일 이벤트를 추적하려고 해서는 안 됩니다. Trade 이벤트가 도착했을 때 정확히 무엇이 변경되었는지 확인해야 하는 경우 OnTrade 핸들러가 호출될 때마다 모든 거래, 포지션 및 주문을 분석하고 표시되기 전의 상태와 비교해야 합니다.
papaklass : 나는 특별히 4와 동일한 주문을 마감하기 전에 HistoryOrdersTotal()의 값을 요청했습니다. 8개의 주문을 마감한 후 HistoryOrdersTotal()의 값은 12(4+8)와 같아야 하고 10과 같아야 합니다. 로그 파일을 첨부하면 유사한 상황이 반복적으로 발생합니다. 나는 또한 이것을 얻은 전문가를 첨부했습니다. 직접 해보면 알 수 있습니다.
나는 당신이 설명한 것처럼 OnTrade()와 함께 일하지 않습니다. 첨부된 코드에서 나는 모든 것을 제거하고 기능을 강조하는 부분만 남겨두었습니다. 내 Expert Advisor에는 주기가 거의 없습니다. EA는 틱당 하나의 기호를 처리합니다. 그래서 나는 사이클이 필요하지 않습니다. 12틱으로 모든 악기를 처리합니다.
추신: OnTrade()는 무역 이벤트에 대해 알려줍니다. 그리고 어떤 이벤트가 발생했는지는 주기가 없는 내 기능에 의해 결정됩니다.
글쎄요, 저는 OnTrade 기능에 의한 주문 손실을 증명하는 귀하의 예에 대해서만 이야기하고 있었습니다. OnTrade는 틱에 대해 작동하지 않지만 비동기적으로 작동하므로 틱당 하나 또는 모두를 처리하는 기호 수는 중요하지 않습니다. 여기에서 한 번에 처리되지 않은 주문이 한꺼번에 만료되므로 처리 주기 없이는 할 수 없습니다. OnTrade가 아무것도 놓치지 않는 것을 볼 수 있도록 코드를 변경했습니다. 나는 심지어 테스터에서 그것을 시작했는데 모든 것이 제자리에있는 것 같습니다. 만료일까지 제거된 모든 주문 의 티켓은 OnTrade에서 인쇄로 표시되며 로그에 있습니다. 내 버전을 사용해 보셨습니까?
이제 업데이트되어 다시 알아 내려고합니다. 거의 모든 라인에 지문을 넣습니다. 결과를 알려드리겠습니다.
다음은 삽입을 사용한 실행이며 손실을 수정하는 순간입니다.
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 EURUSD 매수포지션, 손절매 청산2011.08.09 00:41:08 코어 1 2011.01.14 01:41:27 ------------------거래 #63 sl 1.33328
2011.08.09 00:41:08 코어 1 2011.01.14 01:41:27 oldDealsTotal=62 newDealsTotal=63
2011.08.09 00:41:08 코어1 2011.01.14 01:41:27 CSampleExpert::무역
2011.08.09 00:41:08 코어 1 2011.01.14 01:41:27 주문 수행 0.15에서 1.33328에 매도 [#63 매도 0.15 EURUSD에서 1.33328]
2011.08.09 00:41:08 코어 1 2011.01.14 01:41:27 거래 성사 [#63 0.15 EURUSD at 1.33328]
2011.08.09 00:41:08 코어 1 2011.01.14 01:41:27 거래 #63 1.33328에 0.15 EURUSD 매도 완료(주문 #63 기준)
2011.08.09 00:41:08 코어 1 2011.01.14 01:41:27 손절매 발동 매수 0.15 EURUSD 1.32127 sl: 1.33328 tp: 1.35139 [#63 매도 0.153USD
2011.08.09 00:41:08 Core 1 2011.01.13 18:32:00 EURUSD에 의한 매수 포지션 후행 수정 예정
나는 1시간의 수명으로 보류 주문을 합니다. 1시간 후 활성화되지 않은 주문은 주문 만료 시간에 마감됩니다. 여러 주문이 동시에 마감되고 HistoryOrdersTotal() 함수가 닫기 전에 0이 아닌 값을 갖는 경우 일부 주문이 손실됩니다. 예를 들어, 8개의 주문을 마감하기 전에 함수의 값은 = 4이고 마감된 후에는 10의 값이 있었습니다. 두 개의 주문이 손실되었습니다.
"orders lost"은(는) 무슨 뜻인가요? OnTrade()로 오는 메시지에는 하나 이상의 거래 이벤트에 대한 정보가 포함될 수 있습니다. 또한 여러 메시지가 동시에 실패하는 경우 첫 번째 메시지가 처리될 때 히스토리 캐시가 이미 변경되었을 수 있으며 "이벤트 손실"을 느낄 수 있습니다.
MetaTrader 5의 거래 이벤트 기사 읽기:
결론
MetaTrader 5 거래 및 분석 플랫폼의 모든 작업은 비동기식으로 수행되며 거래 계정의 모든 변경 사항에 대한 메시지는 서로 독립적으로 전송됩니다. 따라서 "한 번의 요청 - 한 번의 거래 이벤트" 규칙에 따라 단일 이벤트를 추적하려고 해서는 안 됩니다. Trade 이벤트가 도착했을 때 정확히 무엇이 변경되었는지 확인해야 하는 경우 OnTrade 핸들러가 호출될 때마다 모든 거래, 포지션 및 주문을 분석하고 표시되기 전의 상태와 비교해야 합니다.나는 특별히 4와 동일한 주문을 마감하기 전에 HistoryOrdersTotal()의 값을 요청했습니다. 8개의 주문을 마감한 후 HistoryOrdersTotal()의 값은 12(4+8)와 같아야 하고 10과 같아야 합니다. 로그 파일을 첨부하면 유사한 상황이 반복적으로 발생합니다. 나는 또한 이것을 얻은 전문가를 첨부했습니다. 직접 해보면 알 수 있습니다.
기능을 변경하려고 하면 어떻게 될까요?
테스터 실행 결과에 대한 HTML 보고서가 항상 파일에 저장되는 것은 아닙니다?!
더 정확하게 기술하십시오. 어떤 상황에서.
더 정확하게 기술하십시오. 어떤 상황에서.
드물게, 약 20-30번의 테스터 실행 중 1번 - "결과" 탭을 엽니다.
XML 보고서를 저장하려면 클릭하십시오. 보고서 파일이 표시됩니다. 모든 것이 정상입니다!
HTML 보고서 저장을 클릭합니다. 파일을 저장하기 위한 창이 팝업되고 일정 시간 동안(짧은 시간 동안) 빈 ProgressBar와 함께 정지한 다음 ProgressBar가 빠르게 채워지고 창이 닫힙니다... 그러나 보고서 파일이 생성되지 않습니다!
정확히 이런 일이 발생하면 어떤 패턴도 지적할 수 없습니다.
기능을 변경하려고 하면 어떻게 될까요?
핵심은 " OnTrade 처리기의 각 호출에서 모든 거래, 위치 및 주문을 분석하고 표시되기 전의 상태와 비교해야 합니다"입니다. 에서 예시 평신도의 경우 이는 역사상 영장에만 적용됩니다. 주문이 손실되지 않도록 다음과 같이 코드를 변경합니다.
전역 변수를 입력합니다 . int oldHistoryOrders; 그리고 Ontrade에서는 다음과 같이 됩니다.
나는 당신이 설명한 것처럼 OnTrade()와 함께 일하지 않습니다. 첨부된 코드에서 나는 모든 것을 제거하고 기능을 강조하는 부분만 남겨두었습니다. 내 Expert Advisor에는 주기가 거의 없습니다. EA는 틱당 하나의 기호를 처리합니다. 그래서 나는 사이클이 필요하지 않습니다. 12틱으로 모든 악기를 처리합니다.
추신: OnTrade()는 무역 이벤트에 대해 알려줍니다. 그리고 어떤 이벤트가 발생했는지는 주기가 없는 내 기능에 의해 결정됩니다.