OnMain 함수를 실행하는 동안 현재 실제 큐의 상태 를 알 수 있는 방법이 없습니다 . 이 작업을 수행하는 유일한 해결 방법은 링크에서 언급한 것처럼 스파이 프로그램입니다.
가장 간단한 형태:
OnXXX( параметры )
{
запомнить параметры (поместить в очередь)
OnMain();
}
On2XX( параметры )
{
/*вычисления*/
поменять приоритет обработки событий (если нужно)
/*вычисления*/
промежуточный return (если нужно)
/*вычисления*/
}
void OnMain()
{
прочитать приоритет обработки событий
для каждой группы событий
извлечь параметры из очереди
OnTradeXXX( параметры )
удалить событие из очереди
}
계산 자체에 대한 접근 방식을 변경하기만 하면 됩니다(작업에 필요한 만큼 자주 중간 반환). 하지만 어렵다면 1단계에서 OnMain이 존재하지 않는다는 점(메인 코드를 OnMain으로 옮기지 않고 On2XX으로 이동)에서 각각 OnMain에서 아무것도 배울 필요가 없다고 생각하십시오.
OnXXX 함수는 대기열의 이벤트(매개변수)를 복사하고 기본 OnMain 함수를 호출하는 것만 남겨둡니다. 모든 코드를 중복 On2XX 기능으로 이동합니다. 그리고 필요한 순서대로 OnMain에서 이러한 중복 On2XX 함수를 호출하고, 차례로 대기열에서 데이터를 매개변수로 전달합니다.
다음으로 측정을 수행하여 속도의 이득을 보여주면 MQL을 적절한 기능으로 보완하는 것이 이미 가능합니다. 그러나 지금 여기에서 이미 모든 것을 스스로 했다면 왜 보충해야 합니까?!
당신은 그것에 대해 쓰지 않습니다. 문제는 "OntaredeTransaction" 함수의 입력 변수에 필드를 채우는 기능이 도움말에 제공된 설명과 일치하지 않는다는 것입니다. 저것들. 많은 필드가 호출로 채워지지 않으며 최종 호출 TRADE_TRANSACTION_HISTORY_ADD에서도 마찬가지입니다. 따라서 모든 거래자는 도착 시 누락된 매개변수를 어떻게든 결정하기 위해 여기에서 고통을 받습니다. 여기에서 많은 토론이 있었습니다. 포럼에서 검색을 하십시오. "OntaredeTransaction"의 비뚤어진 기능이 추가로 생성됩니다. 처리 비용. 시간과 "부담" 알고리즘 거래자는 적절하게 작동하는 코드를 개발하는 데 추가 시간을 소비합니다(즉, 전체 커뮤니티 수준에서 막대한 시간 손실과 엄청난 비효율). 현재 "심볼에 의한 시장 실행이 있는 경우 가격 값이 0이 될 것입니다. 그래야 합니다."와 같은 개발자의 구독을 취소합니다. ( 링크 ) - 이것은 정상이 아닙니다. 다시 - 마지막 함수 호출에 완전한 값이 없으면 많은 추가 작업이 발생합니다. 인건비.
예를 들어 전투 고문에서는 최신 데이터로 작업하는 것이 중요합니다. 특히 Market Watch 및 CopyTicks의 틱은 가능한 최신 상태여야 합니다.
이를 위해 현재 가격 데이터의 관련성을 확인하기 위한 매우 좋지는 않지만 강제적인 메커니즘이 있습니다. 이러한 메커니즘의 일부 중 하나는 마지막 틱 이후에 기호에 대한 거래가 통과된 상황을 감지하는 것입니다. 이것은 자주 발생하지 않으므로 현재 틱이 여전히 관련이 있는지 여부를 아는 것이 중요합니다.
이러한 탐지를 위해서는 최근 거래 내역에 접근할 수 있어야 합니다. 이것은 다음과 같은 개략적인 방식으로 HistorySelect를 통해 수행됩니다.
불행히도 HistorySelect에 대한 이러한 호출은 5-30밀리초 동안 지속됩니다(Release-EX5에서 직접 측정했습니다). OnTick의 Expert Advisor에서 이러한 업데이트가 여러 번 수행되면(좋은 방법으로 일시 중지 후에 수행해야 합니다. 예를 들어, 각 OrderSend 후에) 모든 것이 엄청나게 비싸고 길어집니다. HistorySelect는 하나의 OnTick에서 총 몇 초를 먹을 수 있습니다.
개발자 여러분, 왜 그렇게 비쌉니까? 이 기능은 제대로 구현되면 즉시 실행할 수 있습니다.
이 아이디어의 기본 체계 코드를 제공하십시오. 언뜻 보면 완전한 오해처럼 들립니다.
OnMain 함수를 실행하는 동안 현재 실제 큐의 상태 를 알 수 있는 방법이 없습니다 . 이 작업을 수행하는 유일한 해결 방법은 링크에서 언급한 것처럼 스파이 프로그램입니다.
가장 간단한 형태:
계산 자체에 대한 접근 방식을 변경하기만 하면 됩니다(작업에 필요한 만큼 자주 중간 반환). 하지만 어렵다면 1단계에서 OnMain이 존재하지 않는다는 점(메인 코드를 OnMain으로 옮기지 않고 On2XX으로 이동)에서 각각 OnMain에서 아무것도 배울 필요가 없다고 생각하십시오.
잘못된 방향으로 목발을 만들고 있습니다.
OnXXX 함수는 대기열의 이벤트(매개변수)를 복사하고 기본 OnMain 함수를 호출하는 것만 남겨둡니다. 모든 코드를 중복 On2XX 기능으로 이동합니다. 그리고 필요한 순서대로 OnMain에서 이러한 중복 On2XX 함수를 호출하고, 차례로 대기열에서 데이터를 매개변수로 전달합니다.
다음으로 측정을 수행하여 속도의 이득을 보여주면 MQL을 적절한 기능으로 보완하는 것이 이미 가능합니다. 그러나 지금 여기에서 이미 모든 것을 스스로 했다면 왜 보충해야 합니까?!
당신은 그것에 대해 쓰지 않습니다.
문제는 "OntaredeTransaction" 함수의 입력 변수에 필드를 채우는 기능이 도움말에 제공된 설명과 일치하지 않는다는 것입니다.
저것들. 많은 필드가 호출로 채워지지 않으며 최종 호출 TRADE_TRANSACTION_HISTORY_ADD에서도 마찬가지입니다.
따라서 모든 거래자는 도착 시 누락된 매개변수를 어떻게든 결정하기 위해 여기에서 고통을 받습니다.
여기에서 많은 토론이 있었습니다. 포럼에서 검색을 하십시오. "OntaredeTransaction"의 비뚤어진 기능이 추가로 생성됩니다. 처리 비용. 시간과 "부담" 알고리즘 거래자는 적절하게 작동하는 코드를 개발하는 데 추가 시간을 소비합니다(즉, 전체 커뮤니티 수준에서 막대한 시간 손실과 엄청난 비효율).
현재 "심볼에 의한 시장 실행이 있는 경우 가격 값이 0이 될 것입니다. 그래야 합니다."와 같은 개발자의 구독을 취소합니다. ( 링크 ) - 이것은 정상이 아닙니다. 다시 -
마지막 함수 호출에 완전한 값이 없으면 많은 추가 작업이 발생합니다. 인건비.
이력선택.
이것은 엄청나게 비싼 기능입니다. 불행히도 캐싱은 현재 작업 속도를 허용할 수 없습니다.
예를 들어 전투 고문에서는 최신 데이터로 작업하는 것이 중요합니다. 특히 Market Watch 및 CopyTicks의 틱은 가능한 최신 상태여야 합니다.
이를 위해 현재 가격 데이터의 관련성을 확인하기 위한 매우 좋지는 않지만 강제적인 메커니즘이 있습니다. 이러한 메커니즘의 일부 중 하나는 마지막 틱 이후에 기호에 대한 거래가 통과된 상황을 감지하는 것입니다. 이것은 자주 발생하지 않으므로 현재 틱이 여전히 관련이 있는지 여부를 아는 것이 중요합니다.
이러한 탐지를 위해서는 최근 거래 내역에 접근할 수 있어야 합니다. 이것은 다음과 같은 개략적인 방식으로 HistorySelect를 통해 수행됩니다.
불행히도 HistorySelect에 대한 이러한 호출은 5-30밀리초 동안 지속됩니다(Release-EX5에서 직접 측정했습니다). OnTick의 Expert Advisor에서 이러한 업데이트가 여러 번 수행되면(좋은 방법으로 일시 중지 후에 수행해야 합니다. 예를 들어, 각 OrderSend 후에) 모든 것이 엄청나게 비싸고 길어집니다. HistorySelect는 하나의 OnTick에서 총 몇 초를 먹을 수 있습니다.
개발자 여러분, 왜 그렇게 비쌉니까? 이 기능은 제대로 구현되면 즉시 실행할 수 있습니다.
" HistorySelect에 대한 이러한 호출 은 5-30밀리초 동안 지속됨"에 대한 증거가 있습니까?
귀하의 아이디어를 올바르게 이해했다면 테스트 코드는 다음과 같아야 합니다.
100,000개의 요청이 처리되는 방식은 다음과 같습니다.
" HistorySelect에 대한 이러한 호출 은 5-30밀리초 동안 지속됨"에 대한 증거가 있습니까?
귀하의 아이디어를 올바르게 이해했다면 테스트 코드는 다음과 같아야 합니다.
100,000개의 요청이 처리되는 방식은 다음과 같습니다.
"HistorySelect에 대한 이러한 호출 은 5-30밀리초 동안 지속됨"에 대한 증거가 있습니까?
귀하의 아이디어를 올바르게 이해했다면 테스트 코드는 다음과 같아야 합니다.
100,000개의 요청이 처리되는 방식은 다음과 같습니다.
스크립트를 실행합니다.
다른 스크립트를 실행합니다.
일반 전투 점수. HFT가 아닙니다.
추신: 그런데 스크립트에서 HistorySelect가 매번 모든 것을 새로 계산하는 것으로 나타났습니다. 그러나 입력 매개변수는 변경되지 않았고 기록 테이블은 업데이트되지 않았으며 다른 HistorySelect 함수는 호출되지 않았습니다.
스크립트를 실행합니다.
그래서 세부 사항이 필요합니다.
내 테스트는 백그라운드에서 실행 중인 많은 다른 프로세스와 함께 느린 "Intel Xeon E5-2630 v4 @ 2.20GHz"에서 실행되었습니다.
2009년 이후 지금까지 8개의 주문을 포함하여 역사상 거의 균등하게 테스트 계정에 31315개의 주문이 있었습니다.
아마도 일부 스크립트 또는 Expert Advisor가 동시에 실행되어 터미널 기반을 크게 로드했을 수 있습니다. "깨끗한"터미널에서 시도하십시오.
더 유익한 테스트:
세 가지 출시:
그래서 세부 사항이 필요합니다.
내 테스트는 백그라운드에서 실행 중인 많은 다른 프로세스와 함께 느린 "Intel Xeon E5-2630 v4 @ 2.20GHz"에서 실행되었습니다.
2009년 이후 지금까지 8개의 주문을 포함하여 역사상 거의 균등하게 테스트 계정에 31315개의 주문이 있었습니다.
아마도 일부 스크립트 또는 Expert Advisor가 동시에 실행되어 터미널 기반을 크게 로드했을 수 있습니다. "깨끗한"터미널에서 시도하십시오.
동일한 계정 및 컴퓨터에서 터미널을 비우십시오.
그림은 다른 계정과 터미널에서도 비슷합니다. 구성.
독자는 이 스크립트의 결과를 제공해야 합니다.
더 유익한 테스트:
세 가지 출시:
빈 터미널 2460.
위협은 빈 계정에서 실행됩니다.
주문이 아니라 거래 건수가 속도에 큰 영향을 미치는 것 같습니다.
동일한 계정 및 컴퓨터에서 터미널을 비우십시오.
그림은 다른 계정과 터미널에서도 비슷합니다. 구성.
독자는 이 스크립트의 결과를 제공해야 합니다.
이것은 아무 것도 증명하지 않지만 (다른 기호에서) 새로운 출시마다 시간이 증가한다는 사실은 놀랍습니다 ...
거래 내역이 긴 계정으로 실행해야 합니다.