rodionos (Все сообщения пользователя)

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

Страницы: 1
Имя поля 'Тип события активации заявки' в специальном формате
 
С отправкой в универсальном формате знаком, сейчас так и далею. Но вопрос был про поле в специальном формате. Получается такого поля нет, для отправки в аукцион поддерживается только универсальный формат?
Имя поля 'Тип события активации заявки' в специальном формате
 
При отправке предложенного Вами варианта транзакции терминал возвращает ошибку.

Языковые настройки терминала - на русском языке.

Код
tr.account = 'L01*****'
tr.action = 'NEW_ORDER'
tr.broker_ref = 'abc'
tr.classcode = 'TQBR'
tr.client_code = 'abc'
tr.execution_condition = 'Заявка в аукцион закрытия'
tr.operation = 'B'
tr.price = '104.58'
tr.quantity = '15'
tr.seccode = 'AFLT'
tr.trans_id = '11385001'
tr.type = 'L'

Код
-  Неправильно указан тип: "Заявка в аукцион закрытия"
Имя поля 'Тип события активации заявки' в специальном формате
 
В объекте Order этот тип (limit on close) указывается числом 8 в поле exec_type.
Хотелось бы иметь возможность отправить транзакцию аналогичным образом:
Код
exec_type='8' 
Имя поля 'Тип события активации заявки' в специальном формате
 
Для указания типа по остатку в специальном формате можно использовать поле execution_condition:
Код
  local transaction = {
    trans_id    = '123',
    account     = '******',
    action      = 'NEW_ORDER',
    classcode   = 'TQBR',
    seccode     = 'GAZP',
    operation   = 'B',
    quantity    = '2',
    price       = '245.00',
    type        = 'L',
    execution_condition='FILL_OR_KILL'  
}

Есть ли соответствующее поле для подачи заявки в аукцион?

В универсальном формате tri это указывается как:

Код
transaction['Тип события активации заявки'] = 'Заявка в аукцион закрытия'
Механизм исполнения заявки с типом "По одной цене"
 
Обработка лимитной заявки с типом "По одной цене" предполагает несколько сценариев.
Один из таких сценариев - это дефицит количества во встречных заявках по наилучшей цене.

Допустим, что есть встречные заявки на продажу:

- 261.10 x 10
- 260.00 x 5

Отправляем заявку на покупку "По одной цене":
+ 262.00 x 20

Данная заявка на покупку приведет к сделке на 5 бумаг по 260.00, при этом остаток будет поставлен в очередь в книге заявок по цене первой сделки 260.00.
Состояние книги после частичного исполнения:

- 261.10 x 10
+ 260.00 x 15

После отправки транзакции с этим признаком
Код
transaction['Тип по цене'] = 'По одной цене'
transaction['Цена'] = '262.0'

в терминал Квик приходит событие OnOrder, в котором цена указана 260.00, при этом заявка является частично исполненной.
1) Сохраняется ли в таблице Order информация об исходной лимитной цене (262), или эта информация утрачивается?
2) В какой момент (сервер Quik, терминал Quik, биржа) происходит данное "уточнение" цены заявки.
3) Для каких стратегий может быть полезен данный тип заявки?
Отправка заявки айсберг с использованием полей на англ. языке
 
При снятии обнаружил ошибку в своем коде, айсберг заявка снимается стандартным образом.
Отправка заявки айсберг с использованием полей на англ. языке
 
Николай, странно, что я сразу не спросил, подскажите как снять айсберг-заявку.
Стандартный KILL_ORDER возвращается с ошибкой 5 "Вы не можете снять данную заявку".
Код
action=KILL_ORDER
classcode=TQBR
order_key=18869000000
seccode=AFLT
trans_id=601393001
Заявка в аукцион закрытия
 
Код
transaction['Тип события активации заявки'] = 'Заявка в аукцион закрытия'
Отправка заявки айсберг с использованием полей на англ. языке
 
 Да, в стандартной форме вижу все поля (хоть и не красавица). Для записи в карман всех полей подходит хорошо.
