1) Открываем график цены и объёма например Сбера ... у графика Сбера в пункте 'Идентификатор' выставляем abcdДобавляем в новой области индикатор AAA2 ... смысл которого просто повторить график цены.
Код
Settings=
{
Name = "AAA2",
Name1 = "abcd",
val_r = 0,
line =
{
{
Name = "MA",
Color = #ff0000,
Type = TYPE_LINE,
Width = 2
}
}
}
function Init()
return 1
end
function OnCalculate(index)
local q1 = 0
t1, n1, l1 = getCandlesByIndex(Settings.Name1, 0, index-1, 1)
q1 = Settings.val_r
if t1[0].close > 0 then
q1 = t1[0].close
Settings.val_r = q1
end
return q1
end
Получаем картинку:
Видим что индикатор пишет посл. значение с дробной частью(например 306.70). В тоже время 'перекрестие' что на всплывающей легенде, что на шкале даёт значения без дробной части то бишь 302. Как сию оказию решить?
2) можно ли получить список идентификаторов графиков и индикаторов в системе? Если нет то можно пожелание зарегистрировать.
как за AddLabel() отметку цены
Пользователь
Сообщений: Регистрация: 04.02.2015
20.12.2021 18:12:25
Quik 9.3.1.11. Win10 - 64
Хочется на график вывести красоту типа "Отметка цены"(хвост понравился) и подвигать ее через SetLabelParams() - 1.jpg берем график Si тег графика = "jbd"
Код
Setup = {
class = "SPBFUT",
sec = "SiH2"
}
local tostring__ = tostring
function tostring(x)
return tostring__(math.tointeger(x) or x)
end
function metka(pos, price)
local h,m,t = string.match(getInfoParam("SERVERTIME"),"(%d%d)%p(%d%d)%p(%d%d)")
local time_pos = h..m..t
local d,m,y = string.match(getInfoParam("TRADEDATE"),"(%d%d)%p(%d%d)%p(%d%d%d%d)")
local date_pos = y..m..d
label_params = {
TEXT = tostring(price),
IMAGE_PATH = "",
ALIGNMENT = "LEFT",
YVALUE = price,
DATE = date_pos,
TIME = time_pos,
R = 80,
G = 80,
B = 180,
TRANSPARENCY = 0,
TRANSPARENT_BACKGROUND = 1,
FONT_FACE_NAME = "Arial",
FONT_HEIGHT = 10,
HINT = tostring(pos)
}
return label_params
end
function main()
local curp = getParamEx2(Setup.class, Setup.sec, "LAST").param_value+0
up_label_id = AddLabel("jbd", metka("UP", curp+100))
dwn_label_id = AddLabel("jbd", metka("DWN", curp-100))
SetLabelParams("jbd", up_label_id, metka("UP", curp+100))
SetLabelParams("jbd", dwn_label_id, metka("DWN", curp-100))
end
получаем 2.jpg. Это обычная метка без хвоста. Вопрос можно ли хвост приделать как у "Отметка цены". Пока нашел такой вариант... Кидаем на график парочку "Отметка цены" и перебором находим их.
Код
Setup = {
class = "SPBFUT",
sec = "SiH2"
}
local tostring__ = tostring
function tostring(x)
return tostring__(math.tointeger(x) or x)
end
function metka(pos, price)
local h,m,t = string.match(getInfoParam("SERVERTIME"),"(%d%d)%p(%d%d)%p(%d%d)")
local time_pos = h..m..t
local d,m,y = string.match(getInfoParam("TRADEDATE"),"(%d%d)%p(%d%d)%p(%d%d%d%d)")
local date_pos = y..m..d
label_params = {
TEXT = tostring(price),
IMAGE_PATH = "",
ALIGNMENT = "LEFT",
YVALUE = price,
DATE = date_pos,
TIME = time_pos,
R = 80,
G = 80,
B = 180,
TRANSPARENCY = 0,
TRANSPARENT_BACKGROUND = 1,
FONT_FACE_NAME = "Arial",
FONT_HEIGHT = 10,
HINT = tostring(pos)
}
return label_params
end
function search_metka(idmetka, inum)
local q = GetLabelParams(idmetka, inum)
if q ~= nil then
return inum
end
return -1
end
function main()
local curp = getParamEx2(Setup.class, Setup.sec, "LAST").param_value+0
up_label_id = -1
dwn_label_id = -1
local q = 0
for i = 0, 100, 1 do
q = search_metka("jbd", i)
if q ~= -1 then
if up_label_id < 0 then
up_label_id = q
elseif dwn_label_id < 0 then
dwn_label_id = q
break
end
end
end
SetLabelParams("jbd", up_label_id, metka("UP", curp+100))
SetLabelParams("jbd", dwn_label_id, metka("DWN", curp-100))
end
Получаем 3.jpg
Но так делать мне кажется это не комильфо ...
Status это работает ?
Пользователь
Сообщений: Регистрация: 04.02.2015
11.12.2020 11:37:29
В рабочую торговую сессию при активном инструменте Status = getParamEx("SPBFUT", "SiZ0", "STATUS ").param_value Выдает: Status = 0.0
Шоткат для LUA скриптов
Пользователь
Сообщений: Регистрация: 04.02.2015
09.12.2020 17:59:28
Шоткат ctrl-f11 открывает список QPILE скриптов Шотката для открытия списка LUA скриптов нету! Можно добавить ?
Подгонка по содержимому или названию в таблице
Пользователь
Сообщений: Регистрация: 04.02.2015
08.12.2020 16:37:35
Таблица созданна через CreateWindow(t_id).
1. Запускаю все отлично 2. Делаю подобрать ширину столбцов и ширина столбцов вместе с названием подгоняется не по названию столбцов, а по содержимому ячеек. Вариант подгонки ширины столбцов по содержимому ячеек это неплохо, но можно ли как то сделать подгонку по названию столбцов ?
getCandlesByIndex опа опа а что это у нас тут, getCandlesByIndex опа опа а что это у нас тут
Пользователь
Сообщений: Регистрация: 04.02.2015
30.07.2020 15:22:16
1) Открываем график ставим ему идентификатор getCandlesByIndex() - показывает 3677 свечей 2) Ставим в "Диаграмма" -> "Диапазон данных" -> Ставим последние 500 интервалов и ставим фильтр времени "10:00 - 18:40" getCandlesByIndex() - 3677 То есть getCandlesByIndex() просто тупо выводит все свечи и никак не фильтруется ? Ежели так то можно как-то добавить фильтрацию от "Диаграмма" -> "Диапазон данных".
Таблица не обновляется
Пользователь
Сообщений: Регистрация: 04.02.2015
07.02.2020 16:13:53
скрипт у меня находится в папке c!Quik!scripts Из "Руководство пользователя Интерпретатора языка Lua" взял методом copy&paste 2 файла: quik_table_wrapper.lua и ntime.lua. Файл table_object.lua обрезал до Запуск и ... таблица пустая а вот этот код(в ссылке строки 43-53) выдает 2 и 4 а должен 1 и 3
row = t:AddLine()
if SetCell(t.t_id, row, 0, "time") == true then
message("1")
else
message("2")
end
if t:SetValue(row,"ai","ai") == true then
message("3")
else
message("4")
end
SetCell(): Функция возвращает «true» в случае успешного завершения, иначе – «false».
как перевести rts в рубли
Пользователь
Сообщений: Регистрация: 04.02.2015
05.02.2020 23:08:13
1) Нашел формулу в интернете 0.02* курс ЦБР*фьюч RTS. Смотрел спецификации не нашел этой формулы,решил работать через квик. 2) Нашел в квике " стоимость шага цены"(12.56008) + "стоимость шага цены в валюте"(0.2) . Что делать с ними не понял. Например фюч ртс 156730 сколько это в руб(формула). так и не понял.
2-3-4 как считать будем индикаторы
Пользователь
Сообщений: Регистрация: 04.02.2015
18.01.2020 21:45:04
Беру график цены одного инструмента в стакане и правой кнопкой делаю график ... потом добавляю цену другого инструмента прям на этот график... Один график привязан к левой шкале графику другой к правой... Вопрос ! Может ли индикатор вытащить С() для 1 графика и второго(при том что 2-3 и т.д. инструментов рисуются в одной области) и как это сделать ? Пример: Выбираю rts стакан делаю построить график .. добавляю к нему график в эту же зону рисования например si. И накидываю индикатор... как он может ловить O,H,L,C,T для каждого инструмента и строить свой график
Баг в таблице котировки фьючей ?, Баг в таблице котировки фьючей ?
Пользователь
Сообщений: Регистрация: 04.02.2015
11.07.2019 15:25:14
Поставил терминал от брокера (в нем есть преднастроенный info.wnd с графиками, таблицами и т.д.). В таблице "котировки фьючерсов" удаляю все и делаю один инструмент rts9-19. Сохраняю info.wnd. Оставляю терминал включ. на пару недель(иногда комп перезагружаю) и захожу на вкладку и вижу что rts9-19 уже не один ... P.S. пробовал удалять все графики, все вкладки и таблицы и делал одну эту таблицу и один график + стакан и через пару дней опять левые инструменты набежали...
Квик 7.27.2.1 Кстати и год и 2 назад(тогда были другие версии квика) такая же проблема ... вот решился описать эту проблему.
Опционный модуль неверно считает ?
Пользователь
Сообщений: Регистрация: 04.02.2015
27.06.2019 15:20:49
В разработчике стратегий выбрал например купленый стрэдл. Факт. показывает одну прибыльность(тету вег и т.д.) по сценарию1 значения другие ... Вот картинка
Может ли луа-скрипт перезагружаться от сессии к сессии ???
Пользователь
Сообщений: Регистрация: 04.02.2015
18.03.2016 21:37:51
1) Может ли луа-скрипт перезагружаться от сессии к сессии ??? то есть запускаться как бы с нуля ? 2) как обьяснить такую картинку(ID транзакции 1,2,3 а дальше пусто - что(кто) это???) . Причем по скрипту это должно было в 19-00 - 19-20 но никак в 20-52 !!! Я допускаю лишь то что скрипт как бы заново запустился ... Да судя по схеме(если просто посчитать, а в теории должно быть 3 купленных си) у меня должен быть 0 !!!фьючей в 20-52,но по таблице портфель 3 си проданных фьюча(на момент 22-20) и маржа меняется. Че-то видать совсем нето с терминалом 6.17
видимо баг в getNumCandles и getCandlesByIndex
Пользователь
Сообщений: Регистрация: 04.02.2015
17.03.2016 12:07:06
Quik 6.17.3.6 Берем график любой, например si-6.16, накидываем(можно в новом окне) индикатор MACD(указываем в нем идентификатор например siq10 + включил опцию показ посл. значение) Временной интервал взял 10 минутки(не обязательно) Запускаем DebugView чтоб видеть PrintDbgStr Дальше Lua->Доступные скрипты и запускаем ниже описанную программу и получаем след. картинку: - В районе строк в DebugView = 500-1500 вывод в DebugView - останавливается - quik терминал наглухо зависает Перезагрузка терминала, компа роли не играет ... терминал виснет наглухо Естественно и без DebugView терминал виснет Я так вижу проблема в getNumCandles и getCandlesByIndex
function PrintDbgStr2(pds) PrintDbgStr(''..pds) end
function main()
t_info =AllocTable() AddColumn (t_info , 1, "T", true, QTABLE_STRING_TYPE,80) CreateWindow(t_info) for i=1,MAX_T_INFO do InsertRow(t_info , -1) end
while not_stopped do sleep(50) local t,n,l local smz = getNumCandles(tag) or 0 if smz > 2 then t,n,l = getCandlesByIndex(tag,0,smz-2,1) t1,n1,l1 = getCandlesByIndex(tag,0,smz-1,1) end
Почему графики в квик распечатываются ч/белыми ? ... тот же пайнт(любые в нем цветные картинки) печатает цветом(то есть дрова работают и в настройках дров разрешена печать цветом)...
снятие заявок ..., снятие заявок ...
Пользователь
Сообщений: Регистрация: 04.02.2015
18.03.2015 22:47:03
atri брал через atri = getItem("orders", t1[i]) дальше kill_order(atri) ... function kill_order(atri) local trans = { ["ACTION"] = "KILL_ORDER", ["CLASSCODE"] = atri.class_code, ["SECCODE"] = atri.sec_code, ["ACCOUNT"] = TRADE_ACC, ["CLIENT_CODE"]=CLIENT_CODE, ["ORDER_KEY"] = tostring(atri.order_num), ["TRANS_ID"] = tostring(atri.trans_id) } local res = sendTransaction(trans) PrintDbgStr('kill:'..atri.order_num..'@'..atri.trans_id) end
Получаем [508] kill:15125099165@0 Но заявка не снимается ...
P.S. заявку(не стоп-заявка!) ставил вручную через стакан(не используя луа)...
Как работает
Пользователь
Сообщений: Регистрация: 04.02.2015
16.03.2015 12:26:56
Кратенько: Нужно снять все заявки ... Нажимаем левую кнопку мыши и через установленный обработчик(методом SetTableNotificationCallback) на это нажатие выполянем kill_all_order() ... также установлен OnOrder()...OnTrade()
-- убираем 1 заявку function kill_order(atri) local trans = { ["ACTION"] = "KILL_ORDER", ....тыр-тыр } local res = sendTransaction(trans) end
local function fnorder(psecode,pflags) if psecode ~= sec then return false end if bit.band(pflags, 1)~=0 then return true end end
-- убираем все заявки function kill_all_order() local t1 = SearchItems("orders", 0, getNumberOf("orders") +1, fnorder,"sec_code,flags") if t1 ~= nil then for i = 1, #t1, 1 do atri = getItem("orders", t1[i]) kill_order(atri) end end end
Вопрос! 1) Во время работы kill_all_order() будут срабатывать OnOrder(),OnTrade() ? 2) Если выполняется OnOrder() остальные On...() ждут последовательно в очереди или пришло событие начинаем отрабатывать ? 3) Нельзя ли это осветить в документации ?
Как насчет пинга?
Пользователь
Сообщений: Регистрация: 04.02.2015
01.03.2015 22:13:36
Раньше серваки одного брокера(их у него не меньше 4) мог пинговать для уменьшения лага ... терь пинги брокер блокирует ... Добавьте в квик возможность пинговки серваков хотя бы через меню списка серверов ....