GetInfoParam("SERVERTIME")

Страницы: 1
RSS
GetInfoParam("SERVERTIME"), не всегда срабатывает
 
Здравствуйте. есть код вида

Код
         base_time = "13:25:58"  
         stime = tostring(GetInfoParam("SERVERTIME")) 

 if stime == base_time then do smth xren' 
условие должно срабатывать, когда серветтайм == 13.25.58
срабатывает, но не всегда. почему так?
переменная сервертайм обновляется при обновлении данных на сервере или как то так, если нет обновления, то могут быть пропуски? и за 57 секундой идет сразу 59?
 
как лучше запускать скрипт в определенное время? интересует именно время биржи или время брокера.
 
И вообще, правильное ли допущение в первом посте про пропуски времени?
 
похоже отбой. тему можно удалить
 
Здравствуйте,
Да в случае с SERVERTIME могут быть пропуски.
надежней всего использовать следующий код
Код
   base_time = "14:25:58"  
         stime = tostring(GetInfoParam("SERVERTIME")) 

   function FixTime(V)
      V=tostring(V)
      local Out = os.date("!*t",os.time())
      local len = string.len(V)
      if len>6 then
         Out.hour,Out.min,Out.sec = string.match(V,"(%d%d)%p(%d%d)%p(%d%d)")
      elseif len==6 then
         Out.hour,Out.min,Out.sec  = string.match(V,"(%d%d)(%d%d)(%d%d)")
      elseif len==5 then
         Out.hour,Out.min,Out.sec  = string.match(V,"(%d)(%d%d)(%d%d)")
      end
      return Out
   end

 if os.time(FixTime(stime)) >= os.time(FixTime(base_time)) then
   message("Hello World")
 end
 
Цитата
Sergey Gorokhov написал:
Здравствуйте,
Да в случае с SERVERTIME могут быть пропуски.
надежней всего использовать следующий код
Код
     base_time  =   "14:25:58"   
         stime  =  tostring(GetInfoParam( "SERVERTIME" )) 

    function   FixTime (V)
      V = tostring(V)
       local  Out  =   os.date ( "!*t" , os.time ())
       local  len  =   string.len (V)
       if  len >  6   then 
         Out.hour,Out.min,Out.sec  =   string.match (V,"(%d%d)%p(%d%d)%p(%d%d)")
       elseif  len =  =  6   then 
         Out.hour,Out.min,Out.sec   =   string.match (V,"(%d%d)(%d%d)(%d%d)")
       elseif  len =  =  5   then 
         Out.hour,Out.min,Out.sec   =   string.match (V,"(%d)(%d%d)(%d%d)")
       end 
       return  Out
    end 

  if   os.time (FixTime(stime))  >  =   os.time (FixTime(base_time))  then 
    message ( "Hello World" )
  end   
Поскольку гугл привел сюда, то тут и задам вопрос.
Лирика: ваша FixTime (V) избыточна применительно к проверкам такого рода совместно с GetInfoParam( "SERVERTIME" ). Просто убрать два двоеточия гораздо быстрее, а смысл тот же.
По делу:
Давно не пользовался GetInfoParam( "SERVERTIME" ), потому, как она не работала как нужно, намучился в свое время.
Легче отправить транзакцию и получить ошибку и уже эту ошибку обработать, чем заранее пользоваться ограничением по времени: сессия идет или нет. Но понадобилось чуть раньше тормозить робота, чем начнется клиринг.
Решил сегодня сделать проверку GetInfoParam( "SERVERTIME" ) - а вдруг вы починили?
На что я рассчитывал, сущеглупый...