Отправка заявки айсберг с использованием полей на англ. языке
 
Спасибо, не сразу увидел Языковые настройки, так как в терминале моего брокера они отключены.

В регламенте биржи по поводу айсбергов указывается следующее:
 

Цитата

Для айсберг-заявки возможна подача в Систему торгов заявки с указанием следующих дополнительных признаков, уточняющих особенности заключения сделок по типу исполнения заявки:

по остатку:
- «Поставить в очередь»;

по цене:
- «По одной цене»;
- «По разным ценам».

В интерфейсе Quik условие по цене отключено, но отправить айсберг программно получается.

Код
transaction['Тип по цене'] = 'По одной цене'
Получается, что программно можно отправлять заявки, которые в интерфейсе недоступны?

Вместе с тем, условие по остатку в интерфейсе Quik содержит неподдерживаемые значения.

При отправке айсберга с признаком "Полностью или отклонить" возвращается ошибка с кодом 159 "Указанный тип заявки не разрешен для этого финансового инструмента и режима торгов". Насколько я понимаю - это ошибка пришла от биржи?

Отправка заявки айсберг с использованием полей на англ. языке
 
Подскажите, как можно переключиться на англ. язык интерфейса? Не вижу такой опции в настройках клиентского места.

Правильно я понимаю, что sendTransaction позволяет отправлять в терминал транзакции нескольких типов - заявки типа NEW_ORDER, NEW_STOP_ORDER, KILL_ORDER, и т.д. Данные типы транзакций от настроек интерфейса не зависят. Затем есть тип записей, которые в интерфейсе так и называются Транзакции, и этот тип требует указания полей в формате tri-файла. В связи с этим вопрос - почему именно айсберги нужно отправлять в tri формате?
Отправка заявки айсберг с использованием полей на англ. языке
 
Еще одна проблема обнаружилась:

Файлы исходных кодов сохраняются в кодировке UTF-8. Подача айсберг заявки в данном случае не проходит. Нужно, чтобы кодировка файлf была Windows 1251.
Отправка заявки айсберг с использованием полей на англ. языке
 
Николай, спасибо, Ваш пример работает.

Язык интерфейса - русский, но весь код на Lua написан на английском языке, в частности валидация и обработка заявок, транзакций и пр.
Отсюда желание использовать поля именно на английском языке.

Если заменить поле в Вашем примере, то даже сообщение об ошибки ссылается на необходимое поле на английском языке.

Код
  transaction.operation = 'B'
  --transaction['К/П'] = 'Купля'

Код
- Не найдено поле "operation" для транзакции "Ввод айсберг заявки" по классу "МБ ФР: Т+ Акции и ДР"

Конечно, если англ. поля не поддерживаются, то ничего не сделаешь, придется как-то выкручиваться, но это заслуживает исправления в Квике.
Отправка заявки айсберг с использованием полей на англ. языке
 
Похоже форум не поддерживает inline картинки (я сделал скриншот junior).
Отправка заявки айсберг с использованием полей на англ. языке
 
Установил последнюю 32-битовую версию Quik Junior на англ. языке, чтобы вывести поля на англ. языке.
Айсберг-заявки отсутствуют в списке возможных транзакций и похоже не поддерживаются в принице.
[img]data:image/png;base64,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[/img]
Отправка заявки айсберг с использованием полей на англ. языке
 
В скрипте используются имена полей на английском языке.
Терминал на русском языке. При выводе в tri вижу следующее:
Код
TRANS_ID=1;CLASSCODE=TQBR;ACTION=Ввод айсберг заявки;Торговый счет=NNNN;К/П=Купля;Тип=Лимитная;
Тип по цене=По разным ценам;Тип по остатку=Поставить в очередь;Тип ввода значения цены=По цене;Назначение заявки=По умолчанию;
Тип события активации заявки=Обычная заявка;Режим=TQBR;Инструмент=AFLT;Цена=99.90;Лоты=110;Примечание=;Объем заявки=0.00;
Код внешнего пользователя=;Время активации=;Доп. инфо=;Фирма торгового счета=;Видимое количество=100;

