실시간 틱 - 페이지 17

 
Yuriy Zaytsev :

당신은 그것에 대해 확신합니까?


4초???? , 노노! 프로세서가 4초 동안 정지했거나 메모리가 4초 동안 할당 및 해제되었다고 생각하십니까? 농담하는거야?

디스크 쓰기 대기열일 가능성이 큽니다.

디스크 장치는 메모리 및 프로세서보다 느립니다.

그런 다음 flush() , C 언어에 그러한 명령이 있습니다. 아마도 그것이 편리하고 편안할 때 실행되고 디스크 로딩과 관련된 약간의 지연으로 더 자주 실행될 수 있다는 것을 알고 있을 것입니다.

버퍼를 디스크로 플러시해야 할 때 호출됩니다.

글쎄요, 잘 모르겠습니다. 왜냐하면 MT에서 실험적으로 확인하지 않았습니다. 그러나 그것은 일종의 표준과 같습니다. 왜 로그에서 디스크에 쓰는 시간인지, 로그에 이 항목을 발생시킨 이벤트 시간이 더 중요하다면 논리적입니까?

예, 그리고 디스크에 쓰는 시간이 로그에 기록된다고 가정하고 디스크가 로드되면 물리적 기록에 여전히 지연이 있으며 시간은 쓰기 명령을 보낼 가치가 있습니다. 녹음 버퍼.

저것들. 플러시는 버퍼를 변경하지 않습니다 - 지연이 있는 경우 잠시 후에 버퍼를 플러시합니다.

추신 쓰기와 시간, tk가 필요하다는 것을 올바르게 알았습니다. 어쨌든 로그에 쓸 때 터미널 자체가 형성되는 시간에만 초점을 맞추는 것은 의미가 없습니다.

 
Aleksey Mavrin :

잘 모르겠습니다. 왜냐하면 MT에서 실험적으로 확인하지 않았습니다. 그러나 그것은 일종의 표준과 같습니다. 왜 로그에서 디스크에 쓰는 시간인지, 로그에 이 항목을 발생시킨 이벤트 시간이 더 중요하다면 논리적입니까?

예, 그리고 디스크에 쓰는 시간이 로그에 기록된다고 가정하고 디스크가 로드되면 물리적 기록에 여전히 지연이 있으며 시간은 쓰기 명령을 보낼 가치가 있습니다. 녹음 버퍼.

저것들. 플러시는 버퍼를 변경하지 않습니다 - 지연이 있는 경우 잠시 후에 버퍼를 플러시합니다.

추신 쓰기와 시간, tk가 필요하다는 것을 올바르게 알았습니다. 어쨌든 로그에 쓸 때 터미널 자체가 형성되는 시간에만 초점을 맞추는 것은 의미가 없습니다.


디스크에 쓰기 직전에 시간이 삽입되면 모든 것이 함께 증가한다고 가정했습니다.

스크립트를 단계별로 페인트하여 더 명확하게 해 봅시다.


1-tick이 왔습니다(OnTick에 들어옴) - 인쇄해야 함

2-in OnTick에 로그 인쇄가 있습니다. 성공적으로 등록되었습니다.

3-THIS 틱은 OnBock에도 나타나며 인쇄되어야 합니다.

4-여기서 NIGHTMARE Windows가 갑자기 시작됩니다. 이 순간에 다른 프로그램에서 디스크로 20개의 데이터 스트림을 갑자기 POURS하고 디스크를 일시적으로 차단합니다.

드라이버가 데이터를 다른 곳에 쓰기 위해 마그네틱 헤드를 움직였기 때문입니다.

5-현재 메타 트레이더는 DISK에 무언가를 보내려고 합니다.

그러나 디스크는 WINDOWS 운영 체제로 인해 매우 바쁘다 - 운영 체제는 메타 트레이더에게 죄송합니다 MQ라고 말합니다. 여기에 더 중요한 작업이 있습니다 - 기다려 주십시오

6- 4초 소요 Windows가 4초 만에 작업을 완료했습니다.

7- 그리고 4초 후 Windows가 디스크에 대기열을 해제하고 메타 트레이더에게 말합니다. 존경받는 거래 터미널 - 거기에 디스크에 무언가를 쓰고 싶습니까? - 글쎄요!

