mql4에서 OnTradeTransaction()을 대체하는 방법은 무엇입니까? - 페이지 4

 

나는 모든 이벤트를 틱으로 포착하고 이전에 기록된 데이터와 비교합니다.

모두 배열에 있습니다.

실제로 진드기가 많을 때 브레이크가 걸리는 경우가 있습니다. 그래서 체크 사이의 딜레이를 1초로 했습니다.

이것은 많은 위치를 모니터링하는 것입니다.

그리고 특정 로봇의 위치만 있다면 당연히 더 쉽습니다.

 

다행히 제 작업은 어렵지 않고, 주문량이 총 2~30개도 되지 않습니다.

이러한 이유로 나는 OrdersTotal() 에 있는 타이머를 켜고 각 반복마다 교체하여 새 변수와 이전 변수에 볼륨을 기록하고 볼륨이 변경된 경우 추가 조치를 취합니다.

 
Aleksandr Volotko :

다행히 제 작업은 어렵지 않고 총 주문이 2~30개도 되지 않습니다.

이러한 이유로 나는 OrdersTotal()에 있는 타이머를 켜고 각 반복마다 교체하여 새 변수와 이전 변수에 볼륨을 기록하고 볼륨이 변경된 경우 추가 조치를 취합니다.

보류 중인 주문 이 트리거될 때 볼륨은 변경되지 않습니다.

 
Artyom Trishkin :

보류 중인 주문 이 트리거될 때 볼륨은 변경되지 않습니다.

글쎄, 사이클에서 나는 유형별로 주문을 필터링하고 열린 총 포지션의 양을 계산합니다.

MT5에서 특정 이벤트를 기다리지 않고 간단하게 할 수 있을 때 이렇게 어리석게 연주하고 자원을 낭비해야 한다는 것은 슬픈 일입니다.

 
Aleksandr Volotko :

글쎄, 사이클에서 나는 유형별로 주문을 필터링하고 열린 총 포지션의 양을 계산합니다.

MT5에서 특정 이벤트를 기다리지 않고 간단하게 할 수 있을 때 이렇게 어리석게 연주하고 자원을 낭비해야 한다는 것은 슬픈 일입니다.

음, MT5는 MT4보다 10배 더 높습니다.

이것은 다른 기능에도 적용됩니다.

 
제 상황에서는 하루에 한 번 거래하고 하루에 한 번 이벤트로 60 * 60 * 24 = 86,400개의 추가 제스처가 수행됩니다. 그리고 다른 방식으로, 아직 아닙니다.

 
Aleksandr Volotko :
제 상황에서는 하루에 한 번 거래하고 하루에 한 번 이벤트로 60 * 60 * 24 = 86,400개의 추가 제스처가 수행됩니다. 그리고 다른 방식으로, 아직 아닙니다.

작업에 따라 다릅니다.

포지션의 개시/마감(일부 아님)과 주문/삭제를 잡아야 하는 경우 사이클에서 매번 목록을 서두를 필요가 없습니다.

현재와 과거의 OrdersTotal() 값을 간단히 확인할 수 있습니다. 차이가 감지되면(어떤 종류의 이벤트가 있음) 거기에 무엇이 있는지 살펴봅니다.

주문 및 위치 속성의 해시 합계를 사용하여 모든 작업을 수행했습니다. 변경되자마자 - 우리는 어떤 종류의 이벤트가 있습니다 - 그리고 정확히 무엇이 변경되었는지 살펴봅니다.

그러나 나는 모든 것과 모든 변경 사항을 추적하는 임무를 맡았습니다.

 
Aleksandr Volotko :
제 상황에서는 하루에 한 번 거래하고 하루에 한 번 이벤트로 60 * 60 * 24 = 86,400개의 추가 제스처가 수행됩니다. 그리고 다른 방식으로, 아직 아닙니다.

또 다른 접근 방식이 있습니다(새로운 주문의 출현이 전문가의 입장에서만 가능한 경우):

  1. 어드바이저 시작 시 목록의 모든 주문을 우회하여 주문 배열이 형성됩니다.
  2. 각각의 새로운 틱에서 다음을 사용하여 주문의 존재를 확인합니다.

 if ( OrderSelect (nTicket, SELECT_BY_TICKET) && OrderCloseTime() == 0 )

3. 주문이 있는 경우 필요한 경우 데이터를 업데이트합니다. SL/TP/볼륨 추적이 필요한 경우입니다. 필요하지 않은 경우 다른 작업은 전혀 수행하지 않습니다.

4. 주문이 닫힌 목록에서 발견되면(OrderCloseTime() > 0) 배열에서 삭제합니다. 고문이 주문을 열 때만 어레이를 보충합니다.

결과적으로 각 틱 의 전체 주문 목록을 우회할 필요가 없습니다. 자체 배열로만 작업합니다.

 

지금은 OrdersTotal() 값을 비교하려고 합니다( @Artyom Trishkin 존중). 이론적으로는 이것으로 충분해야 합니다. 부분 폐쇄는 없을 것입니다.

초기화하는 동안 이전 값에 -1 값을 할당하여 시장에 주문이 있는지 여부에 관계없이 시작 시 항상 전체 검사가 수행되도록 합니다.

그러면 새 주문이 나타나거나(이벤트) 이전 주문이 삭제됩니다(이벤트). 여기에서는 악기의 상징조차 중요하지 않습니다. 모든 사람에 대해 전체 검사를 수행할 수 있고 수행할 것입니다. 여전히 끝없이 두드리는 것보다 크기가 작습니다.

 
Aleksandr Volotko :

지금은 OrdersTotal() 값을 비교하려고 합니다( @Artyom Trishkin 존중). 이론적으로는 이것으로 충분해야 합니다. 부분 폐쇄는 없을 것입니다.

초기화하는 동안 이전 값에 -1 값을 할당하여 시장에 주문이 있는지 여부에 관계없이 시작 시 항상 전체 검사가 수행되도록 합니다.

그러면 새 주문이 나타나거나(이벤트) 이전 주문이 삭제됩니다(이벤트). 여기에서는 악기의 상징조차 중요하지 않습니다. 모든 사람에 대해 전체 검사를 수행할 수 있고 수행할 것입니다. 여전히 끝없이 두드리는 것보다 크기가 작습니다.

이것만으로도 신중하게 작업해야합니다. 오늘 한 위치가 닫히고 두 번째 위치가 다른 쌍에서 열리고 동시에 틱 사이에서 거의 동시에 열렸습니다.

결과적으로 OrdersTotal()은 8과 동일하게 유지되었습니다. 전문가의 논리가 잘못되었습니다. 새 데이터를 다시 계산하지 않았습니다.