При отправке транзакции получаю ошибку:

   -  Не указано значение поля "Лоты"

https://forum.quik.ru/messages/forum10/message39864/topic3902/#message39864

Код
local transaction = {}transaction['TRANS_ID'] = '400001'
transaction['ACTION'] = 'NEW_ORDER'
transaction['CLASSCODE'] = 'TQBR'
transaction['SECCODE'] = 'AFLT'
transaction['ACCOUNT'] = 'NNNNNN'
transaction['OPERATION'] = 'B'
transaction['PRICE'] = '99.90'
transaction['TYPE'] = 'L'
transaction['Lots'] = '110'
transaction['Visible quantity'] = '100'

Есть ли варианты решения проблемы?
Скорость обработки заявок при помощи OnTransReply gate_reply_time
 
После просмотра своих заявок в full order log на МосБирже подтвердилось, что gate_reply_time - это время получения заявки торговой системой биржи. Именно gate_reply_time используется в исторических данных биржи как время заявки. Соответственно, поле datetime в таблице trades - это время исполнения сделки, также присваивается биржей. Эти поля совпадают если заявка сразу исполняется.
Минимальный размер видимой части у айсберга
 
Получается этого параметра нет в биржевом дата фиде, который рассылает ежедневную информацию об инструментах (те же лоты, min/max по цене и пр.)?
Если так, то это действительно недоработка со стороны биржи. Что странно, так как за айсберги биржа получает дополнительную комиссию.
Минимальный размер видимой части у айсберга
 
Привожу для сообщества список инструментов на TQBR с размером лота (параметр есть в Квике) и минимальной видимой частью айсберга заявки (последний аргумент, измеряется в лотах). Данные из таблицы А-5.
Было бы логично иметь соответствующий параметр и в самом Квике.

