거래 중 거래 - 페이지 2

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

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

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

비동기식 작업이 동기식보다 빠르다는 사실은 무슨 일이 일어나고 있는지 이해하지 못하는 데서 오는 신화입니다. 비동기식 작업의 경우 거래 작업을 수행하는 전체 주기가 여러 부분으로 나뉘지만 동기식 작업의 경우 하나입니다. 비동기 작업의 경우 서버 응답도 필요하며 교환에서 실행이 동일합니다. 비동기 및 동기 작업에 소요되는 총 시간은 실질적으로 동일합니다. 비동기식 주문의 장점은 병렬 전송을 구성할 수 있다는 것입니다. 거의 동시에 두 개 이상의 주문을 보낼 수 있습니다. 이로 인해 전체 작업 속도가 빨라집니다. 모든 Expert Advisor에 비동기 전송 모드가 필요한 것은 아닙니다. 우선, 이것은 동시에 두 개 이상의 상품을 구매해야 하는 다른 차익 거래자 또는 HFT 알고리즘에 필요합니다. 예를 들어, HFT 봇은 시장에 진입 하기 위해 주문을 보낼 수 있고 3-4ms 후에 반대 주문을 할 수 있습니다. 이 경우 첫 번째 주문에 대한 서버의 응답을 기다리는 것은 너무 긴 작업이므로 결과를 기다리지 않고 비동기 전송 모드가 필요합니다. 대다수의 전문가들은 그러한 속도가 필요하지 않습니다.

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

그리고 나서 오스탑은 고생했다....

저에게 개인적으로 싫은 점이 있다면 토론을 위해 꺼낼 필요가 없습니다.

당신이 "강하게 떠있는"기술적인 문제 ...

당신은 당신의 독단적인 terads로 사람들을 오도하고 있습니다!

 
Михаил :

그리고 나서 오스탑은 고생했다....

저에게 개인적으로 싫은 점이 있다면 토론을 위해 꺼낼 필요가 없습니다.

당신이 "강하게 떠있는"기술적인 문제 ...

당신은 당신의 독단적인 terads로 사람들을 오도하고 있습니다!

미샤, 안녕! 어떻게 포뮬러 1에 갔습니까? 소치 날씨는 어떻습니까?
 
Vasiliy Sokolov :
미샤, 안녕! 어떻게 포뮬러 1에 갔습니까? 소치 날씨는 어떻습니까?

여기요!

괜찮은! 나는 바다에서 수영했다(물은 24도였다).

 
Михаил :

여기요!

괜찮은! 나는 바다에서 수영했습니다 (물은 24도였습니다).

멋지다, 그것은 매우 따뜻한 물이다!

진심으로, 나는 불만이 없습니다. 장점에 대해 논쟁하고 싶다면 환영합니다. 누군가를 가르치고 싶은 마음은 없습니다. 모든 사람은 사각형 바퀴가 달린 자신의 자전거를 가지고 있습니다.

 
Vasiliy Sokolov :

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

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

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

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

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

신호 발생 사이의 시간은 어디입니까? 각 거래 신호에는 고유한 등록 시간이 있습니다. 시그널을 등록(출시)한 후 거래를 해야 합니다. 결과적으로 어드바이저는 거래 요청을 서버에 보내고 계속 작업합니다. 주문이 아직 서버에서 실행되지 않았습니다. 새로운 틱이오고 있습니다. Expert Advisor는 다시 자신의 상태를 분석하여 오픈 시그널이 있지만 작업 오더 중 해당 포지션(또는 오더)이 없음을 알게 됩니다.

질문 : 고문이 OnTrade 또는 OnTradeTransaction의 데이터에 의존하지 않고 포지션이 없는 이유를 어떻게 결정할 수 있습니까? 그리고 몇 가지 이유가 있을 수 있습니다.

1. 열기 요청이 서버로 전송되었지만 서버는 아직 주문 결과에 대한 응답을 제공하지 않았습니다. 우리는 응답을 기다려야 합니다.

2. 요청이 아직 서버로 전송되지 않았습니다. 주문을 보내야 합니다.

3. 요청이 전송되었고 서버에서 주문을 실행할 수 없다는 응답이 왔습니다. 오류 메시지를 처리하고 다음에 수행할 작업을 결정해야 합니다.

4. 요청을 보냈지만 서버가 오랫동안 응답하지 않습니다(이번은 모두가 직접 설정합니다. 저는 1분입니다)(타임아웃).

