거래 중 거래

 
개발자의 답변에 관심이 있습니다. OnTradeTransaction 이벤트가 보장되지 않는 이유는 무엇입니까?
 
Alexey Oreshkin :
개발자의 답변에 관심이 있습니다. OnTradeTransaction 이벤트가 보장되지 않는 이유는 무엇입니까?

아마도 개발자들은 이미 답변에 지쳤을 것입니다. 나는 그들에 대해 대답하려고 노력할 것입니다. OnTradeTransaction 은 정의에 의해 보장될 수 없습니다. 그것은 이벤트 입니다. 이벤트가 전송된다고 보장하더라도 수신을 보장할 수는 없습니다. 이벤트가 전송되는 순간 사용자 터미널이 꺼져 있거나 인터넷 연결이 끊어져 이벤트를 처리할 수 없다고 상상해보십시오. 이 가능성은 확실히 낮지만 배제되지는 않습니다.

이벤트를 분석하기 보다는 거래 환경의 상태를 분석하고 거래 환경이 변경된 경우에만 필요한 결정을 내리는 것이 필요합니다. OnTransaction은 매우 제한된 경우에만 사용할 수 있으며 일반적으로 작업에서 전혀 사용하지 않는 것이 좋습니다. MetaTrader 4를 보세요. OnTransaction이 없고 모든 사람이 OnTransaction 없이도 잘 지냅니다.

 
Vasiliy Sokolov :

아마도 개발자들은 이미 답변에 지쳤을 것입니다. 나는 그들에 대해 대답하려고 노력할 것입니다. OnTradeTransaction은 정의에 의해 보장될 수 없습니다. 그것은 이벤트 입니다. 이벤트가 전송된다고 보장하더라도 수신을 보장할 수는 없습니다. 이벤트가 전송되는 순간 사용자 터미널이 꺼져 있거나 인터넷 연결이 끊어져 이벤트를 처리할 수 없다고 상상해보십시오. 이 가능성은 확실히 낮지만 배제되지는 않습니다.

이벤트를 분석하는 대신 거래 환경의 상태를 분석해야 하며 , 거래 환경이 변경된 경우에만 필요한 결정을 내립니다. OnTransaction은 매우 제한된 경우에만 사용할 수 있으며 일반적으로 작업에서 전혀 사용하지 않는 것이 좋습니다. MetaTrader 4를 보세요. OnTransaction이 없고 모든 사람이 OnTransaction 없이도 잘 지냅니다.

MT4에서는 네팅이 없기 때문에 일반적으로 MT5와 달리 포지션 관리가 훨씬 쉽기 때문에 OnTransaction에서 춥지도 덥지도 않습니다.
저것들. 이벤트가 기술적인 이유로만 보장되지 않습니까? 모든 것이 작동한다면 터미널은 이 이벤트를 100% 보장해야 합니까?

 
Alexey Oreshkin :

MT4에서는 네팅이 없기 때문에 일반적으로 MT5와 달리 포지션 관리가 훨씬 쉽기 때문에 OnTransaction에서 춥지도 덥지도 않습니다.
저것들. 이벤트는 기술적인 이유로만 보장되지 않습니까? 모든 것이 작동한다면 터미널은 이 이벤트를 100% 보장해야 합니까?

Netting은 OnTradeTransaction 의 필요성에 어떠한 영향도 미치지 않습니다.

개발자 자신만이 두 번째 질문에 답할 수 있습니다. OnTrasaction은 매우 안정적으로 작동합니다. 이벤트 수신 손실은 확인되지 않았습니다.

 
Vasiliy Sokolov :

Netting은 OnTradeTransaction의 필요성에 어떠한 영향도 미치지 않습니다.

Netting은 포지션 회계에 영향을 미치며, 이러한 간단한 질문에 문제가 많기 때문에 포지션 회계에도 OnTradeTransaction이 필요합니다.

 
Alexey Oreshkin :

MT4에서는 네팅이 없기 때문에 일반적으로 MT5와 달리 포지션 관리가 훨씬 쉽기 때문에 OnTransaction에서 춥지도 덥지도 않습니다.
저것들. 이벤트는 기술적인 이유로만 보장되지 않습니까? 모든 것이 작동한다면 터미널은 이 이벤트를 100% 보장해야 합니까?

개발자는 제품의 우선 순위 속성을 선택합니다. MT4의 우선 순위 기능은 MQL4 작업의 단순성이었습니다.

MT5에서 첫 번째 수준의 명백한 우선 순위는 속도(및 유연성)입니다. 제품의 모든 특성을 최대한으로 얻을 수는 없습니다. 이것은 이론과 반대입니다.

가장 빠른 제품은 필연적으로 클라이언트 프로그래머의 훨씬 더 많은(지식, 경험 및 노력)을 요구할 것입니다.


이러한 기술적 문제와 함께 하나님이 그들과 함께 하실 것입니다. 냉정하게 생각합시다.