Код
"ABRD", 10, 10
"AFKS", 100, 100
"AFLT", 10, 10
"AGRO", 1, 100
"AKRN", 1, 100
"ALBK", 10, 100
"ALNU", 1, 1
"ALRS", 10, 10
"AMEZ", 100, 100
"APTK", 10, 100
"AQUA", 10, 100
"ARSA", 1000, 100
"ASSB", 1000, 100
"AVAN", 1, 100
"AVAZ", 100, 100
"AVAZP", 100, 100
"BANE", 1, 100
"BANEP", 1, 100
"BELU", 1, 100
"BISV", 100, 100
"BISVP", 1000, 10
"BLNG", 100, 100
"BRZL", 1, 10
"BSPB", 10, 100
"CBOM", 100, 100
"CHEP", 10, 100
"CHGZ", 100, 10
"CHKZ", 1, 100
"CHMF", 1, 100
"CHMK", 1, 100
"CLSB", 10000, 100
"CLSBP", 10000, 100
"CNTL", 100, 100
"CNTLP", 100, 100
"DASB", 10000, 100
"DIOD", 100, 100
"DSKY", 10, 100
"DVEC", 1000, 100
"DZRD", 1, 100
"DZRDP", 1, 100
"ELTZ", 1, 100
"ENPL", 1, 100
"ENRU", 1000, 100
"FEES", 10000, 100
"FESH", 100, 100
"FIVE", 1, 100
"FTRE", 1, 100
"GAZA", 10, 10
"GAZAP", 10, 10
"GAZC", 10, 100
"GAZP", 10, 100
"GAZS", 10, 100
"GAZT", 10, 100
"GCHE", 1, 100
"GEMA", 1, 100
"GMKN", 1, 10
"GRNT", 1000, 100
"GTRK", 10, 100
"GTSS", 100000, 100
"HALS", 1, 100
"HIMC", 1000, 10
"HIMCP", 1000, 100
"HYDR", 1000, 100
"IDVP", 1, 100
"IGST", 1, 100
"IGSTP", 1, 10
"IRAO", 1000, 100
"IRGZ", 100, 100
"IRKT", 100, 100
"ISKJ", 100, 100
"JNOS", 100, 100
"JNOSP", 100, 100
"KAZT", 10, 10
"KAZTP", 10, 10
"KBSB", 10, 100
"KBTK", 10, 100
"KCHE", 10000, 100
"KCHEP", 10000, 100
"KGKC", 10, 100
"KGKCP", 10, 10
"KLSB", 100, 100
"KMAZ", 10, 10
"KMEZ", 1, 100
"KMTZ", 10, 100
"KOGK", 1, 1
"KRKN", 1, 10
"KRKNP", 1, 10
"KRKO", 100, 100
"KRKOP", 100, 100
"KROT", 10, 100
"KROTP", 10, 100
"KRSB", 1000, 10
"KRSBP", 1000, 10
"KSGR", 10, 100
"KTSB", 10000, 10
"KTSBP", 10000, 10
"KUBE", 10, 100
"KUNF", 100, 100
"KUZB", 10000, 100
"KZMS", 10, 100
"KZOS", 10, 10
"KZOSP", 10, 100
"LIFE", 100, 100
"LKOH", 1, 100
"LNTA", 1, 100
"LNZL", 1, 10
"LNZLP", 1, 100
"LPSB", 100, 10
"LSNG", 100, 100
"LSNGP", 10, 100
"LSRG", 1, 100
"LVHK", 100, 100
"MAGE", 1000, 100
"MAGEP", 1000, 100
"MAGN", 100, 100
"MERF", 100, 10
"MFGS", 10, 10
"MFGSP", 10, 10
"MFON", 1, 10
"MGNT", 1, 10
"MGNZ", 1, 10
"MGTS", 1, 10
"MGTSP", 1, 10
"MISB", 100, 10
"MISBP", 100, 10
"MNFD", 1000, 100
"MOBB", 100, 10
"MOEX", 10, 100
"MORI", 1000, 10
"MRKC", 1000, 100
"MRKK", 10, 100
"MRKP", 10000, 100
"MRKS", 10000, 100
"MRKU", 10000, 100
"MRKV", 10000, 100
"MRKY", 10000, 100
"MRKZ", 10000, 100
"MRSB", 10000, 100
"MSNG", 1000, 100
"MSRS", 1000, 100
"MSST", 100, 100
"MSTT", 10, 100
"MTLR", 1, 100
"MTLRP", 10, 100
"MTSS", 10, 100
"MVID", 10, 100
"NAUK", 10, 100
"NFAZ", 10, 100
"NKHP", 10, 10
"NKNC", 10, 100
"NKNCP", 100, 100
"NKSH", 100, 100
"NLMK", 10, 100
"NMTP", 100, 100
"NNSB", 1, 100
"NNSBP", 1, 100
"NPOF", 1, 10
"NSVZ", 10, 100
"NVTK", 1, 10
"OBUV", 10, 100
"OGKB", 1000, 100
"OMZZP", 1, 100
"OPIN", 1, 100
"PAZA", 1, 100
"PHOR", 1, 100
"PIKK", 10, 100
"PLSM", 1000, 10
"PLZL", 1, 100
"PMSB", 10, 100
"PMSBP", 10, 100
"POLY", 1, 100
"PRFN", 1000, 100
"PRMB", 1, 10
"PRTK", 10, 10
"QIWI", 1, 100
"RASP", 10, 100
"RAVN", 100, 10
"RBCM", 100, 100
"RDRB", 10, 100
"RGSS", 1000, 10
"RKKE", 1, 10
"RLMN", 10, 100
"RLMNP", 10, 100
"RNFT", 1, 100
"ROLO", 1000, 100
"ROSB", 10, 100
"ROSN", 10, 100
"ROST", 10, 100
"RSTI", 1000, 100
"RSTIP", 1000, 100
"RTGZ", 1, 10
"RTKM", 10, 100
"RTKMP", 10, 10
"RTSB", 10000, 10
"RTSBP", 10000, 10
"RUAL", 10, 10
"RUGR", 10, 100
"RUSI", 100, 10
"RUSP", 10000, 10
"RZSB", 1000, 100
"SAGO", 10000, 100
"SAGOP", 10000, 100
"SARE", 10000, 100
"SAREP", 10000, 100
"SBER", 10, 100
"SBERP", 10, 10
"SELG", 100, 100
"SELGP", 100, 100
"SFIN", 10, 10
"SIBG", 100, 100
"SIBN", 10, 100
"SLEN", 100, 100
"SNGS", 100, 100
"SNGSP", 100, 100
"STSB", 1000, 100
"STSBP", 1000, 100
"SVAV", 10, 10
"SZPR", 1, 10
"TANL", 10, 100
"TANLP", 1000, 100
"TASB", 10000, 100
"TASBP", 10000, 100
"TATN", 1, 100
"TATNP", 1, 100
"TGKA", 100000, 100
"TGKB", 1000000, 100
"TGKBP", 1000000, 100
"TGKD", 100000, 100
"TGKDP", 100000, 100
"TGKN", 1000000, 100
"TNSE", 1, 100
"TORS", 10000, 10
"TORSP", 10000, 100
"TRCN", 1, 100
"TRFM", 10000, 100
"TRMK", 10, 100
"TRNFP", 1, 10
"TTLK", 10000, 100
"TUZA", 10, 100
"UCSS", 1, 100
"UKUZ", 1, 100
"UNAC", 1000, 100
"UNKL", 1, 100
"UPRO", 1000, 100
"URKA", 10, 100
"URKZ", 1, 100
"USBN", 10000, 100
"UTAR", 100, 100
"UWGN", 1, 100
"VDSB", 100, 100
"VGSB", 1000, 100
"VGSBP", 1000, 100
"VJGZ", 1, 10
"VJGZP", 10, 10
"VLHZ", 10, 100
"VRSB", 100, 10
"VRSBP", 100, 100
"VSMO", 1, 10
"VSYD", 1, 100
"VSYDP", 1, 100
"VTBR", 10000, 100
"VZRZ", 1, 100
"VZRZP", 10, 100
"WTCM", 100, 100
"WTCMP", 100, 10
"YAKG", 100, 10
"YKEN", 10000, 100
"YKENP", 10000, 100
"YNDX", 1, 100
"YRSB", 10, 10
"YRSBP", 10, 10
"ZILL", 1, 10
"ZVEZ", 1000, 10
Минимальный размер видимой части у айсберга
 
