Николай Камынин пишет: Попробуйте так: ------------------------------ local t=getSecurityInfo('',left .name) if t~=nil then local ClassCode=t .class_code if ClassCode~=nil and type(ClassCode~="table") and ClassCode~="" then Subscribe_Level_II_Quotes (ClssCode, left .name) end end
Да Николай! Так действительно помогло! Скрипт не останавливается. Большое спасибо!
Останавливается скрипт
Пользователь
Сообщений: Регистрация: 01.04.2015
13.07.2015 16:25:53
Да понятно. Придется этот момент переделать. Всем спасибо!
Останавливается скрипт
Пользователь
Сообщений: Регистрация: 01.04.2015
13.07.2015 13:36:17
и как быть в таком случае?
Останавливается скрипт
Пользователь
Сообщений: Регистрация: 01.04.2015
13.07.2015 12:23:47
Кстати, при явном указании кода класса, проблем таких действительно не возникает. Что же делать?
Юрий пишет: getSecurityInfo('',left .name).class_code
Искать код класса по коду бумаги не очень хорошая идея, можно запросто получить неверный результат. Судя по коду бумаги, проще явно указать код класса "SPBFUT"
Хочется универсальности - сегодня торгую фьючерсы, а завтра акции - вот и проблема с явным указанием кода класса.
Останавливается скрипт
Пользователь
Сообщений: Регистрация: 01.04.2015
13.07.2015 12:15:04
Цитата
Николай Камынин пишет: ClassCode~=nil and type(ClassCode~="table") and ClassCode~=""then
К сожалению тоже самое: ошибка возникает в строке - local ClassCode = getSecurityInfo('',left[i].name).class_code
Останавливается скрипт
Пользователь
Сообщений: Регистрация: 01.04.2015
09.07.2015 23:52:25
Нет изменений - скрипт останавливается! Сделал так:
function main() if isConnected() then for i = 1, #left do Subscribe_Level_II_Quotes (getSecurityInfo('',left[i].name).class_code, left[i].name) -- заказ стаканов через цикл end while aRun do oprosstakanov() -- опрос стаканов --остальной код end end end
Потом так: function main() while QRun do if isConnected() then --делал и так: if isConnected() == 1 then QRun = fals for i = 1, #left do Subscribe_Level_II_Quotes (getSecurityInfo('',left[i].name).class_code, left[i].name) -- заказ стаканов через цикл end end end while aRun do oprosstakanov() -- опрос стаканов --остальной код end end
Останавливается скрипт
Пользователь
Сообщений: Регистрация: 01.04.2015
09.07.2015 13:14:54
Спасибо понял пробую!
Останавливается скрипт
Пользователь
Сообщений: Регистрация: 01.04.2015
09.07.2015 12:28:21
Что ж такое? что никому не понятная проблема? Как по мне то она точно странная. Квиковцы жду от Вас ответа!
При выводе информации в лог-файл выводится тарабарщина
Пользователь
Сообщений: Регистрация: 01.04.2015
09.07.2015 12:25:47
Для начала выведи сообщение на экран (message). И скорее выведет ту же тарабарщину, а это ошибка расчетов.
Останавливается скрипт
Пользователь
Сообщений: Регистрация: 01.04.2015
08.07.2015 19:39:07
Всем доброго! Подскажите в чем может быть причина остановки скрипта по ошибке: "attempt to index a nil value" (попытка индекса нулевой стоимости)? Скрипт останавливается только при запуске Квика (скрипт не выключаю - только закрываю и открываю квик)? local left = -- эмитенты в таблице left задаем в самом начале { { name = "SiU5" } } function oprosstakanov() -- функция получения данных стакана работает не прекращая for i = 1,#left do -- здесь перебираются эмитенты local b = getQuoteLevel2(getSecurityInfo('',left[i].name).class_code, left[i].name) -- ОШИБКА в этой строке if b.bid and b.bid_count+0>0 then local a = tonumber(b.bid[tonumber(b.bid_count)].price) * left[i].quantity ------ end end end
Если запускать скрипт, при запущенном Квике - все в полном порядке.
Выставление "рыночных" заявок
Пользователь
Сообщений: Регистрация: 01.04.2015
07.07.2015 21:48:26
Тебе что дать пример выставления рыночной заявки?
переменная с ошибкой
Пользователь
Сообщений: Регистрация: 01.04.2015
23.06.2015 20:17:25
а в чем вопрос: infinity = 1/0 if a == infinity or a == -infinity then print("Неожиданный результат") end - работает. Все получилось, Не совсем понял почему у меня 1.#IND с минусом получается, но из статьи видно, что не все однозначно. Будем проверять и с + и с -.
переменная с ошибкой
Пользователь
Сообщений: Регистрация: 01.04.2015
23.06.2015 18:46:34
Спасибо большое!
переменная с ошибкой
Пользователь
Сообщений: Регистрация: 01.04.2015
23.06.2015 17:20:31
Да понятно, но думал можно и а идентифицировать как-то
переменная с ошибкой
Пользователь
Сообщений: Регистрация: 01.04.2015
23.06.2015 16:55:28
неправильно написал: a = b/c - в результате (понятно по какой причине) получаем -1.#IND
переменная с ошибкой
Пользователь
Сообщений: Регистрация: 01.04.2015
23.06.2015 16:51:55
пожалуйста подскажите, как идентифицировать переменную с ошибкой: -1.#IND a = 0; a = b + c - в результате (понятно по какой причине) получаем -1.#IND пробую так: 1) if a == "-1.#IND" - не получается; 2) if a == -1.#IND - не получается; 3) if a == nil - не получается;
не соответствует время
Пользователь
Сообщений: Регистрация: 01.04.2015
19.06.2015 12:23:15
хорошо. Еще подскажите в таком случае: 1) скрипт запоминает время getInfoParam("SERVERTIME"), как я понимаю время последней сделки и т.д. из ТПП перед моими действиями 2) далее я что-то делаю 3) я обращаюсь к данным из таблицы, пусть Сделок (ведь моя сделка все равно будет не раньше чем придут данные из ТПП даже если это будет моя сделка), ссылаясь на время равное или более того, что запомнил SERVERTIME.
В этом случае все равно могут возникнуть проблемы из-за разницы времени биржи и сервера?
Если да, то может мне тогда брать из ТПП время последней сделки, ведь это уже будет время биржи?
не соответствует время
Пользователь
Сообщений: Регистрация: 01.04.2015
18.06.2015 22:49:10
Ну вот развели демагогию, а умный человек подсказал, что все действительно придумано до нас: getInfoParam("SERVERTIME") - время сервера, а с миллисекундами: в таблице «Таблица сделок» («trades») в datetime есть поле с миллисекундами и поле с микросекундами, т.е. getItem(«trades»,e).datetime.ms и getItem(«trades»,e).datetime.mcs соответственно. Вот и все.
не соответствует время
Пользователь
Сообщений: Регистрация: 01.04.2015
18.06.2015 12:30:52
Спасибо за подсказку. Значит копать надо в другом месте.
не соответствует время
Пользователь
Сообщений: Регистрация: 01.04.2015
18.06.2015 11:54:10
Я конечно не силен в программировании, да и логика насколько позволяет, так задачи и решаю. Просто у меня идет серия сделок и через номер сделки приходится создавать кучу доп кода (а оно же может лень, а может не хватает знаний). Понятно что все проблемы можно решить разными способами и я их решаю, но не иметь возможности получить точное время, согласно которого я могу ориентироваться для меня не понять.
графический интерфейс, библиотека для создания формы ввода
Пользователь
Сообщений: Регистрация: 01.04.2015
18.06.2015 10:48:21
Тоже заморачивался этой проблемой, но на одном сайте по моей просьбе сделали скрипт и после этого я пока обхожусь подобными штучками. Вот вдруг кому поможет (для начинающих).
не соответствует время
Пользователь
Сообщений: Регистрация: 01.04.2015
18.06.2015 10:32:48
Сделал по совету (синхронизация времени причем с разных серверов пробовал). На глаз видно разница 0,5 сек Квика и компа. А потом еще ИНТЕРЕСНЕЕ: на компе стоит 2 платформы Квика одного брокера и у них тоже секунды тикают в разницу пол секунды. Вот прикол! Жаль, придется решать задачи другими способами. К разработчикам: зарегистрируйте пожелание получения времени (типа os.time() ) именно платформы (конечно если это время будет совпадать со временем в таблице сделок)
не соответствует время
Пользователь
Сообщений: Регистрация: 01.04.2015
17.06.2015 13:22:44
Да нет: 1-2 сек
Что приходит в OnTransReply ?
Пользователь
Сообщений: Регистрация: 01.04.2015
17.06.2015 13:17:06
да конечно регистрируйте
Что приходит в OnTransReply ?
Пользователь
Сообщений: Регистрация: 01.04.2015
16.06.2015 11:25:48
Разработчики пожалуйста выдайте информацию.
не соответствует время
Пользователь
Сообщений: Регистрация: 01.04.2015
16.06.2015 11:24:17
А как их можно синхронизовать?
Скорость получения данных OnParam OnQuote
Пользователь
Сообщений: Регистрация: 01.04.2015
16.06.2015 11:22:10
О Спасибо большое! А я уже наделал через OnQuote - надо переделать
не соответствует время
Пользователь
Сообщений: Регистрация: 01.04.2015
15.06.2015 14:15:57
Перед выставлением ряда заявок запоминаю время t = os.time(). Далее после делаю "проверку" всех сделок из табл Сделок, время которых позже t :
for e = 0,getNumberOf("trades") - 1 do if os.time(getItem("trades",e).datetime)>= t and getItem("trades",e).sec_code ==name then
Так вот: скрипт не находит некоторые сделки, т.к. время в таблице Сделок меньше, чем t , которое было сделано ранее (перед выставлением заявки). Вопрос: 1) какое отличие между t = os.time() и временем в таблице сделок. 2) постоянная ли это величина 3) как это обойти? (
Скорость получения данных OnParam OnQuote
Пользователь
Сообщений: Регистрация: 01.04.2015
14.06.2015 12:39:01
Подскажите откуда быстрее получить данные: 1) из OnParam или 2) из OnQuote
интересуют цены эмитентов
Что приходит в OnTransReply ?
Пользователь
Сообщений: Регистрация: 01.04.2015
12.06.2015 11:39:59
а при перестановке заявки статус№3 - Заявка успешно переставлена (фраза не точная) с указанием номера заявки. Может статус зависит от вида транзакции. Вот приходится гадать, а нужна верная информация. Если все-таки зависит от вида транзакции, то меня интересуют: маркет ордера, лимитные, перестановка и снятие заявок. Разработчики пожалуйста выдайте. Ждемс.
Что приходит в OnTransReply ?
Пользователь
Сообщений: Регистрация: 01.04.2015
12.06.2015 11:31:36
Сегодня биржа не работает и не могу точно указать № статуса, но фраза (я по ней фильтрую, т.к. не знаю расшифровки всех номеров) "Не найдена активная заявка для перестановки" (скорее всего №4)
Что приходит в OnTransReply ?
Пользователь
Сообщений: Регистрация: 01.04.2015
11.06.2015 21:46:12
наверное я не договорил, Статус из OnTransReply А эти, по крайней мере, те, что попадались, не совпадают. поэтому пож-та дайте правильные.
Что приходит в OnTransReply ?
Пользователь
Сообщений: Регистрация: 01.04.2015
11.06.2015 17:56:41
Подскажите, где можно посмотреть информацию по: status NUMBER Статус
(расшифровку статусов)
MOVE_ORDERS - замена заявки
Пользователь
Сообщений: Регистрация: 01.04.2015
15.05.2015 14:56:42
Да спасибо все заработало
MOVE_ORDERS - замена заявки
Пользователь
Сообщений: Регистрация: 01.04.2015
15.05.2015 10:47:39
да на опционах тоже снимается хорошо, но есть функция перестановки! Работает она? все равно не понимаю на сегодняшние вопросы поддержка находит время отвечать, а на вчерашние нет!!!
MOVE_ORDERS - замена заявки
Пользователь
Сообщений: Регистрация: 01.04.2015
15.05.2015 10:35:15
Поддержка где Вы???
MOVE_ORDERS - замена заявки
Пользователь
Сообщений: Регистрация: 01.04.2015
14.05.2015 15:46:40
подскажите пож-та, где ошибка? Скрипт выставляет одну лимитную заявку на ФОРТС (по опционам) - определяем ее № (OrderNum_OPT) - order.order_num далее надо переставить эту заявку на другую цену. Делаю так:
function perestavit_order_OPT() local trans_id=math.random (1,999999) local transaction = { ["ACTION"]= "MOVE_ORDERS", ["TRANS_ID"]= tostring(trans_id), ["CLASSCODE"]=tostring(CLASS_CODE), ["SECCODE"]=tostring(SEC_CODE), ["FIRM_ID"]=tostring(FIRM_ID), -- берем из табл. Сделок "Дилер" ["MODE"]="0", ["FIRST_ORDER_NUMBER"]=tostring(OrderNum_OPT), --№ ранее выставленной заявки ["FIRST_ORDER_NEW_PRICE"]="3200", -- новая цена для лимитной заявки ["FIRST_ORDER_NEW_QUANTITY"]="0" } local res=sendTransaction(transaction)
if res~="" then return nil, "send_LimitFUT():"..res else return trans_id end end
move_orders, Send Transaction - замена заявки
Пользователь
Сообщений: Регистрация: 01.04.2015
11.05.2015 17:35:02
Здравствуйте! Сюда же еще несколько вопросов: 1) "FIRST_ORDER_NUMBER" мы взяли order.order_num , а "SECOND_ORDER_NUMBER" - можно подставить тот же номер и тогда при новом обращении order.order_num мы получим тот же номер. Это я правильно понимаю? 2) если 1-я лимит. заявка была выставлена на 2 лота, в OnOrder(order) программа увидела, что прошла сделка на один лот - я могу переставить на другую цену только оставшийся лот, указав "FIRST_ORDER_NEW_QUANTITY" = "2", а "SECOND_ORDER_NEW_QUANTITY" = "1" ? 3) что произойдет (что выдаст res=sendTransaction(transaction), если я, не проверяя исполнился ли второй лот, буду вызывать эту функцию (пытаться делать перестановку множество раз, меняя цену - для гарантированного получения второго лота)? в программе пытаюсь сделать так:
NotBuy_OPT = true function OnOrder(order) -- Если исполнилась заявка полностью if order.trans_id == trans_id_OPT and order.balance == 0 then -- Меняет значение флага NotBuy_OPT = false end
function perestavit_order_OPT() local transaction = { ["ACTION"]= "MOVE_ORDERS", -- изменить количество в заявках на новые ["TRANS_ID"]= tostring(trans_id_OPT), ["CLASSCODE"]=tostring(classcode), ["SECCODE"]=tostring(seccode), ["FIRM_ID"]="UNIKA", ["MODE"]="1", ["FIRST_ORDER_NUMBER"]=tostring(OrderNum_OPT_), ["FIRST_ORDER_NEW_PRICE"]=tostring(price_put), ["FIRST_ORDER_NEW_QUANTITY"]=tostring(vol_kratno), ["SECOND_ORDER_NUMBER"]= ? ["SECOND_ORDER_NEW_PRICE"]=tostring(price_put+10), ["SECOND_ORDER_NEW_QUANTITY"]="1" } local res=sendTransaction(transaction) sleep (50) if NotBuy_OPT then price_put = price_put + 10 local res=sendTransaction(transaction) end; sleep (50); if NotBuy_OPT then price_put = price_put + 10 local res=sendTransaction(transaction) end; sleep (50); if NotBuy_OPT then price_put = price_put + 10 local res=sendTransaction(transaction) end; sleep (50); if NotBuy_OPT then price_put = price_put + 10 local res=sendTransaction(transaction) end; sleep (50); local res=sendTransaction(transaction) if res~="" then return nil, "send_LimitFUT():"..res else return trans_id end end 4) Хотя в программе и идет проверка на полное исполнение заявки (and order.balance == 0), но суть в быстром получении второго лота после первого и не использование маркет ордера 5) если думаю неправильно, пожалуйста подскажите (может пример) 6) возможно ли не использовать в примере sleep (50)?
Вопросы по совместной работе, quik junior и доске опционов., Два пользователя за одним терминалом. Программный доступ к доске опционов ...
Пользователь
Сообщений: Регистрация: 01.04.2015
08.05.2015 12:38:18
Подскажите, а можно ли теоретическую цену получать в реальном времени. Ведь она как-то расчитывается. Не поможете ли еще и с этим?
sendLimitFO, параметры
Пользователь
Сообщений: Регистрация: 01.04.2015
06.05.2015 14:08:01
Спасибо буду далее разбиратся
sendLimitFO, параметры
Пользователь
Сообщений: Регистрация: 01.04.2015
06.05.2015 12:55:12
Такое ощущение, что я задал вопрос сверх какой-то сложности! Если бы я не начал изучать Lua 2 недели назад я бы его не задавал. По-моему здесь на форуме только те кто пишут программы. Простой вопрос - почему не получить простой пример? "Вы думаете не правильно, надо вот так ..."
sendLimitFO, параметры
Пользователь
Сообщений: Регистрация: 01.04.2015
06.05.2015 12:31:27
Цитата
Цитата
С правилами ввода заявок на СРОЧНОМ рынке Вы можете ознакомиться в правилах торгов на СРОЧНОМ рынке
Я не о правилах ввода заявки вручную, я спрашиваю как это реализовать QLua. Неужели нельзя сделать примеры всех видов заявок - ВСЕ ни одного вопроса не найдется.
Импорт данных в QUIK из CVS?, Как можно импортировать данные в QUIK из CVS?
Пользователь
Сообщений: Регистрация: 01.04.2015
06.05.2015 11:49:16
неужели нельзя не выделываться, а хотя бы один раз ответить на вопрос (у вас же все такие коменты)? ну знаешь - отлично, поделись с другими. Зачем писать вещи которые знают только "знающие". например что такое RFC и LUA.org (на английском языке)?
sendLimitFO, параметры
Пользователь
Сообщений: Регистрация: 01.04.2015
06.05.2015 11:38:16
вместо абры кадабры:
EXECUTION_CONDITION Условие исполнения заявки, необязательный параметр. Возможные значения: «PUT_IN_QUEUE» – поставить в очередь (по умолчанию), «FILL_OR_KILL» – немедленно или отклонить, «KILL_BALANCE» – снять остаток
sendLimitFO, параметры
Пользователь
Сообщений: Регистрация: 01.04.2015
06.05.2015 11:35:59
Как не ведомо, я же не просто так убрал с вопроса вообще слово "QL"? Это Ваша документация. а т.к. она скудненькая (в том числе по работе с заявками), я понимаю надо искать похожее - вот нашел в документации QPile (я подумал это в ряде случаев идентичные вещи). Выборка из Вашей документации:
EXECUTION_CONDITION Условие исполнения заявки, необязательный параметр. Возможные значения: [img]file:///G:/%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F/%D0%A0%D0%BE%D0%B1%D0%BE%D1%82%D1%8B/Qpile/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D1%8F/PicExportError[/img] «PUT_IN_QUEUE» – поставить в очередь (по умолчанию), [img]file:///G:/%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F/%D0%A0%D0%BE%D0%B1%D0%BE%D1%82%D1%8B/Qpile/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D1%8F/PicExportError[/img] «FILL_OR_KILL» – немедленно или отклонить, [img]file:///G:/%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F/%D0%A0%D0%BE%D0%B1%D0%BE%D1%82%D1%8B/Qpile/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D1%8F/PicExportError[/img] «KILL_BALANCE» – снять остаток Поэтому повторно и задал вопросы.
Пож-та скажите где можно ознакомится с привилами ввода заявок на СРОЧНОМ рынке (интересуют фьючерсы и опционы). Заявки использую лимитные и маркетом.
sendLimitFO, параметры
Пользователь
Сообщений: Регистрация: 01.04.2015
05.05.2015 18:18:48
просто надо по другому задать вопрос: В признаке execution_condition - KILL_BALANCE (Снять остаток) - как работает при указании цены лимитной заявки и количества? 1) если не дали сразу по лимитной цене, значит сделка отменяется; 2) если дали половину объема , то остальная часть отменяется; 3) надо ли параметр KILL_BALANCE указывать в " " 4) признак expire_date - TODAY (до окончания текущей торговой сессии) надо ли указывать в " "
sendLimitFO, параметры
Пользователь
Сообщений: Регистрация: 01.04.2015
05.05.2015 17:56:38
понял спасибо
sendLimitFO, параметры
Пользователь
Сообщений: Регистрация: 01.04.2015
05.05.2015 16:54:30
А что сюда такие вопросы задавать нельзя? Вроде бы тоже к квику относится.
sendLimitFO, параметры
Пользователь
Сообщений: Регистрация: 01.04.2015
04.05.2015 01:59:16
Здравствуйте. Функция библиотеки QL sendLimitFO. в признаке execution_condition - KILL_BALANCE (Снять остаток) - как работает при указании цены лимитной заявки и количества? 1) если не дали сразу по лимитной цене, значит сделка отменяется; 2) если дали половину объема , то остальная часть отменяется; 3) надо ли параметр KILL_BALANCE указывать в " " 4) признак expire_date - TODAY (до окончания текущей торговой сессии) надо ли указывать в " "