OnTrade 또는 OnTradeTransaction을 사용하지 않고 문제에 대한 솔루션을 볼 수 없습니다. 그러나 당신은 그렇게 주장합니다. 어느 것을 설명하십시오. MQL4/5에서 스레드 차단에 대해 이야기하는 것이 이상하기 때문에 여기에는 두 개 이상의 스레드가 없고 스레드는 하나만 있습니다. 또한 "모든 것이 잘되고 명령이 실행되면"이라는 표현으로 작동하지만 이것이 어떻게 결정되었는지 전혀 설명하지 않습니다. 그리고 그것이 바로 제 질문의 요점입니다.

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

신호 발생 사이의 시간은 어디입니까? 각 거래 신호에는 고유한 등록 시간이 있습니다. 시그널을 등록(출시)한 후 거래를 해야 합니다. 결과적으로 어드바이저는 거래 요청을 서버에 보내고 계속 작업합니다. 주문이 아직 서버에서 실행되지 않았습니다. 새로운 틱이오고 있습니다. Expert Advisor는 다시 자신의 상태를 분석하여 오픈 시그널이 있지만 작업 오더 중 해당 포지션(또는 오더)이 없음을 알게 됩니다.

질문 : 고문이 OnTrade 또는 OnTradeTransaction의 데이터에 의존하지 않고 포지션이 없는 이유를 어떻게 결정할 수 있습니까? 다음과 같은 몇 가지 이유가 있을 수 있습니다.

1. 열기 요청이 서버로 전송되었지만 서버는 아직 주문 결과에 대한 응답을 제공하지 않았습니다. 우리는 응답을 기다려야 합니다.

2. 요청이 아직 서버로 전송되지 않았습니다. 주문을 보내야 합니다.

3. 요청이 전송되었고 서버에서 주문을 실행할 수 없다는 응답이 왔습니다. 오류 메시지를 처리하고 다음에 수행할 작업을 결정해야 합니다.

4. 요청을 보냈지만 서버가 오랫동안 응답하지 않습니다(이번은 모두가 직접 설정합니다. 저는 1분입니다)(타임아웃).

OnTrade 또는 OnTradeTransaction을 사용하지 않고 문제에 대한 솔루션을 볼 수 없습니다. 그러나 당신은 그렇게 주장합니다. 어느 것을 설명하십시오. MQL4/5에서 스레드 차단에 대해 이야기하는 것이 이상하기 때문에 여기에는 두 개 이상의 스레드가 없고 스레드는 하나만 있습니다. 또한 "모든 것이 잘되고 명령이 실행되면"이라는 표현으로 작동하지만 이것이 어떻게 결정되었는지 전혀 설명하지 않습니다. 그리고 그것이 바로 제 질문의 요점입니다.

흐름을 차단하는 것이 아니라 거래 요청 을 보내는 것을 차단하는 것을 의미합니다.

반대 질문 : 고문이 거래 주문을 실행할 수 없는 이유를 결정했다고 가정합니다(시장이 닫혀 있거나, 돈이 없는 경우 등). 다음 은 무엇입니까? 고문은 현재 상황을 어떻게 시정할 수 있습니까? 계정에 돈을 추가하거나 시장을 열 수 있습니까? 마지막 주문을 보낼 때 오류가 발생한 이유를 아는 것이 EA가 더 많은 거래를 하는 데 어떻게 도움이 될까요?

 
Vasiliy Sokolov :

흐름을 차단하는 것이 아니라 거래 요청 을 보내는 것을 차단하는 것을 의미합니다.

다음은 질문입니다. 서버가 주문 실행에서 오류를 반환하는 경우 두 번째 주문을 보낼 가능성을 잠금 해제하기 위해 이에 대해 알아내는 방법은 무엇입니까? 다시 말하지만, OnTrade 및 OnTradeTransaction이 사용되지 않는 한.

반대 질문 : 고문이 거래 주문을 실행할 수 없는 이유를 결정했다고 가정합니다(시장이 닫혀 있거나, 돈이 없는 경우 등). 다음 은 무엇입니까? 고문은 현재 상황을 어떻게 시정할 수 있습니까? 계정에 돈을 추가하거나 시장을 열 수 있습니까? 마지막 주문을 보낼 때 오류가 발생한 이유를 아는 것이 EA가 더 많은 거래를 하는 데 어떻게 도움이 될까요?