8-metatrader는 4초의 지연으로 디스크에 기록하고 TIME IN THE LOG를 수정합니다. 그가 디스크에 데이터를 쓰고 싶을 때가 아니라 사실입니다.

여기에서 4초가 걸립니다



---

다음은 터미널 시간이 현지 시간 으로 버퍼링된 것과 같은 다른 시나리오입니다. 그러나 기록이 4초 지연됨 - 이러한 시나리오를 롤링하지 않음

그렇지 않으면 타이밍이 맞을 것입니다!

 
Aleksey Mavrin :

글쎄요, 잘 모르겠습니다. 왜냐하면 MT에서 실험적으로 확인하지 않았습니다 . 그러나 그것은 일종의 표준과 같습니다. 왜 로그에서 디스크에 쓰는 시간인지, 로그에 이 항목을 발생시킨 이벤트 시간이 더 중요하다면 논리적입니까?

예, 그리고 디스크에 쓰는 시간이 로그에 기록된다고 가정하고 디스크가 로드되면 물리적 기록에 여전히 지연이 있으며 시간은 쓰기 명령을 보낼 가치가 있습니다. 녹음 버퍼.

저것들. 플러시는 버퍼를 변경하지 않습니다 - 지연이 있는 경우 잠시 후에 버퍼를 플러시합니다.

추신 쓰기와 시간, tk가 필요하다는 것을 올바르게 알았습니다. 어쨌든 로그에 쓸 때 터미널 자체가 형성되는 시간에만 초점을 맞추는 것은 의미가 없습니다.

확인하지 않은 경우 시도하지 마십시오.

이 스레드가 무엇에 관한 것인지 이해하십니까?

나에게 시험을 보여줘, 그렇지 않으면 여기서 나가

 
Aleksey Mavrin :

글쎄요, 잘 모르겠습니다. 왜냐하면 MT에서 실험적으로 확인하지 않았습니다. 그러나 그것은 일종의 표준과 같습니다. 로그에서 이 항목을 발생시킨 이벤트 시간이 더 중요하다면 왜 로그에서 디스크에 쓰는 시간 인지, 논리적입니까?

예, 그리고 디스크에 쓰는 시간이 로그에 기록된다고 가정하고 디스크가 로드되면 물리적 기록에 여전히 지연이 있으며 시간은 쓰기 명령을 보낼 가치가 있습니다. 녹음 버퍼.

저것들. 플러시는 버퍼를 변경하지 않습니다 - 지연이 있는 경우 잠시 후에 버퍼를 플러시합니다.

추신 쓰기와 시간, tk가 필요하다는 것을 올바르게 알았습니다. 어쨌든 로그에 쓸 때 터미널 자체가 형성되는 시간에만 초점을 맞추는 것은 의미가 없습니다.

우리의 경우 디스크에 쓰는 데 걸리는 시간이 밝혀졌습니다 !

그러나 이벤트 시간은 GetTickDescription 절차로 구성할 수 있으며, 이에 대해 분기 작성자에게 조금 더 높게 썼습니다.

그리고 그가 그것을 거기에 넣었다면 우리는 4초 지연에 대한 가능한 이유에 대해 논의하지 않았을 것입니다. 로그에서 현지 시간은 OnBok과 OnTik에서 동일하게 도착했을 가능성이 높지만 쿠키 디스크에 쓰는 시간은 4초 차이가 납니다.

 //+------------------------------------------------------------------+ 
//| возвращает строковое описание тика                               | 
//+------------------------------------------------------------------+ 
string GetTickDescription( MqlTick &tick)
{
..
..
세르게이 찰리셰프 :

확인하지 않은 경우 시도하지 마십시오.

이 스레드가 무엇에 관한 것인지 이해하십니까?

나에게 시험을 보여줘, 그렇지 않으면 여기서 나가

왜 그렇게 힘든지.

 

이론상으로 이 진드기 잡기를 개선하고 일주일 또는 그 이상으로 설정할 수 있습니다. 그러면 로그에 기록하는 날짜가 이벤트 날짜와 함께 점점 빨라지는 순간을 포착할 수 있을 것입니다.

물론 기록을 위해 디스크를 주기적으로 로드하여 이 프로세스의 속도를 높일 수 있습니다.

또 다른 질문, 가장 중요한 질문입니다. 그리고 왜 이 연구에 시간을 낭비하고 있는지 :-))), 이것에서 얼마나 실질적인 소진이 일어났는지.