Коллеги, есть ли возможность в параметрах инструмента увидеть это значение?
По умолчанию это 100 лотов, но в таблице А-5 приведены исключения: https://fs.moex.com/files/5877/32604Из интерфейса Квик мне непонятно - проводится ли проверка на клиенте или на сервере биржи?
ODBC-экспорт. Мониторинг, Проверка флагов ODBC-экспорта.
 
Используем ODBC экспорт вполне успешно для экспорта данных из alltrades и котировок. Проверка состояния (идет экспорт или нет) производится в получающей базе. Буквально на уровне сравнения последней записи и текущего времени. Если данных нет или перестают поступать, во время торговой сессии, то срабатывает мониторинг. Исправлять приходится вручную, так как пока не знаем как включить ODBC экспорт программно. В редких случаях приходится производить перезаказ данных. Для alltrades также отслеживаем задержку - дельту между временем получения записи и временем регистрации сделки на бирже.
Добавление параметра lasttrade в LUA getParamEx
 
Функция getParamEx уже предоставляет доступ к информации о последней сделке, а именно о ее цене, количестве и времени.
Однако при высокочастной торговле, когда почти одновременно происходит большое количество сделок, эти параметры не дают однозначной идентификации сделки.
Предлагаю добавить поле lasttrade, которое будет содержать trade_num сделки.
Также рассмотреть вопрос об увеличении точности времени последней сделки до долей секунды. Речь идет о поле time.