Вот тут сразу две ваши функции: getInfoParam("SERVERTIME") и getInfoParam("LASTRECORDTIME"). Если с LASTRECORDTIME все понятно и от нее нечего особо ждать, то SERVERTIME обязана работать точно:
SERVERTIME == (время ПК +- пару секунд +- часовой пояс). (про провайдера мне не стоит упоминать, сейчас не 2000г. и в моем городе их штук 6 - убьют любого за клиента)
10:29:54.176739 Debug: OnConnected flag true
10:29:56.996268 Debug: servertime; 8:45:00; lastrecordtime; 8:45:00
10:29:57.006266 Debug: servertime; 8:45:00; lastrecordtime; 8:45:00
10:29:57.015929 Debug: servertime; 10:29:15; lastrecordtime; 10:29:15
10:29:57.015929 Debug: servertime; 10:29:15; lastrecordtime; 10:29:15; offset_tm; -42
После соединения с сервером (а OnConnected всегда запаздывает на 2 секунды от реального времени соединения) проходит еще почти 3 секунды, в ожидании, что LASTRECORDTIME == SERVERTIME.
После чего ваш сервер посылает время последней записи, которое чудесным образом начинает совпадать со временем сервера и происходит скачек из прошлого, но не в настоящее, а в недалекое прошлое.
Каждую строку записи разделяет минимум sleep(1) в цикле.
Реальная разница между временем моего ПК и серверным +- 2 сек, всегда, на протяжении 10 последних лет. А тут -42 секунды!, и это еще так себе, и по 5000++ секунд бывает, зависит от времени нахождения в дисконекте и времени наступления этого дисконекта.
Сие знание про +-2 секунды - не стандарт и характерно только в связке "мой ПК и ваш сервер" и не может быть использовано где то еще, например, на ПК Васи Пупкина могут быть +-10 сеунд
И вычислять это нет никакого желания, потому как "васей" много и у каждого свое.
Хочется взять время сервера и ПК в секундах и получить нужное смещение -offset_tm, а дальше в коде использовать как: curr_tm = os.time() + offset_tm

Внимание, ВОПРОСЫ!
Откуда берет значение getInfoParam("SERVERTIME")?
Через какое МИНИМАЛЬНОЕ время после соединения с вашим сервером ГАРАНТИРОВАННО можно понять, что данные получаемые с сервера корректны (время ПК +- пару секунд +- часовой пояс), а не далекое прошлое, как в примере выше?
 
для информации
из своего опыта.
1) синхронизируйте комп с сервером точного времени (атомными часами) в итоге время сервера биржи будет совпадать с временем компа и как правило с сервером брокера с погрешностью не более 100 мс (можно получить и 10)
2) сверните  окна в квике, которые не используете . Открытые графические окна могут сильно тормозить
3) по возможности закройте все приложения особенно браузер ( я для браузера и прочего использую второй комп)
Успехов
 
Цитата
Николай Камынин написал:
для информации
из своего опыта.
1) синхронизируйте комп с сервером точного времени (атомными часами) в итоге время сервера биржи будет совпадать с временем компа и как правило с сервером брокера с погрешностью не более 100 мс (можно получить и 10)
2) сверните  окна в квике, которые не используете . Открытые графические окна могут сильно тормозить
3) по возможности закройте все приложения особенно браузер ( я для браузера и прочего использую второй комп)
Успехов
Николай, спасибо!
Все что вы перечислили, мне известно, так не делаю, хотя есть возможность выше перечисленное убрать на второй комп, но мне и этот нагрузить нормально не получается.
Сам факт, что прошло уже много лет, а как не работало, так и не работает.

Считаю, если официально объявлена функция в доке, значит должна работать так, как описано в доке.
Если не работает, значит, используя эту функцию, пользователь будет терять деньги. А это подсудное дело.
Товарищи из арки уверены, что пользователи их ПО не соберутся толпой и не выдвинут им иск никогда, и скорее всего так и будет., на то и расчет.
 
Цитата
Александр Кашников написал:
Лирика: ваша FixTime (V) избыточна применительно к проверкам такого рода совместно с GetInfoParam( "SERVERTIME" ). Просто убрать два двоеточия гораздо быстрее, а смысл тот же.
Ваше право.

Цитата
Александр Кашников написал:
Откуда берет значение getInfoParam("SERVERTIME")?
С пакета данных который прислал сервер QUIK.
Кроме того есть еще локальный счетчик который накручивает время при отсутствии свежих данных.

Цитата
Александр Кашников написал:
Через какое МИНИМАЛЬНОЕ время после соединения с вашим сервером ГАРАНТИРОВАННО можно понять, что данные получаемые с сервера корректны (время ПК +- пару секунд +- часовой пояс), а не далекое прошлое, как в примере выше?
такой константы не существует, всегда есть куча переменных в зависимости от которых время может быть разным.
Страницы: 1
Читают тему (гостей: 1)
Наверх