Вы совершенно верно подметили. Защита от Дурака. (я любитель). Иногда за ненадобностю колонок я их просто удаляю в части их определения. И далее скрипт при проходе их просто опускает. Раньше, как говорится все работало. Теперь же конечно, написана новая функция, которая при запуске дает последовательные номера этим колонкам. Да, возможно что у меня отсутствует "культура кода". Но в данном случае всеже наверное баг квика.
Да понятное дело, что при наличии промежуточных колонок все работает. Я так и не понял баг это квика или моего скрипта или я в мануале что-то пропустил? Так мы привыкнем подгонять свои скрипты каждый раз под новые баги новых версий квиков. На то, чтобы выяснить причину вылета у меня ушло часа 4. А дальше что? "Доколе?"
function OnStop(stop_flag)
is_run=false
DestroyTable(t_id)
end
function main()
is_run=true
row_color=15
t_id = AllocTable()
AddColumn(t_id, 0, "0", true, QTABLE_STRING_TYPE, 15)
AddColumn(t_id, row_color, tostring(row_color), true, QTABLE_STRING_TYPE,11)
t = CreateWindow(t_id)
SetWindowPos(t_id, 0, 0, 500, 500)
for i = 1, 15 do
InsertRow(t_id, i)
end
for k=1,15 do
SetCell(t_id, k, 0, tostring(k))
end
while is_run do
for k=1,15 do
SetColor(t_id, k, row_color, RGB(0,255,0), RGB(0,0,0), RGB(255,255,255), RGB(0,0,0))--Crash here
end
sleep(500)
end
end
Вот такой код вызывает краш Квика версии 9.7.1.10 (в версии 8.13 все было ок) после остановки работы скрипта и закрытия созданного им окна. Предыстория - в связи с настойчивой рекомендацией БКС обновил квик. Пр запуске моего скрипта на новой версии Квик стал вылетать. Стал разбираться - и вот. Суть в том, что если имеется пропущенная колонка (переменная row_color=15 а не 1) то при остановке скрипта происходит вылет квика. Если поставить row_color=1 то все работает ок.
Код
function main()
is_run=true
row_color=15
t_id = AllocTable()
AddColumn(t_id, 0, "0", true, QTABLE_STRING_TYPE, 15)
AddColumn(t_id, row_color, tostring(row_color), true, QTABLE_STRING_TYPE,11)
t = CreateWindow(t_id)
SetWindowPos(t_id, 0, 0, 500, 500)
for i = 1, 15 do
InsertRow(t_id, i)
end
for k=1,15 do
SetCell(t_id, k, 0, tostring(k))
end
while is_run do
for k=1,15 do
SetColor(t_id, k, row_color, RGB(0,255,0), RGB(0,0,0), RGB(255,255,255), RGB(0,0,0))--Crash here
end
sleep(500)
end
end
Сергей написал: После последнего обновления таблицы стали отображаться криво. Содержимое левого столбца частично обрезается. Например, вместо KZOS видно ZOS. Растягивание первого столбца по ширине ни к чему не приводит. В таблице где первым столбцом идёт порядковый номер ширина столбца такая, что отображаются точки вместо цифр. Растягивание столбца помогает, но с перезапуском программы ширина возвращается к прежней. ОС Windows7 64 (Приложил бы скриншоты, но не понимаю как на движке вашего форума их залить.)
Mikhail написал: По фьючерсам видимо их алготрейдеры уже задолбали и такие данные транслируются
На срочном рынке ММВБ т.н. "планки" - это ограничения самой биржи, и биржа их транслирует. Квик тут ни при чем.
На других рынках ограничения на диапазон цен брокер может установить, но не расскажет. А почему? А не понятно, вы ж клиент брокера, с брокера требуйте.
По акциям планки устанавливает сама биржа, неоднократно в 20-м году вылезали сообщения , мол если цена по такой-то акции останется в данном диапазоне то биржа приостановит торги для расширения торгуемого диапазона. В квике для акций отсутствует параметр максимально/минимально возможная цена. Ее можно добавить, если в таблицу включить хотябы 1 фьючерс. Поэтому считаю что это баг именно Квика. И ссылаясь на это брокеры мне и отвечают - по умолчанию у акций нет миним и макс возможных цен и это наш дар с барского плеча что мы вам транслируем в эту таблицу и по акции также.
Здравствуйте, Неоднократное обращение к брокерам выявило интересную особенность-какие-то брокеры на свое усмотрение транслируют минимально и максимально возможные цены по акциям (БКС), какие-то нет. Финам например мне сообщил что в базе такого функционала нет и для акций показывать планки в Квике они не обязаны. По фьючерсам видимо их алготрейдеры уже задолбали и такие данные транслируются а по акциям почему также не сделать? Т.е. робот должен кидать цену, получать текстовое сообщение ошибки с планкой, читать это сообщение, распознавать планку? Это же бред! Прошу разработчиков добавить данную функцию!
Пока обнаружил такой обходной путь более-менее точного определения что активная сессия по данному инструменту сейчас идет. Также необходимо менять сервер каждый день, иначе в параметрах bid и ask терминал хранит последние значения.
Код
bid_=tonumber(getParamEx("TQBR", "SBER", "BID").param_value)
offer_=tonumber(getParamEx("TQBR", "SBER", "OFFER").param_value)
if bid_~=nil and offer_~=nil and offer_>0 and bid_>0 then
status=1
end
Конечно. Все значения параметров, какие вы видите в QUIK - транслируют биржи. QUIK лишь транспорт.
Не совсем-у меня на одном сервере работают 2 квика от БКС и Финама, иногда оба показывают разное время сервера, разное максимальное и минимальное значение предельных цен.
Цитата
swerg написал: Цитата Mikhail PS. При остановках торгов внутри дня для раздвижки планок статусы показывают, мол торговля ведется.Надо на оба параметра смотреть.Торги идут только при единственной комбинации этих параметров. При любой другой нормальные торги не идут
Оба параметра STATUS и TRADINGSTATUS выдают 1 в основную торговую сессию, при временных остановках никто о них не думает и не меняет в них 1 на что-то другое (по крайней мере пол года назад такое наблюдал).
Подскажите как правильно брать время ММВБ, сегодня БКС выдал getInfoParam("SERVERTIME") примерно на 1 с раньше времени ММВБ и мои заявки при открытии улетели вникуда.
PS. Есть еще вариант по времени последнего изменения самого ликвидного фьючерса RI (getParamEx("SPBFUT", "RIZ0", "CHANGETIME").param_value). Пока использую его, Но в период с 1400 по 1405 он не работает.
Здравствуйте! Не подскажете почему во время приостановке торгов фьючерсами например сегодня в 11.17.55 LKH0 ф-ии getParamEx(class, name, "STATUS").param_value getParamEx(class, name, "TRADINGSTATUS").param_value возвращают 1? Кто ее ставит брокер или биржа? Какая функция в итоге показывает приостановку торгов инструментом?
Mikhail написал: Здравствуйте, для чтения и записи исторических данных из квика решил зациклить CreateDataSource и в конце каждого обращения к новому символу делаю Close(). Проблема в том что квик виснет после успешной обработки примерно 15-20 символов. Можно ли так вообще использовать эту функцию?
Добрый день.
Чтобы понять причины зависания потребуется для начала Ваш скрипт. Можно выложить тут, либо прислать нам на quiksupport@arqatech.com
Здравствуйте! Спасибо. Начал готовить код (покороче) и тут выяснилось что крашит Квик не эта функция а обращение к файловой системе при записи всех этих файлов (без задержек), причем на системе с SSD диском такое не происходит. Добавлю задержек и потестирую. Напишу позже.
Здравствуйте, для чтения и записи исторических данных из квика решил зациклить CreateDataSource и в конце каждого обращения к новому символу делаю Close(). Проблема в том что квик виснет после успешной обработки примерно 15-20 символов. Можно ли так вообще использовать эту функцию?
Вкратце суть в следующем - есть 2 единых счета, подключенных к 1 терминалу Quik, на 1 из которых данный скрипт работает без проблем, на втором нет. Обращался в тех поддержку Финама, там все проверили и т.к. вручную все выставляется из квика был послан к разработчика.
Сам текст скрипта заявки (внутри функции main()):
account_a="L01+00000F00" client_a="285563R2L2B"
function transaction_send_a (Operation_trans, Amount, Name) t = { ["ACTION"]="NEW_ORDER", ["ACCOUNT"]=account_a, ["CLIENT_CODE"]=client_a, ["TYPE"]="M",
Mikhail пишет: Здравствуйте, С момента как подал заявку на частичное снятие средств попытка чтения таблицы лимитов через getFuturesLimit возвращает nil. Как быть?
Добрый день,
Рекомендуем обновить версию терминала до 7.0. Также, необходимо иметь в виду, что начиная с версии 7.0 терминала QUIK, изменилась структура вызова функции getFuturesLimit() - добавился новый обязательный параметр curr_code.
Здравствуйте!
Я прошу прощения а где это можно увидеть в документации? Обновил до версии 7, проблема осталась. Она вылезла ровно неделю назад у Финама. Мой робот торгует уже полгода и все было Ок. И тут внезапно.
Дайте пожалуйста ссылка на пример как правильно получить лимит по деньгам в рублях по счету (фьючерсы): getFuturesLimit()
Все, догадался, надо было добавить "SUR" в конец getFuturesLimit("SPBFUT", "SPBFUT***TT", 0, "SUR")
Mikhail пишет: Здравствуйте, С момента как подал заявку на частичное снятие средств попытка чтения таблицы лимитов через getFuturesLimit возвращает nil. Как быть?
Добрый день,
Рекомендуем обновить версию терминала до 7.0. Также, необходимо иметь в виду, что начиная с версии 7.0 терминала QUIK, изменилась структура вызова функции getFuturesLimit() - добавился новый обязательный параметр curr_code.
Здравствуйте!
Я прошу прощения а где это можно увидеть в документации? Обновил до версии 7, проблема осталась. Она вылезла ровно неделю назад у Финама. Мой робот торгует уже полгода и все было Ок. И тут внезапно.
Дайте пожалуйста ссылка на пример как правильно получить лимит по деньгам в рублях по счету (фьючерсы): getFuturesLimit()
Неужели никто не подскажет? Может там надо какие-то переменные или флаги задавать? То что в обычной торговой сессии не указывается? Или в настройках Квика что-то указывать?
Здравствуйте, Пытаюсь выставить заявки в промежуток аукциона с 18.40-18.50. Однако заявки не проходят и ошибки не появляются. Отправляю в таком виде (см. ниже). Внутри дня заявка регистрируется но в промежутке 18.40-50 нет. Вручную ставится а скриптом нет. Подскажите в чем может быть дело?