Эта информация (микросекунды) уже транслируется в таблице alltrades.
OnTrade flags - направленность сделки
 
Цитата
TRADE_MAKER = 32; /**< Пассивная (сделка образована по ранее выставленной заявке). */
TRADE_TAKER = 64; /**< Активная (сделка образована по заявке выставленной для ее образования) */

Это как раз то, что нужно, и совпадает со значением в all_trades.
Прошу добавить эту информацию в документацию по интерпретатору.
В 7.27информация по этим полям понятно описана только для заявок.
OnTrade flags - направленность сделки
 
1) Таблица trades, поле flags.

У меня встречаются строки со значениями флагов: 32, 36, 64, 68 (в десятичном виде).
Соответственно варьируется 2-ой, 5-ый и 6-ой биты.Смотрю на docs (приложение).
Расшифровка 5-ого и 6-ого бита непонятна. К сделкам FOK и market maker order не применимы. Подскажите, как правильно интерпретировать 5-ый и 6-ой биты таблицы trades.

2) Был бы полезен getAllTradeByNumber по аналогии с getOrderByNumber, для быстрого получения строки с использованием индекса. Таблица all_trades большая и в отсутствие индекса поиск через SearchItems скорее всего будет медленным.
OnTrade flags - направленность сделки
 
Сергей, интересует расшифровка flags таблицы trades, то есть таблицы с моими сделками.
Из этого флага нужно получить направленность сделки аналогично тому, как она кодируется в AllTrades.
Иначе придется искать мою сделку по идентификатору в таблице обезличенных сделок.
OnTrade flags - направленность сделки
 
Предположение оказалось неверным. Хотелось бы услышать от коллег из Арки, что значают биты flags в таблице trades (кроме второго, который задокументирован).
OnTrade flags - направленность сделки
 
Похоже, что 5-ый бит содержит данную информацию.
bit.test(flags, 5) - если true, то продажа
OnTrade flags - направленность сделки
 
По второму биту flags таблицы trades (или OnTrade) я получаю информацию, купли ли терминал инструмент или продал.

бит 2 (0x4) Заявка на продажу, иначе – на покупку. Данный флаг для сделок и сделок для исполнения определяет направление сделки (BUY/SELL)

Можно ли также из flags достать информацию о направленности сделки, то есть была это продажа по биду или покупка по офферу?

По сути необходимо значение нулевого бита так как он проставлен для этой сделки в AllTrades (обезличенные сделки).

Скорость обработки заявок при помощи OnTransReply gate_reply_time
 
Получается, если date_time предшествует gate_reply_time, то системное время сервера Квик отстает от времени шлюза. Такая ситуация в Финаме. Если системное время синхронизировано, то date_time >= gate_reply_time.
Скорость обработки заявок при помощи OnTransReply gate_reply_time
 
Используя разных брокеров (Сбер и Финам) обнаружил, что разница между полями date_time и gate_reply_time зависит от брокера.
В одном случае gate_reply_time всегда больше date_time, в другом случае наоборот.
Что же все-таки означает это поле? В документации указано, что это "Дата и время получения шлюзом ответа на транзакцию".
Тогда не совсем понятно почему оно предшествует date_time, да и само поле date_time требует уточнения.
Является ли это поле временем получения транзакции Quik сервером у брокера?
В целом планирую использовать дельту между gate_reply_time и date_time для целей мониторинга и выбора оптимального Квик сервера в зависимости от стратегии.
SearchItems - потокобезопасная итерация
 
Решил задачу поддержанием в памяти начального индекса, с которого производится поиск (вместо 0). По ходу торгов индекс постоянно увеличивается и большую часть снятых заявкок искать не нужно.
Сервисные функции для отключения терминала типа disconnect()
 
