Сегодня на тестовом контуре в таблице depo_limit получил такое:
limit_kind = 20250116
Это что? Ясно что дата. Но с какой такой... Я не слышал о новом режиме торгов в виде даты. Есть Т0, Т+1, Т+2, TOD, TOM и новое Т365, отображаемое в терминале Тх.
Это результат перехода тестового сервера на ведение позиций по календарным датам. limit_kind = 20250116 это тоже, что и limit_kind = 0.
Сообщение в терминале увидел. Вот оно, чтобы было понятно остальным:
Здравствуйте.С 16 января сервер QUIK Junior переведен на современную схему ведения позиций - по календарным датам. Если ранее каждой позиции соответствовал код расчетов (T0, T1, T2), то теперь - конкретная дата. Например, если сегодня 16.01.2025, значит код расчета T0 соответствует дате расчета 16.01.2025, код T1 - 17.01.2025 и так далее. Ожидается, что в будущем на эту схему перейдет большинство брокерских компаний. Кроме того, теперь расчеты по всем инструментам на сервере происходят по схеме T+1, что соответствует режиму реальных торгов на Московской Бирже. В связи с этим в таблицах с позициями по инструментам и деньгам следует заменить параметр "Срок расчетов" на "Дата расчетов". В таблице "Состояние счета" вместо кодов расчета теперь подставляется конкретная дата.
Правда это, конечно, несколько неожиданно, не говоря уже о каких-то формальных документах. Спрашивается а как теперь для инструментов, торгуемых в разных режимах определять позицию. До этого можно было найти максимальный limit_kind и по нему фильтровать записи. И он не изменялся. Теперь же схема работы становится печальной - каждый день этот параметр будет изменяться, т.е. необходимо заново его обновлять, и это если брокеры не придумают чего-то еще. На сайте биржи да и в транслируемых данных есть показатель режима торгов для инструмента. Никаких расчётных величин нет. Зачем это, какую проблему решает это нововведение? Представляю, что ждет работающие скрипты при переходе брокеров на этот режим.
как будут работать методы, где есть входной параметр limit_kind?
При работе в схеме с календарными датами в limit_kind необходимо передать дату расчетов, на которую необходимо получить позицию (NUMBER в формате YYYYMMDD).
Цитата
как теперь для инструментов, торгуемых в разных режимах определять позицию
Предлагаем воспользоваться следующими функциями - функции могут принимать на ввод в параметре limit_kind конкретную дату расчетов, либо значение "Tx". Если передана дата, функция вернет позицию на указанную дату, если такая имеется - в противном случае возвращается позиция, установленная на ближайшую предшествующую указанной дату, либо 0, если позицию по такому условию не удалось найти. Если передано значение "Tx", функция вернет плановую позицию (с максимальной датой рачетов).
Скрытый текст
Код
function getMoneyEx_byDate(firmid, client_code, tag, currcode, limit_kind)
res = getMoneyEx(firmid, client_code, tag, currcode, limit_kind)
if not res then
res = 0
n = getNumberOf("money_limits")
lk = 0
function fn(m)
if limit_kind == "Tx" then
qry = (m.firmid == firmid and m.client_code == client_code and m.tag == tag and m.currcode == currcode)
else
qry = (m.firmid == firmid and m.client_code == client_code and m.tag == tag and m.currcode == currcode and m.limit_kind < limit_kind)
end
if qry then
if m.limit_kind > lk then
lk = m.limit_kind
res = m
end
return true
else
return false
end
end
SearchItems("money_limits", 0, n - 1, fn)
end
return res
end
function getDepoEx_byDate(firmid, client_code, sec_code, trdaccid, limit_kind)
res = getDepoEx(firmid, client_code, sec_code, trdaccid, limit_kind)
if not res then
res = 0
n = getNumberOf("depo_limits")
lk = 0
function fn(d)
if limit_kind == "Tx" then
qry = (d.firmid == firmid and d.client_code == client_code and d.sec_code == sec_code and d.trdaccid == trdaccid)
else
qry = (d.firmid == firmid and d.client_code == client_code and d.sec_code == sec_code and d.trdaccid == trdaccid and d.limit_kind < limit_kind)
end
if qry then
if d.limit_kind > lk then
lk = d.limit_kind
res = d
end
return true
else
return false
end
end
SearchItems("depo_limits", 0, n - 1, fn)
end
return res
end
Схема ведения позиций по календарным датам поддерживается Рабочим местом QUIK версии 10.2.0 и выше, соответственно, приведенный код будет работать начиная с этой версии. При подключении к серверу QUIK-Junior рекомендуем использовать терминал актуальной версии 11.4.1.
Anton Belonogov написал: Предлагаем воспользоваться следующими функциями - функции могут принимать на ввод в параметре limit_kind конкретную дату расчетов, либо значение "Tx".
А справку не нужно поправить? В ней limit_kind указан как NUMBER. Какой еще "Tx"? getBuySellInfoEx теперь тоже будет возвращать не пойми что? Тоже поправьте в справке.
А в целом кто так делает? По сути limit_kind это теперь новый параметр содержащий не вид лимита а дату, соответственно никакой обратной совместимости, это приведет к полной неработоспособности всех ранее написанных программ.
Мы привели пример функций для работы с позициями в календарных датах, основанных на getMoneyEx и getDepoEx. Исходные функции (getMoneyEx и getDepoEx), а также другие функции QLua остались без изменений.