많은 도움이 될 것입니다. 조언자는 거래 주문을 보내기 전에도 이 순간을 결정하고 거래자에게 메시지(또는 다른 방법)로 알려야 하기 때문에 자금 부족은 남겨두도록 합시다. 따라서 거래 주문이 전혀 전송되지 않습니다.

오류 메시지는 주문 전송을 계속 시도할지 여부에 대한 정보를 제공할 수 있습니다. 예를 들어 시장이 닫힌 경우 두 번째 요청을 즉시 보내지 않아야 합니다. 잠시 동안 거래를 중단하고(어드바이저 개발자가 결정) 새 요청을 다시 보내야 합니다(거래 신호가 여전히 활성 상태인 경우). 재 견적이 있는 경우 즉시 새 요청을 보낼 수 있습니다. 중지 설정에 오류가 있는 경우(주문이 전송되는 동안 중지 수준 또는 동결 수준이 변경됨) 중지가 새 데이터에 따라 조정되고 새 요청이 즉시 전송됩니다.

따라서 거래 오류(일반적으로 모든 오류)에 대한 지식과 올바른 처리는 "정상적인" 프로그램 작동에 필수 조건입니다.

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

다음은 질문입니다. 서버가 주문 실행에서 오류를 반환하는 경우 두 번째 주문을 보낼 가능성을 잠금 해제하기 위해 이에 대해 알아내는 방법은 무엇입니까? 다시, OnTrade 및 OnTradeTransaction이 사용되지 않는 한.

많은 도움이 될 것입니다. 조언자는 거래 주문을 보내기 전에도 이 순간을 결정하고 거래자에게 메시지(또는 다른 방법)로 알려야 하기 때문에 자금 부족은 남겨두도록 합시다. 따라서 거래 주문이 전혀 전송되지 않습니다.

오류 메시지는 주문 전송을 계속 시도할지 여부에 대한 정보를 제공할 수 있습니다. 예를 들어 시장이 닫힌 경우 두 번째 요청을 즉시 보내지 않아야 합니다. 잠시 동안 거래를 중단하고(어드바이저 개발자가 결정) 새 요청을 다시 보내야 합니다(거래 신호가 여전히 활성 상태인 경우). 재 견적이 있는 경우 즉시 새 요청을 보낼 수 있습니다. 중지 설정에 오류가 있는 경우(주문이 전송되는 동안 중지 수준 또는 동결 수준이 변경됨) 중지가 새 데이터에 따라 조정되고 새 요청이 즉시 전송됩니다.

따라서 거래 오류(일반적으로 모든 오류)에 대한 지식과 올바른 처리는 "정상적인" 프로그램 작동에 필수 조건입니다.

시장이 닫혀 있는 경우 주문을 보내기 전에 이를 확인해야 합니다.

귀하가 나열한 다른 경우에는 거래 주문을 다시 보내야 합니다. 따라서 모든 오류는 두 가지 범주로 나눌 수 있습니다.

  1. 주문이 전송되기 전에도 발생을 예측할 수 있는 오류,
  2. 재 견적과 같이 주문이 전송되는 시점에서 예측할 수 없는 오류.

EA가 두 번째 종류의 오류를 수신한 경우 해당 조치는 항상 동일해야 하며 오류 유형에 의존하지 않아야 합니다. 즉, 이번에는 실행되기를 희망하여 거래 주문을 반복해야 합니다. EA는 거래 주문을 보내기 전에도 첫 번째 종류의 오류를 제어해야 합니다. 따라서 Expert Advisor는 OnTradeTransaction에서 반환된 오류 유형에 따라 동작을 조정할 필요가 없습니다. 그러나 OnTradeTransaction에서는 사용자에게 오류에 대해 쓸 수 있을 뿐만 아니라 이전 거래 작업이 유형 2 오류로 끝난 경우 새 거래 작업 에 대한 블록을 재설정할 수 있습니다. 동시에 어떤 이유로 OnTradeTransaction이 발생하지 않으면 잠금은 여전히 타임아웃에 의해 재설정되어야 합니다. 따라서 OnTradeTransaction이 오는지 여부는 중요하지 않습니다. OnTradeTransaction을 사용하면 가능한 한 빨리 재시도가 실행됩니다.

추신 FreezeLevel도 좋은 방법으로 주문을 보내기 전에 분석해야 합니다.

 
SL/TP가 작동 했는지 OnTradeTransaction ()에서 어떻게 알 수 있습니까?
사유: