Александр (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Сделка по точному времени сервера
 
Столкнулся с проблемой следующего характера
Скрипт работает  только когда начинается торговая сессий в 10:00:01
До этого момента os.time(FixTime(stime)) >= os.time(FixTime(base_time)) всегда верное значение выдает.
Можно еще конечно брать время операционной системы, но там погрешность в синхронизации и нету уверенности даже если на операционной системе сделать синхронизацию по квантовым часам, что на стороне сервера на столько же точные данные.
Еще вариант спамить заявками каждые 10 миллисекунд (думаю через какое-то время брокер даст по рукам, за такое)
Буду рад если есть еще идеи как это можно реализовать. Может зацепится за первый пакет который приходит всегда в 09:45:00.... или еще  как-то...  
Сделка по точному времени сервера
 
Вот финальный вариант вдруг кому будет полезен
Код
-- Вместо ??? поставить свои значения
p='????' -- Id транзакции
base_time = "09:45:00" -- точное время в которое исполнится заявка
  
   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

function main()
while true do
stime = tostring(GetInfoParam("SERVERTIME")) 
 if os.time(FixTime(stime)) < os.time(FixTime(base_time)) then
 elseif os.time(FixTime(stime)) >= os.time(FixTime(base_time)) then
      transaction = {}
transaction['TRANS_ID'] = p
transaction['CLASSCODE'] = '?????'
transaction['ACTION'] = '?????'
transaction['Торговый счет'] = '???????????'
transaction['К/П'] = '???????'
transaction['Тип'] = '??????'
transaction['Тип по цене'] = '???????'
transaction['Тип по остатку'] = '??????'
transaction['Тип ввода значения цены'] = '???????'
transaction['Назначение заявки'] = '?????'
transaction['Тип события активации заявки'] = '?????'
transaction['Режим'] = '?????'
transaction['Инструмент'] = '?????'
transaction['Цена'] = '????'
transaction['Лоты'] = '????'
transaction['Примечание'] = ''
transaction['Объем заявки'] = ''
transaction['Код внешнего пользователя'] = ''
transaction['Время активации'] = ''
transaction['Доп. инфо'] = ''
transaction['Фирма торгового счета'] = ''
result = sendTransaction(transaction)
   if result ~= "" then
       message(string.format("Транзакция %s не прошла          проверку на стороне терминала QUIK [%s]",
       transaction.TRANS_ID, result))
   else
       message(string.format("Транзакция %s отправлена",
       transaction.TRANS_ID))
               stop() -- отключение скрипта
          -- os.exit(0) -- выключение Quik
   end
   end
   sleep(1000)
end
end

Сделка по точному времени сервера
 
Цитата
swerg написал:
stime = tostring(GetInfoParam("SERVERTIME"))

Вы здесь прочитали время сервера при старте скрипта, а потом в цикле это значение не обновляете. Потому и не срабатывает
Спасибо, теперь работает  :smile:  
Сделка по точному времени сервера
 
Цитата
Опишите симптомы
время сервера 10:00 выставляю в фаиле 9:50 заявка исполняется
если же выставляю 10:01, то при достижении времени сервера 10:01 сделка не исполняется, а процесс циклически продолжается
Сделка по точному времени сервера
 
Есть простая задача, выставить заявку максимально рано в предторговый период 09:45:00 - 09:59:59 мск
Несколько дней потратил написал вот такой скипт, но где-то от моего взора прячется ошибка
Код
base_time = "09:45:00"  
WORK_DONE = false
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

function main()

while true do
 if os.time(FixTime(stime)) < os.time(FixTime(base_time)) then
   WORK_DONE=false
 elseif not WORK_DONE then
   WORK_DONE=true
transaction = {}
transaction['TRANS_ID'] = '????'
transaction['CLASSCODE'] = '????'
transaction['ACTION'] = 'Ввод заявки'
transaction['Торговый счет'] = '??????????????'
transaction['К/П'] = 'Продажа'
transaction['Тип'] = 'Лимитная'
transaction['Тип по цене'] = 'По разным ценам'
transaction['Тип по остатку'] = 'Поставить в очередь'
transaction['Тип ввода значения цены'] = 'По цене'
transaction['Назначение заявки'] = 'По умолчанию'
transaction['Тип события активации заявки'] = 'Обычная заявка'
transaction['Режим'] = '????'
transaction['Инструмент'] = '??????'
transaction['Цена'] = '????'
transaction['Лоты'] = '1'
transaction['Примечание'] = ''
transaction['Объем заявки'] = ''
transaction['Код внешнего пользователя'] = ''
transaction['Время активации'] = ''
transaction['Доп. инфо'] = ''
transaction['Фирма торгового счета'] = ''
   end
   sleep(1000)
end
end
Страницы: 1
Наверх