Незнайка написал: Потому что KA и MP - это разные СКЗИ-провайдеры, не?
Про KA ничего не могу сказать, не знаю, что за зверь, тыщу квиков и сто брокеров поменял - никогда не встречался. Может потому, что всегда ключи использую, без этих аццких смс. MP это MultiPurpose_SSPI_Provider. Возможно, отсутствие KA вылезет где-нибудь на более позднем этапе подключения, а может и нет.
Незнайка написал: KA_Pr.dll и ka_pr.ini не нужны, кстати
Сейчас попробовал без ka_pr и удивился - коннектится (неверное имя или пароль), сидел вот репу чесал, чего это квик не упал. Раз так - все должно получиться.
ISINhere2001 написал: Сотрудники техподдержки Quik в Сбере пользуются 9-й версией терминала, но пользователям ее пока не предоставляют, тк не все оттестировали.
Тогда и не получится ничего, девятый клиент к восьмому серверу не подходит, надо последний восьмой ставить.
Цитата
Незнайка написал: Ещё нужны сами либы KA_Pr.dll и MP_Pr.dll
mp_pr есть в апдейте, а вот ka_pr нет, и от седьмого не подойдет.
То есть куда ни кинь, всюду клин, поэтому остается вариант в седьмом квике смотреть, что есть в получении файлов - программа, повезет, если там восьмерка какая-нибудь (она 64-битная хотя бы), поставить ее и потом поверх накатить последнюю из восьмых версий. Это максимум, что можно сделать до появления девятого сервера в продакшене.
Незнайка, файлы могут по-разному называться, лучше открывать qcrypto.ini и смотреть, на что он ссылается, и далее со всеми так. Куда как проще накатывать файлы из обновления на рабочий квик (сделав бэкап). В данном случае есть еще вариант, что у сбера сервер восьмой версии, тогда и квик надо восьмой ставить, а не девятый.
ISINhere2001 написал: Посмотрел настройки подключения к интернету в старой версии, скриншот ниже
Тогда уж можно было посмотреть, какой провайдер используется, настройки-основные-программа-шифрование. И в новой версии поставить такой же, чем по файлам ковыряться с опасностью банальной опечатки и долгих поисков, что сломалось.
ISINhere2001 написал: 0) (ручной путь тоже интересен) Какие брокерские настройки нужно изменить и где они хранятс ?
Вкратце - в папке квика есть несколько длл-криптопровайдеров, нужно выбрать нужного провайдера и сказать квику, что надо именно его использовать, затем настроить саму длл провайдера. По скринам мы видим, что настроен OpenSSL_Pr.dll, соответственно в qcrypto.ini должны быть настройки, предписывающие квику использовать его, а в OpenSSL_Pr.ini - настройки самого провайдера. Также в ip.cfg указаны адреса и порты серверов (то, что через UI в соединениях можно настроить).
Ошибка гласит, что сервер этот метод не поддерживает. Откуда возникают вопросы, верны ли адрес и порт сервера и включен ли сервер сегодня (воскресенье же). Вполне возможно, у сбера есть другие сервера, поддерживающие этот метод. Или нет, я не знаю. Есть ли у вас ключи для квика, эти самые pubring/secring? Если есть, то, скорей всего, метод подключения не OpenSSL. В этом случае проще всего просто убрать из папки квика файл qcrypto.ini, что переключит квик на дефолтный провайдер, положить файл qcrypto.cfg с путями к ключам и попробовать подключиться.
Но лучше не искать приключений и заиспользовать настройки от старого квика.
Цитата
ISINhere2001 написал: В архиве quik_9.3.3_upd.zip есть файл update.exe - запустить его после копирования файлов ?
Нет, не нужно. Само копирование файлов в папку квика и есть то, что этот update.exe делает. Если удастся подключиться, надо уже в квике зайти в "получение файлов - программа" и посмотреть, что еще можно подкачать себе, там могут быть всякие допмодули необязательные.
Похоже, вы квик с сайта арки распаковали и пытаетесь запустить как есть. Но в архиве от арки нет брокерских настроек. Их, в принципе, можно руками сделать, но проще всего всего пойти другим путем: 1) скопировать работающий квик старой версии (всю папку) 2) в эту скопированную папку распаковать архив с квиком 9.3.3, подтвердив замену файлов.
Иван, а если в вашей добавленной строчке убрать расширения
Код
if string.find(package.path,'C:\\QUIK\\LuaIndicators\\Git\\EnterTradeLib\\Lua\\?') == nil then
package.path=package.path..';C:\\QUIK\\LuaIndicators\\Git\\EnterTradeLib\\Lua\\?;'
end;
Иван, непонятно, чего вы уцепились за папку LuaIndicators. В этой папке квик ищет именно индикаторы, то есть которые на график. Для скриптов создайте другую папку, "lua", и в нее кладите все либы. Квик сам вам говорит, где он искал, особенно обратите внимание на строки
Цитата
no file 'C:\QUIK\lua\socket\core.lua' no file 'C:\QUIK\lua\socket\core\init.lua'
Здесь квик хочет загрузить библиотеку с именем "socket.core". Для этого он в папке lua ищет подпапку socket, а в ней либо файл core.lua, либо подпапку core, в которой есть скрипт с именем init.lua. Это для всех библиотек так работает, библиотека это либо один файл, либо папка с файлом init.lua.
youriy написал: Уверен, что большинство пользователей меня поддержат.
По крайней мере, не будут против. Но тут надо учитывать одну вещь. У браузера содержимое окна раскладывается заново при изменении размера окна, у квика - нет. То есть после нажатия F11 пространство увеличится, а дочерние окна останутся на своих местах, просто снизу прибавится пустое место. Нечто похожее (фулскрин по F11) делал в виде луа+длл, задача несложная, но бесполезная без изменения раскладки окон.
Владимир написал: этот ублюдок самопроизвольно сменил режим экрана
Там тупо такого кода не должно быть, это ж не игрушка с директиксом внутри. Как-то целенаправленно пытался создать больше объектов GDI, чем винда может переварить. Система тогда начинает экономить хэндлы и рисовать кое-как и чем придется, что выглядит похоже на слетевший видеорежим.
Владимир написал: ты же сам мой код интерпретируешь, ты же видишь, что это МОЁ событие, ты же знаешь, что я его перехватил и обработал
Луа для квика - черный ящик. Квик грузит скрипт тем же dofile, что и рядовой пользователь, прицепляет к нему свои функции и отпускает в свободное плавание. Единственное - помечает себе, какие колбеки скрипт определил, и при получении событий опять же через общедоступный интерфейс дергает эти колбеки. Байткод интерпретирует виртуальная машина луа, написанная не аркой. Слава богу, арка вроде не пытается ее ломать под каждое пожелание трудящихся, бо ничего кроме аццких глюков это не принесет, а досконально разобрать весь луа по косточкам и потом собрать франкенштейна такого же но без крыльев - в арке народу не хватит. В принципе, квик мог бы узнать, что там перехвачено и обработано, если бы, например, колбек оконного события возвращал true/false, а лучше какую-нибудь численную константу, чтобы вариантов было больше двух. А сейчас откуда ему знать, что колбек сотворил в ответ на событие, меню показал или еще что.
Владимир написал: Так вот: несколько раз при этом выскакивало: "Вы уверены, что хотите удалить столбец"?
Попробуйте вытащить столбец из таблицы за заголовок, вылезет то же сообщение. Предположу, что в эти несколько раз мышка двигалась с зажатой кнопкой, под нее выскакивало окно скрипта и винда считала, что стартанул drag&drop столбца из таблицы. С падением тоже что-нибудь подобное, типа окно прибилось самопроизвольно, а потом на него событие приехало. Так что и без чистильщика широк простор убица на ровном месте.
Старатель написал: Изменений в Lua не было: осталась библиотека версии 4.2.0.3
Тут путаница какая-то. На стенде (где смотрел) длл от 9.2.0 с версией 4.1.2.2, на боевом стоит 9.2.3 с версией длл 4.1.3.1, в свежескачанном 9.3.3 длл 4.2.0.3. Что-то таки менялось.
Если некая переменная не ноль, перед вызовом колбека останавливается сборщик, после вызова - запускается. Что там за переменная мне неведомо, может она никогда не бывает установлена. В любом случае здесь шаг сборки не должен выполняться, стоп просто ставит флаг, что сборка отключена, рестарт его сбрасывает, оверхед минимальный. Но рестарт также сбрасывает в 0 переменную в стейте, которая следит за накоплением мусора, вот что будет на следующем шаге после этого, я сказать не могу, возможно, как раз полный цикл и произойдет.
Это новый режим в 5.4, генерационная сборка (а-ля дотнет новый), типа "сначала собрать свежий мусор, если все равно много осталось - тогда шаг по всему". Раз влияние есть, то хайли лайкли нагрузку действительно дает коллектор. Думаю, поиграть с параметрами стоит, может найтись удачная конфигурация, тогда останется ее как дефолтную предложить. На память не скажу, что куда крутить, надо в доки луа лезть.
Дмитрий Б. написал: по поводу таблицы купить/продать
нет понимания. Если брокер говорит, что шортить нельзя, там не должно было быть типа ДК. Если там таки был тип ДК, либо у брокера что-то неправильно настроено, либо запрет шортов по причине недавних нововведений и никто не морочился с изменением настроек, бо нововведения как бы временные, либо никакого запрета вообще нет (что легко проверить, попытавшись открыть один лот в шорт). В последнем случае и разговор уже о другом должен быть. Но лучше подождать варианта от арки, может еще какие-то либо имеются.
Попробую еще раз. Если разрешить выставлять заявки с превышением лимита и проверять лимит непосредственно в момент исполнения заявки, это автоматически означает, что ЛЮБАЯ заявка в стакане может в момент исполнения оказаться ничем не обеспеченной и, значит, быть снятой прямо в тот момент, когда на нее наехала встречная заявка. Это превратило бы стакан в совершенно виртуальную сущность. Тксть видите заявки? и я вижу, А ИХ НЕТ.
Дмитрий Б. написал: Но почему, даже если цену болтанет сразу на две заявки, нельзя одну заявку закрыть (до которой первой болтануло), а по второй уже выдавать ошибку?
Для этого надо будет проверять лимиты в момент исполнения заявки. Значит, в стакане будут стоять не заявки, а не пойми что, некие декларации о намерениях с тегом "но это не точно".
Дмитрий Б. написал: торговая система QUIK решила, что я вхожу в короткую позицию
Это не квик решил, это так и было. Лимиты проверяются в момент выставления заявки, а не в момент ее исполнения. Соответственно, две заявки в одну сторону действительно превышали лимит.
Если возникает вопрос "а почему так", рассмотрите такой сценарий: обе заявки выставились, цену болтануло вверх-вниз за долю секунды и обе исполнились. Кто-то купил у вас детский мир, скажем, 1 лот. Где его брать, чтобы отдать покупателю? У вас его нет. У брокера его нет. У биржи его нет. Выходит, мы киданули покупателя и сейчас начнутся терки, кто будет крайним. Само предназначение биржи как раз в предотвращении подобных ситуаций и состоит. Аналогично, если бы проверка лимита была в момент исполнения. Покупатель лупит по вашему лимитнику и вместо сделки получает "сорри, это был фейковый лимитник, у выставившего нет бумаги, оказывается".
Roffild написал: OnAllTrade() НЕ вызывается, если "Таблица обезличенных сделок" НЕ открыта
Или не создан тиковый датасорец по инструменту, или не открыт тиковый график по инструменту. Но это закажет только один инструмент. Подписка на ВСЕ инструменты в цикле с целью заказать ТОС целиком работает плохо, потому что на каждой итерации идет перезаказ ТОС, а подписаться на все разом нельзя. Поэтому в нынешних реалиях: 1) ТОС должна быть всегда открыта, заказ данных должен быть настроен руками 2) юзер должен быть проинструктирован никогда ТОС не закрывать и особо не щелкать по тиковым графикам во избежание автоматической отписки от чего-нибудь 3) сам скрипт подписываться на тики не должен во избежание автоматической отписки при его завершении 4) юзер должен периодически поглядывать в настройках, что все галки на месте или 4.1) перед запуском квика некая внешняя софтина должна заглядывать в info.ini и фиксить подписки в случае чего.
По-хорошему нужны функции SubscribeAllTrades/UnsubscribeAllTrades с возможностью подписаться на ВСЕ за один вызов. Но арка почему-то не хочет этого делать. Либо нужно реализовать вариант, предложенный неоднократно: фильтры устанавливаются автоматически при любой подписке, как сейчас, а сбрасываются только из диалога заказа данных. Тоже не хочет.
Башку чем-нибудь околокодовым забить, пока заняться нечем.
Цитата
Владимир написал: наверняка "в среднем", а не в худшем случае
Хэш-таблица плюс хвост из новодобавленного с периодическим рехэшем, в итоге амортизированное O(1). Так-то, если слишком рано в бесконечные не уходить, сложность хэш-таблицы O(N/M), где M - число входов, в (самом) худшем просто считаем N/M->N и получаем O(N), типа такая вырожденная хэш-таблица с одним входом.
Anton написал: вопрос интересный, как оно так вышло
Сложился паззл. Когда в девятой версии смотрел "чего нового" в отладчике, увидел, что после каждого колбека lua_gc добавили. Не обратил внимания только, полный или шаг. Вот оно собсна и есть, пропорционально количеству потенциального мусора. Насколько это критично в реальном применении, а не в модельном примере, вопрос открытый. Сама по себе идея синхронно прибраться в основном потоке выглядит хорошей, чутка пошаманить с частотой этого действа разве.
swerg написал: Чтобы функцию вызвать - ее надо найти, на это, очевидно, уходит время.
У луа глобальные функции/переменные находятся в таблице, а поиск в таблице луа заявлен как O(1), не должно бы по идее влиять, по крайней мере заметно влиять. Квик ничего не выдумывает, берет колбек из скрипта через lua_getglobal, так что вопрос интересный, как оно так вышло. Например, может тормозить поиск не в таблице по ключу, а самого ключа (строки), там вроде какой-то кэш строк есть, и при числе именованных переменных сильно больше его размера можем получать постоянный кэшмисс. А можем и не получать, рыть надо.
точно есть, была даже ошибка с вызовом __gc объектов при повторном запуске прибитого скрипта, ее исправили. Вот, кстати, этот момент в репорте не освещен, скрипт штатно завершился или был прибит квиком (в т.ч. по истечении таймаута на завершение после нажатия "остановить", что не всегда можно заметить невооруженным глазом).
BVladimir, поди Qt собран с динамическим рантаймом. У питона тоже динамический и подгружается из папки питона, у квика статический. Вот эти вот все ucrtbase.dll, ms-api-xxx.dll и прочая, если так, должны в папке квика быть.
Вижу на скрине длл от ботов. Возможно, боты подписываются на тики и потом отписываются, что сбрасывает соответствующий фильтр. Проблемы это сообщение тоже не решает, только еще один из вариантов, куда посмотреть.
Kander, фильтры сохраняются в info.ini, раздел AllTrades или как-то так. Если нужны все инструменты, там должны быть строки CLASSNAME=ALL. Если класс не заказан, будет CLASSNAME=(перевод строки). Если заказан частично, будет список бумаг. Квик может сам сбрасывать фильтры в результате некоторых событий. Поищите здесь по форуму, обсуждалось много раз. Часть косяков поправили, часть еще нет.
local mypositions = {
'SBER' = {
'TQBR' = {
aveprice = 123.23,
amount = 1000,
stopprice = 120.12,
direction = 1,
status = 1, -- active, no pending orders
checkStop = function(self, price)
if self.status == 1 then
if self.direction > 0 then -- long
if price <= stopprice then
self:coverByMarket()
end
else if self.direction < 0 then -- short
if price >= stopprice then
self:coverByMarket()
end
end
end
end
}
},
'GAZP' = {
-- ...
}
}
function OnAllTrade(at)
-- find position in O(1)
local spos = mypositions[at.sec_code]
if spos then
local cpos = spos[at.class_code]
if cpos then
-- position exists
cpos:checkStop(at.price)
end
end
end
Дмитрий, если неделю-другую подождете, сделаю. Сейчас не в том месте нахожусь. Сразу учтите: квик подкачивает до 3000 свечей, чем короче таймфрейм, тем меньше дней накачаете. С учетом этого все же рассмотрите вариант накачать со стороны минутки и на своей стороне по ним настроить любых других тф и насчитать индикаторов.
Станислав написал: если в него добавить все возможные инструменты со всеми возможными таймфреймами
Экспортировать не значит графики открывать. Выводит все на раз.
Цитата
Дмитрий написал: по всем доступным инструментам QUIK по всем доступным ТФ
Достаточно выгружать тики и из них строить любые ТФ, в том числе которых нет в квике. Но это если нужен реалтайм, для исследований проще с того же финама скачать и не париться.