당신이 MT5를 개발 중이고 당신의 임무가 거래 행동을 위한 HFT 블록을 작성하는 것이라고 가정해 봅시다.

한편으로 트랜잭션 레코드는 서버에서 대기하고 다른 한편으로 이러한 레코드는 XXX 전문가에게 전달되어야 합니다.

XXX Expert Advisor의 OnTradeTransaction() 핸들러 내에서 사용자는 모든 종류의 "포르노그라피"를 가질 수 있습니다!

이 기능이 언제까지 수행될지는 절대적으로 불분명합니다.

대기열은 서버에서 수신했지만 아직 XXX 전문가에게 전송되지 않은 수백 개의 레코드를 누적할 수 있습니다.

이 상황에서 무엇을 보장할 수 있습니까? 속도 또는 데이터 완전성?

본질적으로 HFT에만 기여하는 기능에 대해 매우 오래된 정보를 "저장"하는 것이 의미가 있습니까?

 

얘들아!

읽고 고민하고...

OnTradeTransaction 을 사용하면 어디에서나 "파기"하지 않고도 가장 최신 정보를 얻을 수 있습니다.

주문 및 거래에!

이 기능을 사용하는 방법을 모를 뿐입니다.

 
Михаил :

얘들아!

읽고 고민하고...

OnTradeTransaction을 사용하면 어디에서나 "파기"하지 않고도 가장 최신 정보를 얻을 수 있습니다.

주문 및 거래에!

이 기능을 사용하는 방법을 모를 뿐입니다.

당신도 모른다. OnTradeTransaction이라는 주제에 대해 이미 수십 페이지가 작성되었지만 한 가지 이해되지 않은 사항이 있습니다. OnTradeTransaction은 매우 구체적인 작업을 해결하기 위한 서비스 기능이므로 거래에 사용할 수 없습니다. 다양한 똑똑한 사람들이 당신의 저작물을 읽은 다음 비슷한 주제를 만듭니다. "OnTradeTransaction이 보장되지 않는 이유" - 그렇습니다. 전문가는 당신처럼 OnTradeTransaction을 통해 거래 환경을 만들지 않아야 하기 때문입니다. 특히 주문 및 거래 내역 에서 시스템.
 
Vasiliy Sokolov :
당신도 모른다. OnTradeTransaction이라는 주제에 대해 이미 수십 페이지가 작성되었지만 한 가지 이해되지 않은 사항이 있습니다. OnTradeTransaction은 매우 구체적인 작업을 해결하기 위한 서비스 기능이므로 거래에 사용할 수 없습니다. 다양한 똑똑한 사람들이 당신의 저작물을 읽은 다음 비슷한 주제를 만듭니다. "OnTradeTransaction이 보장되지 않는 이유" - 그렇습니다. 전문가는 당신처럼 OnTradeTransaction을 통해 거래 환경을 만들지 않아야 하기 때문입니다. 특히 주문 및 거래 내역 에서 시스템.

한편으로는 그렇습니다. 반면에 요청이 서버로 전송되었지만 작업이 아직 완료되지 않은 경우에는 어떻게 해야 합니까? 주문과 포지션(및 계정 내역) 목록만 가지고 운영한다면 우리가 어떤 상태에 있는지 어떻게 알 수 있습니까?

모든 거래 작업이 동기식이기 때문에 MT4에는 그러한 문제가 없습니다. 그러나 결국 우리는 더 낮은 성능을 얻습니다.

 
Игорь Герасько :

한편으로는 그렇습니다. 반면에 요청이 서버로 전송되었지만 작업이 아직 완료되지 않은 경우에는 어떻게 해야 합니까? 주문 및 위치(및 계정 기록) 목록만 가지고 운영하는 경우 우리가 어떤 상태에 있는지 확인하는 방법은 무엇입니까?

모든 거래 작업이 동기식이기 때문에 MT4에는 그러한 문제가 없습니다. 그러나 결국 우리는 더 낮은 성능을 얻습니다.

주문을 보낸 후 시장에 진입하기 위한 다음 신호 사이의 시간이 주문 실행 시간을 초과하면 아무 작업도 수행할 필요가 없습니다. 논리는 간단합니다. 비동기식 주문을 보내고 스레드를 떠나 잊어버렸습니다. 신호 검증의 다음 순간을 기다리고 있습니다. 이 순간까지 거래 환경이 변경되지 않은 경우 Expert Advisor는 다시 진입 신호를 찾고 시장 진입 명령을 반복합니다. 반대로 모든 것이 잘 진행되고 명령이 실행되면 환경을 분석한 전문가는 자신이 직책을 가지고 있음을 이해하고 새 직책을 다시 열지 않을 것입니다. 저것들. 이 접근 방식 에서 전문가의 상태는 시장 환경의 상태와 일치하도록 보장됩니다 .

