Может ли в МТ4 быть время с точностью меньше 1 сек.

 
Как определить время с размерностью менее 1 сек. применительно к функциям типа OrderOpenTime и ей подобной.
 
С учетом того что тип datetime имеет в своём арсенале размерность не меньше секунды, вряд ли что то получится из этой затеи. Если нужно более точное значение времени то придется воспользоваться ф-ми API. Смотри в сторону QueryPerformanceCounter, QueryPerformanceFrequency.
 

Но в других программных средствах есть величина для DateTime меньше 1сек. 

Суть поиска проста . Хочу отслеживать скорость выполнения операций . Есть похожая статья на сайте, что то по поводу подбора ДЦ. Очень интересует скорость выполнения, а скорее её усреднённое значение для временных интервалов в течении суток. Если усреднять с точностью до 1 секунды, то результат будет не тот. А если хотя бы ещё один разряд, то было бы не плохо.

 
zhuki >>:
Как определить время с размерностью менее 1 сек. применительно к функциям типа OrderOpenTime и ей подобной.
int GetTickCount( ) 
Функция GetTickCount() возвращает количество миллисекунд, прошедших с момента старта системы. 
Счетчик ограничен разрешающей способностью системного таймера. 
Так как время хранится как беззнаковое целое, то он переполняется каждые 49.7 дней. 
Пример:
  int start=GetTickCount();
  // некие серьёзные вычисления...
  Print("Время вычисления ", GetTickCount()-start, " миллисекунд.");

 

Удачи. 

 
VladislavVG >>:

Удачи. 


Если нужна точность то эта функция курит по сравнению с теми что я обозначил выше.
 
VladislavVG >>:

Удачи. 

Я знаком с GetTickCount . А как привязать его к реальному времени. И тем более ко времени открытия ордера.

И как привязать функцию к ордерам.

 
Я использовал в советниках GetTickCount для определения скорости работы и вычислений. Честно говоря при скорости до 10 мс показывает очень не точно. Одно и тоже действие определяется с разбросом в 2 и более раз. Как то не совсем реально. На больших величинах более менее.
 
zhuki >>:
Я использовал в советниках GetTickCount для определения скорости работы и вычислений. Честно говоря при скорости до 10 мс показывает очень не точно. Одно и тоже действие определяется с разбросом в 2 и более раз. Как то не совсем реально. На больших величинах более менее.

На операции выполняемые за время сравнимое с миллисекундами влияют очень много факторов, поэтому и показания могут отличатся в несколько раз. Зря ругаете эту функцию.

 
joo писал(а) >>

На операции выполняемые за время сравнимое с миллисекундами влияют очень много факторов, поэтому и показания могут отличатся в несколько раз. Зря ругаете эту функцию.

Windows не является системой реального времени, так что, вряд-ли что-то удастся... Ну можно попробовать, если очень быстрый комп, ненагруженая система, какой-нибудь внешний тактовый генератор (типа атомных часов :)) и то верить этим расчетам особого смысла нет, вот если на оборудовании провайдера предоставляющего вам доступ в интернет, попытатся отмониторить пакеты (ушел запрос в дц)-(пришло подтверждение) то эта цифра будет ближе к реальной.

 
int start()
  {
int GetTime=0;  
int GT=GetTickCount();
int ret=OrderSend(Symbol(),OP_BUYSTOP,0.1,Ask+100*Point,3,0,0,"GetTime",0,0,Blue);
if (ret>0) GetTime=GetTickCount()-GT;
Print("Время открытия  ",GetTime,"  ms");
   return(0);
  }

2010.03.01 09:51:16 GetTime USDCHF,H1: Время открытия 331 ms

2010.03.01 09:51:00 GetTime EURUSD,H1: Время открытия 1222 ms

2010.03.01 09:55:32 GetTime EURUSD,H1: Время открытия 831 ms

Такой скрипт . Как считаете можно этому верить.

 
zhuki писал(а) >>

2010.03.01 09:51:16 GetTime USDCHF,H1: Время открытия 331 ms

2010.03.01 09:51:00 GetTime EURUSD,H1: Время открытия 1222 ms

2010.03.01 09:55:32 GetTime EURUSD,H1: Время открытия 831 ms

Такой скрипт . Как считаете можно этому верить.

Верить то можно, просто не производитель вашего компьютера, ни Microsoft вам не дадут гарантий на такие вычисления

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