новый mql4 предоставление миллисекунд в метках времени....

 

В настоящее время mql4 может предоставлять время с точностью до секунды только для входящих тиков. Мы используем следующую функцию:

MarketInfo(Symbol(), MODE_TIME)

1) Существует ли другая функция, которая может предоставить миллисекундную метку времени или может быть использована для определения миллисекунд для тиковых данных, поступающих на платформу?

2) сможет ли новый mql4, объединяющий функции mql5, запрашивать или получать миллисекундные (или субсекундные) метки времени на входящих тиках?

Так как же платформа mt4 (и mt5) должна правильно различать тики, поступающие в "одно и то же время"?

 
4evermaat:

В настоящее время mql4 может предоставлять время с точностью до секунды только для входящих тиков. Мы используем следующую функцию:

MarketInfo(Symbol(), MODE_TIME)

1) Существует ли другая функция, которая может предоставить миллисекундную метку времени или может быть использована для определения миллисекунд для тиковых данных, поступающих на платформу?

2) сможет ли новый mql4, объединяющий функции mql5, запрашивать или получать миллисекундные (или субсекундные) метки времени на входящих тиках?

Так как же платформа mt4 (и mt5) должна правильно различать тики, поступающие в "одно и то же время"?

1) GetTickCount(), должен работать в реальном времени. Бессмысленно на исторических данных.

2) Даже mt5_data не сохраняются в миллисекундах. Тем не менее, нет_проблем Live.

3) Я не понимаю, к чему вы клоните. Если это одно и то же время в миллисекундах, то наличие миллисекунд не поможет. Если это разное время в миллисекундах, то GetTickCount() может помочь. Поможет в том смысле, что ваш код обрабатывает текущий тик в течение менее чем миллисекунды. Насколько это важно, зависит от того, чего вы пытаетесь достичь... я полагаю.

 

У вас есть как минимум два варианта.

1. Выделить тики с помощью функции MQL GetTickCount(), которая имеет точность 16 мс.

2. Получить доступ к времени ПК с помощью GetLocalTime() из Kernell32.dll с точностью до наносекунды (это не работает с эмуляторами на linux, они по-прежнему возвращают точность 16 мс).

 

4evermaat: Я думаю, что тики различаются по объему. Каждый раз, когда брокер отправляет новый тик, объем увеличивается на единицу. Например, если вы смотрите на график M1, объем для конкретного бара - это сколько тиков было отправлено за эту минуту.

На самом деле вчера я пытался сделать функцию, которая записывает время с миллисекундами. Она использовала TimeCurrent() и GetTickCount(). Математически это было правильно... но GetTickCount() не достаточно точен. Я обнаружил, что округление времени события до последней секунды (т.е. просто использование TimeCurrent()) дает меньшие ошибки, чем моя функция... :/

Я попробую еще раз в другой день, но, насколько я вижу, вы не можете полагаться на GetTickCount(), если вам нужна точность в пределах секунды.

Может быть, знатокам C++ доступны более точные эквиваленты GetTickCount()...?

 
Ovo:

У вас есть как минимум два варианта.

1. Выделить тики с помощью функции MQL GetTickCount(), которая имеет точность 16 мс.

2. Получить доступ к времени ПК с помощью GetLocalTime() из Kernell32.dll с точностью до наносекунды (это не работает с эмуляторами на linux, они по-прежнему возвращают точность 16 мс).


1) Из моих тестов я не верю, что GetTickCount() имеет точность 16ms. Правда, 16 мс - это самое маленькое значение, которое я получаю (кроме 0), но я не думаю, что значения около 16 мс точны до ближайших 16 мс :/.

2) Отличная идея. Я попробую.

 
alladir:


1) Из моих тестов я не верю, что GetTickCount() имеет точность 16 мс. Правда, 16 мс - это самое маленькое значение, которое я получаю (кроме 0), но я не думаю, что значения около 16 мс точны до ближайших 16 мс :/.

2) Отличная идея. Я попробую.


Извините, я часто путаю точность с точностью, я даже сейчас не уверен, что из них точнее.
 
Ovo:

Извините, я часто путаю точность с аккуратностью, я даже сейчас не уверен, что именно.

Я тоже, все, что я знаю - у меня есть формула, которая должна работать математически, но в реальной жизни не работает... так что я обвиняю GetTickCount() :)
 
alladir:

4evermaat: Я думаю, что тики различаются по объему. Каждый раз, когда брокер отправляет новый тик, объем увеличивается на единицу. Например, если вы смотрите на график M1, объем для конкретного бара - это сколько тиков было отправлено за эту минуту.


Я видел это много раз, но вы уверены в этом? Я проверял это несколько раз на своем ECN-брокере, и объем увеличивается совершенно по-разному на каждом тике, вероятно, это фактические проданные лоты, проходящие через этого брокера. Например, когда я продаю 10 лотов, на следующем тике объем будет +10, а не +1.

 

Объем увеличивается на 10, когда вы торгуете 10 лотами?!? Я с этим не сталкивался. Я запускаю тиковый коллектор, который записывает каждый тик. Иногда объем увеличивается на 2 или 3, но я догадался, что это были очень быстрые тики, которые либо брокер не отправил, либо они пришли, пока функция Start моего тикового коллектора была еще запущена.

Да, я думаю, что объем = тики только из гугления, но это, кажется, соответствует данным, которые я вижу.

 
szgy74:

Я видел это много раз раньше, но вы уверены в этом? Я проверял это несколько раз на своем ECN брокере и объем увеличивается совершенно по-разному на каждом тике, это, вероятно, фактические торговые лоты, проходящие через этого брокера. Например, когда я продаю 10 лотов, на следующем тике объем будет +10, а не +1.

Объем - это плохое название того, что на самом деле является "количеством тиков" ... это не имеет никакого отношения к торгуемому объему/лотам... причина, по которой он может измениться более чем на 1, заключается в том, что вы можете пропустить тики.
 
4evermaat:

В настоящее время mql4 может предоставлять время с точностью до секунды только для входящих тиков. Мы используем следующую функцию:

MarketInfo(Symbol(), MODE_TIME)

1) Существует ли другая функция, которая может предоставить миллисекундную метку времени или может быть использована для определения миллисекунд для тиковых данных, поступающих на платформу?

2) сможет ли новый mql4, объединяющий функции mql5, запрашивать или получать миллисекундные (или субсекундные) метки времени на входящих тиках?

Так как же платформа mt4 (и mt5) должна правильно различать тики, поступающие в "одно и то же время"?

В mql5 такой информации тоже нет. Но есть события Timer, которые можно использовать с точностью до миллисекунды, хотя я не знаю, будет ли эта возможность доступна в новом mql4.
Причина обращения: