QUIK 7.16,,,,,, Выставляется автоматически заявка в Квик
Пользователь
Сообщений: Регистрация: 08.02.2015
15.04.2018 18:43:49
День добрый. Такая ситуация возможна, если Квик начинает показывать неправильную позицию в портфеле. Робот пытается ее закрыть. Это случай крайне редкий. Бывает такое. Девятого вообще брокер лежал с неправильными позами в течении дня
Удаление транзакции, удаление транзакции без ID
Пользователь
Сообщений: Регистрация: 08.02.2015
06.07.2015 19:05:43
да, все логично. Спасибо, вопрос снят.
Удаление транзакции, удаление транзакции без ID
Пользователь
Сообщений: Регистрация: 08.02.2015
06.07.2015 18:34:05
Подскажите как удалить транзакцию без ID. При создании пользователем заявок руками они приходят без ID. Вопрос как их удалить? Если при попытке выставь ноль и пустоту выводит: Error del.Trans: Неправильно указан идентификатор транзакции: "0" или Error del.Trans: Не указан идентификатор транзакции
код
Код
local trans_params = {
CLIENT_CODE = Account,
CLASSCODE = Class_Code,
SECCODE = Sec_Code,
ACCOUNT = Account,
TRANS_ID = "" , -- что сюда подпихнуть
ORDER_KEY=tostring(ord_num),
ACTION = "KILL_ORDER"
}
Изучать qpile или lua?, Изучать qpile или lua?
Пользователь
Сообщений: Регистрация: 08.02.2015
02.07.2015 21:13:08
Цитата
Виталий пишет: Я не знаю ни языка qpile, ни lua, но мне надо сделать программу, воспроизводящую звуковой файл при пересечении двух АМА с разными периодами. Какой из этих языков лучше изучить для реализации данной программы?
:)))) Мне нужно поменять резину на колесах. Какое монтажное оборудование посоветуете? А если серьезно, то пару тыров заплатить программеру и забыть.
отслеживание нажатия клавиши
Пользователь
Сообщений: Регистрация: 08.02.2015
02.07.2015 15:56:15
Цитата
Alexey K пишет: Хочу чтобы скрипт отслеживал определенное нажатие клавиши. Можете подсказать где и что почитать, чтобы сделать это без лишних заморочек?
Если нужно отследить с вашей таблицы, то поможет то, что предлагает , а если нужно круче , то придется писать приложение или подключать стороннюю библиотеку.
ТТП Таблицы текущих параметров, где взять параметры
Пользователь
Сообщений: Регистрация: 08.02.2015
02.07.2015 15:35:08
Цитата
Николай Камынин пишет: все же попробуйте, чудеса бывают и в квике.
Написал в Арку. Сказали, параметры можно получить через экспорт по DDE. Получил. Интересующий меня параметр сменил название с "CLOSING_AUCTION_PRICE " на "auctprice". Всем большое спасибо. Вопрос закрыт.
Кому заказать робота, Попытка разобраться куда и к кому идти за торговым роботом
Пользователь
Сообщений: Регистрация: 08.02.2015
01.07.2015 21:11:59
1) Lua 2) частник кормит себя, а фирма оплачивает: директора, бухгалтера и понты :) 3) да. Управление параметрами робота и т.д. все на хорошем уровнена. Тут все просто, чем дубовей и проще тем дешевле, чем сложней тем дороже. Хотя , что-то дубовое очень сложно представить. Sib-algo.ru пишут по приемлемым ценам.
ТТП Таблицы текущих параметров, где взять параметры
Пользователь
Сообщений: Регистрация: 08.02.2015
01.07.2015 21:01:05
Цитата
Николай Камынин пишет: А вы этот параметр в какое время читаете?
с 18:40, но это не суть так как цифра есть в ТТП Квика. А по запросу выводит nil. .PARAM_VALUE результат не изменит. Нет большой разницы как вывести данные в виде числа или строки. В текущей ситуации лучше строка так .PARAM_VALUE вместо пустоты вернет ноль.
ТТП Таблицы текущих параметров, где взять параметры
Пользователь
Сообщений: Регистрация: 08.02.2015
01.07.2015 19:32:23
нужно полный список параметров: LCLOSEPRICE, LAST, OPENPERIODPRICE и т.д. не могу получить CLOSING_AUCTION_PRICE getParamEx(Class_Code, Sec_Code, "CLOSING_AUCTION_PRICE").param_image возвращает пустое значение
графический интерфейс, библиотека для создания формы ввода
Пользователь
Сообщений: Регистрация: 08.02.2015
17.06.2015 15:45:55
День добрый. Подскажите какая сейчас актуальная и без багов библиотека для реализации графического интерфейса(формы) для ввода данных пользователем в рамках Quik Lua? Так же интересует библиотека для считывания кодов нажатых клавиш.
getDataSourceInfo(), запрос таймфрейма и кода инструмента
Пользователь
Сообщений: Регистрация: 08.02.2015
04.06.2015 01:06:54
Вопрос решил.
tab={} tab=getDataSourceInfo() nash_interval=tab["interval"] -- или tab.interval вернет ТФ индикатора
проблема была в том , что не была создана таблица :)
getDataSourceInfo(), запрос таймфрейма и кода инструмента
Пользователь
Сообщений: Регистрация: 08.02.2015
04.06.2015 00:21:52
подскажите как получить таймфрем индикатора? пробывал: getDataSourceInfo("interval") getDataSourceInfo(interval) getDataSourceInfo().interval
поставил в 32 строке local param=tostring(Settings.line[1].Name) все равно возвращает ошибку: ...\LuaIndicators\file03.lua:32: attempt to index field 'line' (a nil value)
получение параметров индикатора, обращение к line
Пользователь
Сообщений: Регистрация: 08.02.2015
15.05.2015 13:00:06
есть код индикатора
Код
Settings=
{
Name = "AAAA",
Smooth=10,
line =
{
{
Name = "Hi",
Color = RGB(255, 0, 0),
Type = TYPE_LINE,
Width = 2
}
}
}
function Init()
return 1
end
function write_name(p)
file=io.output("d:\\name1.ini") -- getScriptPath()..
d=file:write(p)
file:close()
end
function OnCalculate(index)
local ur=0
local param=tostring(Settings.line.Name)
if tonumber(T(index).day)==15 then
write_name(param)
end
return ur
end
не могу получить имя линии. получение имени индикатора Settings.Name вернет "AAAA" по идеии Settings это массив и должно быть Settings["line"][1]["Name"] но это не работает возвращает nil Господа, подскажите как получить название линии?
утро, что происходит утром? Что обнуляется и возвращает nil
Пользователь
Сообщений: Регистрация: 08.02.2015
24.04.2015 11:11:10
забыл написать функция read_param_file() передает время в глобальную переменную old_can
утро, что происходит утром? Что обнуляется и возвращает nil
Пользователь
Сообщений: Регистрация: 08.02.2015
24.04.2015 11:04:03
У меня возникает проблема по утрам. При запущенном скрипте. Если скрипт запустить потом или перезапустить скрипт, устроить дисконект, выключить Квик никаких проблем нет. Только утро и все! Функция create(time_can) выполняется для всех свечей графика, а должна выполняться только для новой свечи.
Код
is_run = true
Class_Code = "SPBFUT"
Sec_Code="RIM5"
TF=INTERVAL_M30
old_can=20150422100 -- время последней обработанной свечи
function main()
read_param_file() -- считываем время свечи из файла
ds = CreateDataSource(Class_Code, Sec_Code, TF)
sleep(200)
while is_run do
sleep(1000)
if isConnected()==1 and getInfoParam("SERVERTIME")~=nil then
sleep(1000)
local n_last_candle=ds:Size()
local t_last_candle=tonumber(ds:T(n_last_candle).year..Chisla(ds:T(n_last_candle).month)..Chisla(ds:T(n_last_candle).day)..Chisla(ds:T(n_last_candle).hour)..Chisla(ds:T(n_last_candle).min))
if tonumber(t_last_candle)~=tonumber(old_can) then
local p_new_candles=new_candle(n_last_candle) -- получение новых свечей
for i=n_last_candle-p_new_candles, n_last_candle do
time_can=tostring(ds:T(i).year)..Chisla(ds:T(i).month)..Chisla(ds:T(i).day)..Chisla(ds:T(i).hour)..Chisla(ds:T(i).min)
create(time_can) -- действия над свечами
end
old_can=t_last_candle
save_time(old_can) --сохранение в файл времени последней свечи
end
end
end
ds:Close()
end
-- функция возвращает кол-во новых свечей от текущей
function new_candle(n_last_candle)
local p_new_candles=0
for i=0,n_last_candle-1 do
if tonumber(old_can)<tonumber(tostring(ds:T(n_last_candle-i).year)..Chisla(ds:T(n_last_candle-i).month)..Chisla(ds:T(n_last_candle-i).day)..Chisla(ds:T(n_last_candle-i).hour)..Chisla(ds:T(n_last_candle-i).min)) then
p_new_candles=i
else
break
end
end
return p_new_candles
end
function OnStop(stop_flag)
is_run=false
stop_flag=1
end
Цена последнейсделки
Пользователь
Сообщений: Регистрация: 08.02.2015
24.04.2015 10:38:22
если не было сделок в текущем дне, то вернет 0. Квик не помнит вчерашних сделок. Если по инструменту на момент проверки могут не быть сделки ввиду малой ликвидности инструмента пользуйтесь CreateDataSource и запрашивайте цену из последней свечи.
блокирование оператора, премодерация действий пользователя скриптом
Пользователь
Сообщений: Регистрация: 08.02.2015
23.04.2015 22:52:39
можно ли реализовать премодерацию действий пользователя скриптом? Я имею ввиду: не давать пользователю проводить сделки, устроить дисконект и т.д.
CreateDataSource, перебор большого кол-ва источников данных
Пользователь
Сообщений: Регистрация: 08.02.2015
12.04.2015 01:47:35
Всё задачу решил. Тему можно удалить и так много про CreateDataSource
Сергей Радченко пишет: просьба добавить возможности: 1 менять цвет у линии в индикаторе 2 Также добавьте отображение индикатора в виде баров, свечей, гистограммы. 3 Будет супер если появится возможность рисовать индикаторы, графики без привязки ко времени.
1. Менять цвет уже сейчас можно. или имеется в виду динамическое изменение цвета? 2. мы уже работаем над этим 3. в этом пункте не совсем понятно. уточните пожалуйста на примере.
хотелось бы увидеть возможность у одной линии менять цвет(менять динамически). Как пример Просьба реализовать возможности реализовать цветовые зоны по типу: залить цветом между линий индикатора пример также просьба реализовать не временную шкалу для реализации нестандартных свечей по типу: формировать свечу при достижении объема(все свечи на графике с одинаковым объемом наторговки), хейкинаши и т.д. дайте возможность формировать индикаторы в виде свечей и гистограмм.
Спасибо за то ,что стараетесь улучшать платформу.
CreateDataSource, не грузятся данные при формир. через CreateDataSource
Дмитрий пишет: И при этом графики в терминале не открыты.
А Вы до этого их открывали?
Так это уже обсуждалось:
спасибо
CreateDataSource, перебор большого кол-ва источников данных
Пользователь
Сообщений: Регистрация: 08.02.2015
10.04.2015 17:53:05
суть задачи состоит в том ,что нужно во множестве инструментов взять свечку(данные) из прошлого и обработать в цикле все инструменты беря по одной свече. И так нужно прошерстить всю историю. Сейчас реализовано это так:
function main() while is_run do sleep(10000) -- по сути это блок проверки на получение новых свечек через каждые 10сек for i=1, кол-во новых свечек (глубина просмотра инструментов) do for j=1, #mas do -- mas массив инстркментов f(класс, инст.mas[j] , время итой свечи, INTERVAL_H1) end end end end
function f(class, sec_code, time_b, INTERVAL_H1) local close_b,oi=0,0 local ds_price=CreateDataSource(class, sec_code, INTERVAL_H1) --ds_opt_price:SetEmptyCallback() sleep(100) local ds_oi=CreateDataSource(class, sec_code, INTERVAL_H1, "NUMCONTRACTS") -- ds_oi:SetEmptyCallback() sleep(100)
local time_candle=tostring(ds_price:T(1).year)..Chisla(ds_price:T(1).month)..Chisla(ds_price:T(1).day)..Chisla(ds_price:T(1).hour)..Chisla(ds_price:T(1).min).."00"
if tonumber(time_candle)>tonumber(time_b) then -- свечей нет
else for i=1 , tonumber(ds_price:Size()) do time_candle=tostring(ds_price:T(i).year)..Chisla(ds_price:T(i).month)..Chisla(ds_price:T(i).day)..Chisla(ds_price:T(i).hour)..Chisla(ds_price:T(i).min).."00" if tonumber(time_b)>=tonumber(time_candle) then close_b=ds_price:C(i) else break end end
for i=1 , ds_oi:Size() do time_candle=tostring(ds_oi:T(i).year)..Chisla(ds_oi:T(i).month)..Chisla(ds_oi:T(i).day)..Chisla(ds_oi:T(i).hour)..Chisla(ds_oi:T(i).min).."00" if tonumber(time_b)>=tonumber(time_candle) then oi=ds_oi:C(i) else break end end end ds_opt_price:Close() ds_opt_oi:Close()
return close_b,oi end
В массиве mas около 200 интсрументов и проходит около 10 свечек по всем инст. и через какое-то время Quik перестает обновлять котировки, стакан. Возникает ощущение ,что он в дисконнекте , но пишет ,что коннект есть. Вопрос как получить предыдущие данные по большому кол-ву инст. и не положить Quik?
CreateDataSource, не грузятся данные при формир. через CreateDataSource
Сергей Радченко пишет: лучше сделать так как правильно и надежно. Мой пример показал, что данные могут не поступать и лучше перестраховываться
А может мой способ и является правильным? Если мне нужны только данные, накопленные до момента вызова CreateDataSource, без последующих обновлений. А использование коллбэков сильно тормозит работу, если речь идет о получении данных по большому числу инструментов. В Вашем же случае проблема была в том, что вы пытались обращаться к данным еще до того, как терминал успел загрузить их с сервера, а использование коллбэков отнюдь не ускорит этот процесс.
благодоря использованию колбека можно не только обновить данные, но для меня самое важное проверить их. У меня массив инструментов в цикле и время тоже важно ,но еще важнее получить данные. А вдруг задержки в 100 будет мало. Мне тоже не приятно использовать слип и обновлять данные без необходимости. Это все только для того ,чтоб получить правильные и полные данные. В моем случае с точки зрения логики CreateDataSource должен был получить массив свечей и только после этого перейти дальше по коду. А он это не сделал и побежал дальше. Я это увидел при тесте не поверив частично нулевым данным. Колбек это способ увидеть нули и проверить данные еще раз. Да плата за это время. У меня наверно теперь час будет индюк рассчитываться :)
CreateDataSource, не грузятся данные при формир. через CreateDataSource
Sergey Gorokhov пишет: Если в течении сессии график вообще не открывался, то CreateDataSource вообще не сработает в этом случае нужно заказать данные. Это можно сделать либо открыв окно с графиком, либо вызвав функцию ds:SetEmptyCallbac() один раз.
А я успешно получаю данные с использованием только CreateDataSource, без вызова SetEmptyCallback или SetUpdateCallback. Причем без них работает все гораздо быстрей. И при этом графики в терминале не открыты. Это "ошибка" в реализации QLua? Или все же так и должно быть?
Правда я проверяю эти данные только 1 раз. Вполне возможно, что после загрузки в терминал текущего состояния графика со всей историей, дальше без использования одной из последних двух функций новые свечки уже не будут поступать.
да, работать будет и без открытия графика, но лучше сделать так как правильно и надежно. Мой пример показал, что данные могут не поступать и лучше перестраховываться. Одну строчку прописать легко. Спасибо, команде поддержки Квика.
CreateDataSource, не грузятся данные при формир. через CreateDataSource
SetUpdateCallback позволяет генерить событие если свечка изменилась, а если не изменилась , то ничего не делать. Да это здорово для обработки текущей свечи. Но я больше склоняюсь к получению данных из таблиц данных через getParamExкак пример getParamEx ("SPBOPT", mas_opt_par["code"], "NUMCONTRACTS").param_value
Если Вы используете getParamEx зачем Вам CreateDataSource? Да еще и с интервалом 15. Если для того чтобы заказать данные то нужно использовать тиковый интервал и подписаться через SetEmptyCallback()
getParamEx позволяет получить только текущие(последние) данные , а CreateDataSource я использую для получения прошлых данных. Правильно ли я понял, что нужно написать так: ds=CreateDataSource(Class_Code, Sec_Code, INTERVAL_M15) while ds:SetEmptyCallbac()==false do ds=CreateDataSource(Class_Code, Sec_Code, INTERVAL_M15) end
это позволит убедиться ,что данные были отправлены, а если нет, то ds:SetEmptyCallbac() вернет false и попытка создать таблицу будет повторена
не работает пишет: attempt to call method 'SetEmptyCallbac' (a nil value)
CreateDataSource, не грузятся данные при формир. через CreateDataSource
SetUpdateCallback позволяет генерить событие если свечка изменилась, а если не изменилась , то ничего не делать. Да это здорово для обработки текущей свечи. Но я больше склоняюсь к получению данных из таблиц данных через getParamExкак пример getParamEx ("SPBOPT", mas_opt_par["code"], "NUMCONTRACTS").param_value
Если Вы используете getParamEx зачем Вам CreateDataSource? Да еще и с интервалом 15. Если для того чтобы заказать данные то нужно использовать тиковый интервал и подписаться через SetEmptyCallback()
getParamEx позволяет получить только текущие(последние) данные , а CreateDataSource я использую для получения прошлых данных. Правильно ли я понял, что нужно написать так: ds=CreateDataSource(Class_Code, Sec_Code, INTERVAL_M15) while ds:SetEmptyCallbac()==false do ds=CreateDataSource(Class_Code, Sec_Code, INTERVAL_M15) end
это позволит убедиться ,что данные были отправлены, а если нет, то ds:SetEmptyCallbac() вернет false и попытка создать таблицу будет повторена
CreateDataSource, не грузятся данные при формир. через CreateDataSource
Сергей Радченко пишет: если воткнуть sleep(100) в самом начале то выведет
Да на закачку данных требуется время, так и должно быть.
Цитата
Сергей Радченко пишет: Как лучше получать данные если иструментов для работы в цикле много, и обращения частые? У меня задача тащить по одной свечке из множества инст. и хотелось бы получать правильные данные.
Лучше, ловить данные в колбеке SetUpdateCallback
Как определить оптимальное время на закачку? Просто если поменять инст. на RIM5 проблем нет. Куда втыкать sleep до CreateDataSource или после и сколько ставить единиц? Как определить полноту передачи массива свечей?
SetUpdateCallback позволяет генерить событие если свечка изменилась, а если не изменилась , то ничего не делать. Да это здорово для обработки текущей свечи. Но я больше склоняюсь к получению данных из таблиц данных через getParamEx как пример getParamEx ("SPBOPT", mas_opt_par["code"], "NUMCONTRACTS").param_value
CreateDataSource, не грузятся данные при формир. через CreateDataSource
Пользователь
Сообщений: Регистрация: 08.02.2015
08.04.2015 11:08:39
не грузятся данные при формировании таблицы свечей через CreateDataSource.
function main() -- если сюда воткнуть sleep(100) то выведет Class_Code = "SPBOPT" Sec_Code="RI75000BP5" ds=CreateDataSource(Class_Code, Sec_Code, INTERVAL_M15) t=getParamEx(Class_Code, Sec_Code, "LONGNAME").param_image local s=0 s=ds:Size() message("ds:Size()="..s.." name "..t,1)
ds:Close()
while is_run do sleep(1000)
end end
ответом будет ds:Size()=0 name RTS-6.15M150415PA 75000
если воткнуть sleep(100) в самом начале то выведет ds:Size()=949 name RTS-6.15M150415PA 75000
Вопрос. Как лучше получать данные если иструментов для работы в цикле много, и обращения частые? У меня задача тащить по одной свечке из множества инст. и хотелось бы получать правильные данные. Может какую проверку написать для проверки правильности загруженных данных?
Пожелания по квику и LUA
Пользователь
Сообщений: Регистрация: 08.02.2015
08.02.2015 23:10:49
просьба добавить возможности: 1 менять цвет у линии в индикаторе 2 Также добавьте отображение индикатора в виде баров, свечей, гистограммы. 3 Будет супер если появится возможность рисовать индикаторы, графики без привязки ко времени.
CreateDataSource, какое правильное расположение функции CreateDataSource?
Пользователь
Сообщений: Регистрация: 08.02.2015
08.02.2015 17:12:37
где правильно подписываться на источник данных при использовании одного инструмента и одного ТФ? Делать это в каждой функции и закрывать в конце или разместить подписку в function OnConnected() ds = CreateDataSource(Class_Code, Sec_Code, INTERVAL_M1) а закрыть подписку function OnStop(stop_flag) ds:Close()