local stopped, id
function OnStop(flag)
stopped = true
DestroyTable(id)
end
function main()
id = AllocTable()
CreateWindow(id)
SetTableNotificationCallback(id, function(t_id, msg, par1, par2)
if msg == QTABLE_CLOSE then
OnStop()
end
end)
repeat
sleep(16)
until stopped
end
Надо делать так, как надо. А как не надо - делать не надо.
Если задана SetTableNotificationCallback (как для ячеек так и для заголовков) по событиям QTABLE_RBUTTONDOWN, QTABLE_RBUTTONDBLCLK, QTABLE_RBUTTONUP, то контекстное меню, в том виде, в котором сейчас есть (не настраиваемое) не нужно!
Надо делать так, как надо. А как не надо - делать не надо.
local AllTrades = {}
function main()
ID = AllocTable()
AddColumn(ID, 1, '1', true, QTABLE_INT_TYPE, 20)
CreateWindow(ID)
row = InsertRow(ID, -1)
while not stoped do
if #AllTrades ~= 0 then
local trade_num = table.sremove(AllTrades, 1).trade_num
table.ssort({0, 0}, function()
SetCell(ID, row, 1, ''..trade_num)
return true
end)
else sleep(1) end
end
end
function OnAllTrade(alltrade)
table.sinsert(AllTrades, alltrade)
end
Через непродолжительное время терминал вешается. Зависание происходит при выполнении инструкции SetCell в main.
Надо делать так, как надо. А как не надо - делать не надо.
В настройках шрифтов («Программа» / «Шрифты») указан шрифт Tahoma. При выборе условного форматирования эти настройки игнорируются, стоит по-умолчанию другой шрифт (Arial). Приходится дополнительно ещё указывать нужный шрифт и размер.
Надо делать так, как надо. А как не надо - делать не надо.
Sergey Gorokhov написал: ответ зависит еще и от версии сервера.
Не внимательно прочитал. Т.о., для российских площадок в версиях клиента (>= 7.24 and < 8) можно умножать balance на 100, не зависимо от версии сервера?
Надо делать так, как надо. А как не надо - делать не надо.
Sergey Gorokhov написал: Если сервер выше 8.0 то количество требуется отображать с учетом точности инструмента, однако, на российских рынках как правило нет инструментов с дробным количеством, так что можно также умножать на 100.
Можно поподробнее? В версии 8.1.0.30 balance отображается целым числом, зачем ещё умножать?
Надо делать так, как надо. А как не надо - делать не надо.
Сотрудники ARQA Technologies, просвятите, пожалуйста, В какой версии была добавлена ошибка? В какой версии ошибка устранена? Проблема на всех рынках? В версиях, где ошибка присутствует, чтобы получить корректное значение снятого остатка, достаточно balance умножить на 100, или размер лота, или другое значение? Или всё сложнее?
Надо делать так, как надо. А как не надо - делать не надо.
uid и canceled_uid будут равны при выставлении/снятии заявки от имени одного логина как пользователем так и скриптом. Увы, но при отсутствии OnTransReply это не поможет.
Надо делать так, как надо. А как не надо - делать не надо.
Так и знал, что кто-нибудь из зевак будет задавать кучу вопросов. Ну, например, для реализации функции для фондовой и валютной секций, аналогичной "MOVE_ORDERS" на срочке. Заявку может снять пользователь, но скрипт не сразу об этом узнает, особенно, когда биржа тормозит, и колбеки приходят с задержкой в несколько секунд. OnTransReply - один из колбеков, доставка которого не гарантируется, ну так сложилось. Рассуждения "кто, зачем и почему" не интересуют.
Интересует ответ на вопрос в первом сообщении темы с учётом особенностей архитектуры ИТС QUIK.
Надо делать так, как надо. А как не надо - делать не надо.
к разработчикам: Если это - "та самая" функция, можете её легализовать или сделать публичную версию, чтобы можно было использовать её в своих проектах, не опасаясь, что в будущем эта функция будет упразднена.
Надо делать так, как надо. А как не надо - делать не надо.
Скрипт отправляет транзакцию на снятие заявки. Допустим, OnOrder получен раньше или OnTransReply вообще не пришел. Есть возможность установить инициатора снятия: сам скрипт, пользователь (вручную) или, может, другой бот?
Надо делать так, как надо. А как не надо - делать не надо.
Alexey Ivannikov написал: Действительно, описываемое поведение некорректно. IsWindowClosed() возвращает TRUE только в случае, если окно таблицы было закрыть "вручную" (т.е. кликом мыши по "крестику"). Ошибка будет исправлена в одной из очередных версий программы.
Главное исправить так, чтобы было понятно, какую таблицу можно повторно открыть с помощью CreateWindow, а кукую нужно создавать заново, чтобы результат работы кода
Код
if IsWindowClosed(id) == true then CreateWindow(id) end
был предсказуем.
Надо делать так, как надо. А как не надо - делать не надо.
Может, да, а может нет. Назвать как угодно можно, а что показывает одному автору известно. Учитывая, что функция появилась в 7.18 и до сих пор никому не известна, либо это не то, что вы подумали, либо разработка совершенно секретная )))
Надо делать так, как надо. А как не надо - делать не надо.
Sergey Gorokhov написал: важнее с какой скоростью данные поступают и обрабатываются нежели с какой скоростью происходит заказ.
Для сравнения: в день по опционам проходит биржевых сделок около 20 тыс. (±10 тыс.). Чтобы подписаться на сделки по всему классу опционов, нужно дёрнуть info.ini около 150 тыс. раз.
Надо делать так, как надо. А как не надо - делать не надо.
Sergey Gorokhov написал: Ваши ~500 сек никуда не идут в сравнении с нашими ~20сек.
При каждом вызове CreateDataSource по тикам дергается info.ini: раз 15 повторяется цикл LockFile/ReadFile/UnlockFile/CloseFile и один раз даже WriteFile )) Скорость выполнения такого блока операций сильно зависит от скорости диска, на который установлен QUIK. И, как ни странно, может отличаться в десятки раз.
Ну ещё и сравнивать надо в одинаковых условиях, например, какие были установлены фильтры, что было в файлах info.ini (в частности в секции [ALL_TRADES_DATA]), alltrade.dat до запуска скрипта.
Надо делать так, как надо. А как не надо - делать не надо.
Zoya Skvorcova написал: Мы рассмотрели Ваше пожелание. По итогам его анализа сообщаем Вам, что реализация пожелания признана потенциально целесообразной. Если по результатам дальнейшего анализа, включающего юридические аспекты, анализ на непротиворечивость с общей политикой компании, никаких возражений не возникнет, мы постараемся включить Ваше пожелание в план доработок при выпуске одной из следующих версий нашего ПО.
Цитата
Stanislav Tvorogov написал: Данная настройка выполняется со стороны сервера QUIK. Получить ее значение из рабочего места QUIK через QLUA на данный момент, к сожалению, нельзя. При реализации ранее зарегистрированного пожелания ответ будет предоставлен в данной ветке форума.
Здравствуйте. Удалось что-нибудь сделать?
Надо делать так, как надо. А как не надо - делать не надо.
local run = true
local function f()
for i = 1, 2000000 do
local a = 1 + 2 * 3 / 4
end
return run
end
function main()
local t_id = AllocTable()
AddColumn(t_id, 1, "", true, QTABLE_DOUBLE_TYPE, 20)
CreateWindow(t_id)
InsertRow(t_id, -1)
while run do
local r = f()
SetCell(t_id, 1, 1, tostring(r))
sleep(1)
end
message('Exit')
end
function OnStop()
run = nil
message('OnStop')
return 5000
end
Почему после остановки скрипта main не завершается (чаще всего) должным образом?
Надо делать так, как надо. А как не надо - делать не надо.
s_mike@rambler.ru написал: пересчитывать итоги каждый раз при попытке извлечь значение по ключ vol
Думаю, будет накладно в общем случае, т.к. надо будет при каждом обращении к vol пробегать по всем элементам таблицы. Хотелось бы более элегантного решения.
Надо делать так, как надо. А как не надо - делать не надо.