Подскажите Как сделать в Квике( 9.2.3.15) на Lua вывод окна, с которого будет управляться робот?, Подскажите Как сделать в Квике( 9.2.3.15) на Lua вывод окна, с которого будет управляться робот?
Похоже, iss.moex ввела ограничение на количество запросов без паузы между ними. Качал свечки. Без паузы — 9 запросов, и "Recv failure: Connection was rese". C таймаутом 8 сек. - качает столько, сколько нужно.
function OnParam(class, sec)
if class == "SPBFUT" and (sec == Tr[1].sec or sec == Tr[2].sec) then
local sessn = (getParamEx("SPBFUT",sec,"TRADINGSTATUS").param_image == "открыта")
if sessn and (cond & 0x0080 == 0x0080) then
cond = cond & 0xFF7F -- Сброс "Сессия стоп".
SetColor(tw_id, 5, -1, -1, -1, -1, -1)
elseif not sessn and cond & 0x0080 == 0 then
cond = cond | 0x0080 -- "Сессия стоп".
SetColor(tw_id, 5, -1, yellow, -1, -1, -1)
end
end
end
Очень долгий пересчет клиентского портфеля (секунд 10)., Один из Квиков на компьютере зависает на 10 секунд при нажатии F5 на таблице Клиентский портфель. Если в настройках стоит галка "Обновлять через 15 секунд", то 10 секунд висит а пять работает.
Ziveleos написал: Не знаю как у Вас, возможно это зависит от брокера, в моем QUIKe от ВТБ, в таблице "Текущие торги" ГО указан на первом уровне лимита концентрации.(КПУР) Сравните ГО здесь: https://www.moex.com/ru/contract.aspx?code=Si-6.25
в том то и дело..В таблице всё указано верно,как и должно быть..А при выставлении заявки-уже другое(завышенное)
Вы написали:
Цитата
в таблице"текущие торги" так же соответствует категории КСУР
Не знаю как у Вас, возможно это зависит от брокера, в моем QUIKe от ВТБ, в таблице "Текущие торги" ГО указан на первом уровне лимита концентрации.(КПУР) Сравните ГО здесь: https://www.moex.com/ru/contract.aspx?code=Si-6.25
Igor_User написал: Есть ли какие-нибудь ещё способы определить строку, из-за которой эта ошибка произошла?
message("OK") и дихотомия. Ставим message в середине скрипта, если выскочило "OK", значит, ошибка дальше. Нет - до него. Делим проблемный кусок дальше. И т.д.
Глушкова Екатерина, шорт заработал, но в 10-й версии, в таблице "Купить/продать" по-прежнему, кроме "D long" и "D short", одни нули. Данные в таблице "Параметры рыночных рисков [ЦК]" отображаются.
Vasiliy написал: Это на Lua в Квике, без библиотек?
На qlua, без библиотек. Фрагмент скрипта работающий с окном:
Скрытый текст
Код
local function MainWindow()
limValue = "Market"
red = RGB(255,180,180)
local green = RGB(180,255,180)
yellow = RGB(230,230,0)
local function event_callback(mw_id, msg, row, col)
local function SetLimit()
limValue = string.format("%d ps", indLmPs)
SetColor(mw_id, 3, 4, -1, -1, -1, -1)
SetColor(mw_id, 2, 3, -1, -1, -1, -1)
end
if msg == QTABLE_CLOSE then
w_top, w_left, w_bottom, w_right = GetWindowRect(mw_id)
DestroyTable(x2_id)
DestroyTable(mw_id)
sleep(300)
OnStop()
end
if msg == QTABLE_LBUTTONDBLCLK then
if row == 1 and col == 1 then -- Стоп меньше на 10.
indStPrc = indStPrc - 0.8
elseif row == 1 and col == 4 then -- Стоп больше на 10.
indStPrc = indStPrc + 0.8
elseif row == 2 and col == 1 then -- Лимит меньше на 10.
indLmPs = indLmPs - 8
elseif row == 2 and col == 3 then -- Лимит ноль.
indLmPs = 0
SetLimit()
elseif row == 2 and col == 4 then -- Лимит больше на 10.
indLmPs = indLmPs + 8
end
end
if msg == QTABLE_LBUTTONUP then
if row == 1 and col == 1 then -- Стоп меньше.
indStPrc = indStPrc - 0.1
elseif row == 1 and col == 4 then -- Стоп больше.
indStPrc = indStPrc + 0.1
elseif row == 2 and col == 1 then -- Лимит. меньше.
indLmPs = indLmPs - 1
SetLimit()
elseif row == 2 and col == 4 then -- Лимит больше.
indLmPs = indLmPs + 1
SetLimit()
elseif row == 3 and col == 2 then -- Пауза
sPause = true
SetColor(mw_id, 3, 2, red, -1, red, -1)
SetColor(mw_id, 3, 3, -1, -1, -1, -1)
elseif row == 3 and col == 3 then -- Плей.
sPause = false
SetColor(mw_id, 3, 3, green, -1, green, -1)
SetColor(mw_id, 3, 2, -1, -1, -1, -1)
elseif row == 3 and col == 1 then -- х2
x2key = true
elseif row == 3 and col == 4 then -- Маркет/лимит.
if limValue == "Market" then
SetLimit()
else
limValue = "Market"
SetColor(mw_id, 3, 4, yellow, -1, yellow, -1)
SetColor(mw_id, 2, 3, -1, RGB(0,0,255), -1, RGB(0,0,255))
end
end
SetCell(mw_id, 1, 3, string.format("%.1f %%", indStPrc))
SetCell(mw_id, 2, 3, tostring(limValue))
end
end
mw_id = AllocTable()
-- Создание колонок.
local n = 1
local function NewColumn(hd,wt)
AddColumn(mw_id, n, hd, true, QTABLE_STRING_TYPE, wt)
n = n + 1
end
NewColumn("-",4)
NewColumn("Цена",9)
NewColumn("Отступ",9)
NewColumn("+",4)
CreateWindow(mw_id)
SetWindowPos(mw_id, w_left, w_top, (w_right - w_left), (w_bottom - w_top))
SetWindowCaption(mw_id, "Лонжа")
-- Заполнение строк таблицы.
local function FillRow(...)
local row = InsertRow(mw_id, -1)
for n,v in ipairs{...} do
SetCell(mw_id, row, n, tostring(v))
end
end
FillRow("<","Стоп:",string.format("%.1f %%",indStPrc)," >")
FillRow("<","Лимит:",limValue," >")
FillRow("x2"," I I"," >>","M")
SetColor(mw_id, 3, 3, green, -1, green, -1)
SetColor(mw_id, 2, 3, -1, RGB(0,0,255), -1, RGB(0,0,255))
SetColor(mw_id, 3, 4, yellow, -1, yellow, -1)
SetColor(mw_id, 3, 1, -1, -1, -1, -1)
SetTableNotificationCallback(mw_id, event_callback)
end
_LEV_ написал: На ДЕМО QUIK 12.2.0.37 при ручной продаже акции в шорт - выдает сообщение "Данный инструмент запрещен для операции шорт"
Такая же картина в 10 и 11 версиях, шортить "Юниор" не дает ничего. При этом, в 10-ой версии, в таблице "Купить/продать" одни нули, а в 11-ой, в таблице "Позиции по инструментам" тикеры повторяются дважды, с датой расчетов сегодня и завтра.
function main()
file = io.open(getScriptPath().."\\Карман.tri", "a+") -- Файл транзакций
tri = file:read("*a")
if not tri:match("%[") then
for rec in tri:gmatch("[^\n]+") do
rec = rec:gsub(";","\n")
rec = rec:gsub("([%g ]+)="," ['%1'] =")
rec = rec:gsub("=([%g ]*)","= '%1',")
rec = rec:gsub(",\n$","")
rec = "\ntransaction = {\n"..rec.."\n }\n"
file:write(rec)
end
end
file:flush()
file:close()
end
Использование: 1) Сохранить содержимое "Кармана транзакций" в файл Карман.tri 2) Запустить скрипт. 3) Забрать результат в том же файле.
У меня проще. Выставил заявку - автоматом стоп-лосс. Точнее половина «Тейк-профит и стоп-лимит». Приоритет у позиции. Опция удвоения, на отскок/пробой. Простой, как кувалда.
2.5. Таблицы (стр.36) "Вы можете рассматривать таблицу как динамически выделяемый объект; ваша программа работает только со ссылками (указателями) на них. Lua никогда не прибегает к скрытому копированию или созданию новых таблиц."
Anton Belonogov, произошло это однажды, два раза за 3 минуты, но удивило то, что передвинулась только одна заявка, вопреки утверждениям в руководстве и на этом форуме: https://forum.quik.ru/messages/forum10/message56834/topic6588/#message56834 Поэтому и возник вопрос № 2: на "боевом" такое возможно? Нужен "костыль" в коде, или там не бывает подобных нежданчиков? Версия QUIK 10.1.2.2. Только зачем она Вам, или сервер по-разному обрабатывает заявки терминалов разных версий? Случилось это 14 числа.
Если бы не проблема зависания, можно было бы скопировать отчет в текстовый файл, и раскидать инструменты скриптом по отдельным файлам .csv, с подсчетом баланса по каждому инструменту. А так, ждать реализации пожелания можно очень долго.
Столкнулся с неожиданным поведением MOVE_ORDERS и OnTransReply. Пришел reply с номером заявки '0'. Скрипт передвигал заявки, всё шло штатно, как вдруг, откуда ни возьмись, появился
Цитата
Перестановка заявок завершена успешно. New Order1 ID: 0, new Order2 ID: 1892958324056452578.
Скрипт, получив от OnTransReply status 3, запоминает номера заявок и пытается их передвинуть, что у него, естественно, не получается. Это повторяется дважды в течение трёх минут. Отсюда два вопроса: 1). Это как пониматьвашу, господа разработчики? 2). Такое поведение вашего продукта возможно только на учебном quik, или на боевом также может произойти такой пердюмонокль?
sao написал: Прошу разработчиков зарегистрировать пожелание:Ни в коем случае не делать никаких trans_id=nil !!
В руководстве четко прописано что поле trans_id имеет тип NUMBER. Соответственно программисты (в частности я) в своих скриптах считают что в этом поле может быть только число. В Lua значение nil это отдельный тип переменной, и например выражение t.trans_id>0 приведет к ошибке и вылету скрипта. Почему я должен перелопачивать десятки тысяч строк кода в десятках своих скриптов и вводить множество ненужных проверок, из-за того, что кому-то вдруг приспичило получать nil?
Есть же отрицательные числа. Если значение ещё не определенных параметров будет отрицательным, ничего перелопачивать не придётся.
Как в Quik включить получать обезличенные сделки юр. лиц., Заметил что сделки на срочном рынке приходят только физ лиц как включить отображение сделок юр лиц?
Старатель написал: До сих пор нет надёжного решения обсуждаемой проблемы.
Цитата
Серж написал: Состояние скрипта при следующем запуске зависит от того успел ли он становиться до сохранения его статуса (остановлен/запущен) в файл scripts.dat.
Так это и есть решение проблемы. if msg == QTABLE_CLOSE then sleep(time) OnStop() end Нужно только, чтобы "time" было больше периода "бесконечного" цикла main, или времени возвращаемого OnStop.
Чтобы кнопки были активны, на панели торговли должны быть указаны количество "Q", и счет "A". Отобразить эти поля в настройках стакана >Панель торговли>Цена количество и счет.