Синхронизация getNumberOf и getItem

Страницы: 1
RSS
Синхронизация getNumberOf и getItem
 
Добрый день.


Мой скрипт обходит таблицу "depo_limits" ("Позиции по инструментам"). Обратил внимание, что иногда getItem возвращает одну и туже строку дважды (абсолютно одинаковую). Пример такой строки:
Цитата
code=IRAO, depo_limit=awg_position_price=5.714571, client_code=552979/96023, currentbal=7000.0, currentlimit=0.0, firmid=MC0003300000, limit_kind=365, locked_buy=0.0, locked_buy_value=0.0, locked_sell=0.0, locked_sell_value=0.0, openbal=7000.0, openlimit=0.0, sec_code=IRAO, trdaccid=L01-00000F00, wa_position_price=5.714571
Моя версия, объясняющая такое поведение: изменение таблицы depo_limits между вызовом getNumberOf и getItem. Например, была исполнена заявка на покупку или продажу. Количество строк в depo_limits изменилось и getItem "съехал" на одну строку.

Скажите, возможна ли описанная ситуация? Если да, то как можно обнаружить изменение таблицы depo_limits после вызова getNumberOf, чтобы перечитать ее заново?

Спасибо.
 
Может ли функция SearchItems заменить вызов getItem в цикле и исключить возможность изменения таблицы depo_limits во время обхода?
 
Здравствуйте, Алексей.

Цитата
Алексей написал:
Моя версия, объясняющая такое поведение: изменение таблицы depo_limits между вызовом getNumberOf и getItem. Например, была исполнена заявка на покупку или продажу. Количество строк в depo_limits изменилось и getItem "съехал" на одну строку.Скажите, возможна ли описанная ситуация?
Возможно, зависит от того, как составлен скрипт и как выполняется опрос количества строк, как часто вызываются getNumberOf и getItem.
Цитата
Алексей написал:
Скажите, возможна ли описанная ситуация? Если да, то как можно обнаружить изменение таблицы depo_limits после вызова getNumberOf, чтобы перечитать ее заново?
Можете использовать callback OnDepoLimit, например.
Цитата
Алексей написал:
Может ли функция SearchItems заменить вызов getItem в цикле и исключить возможность изменения таблицы depo_limits во время обхода?
Функция getItem возвращает LUA-таблицу с данными из указанной строки указанной таблицы.
Функция SearchItems возвращает LUA-таблицу с номерами строки указанной таблицы, которые отвечают указанным критериям. Возможность заменить одно другим предлагаем Вам определить для себя самостоятельно исходя из Вашего подхода к составлению скрипта и решаемой им задачи.
 
Цитата
Andrey Bezrukov написал:
Здравствуйте, Алексей.

Цитата
Алексей написал:
Моя версия, объясняющая такое поведение: изменение таблицы depo_limits между вызовом getNumberOf и getItem. Например, была исполнена заявка на покупку или продажу. Количество строк в depo_limits изменилось и getItem "съехал" на одну строку.Скажите, возможна ли описанная ситуация?
Возможно, зависит от того, как составлен скрипт и как выполняется опрос количества строк, как часто вызываются getNumberOf и getItem.
Цитата
Алексей написал:
Скажите, возможна ли описанная ситуация? Если да, то как можно обнаружить изменение таблицы depo_limits после вызова getNumberOf, чтобы перечитать ее заново?
Можете использовать callback OnDepoLimit, например.
Цитата
Алексей написал:
Может ли функция SearchItems заменить вызов getItem в цикле и исключить возможность изменения таблицы depo_limits во время обхода?
Функция getItem возвращает LUA-таблицу с данными из указанной строки указанной таблицы.
Функция SearchItems возвращает LUA-таблицу с номерами строки указанной таблицы, которые отвечают указанным критериям. Возможность заменить одно другим предлагаем Вам определить для себя самостоятельно исходя из Вашего подхода к составлению скрипта и решаемой им задачи.
Очень содержательные ответы! Почему бы просто не написать, что в нашем мире все возможно? Хочется надеяться, что более детальные комментарии службы поддержки тоже возможны, например, в каких случаях описанные проблемы могут возникнуть и как их избежать.
 
