Для чего может понадобиться время? Например, в случае, если вы выставляете задержку между заявками (можно, конечно, в циклах, но в миллисекундах как-то красивее, на мой взгляд). Или для "отсрочки" запуска задачи. Или для остановки задачи на время клирингов.
В любом случае, правильно работать с временем сервера Quik. Но перед началом торговли все-таки смотрите, чтобы часы на вашем компьютере были синхронизированы и подведены.
В QuikOrdersDOM SDK есть 2 функции работы со временем:
fATLibGetServerDate : TATLibGetServerDT; – функция получения текущей даты
fATLibGetServerTime : TATLibGetServerDT; – функция получения текущего времени
Пишем небольшую процедурку для определения текущего времени из Quik:
function GetServerDT(aInitRec : TLibInitialRecord; var aNow : TDateTime) : Cardinal;
var
dDT, tDT :TDateTime;
begin
Result := 1;
if aInitRec.fATLibIsOnline <> 1 then exit;
if (aInitRec.fATLibGetServerDate(dDT) = 0) and (aInitRec.fATLibGetServerTime(tDT) = 0) then
begin
aNow := dDT + tDT;
Result := 0;
end;
end;
После этого, не забывая проверять возвращаемое значение, время вычисляем так:
// время последней сделки
if GetServerDT(R, aNow) = 0 then
aHedgerTask.LastOrderTick := aNow
else
aHedgerTask.LastOrderTick := Now;
Если время не может быть определено, то в листинге выше у меня берется локальное время. Это следует делать, только если время не критично (например, вы удачно отправили заявку и хотите запомнить время отправки). Если от времени зависит что-нибудь серьезное, то правильнее прервать процедуру, вызвав exit, и вернуться к выполнению своего алгоритма на следующем цикле.
Комментариев нет:
Отправить комментарий