В итоге сделали через файлы. При наступлении условия контрольный скрипт создает lock файл, который проверяется на наличие торговым скриптом. При обнаружении файла, торговый скрипт останавливается.
Сервисные функции для отключения терминала типа disconnect()
 
Понятно, мне конечно хотелось бы обойтись без зависимостей, не столько от пакетов луа, но от внешнего ПО. Если AllocTable не подходит, наверное из-за того, что таблицы не являются совместно доступными нескольким скриптам?
Сервисные функции для отключения терминала типа disconnect()
 
Это может быть интересно! Имеется ввиду пользовательская таблица, созданная при помощи AllocTable?
Сервисные функции для отключения терминала типа disconnect()
 
Для мониторинга ключевых показателей использую выделенный скрипт.
Торговые стратегии реализованы в отдельных скриптах.

Есть определенные пороги, при превышении которых небходимо остановить исполнение всех lua скриптов, кроме контрольного.
Также необходимо при определенных условиях отсоединить терминал.

Контекст: для тех кто не сталкивался с доп. вознаграждением биржи за гиперактивные торговые алгоримты, советую ознакомиться и поставить на мониторинг!

Из сервисных функций есть isConnected. Функции disconnect() похоже нет. Сейчас вызывается os.exit(), но это брутально.
Есть ли еще варианты, которые следует изучить?
SearchItems - потокобезопасная итерация
 
Разницы во времени выполнения работу функции не наблюдаю. Попробовал следующие:

1) Отключить фильтр Отмененные
2) Убрать цветовую кодировку
3) Минимизировать кол-во колонок
4) Убрать таблицу из интерфейса


Измеряю в виде расчеты дельты между датами sysdate.

Правильно я догадываюсь, что таблицы в интерфейсе могут как-то влиять на скорость выполнения функции SearchItems?
SearchItems - потокобезопасная итерация
 
  • На данный момент я использую только таблицы orders и depo_limits.
  • Большое кол-во строк только в таблице orders.
  • Замена заявки производится программно путем отправки транзакции KILL с последующим NEW_ORDER
Поиск активных заявок в таблице размером 26000 (практически все неактивные) занимает около 75 мс, хотелось бы сократить.
SearchItems - потокобезопасная итерация
 
Я пользуюсь нижеприведенным вариантом для получения подвыборки строк из таблицы, в данном примере из таблицы orders.
Код
function find_active_orders(class_code, sec_code)

    function matchItem(_flags, _class_code, _sec_code)
      return bit.band(_flags, 0x1) ~= 0
        and _class_code == class_code
        and _sec_code == sec_code
    end

    local indexes = SearchItems("orders", 0, getNumberOf("orders")-1, matchItem, "flags,class_code,sec_code")
    if indexes == nil then return {} end
    local res = {}
    for i=1, #indexes do
      local item = getItem("orders", indexes[i])
      if matchItem(item.flags, item.class_code, item.sec_code) then
        res[#res+1] = item
      end
    end
    return res
end

В строке if matchItem(item.flags, item.class_code, item.sec_code) then я дополнительно проверяю, что полученная заявка соответствует изначальному фильтру на случай, если таблица orders будет изменена и в нее будут добавлены новые заявки в произвольном порядке.

Два вопроса:

1) Необходима ли повторная проверка или можно полагаться, что а) строки не удаляются,  б) новые заявки помещаются в конец таблицы и в) порядок строк не меняется в течение торгового дня? Если так, применима ли такая модель ко всем таблицам в Quik (строки никогда не удаляются, новые добавляются в конец, порядок строк зафиксирован).

2) По ходу биржевого дня количество строк в таблице постоянно увеличивается и доходит до 20000, в результате постоянного изменения лимитных заявок по цене (снять старую, выставить новую по другой цене). При этом активных заявок только несколько сотен. При каком размере таблицы имеет смысл задуматься о производительности функции find_active_orders и как ее можно было ускорить для случая когда практически все заявки неактивные?
Страницы: 1
Наверх