Как получить текущее время с миллисекундами?

 

Цель: делать в советнике уникальные метки для групп ордеров, которые будет уникальны и после перезапуска советника.

Первая мысль - это взять текущее время с миллисекундами и сунуть в комментарий каждому ордеру.


Как наиболее вменяемым и скоростным способом это можно сделать в mql4?

 
vipermagi:

Цель: делать в советнике уникальные метки для групп ордеров, которые будет уникальны и после перезапуска советника. Еще можно использовать генератор случайных чисел, см. справку. 

Первая мысль - это взять текущее время с миллисекундами и сунуть в комментарий каждому ордеру.


Как наиболее вменяемым и скоростным способом это можно сделать в mql4?

Как 2 пальца, Win APi использовать, но в маркет не пропустят. Или генератор случайных чисел использовать, он есть в mql4. 

Справочник MQL4 / Математические функции / MathRand
struct SYSTEMTIME 
{
  ushort wYear;
  ushort wMonth;
  ushort wDayOfWeek;
  ushort wDay;
  ushort wHour;
  ushort wMinute;
  ushort wSecond;
  ushort wMilliseconds;
};

#import "Kernel32.dll"
    void GetLocalTime(SYSTEMTIME &lpSystemTime);
#import 
 
vipermagi:

Цель: делать в советнике уникальные метки для групп ордеров, которые будет уникальны и после перезапуска советника.

Чем тогда секунды не угодили? Все равно ведь на реальном рынке не выполнят серию заявок в одну секунду.

Еще один момент: если открытие ордеров основано на показаниях какого-то индикатора, то там даже секунды не понадобятся, т. к. минимальный ТФ - М1. Я как раз пользуюсь этим обстоятельством.

 
vipermagi:

Цель: делать в советнике уникальные метки для групп ордеров, которые будет уникальны и после перезапуска советника.

Первая мысль - это взять текущее время с миллисекундами и сунуть в комментарий каждому ордеру.


Как наиболее вменяемым и скоростным способом это можно сделать в mql4?

в качестве метки группы (комента) использовать тикет первого ордера группы. Тогда ордер принадлежит группе N если у него тикет N или в коменте написано "N".

как и с любыми коментариями - есть нюанс - придётся немного муторится с частичным и встречным закрытием выискивая оригинал ордера.
 

Всё оказывается немножечко грустнее. Это не свободный комментарий, а служебный. Я бы этому свойству ордера дал бы название closed. Когда ордер закрывается, то система пишет туда причину закрытия. Видел там строчки "canceled", "[tp]" и "[sl]".

 
Метку для группы ордеров (магик), нужно делать осмысленную, то есть в этот номер кодировать служебную информацию (условия открытия) + дату.
Тогда, при перезапуске, сможете легко собрать все группы и ничего не потеряется.
 
vipermagi:

Всё оказывается немножечко грустнее. Это не свободный комментарий, а служебный. Я бы этому свойству ордера дал бы название closed. Когда ордер закрывается, то система пишет туда причину закрытия. Видел там строчки "canceled", "[tp]" и "[sl]".

комментарий задаёт пользователь, а сервер его хранит и лишь дописывает служебные данные. Не стоит конечно разбегаться и пытаться впихать невпихуемое то есть очень длиииинннуууюю строку - она будет обрезана и частично перезатёрта. Но 3-4 числа влезают запросто.

можно ещё манипулировать MAGIC ордера. Собственно единственное что из произвольных данных хранит сервер - комент и magic.

 

Миллисекундное время можно и самому синтезировать.  Если брать упрощённый случай, когда не требуется точная синхронизация с реальным временем, то можно сделать так:

long time = (long)TimeLocal()*1000 + GetTickCount()%1000;
 
vipermagi:

Всё оказывается немножечко грустнее. Это не свободный комментарий, а служебный. Я бы этому свойству ордера дал бы название closed. Когда ордер закрывается, то система пишет туда причину закрытия. Видел там строчки "canceled", "[tp]" и "[sl]".

И не нужно использовать комментарий для собственных целей. Это поле может быть затерто (изменено) сервером.

P. S. Не спрашивайте меня, зачем оно вообще нужно. Я сам не знаю )))

 
Alexey Navoykov:

Миллисекундное время можно и самому синтезировать.  Если брать упрощённый случай, когда не требуется точная синхронизация с реальным временем, то можно сделать так:

так нельзя.. с такой формулой секунда запросто начнётся с 900 и в ней-же при следующем обращении будет 10 мсек. То есть нарушится "поступательное" движение отсчётов времени. Это будет не время а НЁХ :-)

 
Maxim Kuznetsov:

так нельзя.. с такой формулой секунда запросто начнётся с 900 и в ней-же при следующем обращении будет 10 мсек. То есть нарушится "поступательное" движение отсчётов времени. Это будет не время а НЁХ :-)

Да, действительно, поспешил я.  Синхронизацию всё ж придётся делать  

Причина обращения: