Сергей Радченко (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
QUIK 7.16,,,,,, Выставляется автоматически заявка в Квик
 
День добрый. Такая ситуация возможна, если Квик начинает показывать неправильную позицию в портфеле. Робот пытается ее закрыть. Это случай крайне редкий. Бывает такое. Девятого вообще брокер лежал с неправильными позами в течении дня
Удаление транзакции, удаление транзакции без ID
 
да, все логично. Спасибо, вопрос снят.
Удаление транзакции, удаление транзакции без ID
 
Подскажите как удалить транзакцию без 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?
 
Цитата
Виталий пишет:
Я не знаю ни языка qpile, ни lua, но мне надо сделать программу, воспроизводящую звуковой файл при пересечении двух АМА с разными периодами. Какой из этих языков лучше изучить для реализации данной программы?
:)))) Мне нужно поменять резину на колесах. Какое монтажное оборудование посоветуете?
А если серьезно, то пару тыров заплатить программеру и забыть.
отслеживание нажатия клавиши
 
Цитата
Alexey K пишет:
Хочу чтобы скрипт отслеживал определенное нажатие клавиши. Можете подсказать где и что почитать, чтобы сделать это без лишних заморочек?
Если нужно отследить с вашей таблицы, то  поможет то, что предлагает Николай Камынин , а если нужно круче , то придется писать приложение или подключать стороннюю библиотеку.
ТТП Таблицы текущих параметров, где взять параметры
 
Цитата
Николай Камынин пишет:
все же попробуйте, чудеса бывают и в квике.
Написал в Арку. Сказали, параметры можно получить через экспорт по DDE. Получил. Интересующий меня параметр сменил название с "CLOSING_AUCTION_PRICE " на "auctprice". Всем большое спасибо. Вопрос закрыт.
Кому заказать робота, Попытка разобраться куда и к кому идти за торговым роботом
 
1) Lua
2) частник кормит себя, а фирма оплачивает: директора, бухгалтера и понты :)
3) да. Управление параметрами робота и т.д. все на хорошем уровнена. Тут все просто, чем дубовей и проще тем дешевле, чем сложней тем дороже. Хотя , что-то дубовое очень сложно представить.
Sib-algo.ru пишут по приемлемым ценам.
ТТП Таблицы текущих параметров, где взять параметры
 
Цитата
Николай Камынин пишет:
А вы этот параметр в какое время читаете?
с 18:40, но это не суть так как цифра есть в ТТП  Квика. А по запросу выводит nil.
.PARAM_VALUE результат не изменит. Нет большой разницы как вывести данные в виде числа или строки. В текущей ситуации лучше строка так .PARAM_VALUE вместо пустоты вернет ноль.
ТТП Таблицы текущих параметров, где взять параметры
 
нужно полный список параметров: LCLOSEPRICE, LAST, OPENPERIODPRICE и т.д.
не могу получить CLOSING_AUCTION_PRICE
getParamEx(Class_Code, Sec_Code, "CLOSING_AUCTION_PRICE").param_image  возвращает пустое значение
графический интерфейс, библиотека для создания формы ввода
 
День добрый. Подскажите какая сейчас актуальная и без багов библиотека для реализации графического интерфейса(формы) для ввода данных пользователем в рамках Quik Lua?
Так же интересует библиотека для считывания кодов нажатых клавиш.
getDataSourceInfo(), запрос таймфрейма и кода инструмента
 
Вопрос решил.

tab={}
tab=getDataSourceInfo()
nash_interval=tab["interval"]   -- или tab.interval  вернет ТФ индикатора

проблема была в том , что не была создана таблица :)
getDataSourceInfo(), запрос таймфрейма и кода инструмента
 
подскажите как получить таймфрем индикатора?
пробывал:
getDataSourceInfo("interval")  
getDataSourceInfo(interval)
getDataSourceInfo().interval

tab=getDataSourceInfo()
tab["interval"]

ничего не работает
получение параметров индикатора, обращение к line
 
Цитата
Серж пишет:
Settings.line[1].Name
поставил в 32 строке local param=tostring(Settings.line[1].Name)
все равно возвращает ошибку:
...\LuaIndicators\file03.lua:32: attempt to index field 'line' (a nil value)
получение параметров индикатора, обращение к line
 
есть код индикатора



