이제 이 문제가 실제로 어떻게 보이는지 보여 드리겠습니다. 나는 완전히 고문을 다시 했다 . OnTimer와 OnBookEvent에서 새 틱을 모두 잡을 수 있도록 했습니다.
시장 개요에는 45개의 기호가 있습니다. 대부분은 액체가 아닙니다.
다음은 OnBookEvent에서 새 틱을 포착한 결과입니다.
РЕКОРДная Разница между временем последенго тика по ВСЕМ символам Минус только, что полученный новый тик по символу 494013 милесекундa.
CR 018 : 51 : 47.334 ProverkaAktyalnostiTikov (ALRS,H1) Получен НОВЫЙ тик по символу SNGR- 3.19 time_msc= 2019.03 . 1818 : 41 : 47.988
HN 018 : 51 : 47.335 ProverkaAktyalnostiTikov (ALRS,H1) ХОТЯ до этого был получeн тик ARMD time_msc 2019.03 . 1818 : 50 : 02.001
즉, 18:50 TimeCurrent에서 18:41의 시간으로 SNGR-3.19 기호에 새로운 틱이 포착되었습니다 .
다음은 현재 컴퓨터의 현지 시간을 측정한 것입니다.
1) 새 틱 수신, 즉 CopyTick(또는 설정에 따라 SymbolInfo)에 대한 마지막 호출 순간에
2) 끝에서 두 번째 호출 시.
18 : 51 : 47.335 ProverkaAktyalnostiTikov (ALRS,H1) Локальное время получения нового тика по символу. 2019.03 . 1818 : 51 : 47.33418 : 51 : 47.335 ProverkaAktyalnostiTikov (ALRS,H1) Предпоследние Локальное время попытки получить новый тик по символу 2019.03 . 1818 : 41 : 47.204
즉, 이 경우 단순히 10분 동안 새로운 것을 얻기 위한 함수가 호출되지 않아 문제가 발생한 것이다.... 그리고 SNGR- 3.19 심볼에 대한 OnBookEvent 이벤트가 10분 동안 발생하지않았기 때문에 발생한 것이다.
아마도 터미널이 이벤트 대기열에 넣었을 것입니다. 이 대기열에서 어떻게든 사라졌습니다. OnTimer를 사용하면 이러한 잼이 없습니다. 예, 때때로 틱이 20초 지연됩니다.
주의 질문: 18:00:00 TimeCurrent() 에서 17:59:00 의 틱에 대해 모르는 것이 정상이라고 생각하십니까?
나는 그 문제가 논쟁의 여지가 있다고 생각한다. 틱 시퀀스가 최소한 다음 기준을 충족하기를 원합니다.
1. 일관성이 있었다. 각 후속 틱의 시간 >= 이전 틱의 시간;
2. 관련성. 저것들. 현재 순간에 가능한 한 가깝게 마지막으로 들어오는 틱의 시간;
두 번째 요점에 문제가 있는 것 같습니다.
포인트 2의 분쟁 가능성은 다음과 같습니다. 서버에서 틱이 형성되는 시점부터 받는 시점까지의 시간(lag)을 최소화하여 남들보다 빠르게 처리하고 거래를 결정할 수 있도록 하고 싶습니다. 하지만! 지연이 모든 입찰자에게 동일하면 문제가 없습니다(내가 이해하는 한). 저것들. 브로커의 서버에 문제가 있지만 모든 것이 동등합니다. 17:59:00에 17:59:01에 누군가 진드기에 대한 정보를 받았지만 18:00에도 그것을받지 못했다면 큰 문제입니다.
그리고 여기에 질문이 있습니다. 문제는 무엇입니까(그리고 문제가 있습니까)? 오랫동안(모두에게) 틱을 주지 않는 브로커의 서버에서, 또는 오랫동안 받지 않는 MT5에서.
주석이 있는 소스 코드가 있습니다.
보기에 너무 게으른? 아니면 뭔가 명확하지 않습니까?
보았다. 코드 없이 아이디어를 얻었습니다. 왜 나에게 조언하는지 명확하지 않습니다.
가장 유동적인 상품을 Market Watch에 추가해야 합니다.
그런 다음 이러한 도구의 안경을 추가합니다.
그리고 OnBookEvent()가 트리거되면 1틱(마지막)을 복사하면 시간이 있고 즉시 현지 시간을 가져와 비교합니다.
당신의 방법이 더 나은 이유는 무엇입니까?
보았다. 코드 없이 아이디어를 얻었습니다. 왜 나에게 조언하는지 명확하지 않습니다.
당신의 방법이 더 나은 이유는 무엇입니까?
그가 옳기 때문입니다!
현지 시간이 아니라 서버 시간을 잘못 입력했습니다 .
1. 진드기는 일괄적으로 터미널에 도착합니다.
2. 각 후속 패키지에는 이전 패키지에 "스택"되지 않았지만 이전 패키지와 동일한 시간을 갖는 틱이 포함될 수 있습니다.
3. OnBookEvent()는 모든 틱(가격, 거래량 변경), 즉 각 틱 이 도착하면 트리거됩니다 . (당신은 타이머를 시작 - 이미 나쁜).
4. 전혀 필요하지 않은 컴퓨터의 현지 시간을 사용하고 있습니다!
사실 여기에 거래에 필요한 모든 것이 있습니다(거래 세션 시간 확인)
추가됨
밀리초 정밀도가 필요한 경우
추가됨
그러나 이 모든 것이 원하는 결과(거래 시간 제한)를 제공하지 않습니다.
틱은 거래 세션 에 없을 수 있으며 시간은 멈추지 않습니다.
누군가 보류 중인 주문을 제거하고 주문서가 변경되었다고 가정해 보겠습니다.
신호가 있고 "오래된" 수정이 있습니다(시간은 현재가 아님).
터미널은 서버의 정확한 시간을 방송하지 않습니다 .
당신이 나를 이해하지 못한다. 처음부터 시작합시다.
1) 프로그램 에서 TimeCurrent() 함수 를 호출 하고 Market Watch에서 선택한 기호 중 하나에 대한 마지막 시세의 도착 시간을 가져옵니다.
18:00:00
2) 다음 명령으로 마지막 SBER 틱의 시간을 얻습니다.
17:58:00
3) 약간의 시간이 흐르고 마지막 SBER 틱의 시간을 다시 요청합니다.
17:59:00이 되자
주의 질문: 18:00:00 TimeCurrent() 에서 17:59:00 의 틱에 대해 모르는 것이 정상이라고 생각하십니까?
당신이 나를 이해하지 못한다. 처음부터 시작합시다.
1) 프로그램에서 TimeCurrent() 함수 를 호출 하고 Market Watch에서 선택한 기호 중 하나에 대한 마지막 시세의 도착 시간을 가져옵니다.
18:00:00
2) 다음 명령으로 마지막 SBER 틱의 시간을 얻습니다.
17:58:00
3) 약간의 시간이 흐르고 마지막 SBER 틱의 시간을 다시 요청합니다.
17:59:00으로 해주세요
주의 질문: 18:00:00 TimeCurrent() 에서 17:59:00 의 틱에 대해 모르는 것이 정상이라고 생각하십니까?
내가 준 코드에서 모든 틱을 고려할 수 있습니다 (문제가 아님)
마지막 코드는 TineCurrent()를 사용하지 않지만 TimeTradeServer() 를 사용합니다.
DAY까지 눈금을 확인하고 그게 다야!
다시 시작하겠습니다.
일반적으로 무엇을 하고 싶습니까?
틱 시간을 현지 시간과 비교하기 시작한 이유는 무엇입니까?
원래 목표는 무엇입니까?
이제 이 문제가 실제로 어떻게 보이는지 보여 드리겠습니다. 나는 완전히 고문을 다시 했다 . OnTimer와 OnBookEvent에서 새 틱을 모두 잡을 수 있도록 했습니다.
시장 개요에는 45개의 기호가 있습니다. 대부분은 액체가 아닙니다.
다음은 OnBookEvent에서 새 틱을 포착한 결과입니다.
즉, 18:50 TimeCurrent에서 18:41의 시간으로 SNGR- 3.19 기호에 새로운 틱이 포착되었습니다 .
다음은 현재 컴퓨터의 현지 시간을 측정한 것입니다.
1) 새 틱 수신, 즉 CopyTick(또는 설정에 따라 SymbolInfo)에 대한 마지막 호출 순간에
2) 끝에서 두 번째 호출 시.
즉, 이 경우 단순히 10분 동안 새로운 것을 얻기 위한 함수가 호출되지 않아 문제가 발생한 것이다.... 그리고 SNGR- 3.19 심볼에 대한 OnBookEvent 이벤트가 10분 동안 발생하지 않았기 때문에 발생한 것이다.
아마도 터미널이 이벤트 대기열에 넣었을 것입니다. 이 대기열에서 어떻게든 사라졌습니다. OnTimer를 사용하면 이러한 잼이 없습니다. 예, 때때로 틱이 20초 지연됩니다.
당신의 원래 목표는 무엇입니까?
tiv 시간을 현지 시간 과 비교해야 하는 이유는 무엇입니까?
당신의 원래 목표는 무엇입니까?
tiv 시간을 현지 시간과 비교해야 하는 이유는 무엇입니까?
서버에서 틱이 발생하는 순간과 터미널에서 발생하는 시간 사이의 최대 지연 시간을 알고 싶습니다. 그리고 이 시간을 어떻게 최소화할 수 있습니까?
이 지식은 자신의 테스터를 작성할 때 사용할 수 있습니다. 그리고 큰 지연으로 개발자를 당황하게 할 수도 있습니다.
TimeCurrent() - 마지막 심볼 틱의 시간은 지연 시간보다 짧으므로 사용할 수 있습니다. 첫 번째 버전에서 현지 시간 을 사용하는 것은 좋은 생각이 아닙니다.
서버에서 틱이 발생하는 순간과 터미널에서 발생하는 시간 사이의 최대 지연 시간을 알고 싶습니다. 그리고 이 시간을 어떻게 최소화할 수 있습니까?
이 지식은 자신의 테스터를 작성할 때 사용할 수 있습니다. 그리고 큰 지연으로 개발자를 당황하게 할 수도 있습니다.
분명한. 계속... 나 없이.
다른 포럼 회원의 경우
주의 질문: 18:00:00 TimeCurrent() 에서 17:59:00 의 틱에 대해 모르는 것이 정상이라고 생각하십니까?
나는 그 문제가 논쟁의 여지가 있다고 생각한다. 틱 시퀀스가 최소한 다음 기준을 충족하기를 원합니다.
1. 일관성이 있었다. 각 후속 틱의 시간 >= 이전 틱의 시간;
2. 관련성. 저것들. 현재 순간에 가능한 한 가깝게 마지막으로 들어오는 틱의 시간;
두 번째 요점에 문제가 있는 것 같습니다.
포인트 2의 분쟁 가능성은 다음과 같습니다. 서버에서 틱이 형성되는 시점부터 받는 시점까지의 시간(lag)을 최소화하여 남들보다 빠르게 처리하고 거래를 결정할 수 있도록 하고 싶습니다. 하지만! 지연이 모든 입찰자에게 동일하면 문제가 없습니다(내가 이해하는 한). 저것들. 브로커의 서버에 문제가 있지만 모든 것이 동등합니다. 17:59:00에 17:59:01에 누군가 진드기에 대한 정보를 받았지만 18:00에도 그것을받지 못했다면 큰 문제입니다.
그리고 여기에 질문이 있습니다. 문제는 무엇입니까(그리고 문제가 있습니까)? 오랫동안(모두에게) 틱을 주지 않는 브로커의 서버에서, 또는 오랫동안 받지 않는 MT5에서.