---

현재로서는 틱이 OnTick에 먼저 도착한 다음 OnBook 에 도착한다는 것이 분명합니다. , 닫히거나 삭제된 볼륨이 변경되었습니다. 그리고 교환의 경우 이것은 매우 중요한 정보입니다.

그리고 물론 STOCK/FUE 시장에서 거래 결정의 논리에 따라 OnTick이 아닌 OnBock에서 만드는 것이 더 논리적입니다.

 
Sergey Chalyshev :

확인하지 않은 경우 시도하지 마십시오.

이 스레드가 무엇에 관한 것인지 이해하십니까?

나에게 시험을 보여줘, 그렇지 않으면 여기서 나가

여기 트친건 너네 젠장 16페이지는 인쇄 전 이벤트 발동시간을 생각못하고 기억하고 쓰는게 속도를 잰다 망할 전문가들)

당신이 그런 자부심으로 나에게 지적한 것을 그들은 내가 확인하지 않았지만 당신 자신이 그것이 무엇에 관한 것인지 정말로 이해하지 못했다고 말합니다. 나는 논쟁 할 준비가되어 있습니다. 하지만 당신은 아마 그것을 이해하지 못할 것입니다.

그리고 이번에는 확실히 디스크에 쓸 때가 아니라는 사실이 확인됐다.

 
Sergey Chalyshev :

확인하지 않은 경우 시도하지 마십시오.

이 스레드가 무엇에 관한 것인지 이해하십니까?

나에게 시험을 보여줘, 그렇지 않으면 여기서 나가

이봐, 똑똑한 녀석, 당신은 당신이 무엇을 얻었는지 확인할 수 있는 최소한의 신뢰할 수 있는 방법을 보여주고, 내가 이해하지 못했다는 것을 버리고 인정할 것입니다. 그렇지 않으면 당신 자신이 이해하지 못한다는 것을 인정하거나, 사과하거나, 스스로 내려놓으십시오.

즉, 터미널이 로그에 기록하는 시간, 즉 주요 옵션을 실험적으로 확인하는 적어도 하나의 100% 신뢰할 수 있는 방법:

1. 터미널이 대기열에서 인쇄 명령을 수신한 시간.

2. 인쇄 명령의 실행 시작 시간.

3. 버퍼에 인쇄가 완료되고 갑자기)

이 옵션은 정확히 무엇이 아닌지 추측할 수 있습니다.

4. 디스크에 인쇄할 시간.

 
Aleksey Mavrin :

이봐, 똑똑한 녀석이여, 당신이 무엇을 얻었는지 확인할 수 있는 최소한의 신뢰할 수 있는 방법을 보여주세요. 그러면 내가 이해하지 못했다는 것을 버리고 인정하겠습니다. 그렇지 않으면 당신 자신이 이해하지 못한다는 것을 인정하거나 사과하거나 가져오십시오 스스로 내려.

즉, 터미널이 로그에 기록하는 시간, 즉 주요 옵션을 실험적으로 확인하는 적어도 하나의 100% 신뢰할 수 있는 방법:

1. 터미널이 대기열에서 인쇄 명령을 수신한 시간.

2. 인쇄 명령의 실행 시작 시간.

3. 버퍼에 인쇄가 완료되고 갑자기)

이 옵션은 정확히 무엇이 아닌지 추측할 수 있습니다.

4. 디스크에 인쇄할 시간.

글쎄, 무슨 일이야?

코드를 기다리는 중...

 
prostotrader :

글쎄, 무슨 일이야?

코드를 기다리는 중...

어떤 코드를 기다리고 있습니까? 내가 당신에게 뭔가를 약속 했습니까? 어떤 가격에 동의했습니까?

p / s / 당신은 또한 당신의 친구처럼 내가 말하는 것을 이해하지 못했습니다.
 