Видимо, я не очень доходчиво изложил свою мысль, раз до сих пор нет никакого ответа от разработчиков. Ответов в стиле "все возможно" недостаточно, нужны конкретные рекомендации, как должна быть организована выборка из таблиц квика, чтобы не было повторного чтения. Пока, из сказанного Андреем, можно сделать вывод, что таблицы заполняются терминалом не последовательно, а абы как, и порядок строк может в любой момент произвольно меняться. Если это так, то желательно иметь возможность синхронизировать чтение и обновление таблиц, либо механизмом транзакций, либо блокировками. И под словом "желательно" я подразумеваю, что необходимо зарегистрировать пожелание на доработку.
 
Здравствуйте, Сергей.

Прежде всего настоятельно рекомендуем ознакомиться с регламентом обработки клиентских обращений в данной ветке форума.

Цитата
Сергей написал:
каких случаях описанные проблемы могут возникнуть и как их избежать.
Проблема с появлениями дубликатов записей по позициям в Вашем логе могут возникнуть в результате того, что скрипт не учитывает или неправильно учитывает смещения строк, возможные в результате появления новой записи. Необходимо пересмотреть используемый Вами алгоритм опроса и скорректировать его. Для решения этой задачи Вы можете использовать, например, функции обратного вызова OnDepoLimit.

Цитата
Сергей написал:
нужны конкретные рекомендации, как должна быть организована выборка из таблиц квика, чтобы не было повторного чтения. Пока, из сказанного Андреем, можно сделать вывод, что таблицы заполняются терминалом не последовательно, а абы как, и порядок строк может в любой момент произвольно меняться.
Вопрос был такой – может ли появление новой позиции в таблице depo_limits приводить к смещению номер последующих строк позиций и появлению дубликатов в логе, если не учитывать это смещение?

Т.е. предлагается конкретная ситуация – появляется новая позиция (например, куплена бумага, которой ранее не было в depo_limits терминала), какая-то из последующих записей дублируется в логе. «Произвольное появление новых записей и смещения номеров» обусловлены «произвольными» торговыми операциями пользователя. В самой таблице позиций выполняется сортировка по фирме, коду клиента, коду инструмента и сроку расчётов. Отсюда становится понятно, что появление новых записей и смещения не «произвольны», а определяются торговыми операциями клиента, независимо от опроса со стороны LUA-скрипта, в результате новые записи могут появится как в конце таблицы, так и в начале или середине, приводя к смещению номеров последующих записей о позициях.

В соответствии с этим был дан конкретный ответ – да, появление новых позиций может приводить к смещению номеров последующих строк позиций, и если это смещение не учитывать – то в зависимости от того, как делается опрос – могут появляться дубликаты в логе.

Как реализован опрос и как пишется лог – это решает автор скрипта, а не терминал QUIK и не функции QLUA. Соответственно, если проблемный фрагмент скрипта не приводится – то и дать какие-либо конкретные рекомендации для данной задачи весьма затруднительно. Если есть конкретный проблемный фрагмент скрипта, который казалось бы не должен допускать дубликатов - не работает как ожидается - просьба привести его, постараемся помочь.
 
Прежде всего, я нигде, вроде, не просил написать скрипт на Луа, или каком-либо еще языке, достаточно было изложить общий принцип организации выборки. Прямой, обратный, с использованием специальных функций, что-то еще. По существу последнего ответа, спасибо, хоть какая-то конкретика, по крайней мере понятно, как организована сортировка в таблице позиций. Уж, как это обработать в скрипте, дело действительно индивидуальное.
 
Цитата
Сергей написал:
Прежде всего, я нигде, вроде, не просил написать скрипт на Луа, или каком-либо еще языке, достаточно было изложить общий принцип организации выборки. Прямой, обратный, с использованием специальных функций, что-то еще. По существу последнего ответа, спасибо, хоть какая-то конкретика, по крайней мере понятно, как организована сортировка в таблице позиций. Уж, как это обработать в скрипте, дело действительно индивидуальное.
сталкивался с такой ситуацией. Ее исключить можно если контролировать размер таблицы.
--------------
Полагаю, что лучшим способом, является не лазить постоянно в хранилище терминала,
так как это очень накладная операция, а создавать свои таблицы
и отслеживать в них появление и удаление строк в соответствии с колбеками.
Страницы: 1
Читают тему
Наверх