상황은 주문 실행과 비슷한 시간(6-100ms) 후에 새로운 신호가 올 수 있는 고주파 거래에서 더 복잡합니다. 이 경우 차단은 필수입니다. 전문가는 주문이 마지막으로 전송된 시간을 기억해야 합니다. OnTransaction에서 오류가 발생하면 잠금이 재설정되고 Expert Advisor가 거래 작업을 다시 수행할 수 있습니다.

나는 많은 사람들이 기도하기를 좋아하는 OnTradeTransacton이 HFT에 어떤 식으로든 도움이 되지 않는다는 점에 주목합니다. OnTradeTransaction에서 성공적인 거래 응답이 도착하는 것보다 새로운 진입 신호가 더 빨리 도착할 수 있습니다. OnTradeTransacton 사용 여부에 관계없이 잠금이 필요합니다.

OnTradeTransaction에서 나오는 오류를 어떻게 제어하도록 요청합니까? 이것은 반대 질문으로 답할 수 있습니다 . 오류를 수신했을 때 Expert Advisor의 거래 논리를 즉석에서 어떻게 변경합니까? - 안 돼요. 사전에 적절한 확인(금액, 수량 등)을 하지 않으면 오류가 발생합니다. 그러나 그것이 발생하면 아무것도 고칠 수 없습니다. 따라서 OnTradeTransaction에서 가장 좋은 방법은 이 오류를 로그에 표시하고(나중에 EA 논리를 수정하기 위해) 잠금이 사용되는 경우 재설정하는 것입니다. 이를 위해 OnTradeTransaction을 사용해야 합니다.

이제 Mikalas의 다양한 지지자들이 달려와 나에게 토마토를 던지기 시작할 것입니다. 그러나 신뢰할 수 있는 거래 논리는 터미널의 거래 환경을 기반으로 할 때만 구성될 수 있다는 것을 반복하고 반복할 것입니다. 다른 모든 것 - 작동하지 않습니다.

 
Alexey Oreshkin :
개발자의 답변에 관심이 있습니다. OnTradeTransaction 이벤트가 보장되지 않는 이유는 무엇입니까?

OnTradeTransaction은 OrderSendAsinc 요청에 대한 서버의 응답 결과입니다.

OrderSendAsinc 함수 자체는 비동기식으로 이름에도 표시됩니다. 이것은 함수가 서버에 대한 요청을 실행하고 전송 결과(전송 성공 여부)에 대한 응답을 프로그램에 반환했음을 의미합니다.

즉, 원칙에 따르면 수탉이 울었고 적어도 새벽에는 나오지 않습니다. 이것이 OnTradeTransaction 의 서버 응답이 보장되지 않는 이유입니다. 그곳에서 일어날 수 있는 일은 거의 없습니다.

두 개의 유사한 함수 OrderSend 및 OrderSendAsinc가 있습니다.

첫 번째는 동기식이며 시간에 관계없이 서버의 응답을 자동으로 기다립니다(서버에서 요청을 처리한 결과를 반환함).

두 번째 비동기식은 서버의 응답을 기다리지 않고 즉시 작업 결과를 반환합니다(그러나 요청 처리 결과가 아니라 요청이 서버에 성공적으로 전송되었는지 여부에 대한 결과를 반환함).

OrderSendAsinc는 신속하게 결정을 내려야 하는 경우에 필요합니다. 테스트에 따르면 OrderSendAsinc는 초당 수백 개의 요청을 보내는 데 쉽게 대처합니다(그러나 이 속도는 서버 응답을 기다리지 않기 때문입니다).

OnTradeTransaction 이벤트가 생성되는 것은 터미널에서 "늦은" 응답을 수신하기 위한 것입니다(프로그램이 더 진행되고 동시에 응답을 받지 않았기 때문에 조건부로 뒤늦게, 실제로 지연은 초 및 밀리초 단위입니다).

OrderSend 작업과의 차이점은 OnTradeTransaction이 하나의 주문에 대해 여러 번 생성되어 서버에서 요청 처리에 대해 새로 수신된 정보를 터미널에 알릴 수 있다는 것입니다. 이는 OnTradeTransaction에서 주문 처리 단계를 볼 수 있음을 의미합니다.

OnTradeTransaction 서버에서 수락한 주문

주문 대기 onTradeTransaction

주문 ... OnTradeTransaction

주문 ... OnTradeTransaction 등

OnTradeTransaction 이벤트에 대한 응답이 온 주문의 정확한 식별을 위해 주문에 대한 첫 번째 이벤트를 제외한 모든 이벤트는 티켓으로 서명됩니다.

첫 번째 이벤트는 티켓과 request_id 모두에 의해 서명됩니다. request_id 사용자는 OrderSendAsinc 함수에서 주문을 보낸 직후 수신합니다. 따라서 OrderSendAsinc의 특정 반복은 OnTradeTransaction에서 얻은 결과에 연결됩니다.