논쟁이 벌어지고 있는 동안 나는 1번의 실험을 더 했다.

 //+------------------------------------------------------------------+
//|                                                   Ticks_test.mq5 |
//|                                      Copyright 2019 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019 prostotrader"
#property link        "https://www.mql5.com"
#property version    "1.00"
//---
bool is_book;
ulong st_time, func_time;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{
  is_book = MarketBookAdd ( Symbol ());
  st_time = GetMicrosecondCount ();
  func_time = GetMicrosecondCount ();
   Print ( __FUNCTION__ , "; Time: " , MathAbs ((func_time - st_time)/ 1000 ), " ms" );
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
   if (is_book == true ) MarketBookRelease ( Symbol ());
}
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent ( const string &symbol)
{
   if ( Symbol () == symbol)
  {
    func_time = GetMicrosecondCount ();
     Print ( __FUNCTION__ , "; Time: " , MathAbs ((func_time - st_time)/ 1000 ), " ms" );
  }
}
void OnTick ()
{
  func_time = GetMicrosecondCount ();
   Print ( __FUNCTION__ , "; Time: " , MathAbs ((func_time - st_time)/ 1000 ), " ms" );
}
//+------------------------------------------------------------------+

즉, 초기화 중에 마이크로초 시간을 감지하고,

각 인쇄 전에 다시 드릴 시간

이상적으로는 다음과 같아야합니다.

2020.02.04 21:28:01.316	Ticks_test_2 (GOLD-3.20,M1)	OnTick; Time: 1395 ms
2020.02.04 21:28:01.316	Ticks_test_2 (GOLD-3.20,M1)	OnBookEvent; Time: 1395 ms

그러나 매우 자주 다음과 같이 나타납니다(로그 발췌).

 2020.02 . 04 21 : 28 : 11.133 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 11212 ms
2020.02 . 04 21 : 28 : 11.139 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 11218 ms

2020.02 . 04 21 : 28 : 15.603 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 15682 ms
2020.02 . 04 21 : 28 : 15.609 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 15688 ms

2020.02 . 04 21 : 28 : 29.521 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 29599 ms
2020.02 . 04 21 : 28 : 29.790 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 29868 ms
2020.02 . 04 21 : 28 : 29.790 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 29868 ms

2020.02 . 04 21 : 28 : 33.109 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 33188 ms
2020.02 . 04 21 : 28 : 33.115 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 33194 ms

2020.02 . 04 21 : 28 : 40.800 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 40878 ms
2020.02 . 04 21 : 28 : 40.807 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 40885 ms

2020.02 . 04 21 : 28 : 41.891 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 41969 ms
2020.02 . 04 21 : 28 : 41.896 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 41974 ms

2020.02 . 04 21 : 28 : 52.984 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 53063 ms
2020.02 . 04 21 : 28 : 52.991 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 53070 ms

2020.02 . 04 21 : 28 : 54.457 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 54536 ms
2020.02 . 04 21 : 28 : 55.276 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 55355 ms

2020.02 . 04 21 : 29 : 10.643 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 70722 ms
2020.02 . 04 21 : 29 : 10.650 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 70729 ms

2020.02 . 04 21 : 29 : 14.674 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 74752 ms
2020.02 . 04 21 : 29 : 14.681 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 74759 ms

2020.02 . 04 21 : 29 : 25.306 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 85384 ms
2020.02 . 04 21 : 29 : 25.313 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 85390 ms

2020.02 . 04 21 : 29 : 30.468 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 90546 ms
2020.02 . 04 21 : 29 : 30.481 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 90559 ms

2020.02 . 04 21 : 29 : 30.866 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 90944 ms
2020.02 . 04 21 : 29 : 30.874 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 90951 ms

2020.02 . 04 21 : 29 : 36.680 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 96758 ms
2020.02 . 04 21 : 29 : 36.688 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 96766 ms

2020.02 . 04 21 : 29 : 37.891 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 97968 ms
2020.02 . 04 21 : 29 : 37.910 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 97987 ms

따라서 인쇄가 호출될 때 인쇄하기 위해 현지 시간 이 기록됩니다.

근데 4초도 안맞아..