Код
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
 
забыл написать функция read_param_file()  передает время в глобальную переменную old_can
утро, что происходит утром? Что обнуляется и возвращает nil
 
У меня возникает проблема по утрам. При запущенном скрипте. Если скрипт запустить потом или перезапустить скрипт, устроить дисконект, выключить Квик  никаких проблем нет. Только утро и все!
Функция 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  
 
Цена последнейсделки
 
если не было сделок в текущем дне, то вернет 0. Квик не помнит вчерашних сделок. Если по инструменту на момент проверки могут не быть сделки ввиду малой ликвидности инструмента пользуйтесь CreateDataSource и запрашивайте цену из последней свечи.
блокирование оператора, премодерация действий пользователя скриптом
 
можно ли реализовать премодерацию действий пользователя скриптом? Я имею ввиду: не давать пользователю проводить сделки, устроить дисконект и т.д.
CreateDataSource, перебор большого кол-ва источников данных
 
Всё задачу решил. Тему можно удалить и так много про CreateDataSource
Пожелания по квику и LUA
 
Цитата
Sergey Gorokhov пишет:
Цитата
Сергей Радченко пишет:
просьба добавить возможности:
1 менять цвет у линии в индикаторе
2 Также добавьте отображение индикатора в виде баров, свечей, гистограммы.
3 Будет супер если появится возможность рисовать индикаторы, графики без привязки ко времени.
1. Менять цвет уже сейчас можно. или имеется в виду динамическое изменение цвета?
2. мы уже работаем над этим
3. в этом пункте не совсем понятно. уточните пожалуйста на примере.
хотелось бы увидеть возможность у одной линии менять цвет(менять динамически). Как пример http://strategforexhome.ru/wp-content/uploads/2013/05/supertrend.jpg
Просьба реализовать возможности реализовать цветовые зоны по типу: залить цветом между линий индикатора пример http://strategforexhome.ru/wp-content/uploads/2013/05/i-sessions.jpg
также просьба реализовать не временную шкалу для реализации нестандартных свечей по типу: формировать свечу при достижении объема(все свечи на графике с одинаковым объемом наторговки), хейкинаши и т.д. http://www.ratingsforex.ru/uploads/heiken-ashi.png
дайте возможность формировать индикаторы в виде свечей и гистограмм.


Спасибо за то ,что стараетесь улучшать платформу.
CreateDataSource, не грузятся данные при формир. через CreateDataSource
 
Цитата
Серж пишет:
Цитата
Sergey Gorokhov пишет:
Цитата
Дмитрий пишет:
И при этом графики в терминале не открыты.
А Вы до этого их открывали?
Так это уже обсуждалось: http://forum-archive.quik.ru/forum/lua/125655/125655/
спасибо
CreateDataSource, перебор большого кол-ва источников данных
 
суть задачи состоит в том ,что нужно во множестве инструментов взять свечку(данные) из прошлого и обработать в цикле все инструменты беря по одной свече. И так нужно прошерстить всю историю.
Сейчас реализовано это так:

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
 
Цитата
Дмитрий пишет:
Цитата
Сергей Радченко пишет:
текущее время против ds:T(ds:Size()).hour..ds:T(ds:Size()).min
А если сделки по этому инструменту происходят не каждую минуту, а раз в несколько минут, а то и реже?
В таком случае можно очень долго ждать..
да согласен. как по другому не знаю
CreateDataSource, не грузятся данные при формир. через CreateDataSource
 
текущее время против ds:T(ds:Size()).hour..ds:T(ds:Size()).min
как сделать с помощью колбека не знаю.
CreateDataSource, не грузятся данные при формир. через CreateDataSource
 
Цитата
Дмитрий пишет:
Цитата
Сергей Радченко пишет:
лучше сделать так как правильно и надежно. Мой пример показал, что данные могут не поступать и лучше перестраховываться
А может мой способ и является правильным? Если мне нужны только данные, накопленные до момента вызова CreateDataSource, без последующих обновлений.
А использование коллбэков сильно тормозит работу, если речь идет о получении данных по большому числу инструментов.
В Вашем же случае проблема была в том, что вы пытались обращаться к данным еще до того, как терминал успел загрузить их с сервера, а использование коллбэков отнюдь не ускорит этот процесс.
благодоря использованию колбека можно не только обновить данные, но для меня самое важное проверить их. У меня массив инструментов в цикле и время тоже важно ,но еще важнее получить данные. А вдруг задержки в 100 будет мало. Мне тоже не приятно использовать слип и обновлять данные без необходимости. Это все только для того ,чтоб получить правильные и полные данные.
В моем случае с точки зрения логики CreateDataSource должен был получить массив свечей и только после этого перейти дальше по коду. А он это не сделал и побежал дальше. Я это увидел при тесте не поверив частично нулевым данным. Колбек это способ увидеть нули и проверить данные еще раз. Да плата за это время. У меня наверно теперь час будет индюк рассчитываться :)
CreateDataSource, не грузятся данные при формир. через CreateDataSource
 
Цитата
Дмитрий пишет:
Цитата
Sergey Gorokhov пишет:
Если в течении сессии график вообще не открывался, то CreateDataSource вообще не сработает в этом случае нужно заказать данные. Это можно сделать либо открыв окно с графиком, либо вызвав функцию ds:SetEmptyCallbac() один раз.
А я успешно получаю данные с использованием только CreateDataSource, без вызова SetEmptyCallback или SetUpdateCallback.
Причем без них работает все гораздо быстрей.
И при этом графики в терминале не открыты.
Это "ошибка" в реализации QLua? Или все же так и должно быть?

Правда я проверяю эти данные только 1 раз. Вполне возможно, что после загрузки в терминал текущего состояния графика со всей историей, дальше без использования одной из последних двух функций новые свечки уже не будут поступать.
да, работать будет и без открытия графика, но лучше сделать так как правильно и надежно. Мой пример показал, что данные могут не поступать и лучше перестраховываться. Одну строчку прописать легко. Спасибо, команде поддержки Квика.
CreateDataSource, не грузятся данные при формир. через CreateDataSource
 
Цитата
Sergey Gorokhov пишет:
ds=CreateDataSource(Class_Code, Sec_Code, INTERVAL_M15)
ds:SetEmptyCallback()
sleep(100)
СПАСИБО! заработало
CreateDataSource, не грузятся данные при формир. через CreateDataSource
 
Цитата
Сергей Радченко пишет:
Цитата
Sergey Gorokhov пишет:
Цитата
Сергей Радченко пишет:
Цитата
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
 
Цитата
Sergey Gorokhov пишет:
Цитата
Сергей Радченко пишет:
Цитата
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
 
Цитата
Sergey Gorokhov пишет:
Цитата
Сергей Радченко пишет:
если воткнуть sleep(100) в самом начале то выведет
Да на закачку данных требуется время, так и должно быть.
Цитата
Сергей Радченко пишет:
Как лучше получать данные если иструментов для работы в цикле много, и обращения частые? У меня задача тащить по одной свечке из множества инст. и хотелось бы получать правильные данные.
Лучше, ловить данные в колбеке SetUpdateCallback
Как определить оптимальное время на закачку? Просто если поменять инст. на RIM5 проблем нет. Куда втыкать sleep до CreateDataSource или после и сколько ставить единиц? Как определить полноту передачи массива свечей?

SetUpdateCallback позволяет генерить событие если свечка изменилась, а если не изменилась , то ничего не делать. Да это здорово для обработки текущей свечи. Но я больше склоняюсь к получению данных из таблиц данных через getParamEx  как пример getParamEx ("SPBOPT", mas_opt_par["code"], "NUMCONTRACTS").param_value
CreateDataSource, не грузятся данные при формир. через CreateDataSource
 
не грузятся данные при формировании таблицы свечей через 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
 
просьба добавить возможности:
1 менять цвет у линии в индикаторе
2 Также добавьте отображение индикатора в виде баров, свечей, гистограммы.
3 Будет супер если появится возможность рисовать индикаторы, графики без привязки ко времени.
CreateDataSource, какое правильное расположение функции CreateDataSource?
 
где правильно подписываться на источник данных при использовании одного инструмента и одного ТФ? Делать это в каждой функции и закрывать в конце или
разместить подписку в
function OnConnected()
ds = CreateDataSource(Class_Code, Sec_Code, INTERVAL_M1)
а закрыть подписку
function OnStop(stop_flag)
ds:Close()
Страницы: 1
Наверх