Kolossi (Все сообщения пользователя)

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

Страницы: Пред. 1 2 3 4 5 6 След.
Интервалы CreateDataSource
 
Цитата
Nikolay написал:
Ну, у окна доступные скрипты до сих пор нельзя изменить размер, древнейшая кодировка ANSI - и это не критически важная часть, явно только клиент. А Вы на святое замахнулись, сервер.
Это да, на эту проблему "ваше пожелание принято" не так давно отпраздновало десятилетний юбилей.
Но все же предлагаю добавить параметры сделок для каждой свечи любого интервала.
Интервалы CreateDataSource
 
Цитата
Sergey Gorokhov написал:
Это не так.
Cвечи формирует сервер QUIK, а не биржа.
Но свечи формируются по сделкам полученным с биржи.
Если я правильно понимаю, свечи формируются из тиковой базы сделок. Так в чем проблема передавать в свечи не только те кастрированные параметры которые придумали японцы сто лет назад? Там ведь добавить всего ничего.
Интервалы CreateDataSource
 
Подскажите возможно ли каким-то образом получение данных для свечи с интервалом от 1 мин или более с разбивкой объема сделок V на "покупка" и "продажа" как это сделано в ленте сделок?
Выбирать это из тиковой базы уж очень затратно по ресурсам, особенно если не по одному инструменту.
срочный рынок Московской биржи переходит на новую тарифную модель
 
Цитата
nikolz написал:
на самом деле это не так
реально это не поможет экономить деньги.
Так как комиссия брокера остается, а она всегда существенно больше биржевой.
Если заявка не пассивная, то она просто отклоняется и правило это лишь к лимитированным заявкам.
Уже нет. Комиссия_биржи+комиссия_НКЦ~=комиссии_брокера.
https://fs.moex.com/f/17219/ob-izmenenii-tarifov-na-rynke-akciy-obshaja.pdf
Так что вопрос выставления пассивной заявки актуален.
Контроль работы скрипта
 
Пардон, в создании переменных правильно
go,gt="|",0
Контроль работы скрипта
 
Я тут пользую визуальный индикатор работы скрипта который показывает его замедление или затык при выполнении.
Веселенький такой крутилок в крайней ячейке таблицы.
Может кому пригодится.
С Новым Годом!
Код
function cyrcle(c) -- крутилок
   local t=os.time()
   if c=="|" then 
      return "/", t
   elseif c=="/" then 
      return "--", t
   elseif c=="--" then 
      return "\\", t
   elseif c=="\\" then
      return "|", t
   else
      return "" ,t
   end    
end

-- Пример (цветовые функции здесь не привожу)
go,gt="",0
...
...
function main()
 is_run=true
 ...
 while is_run do
  go,gt=cyrcle(go)
  ...
  ...
  ...
  ...  
  SetCell(kt_id,x,y,go) -- вывод в ячейку таблицы
  --раскраска крутилка
  if go=="/" or go=="\\" then
   color(x,y,kt_id,"Lemon")
  else
   color(x,y,kt_id,"Salad")
  end
  if os.time()-gt>60 then color(x,y,kt_id,"Red") end 
  ...
  sleep(50)
 end
end
Иногда доступные скрипты
 
Цитата
Karina Dmitrieva написал:
Здравствуйте, Kolossi.

Ваши пожелания зарегистрированы.
Мы постараемся рассмотреть их и сообщить Вам результаты анализа.
Впоследствии, по результатам анализа, будет приниматься решение о реализации пожеланий в будущих версиях ПО.
Спасибо.
На всякий случай напоминаю вам, что вы уже все это анализировали и признавали целесообразным восемь лет назад и еще не один раз после.
https://forum.quik.ru/messages/forum1/message35296/topic1734/#message35296
Таблица обезличенных сделок ....
 
Есть одна тонкая разница между подпиской и открытой таблицей.  
При подписке тиковые данные начинают тянуть историю после запуска скрипта c подпиской. При открытой таблице в работающем терминале скрипт просто получает сразу готовую тиковую базу.
Я держу и открытую таблицу и подписываю скрипт.
Иногда доступные скрипты
 
Уважаемые разработчики !

Ну сделайте наконец возможность изменения размера окна "Доступные скрипты"!
Достало уже забавляться целый день прокруткой после изменения шрифтов. У вас что, все экраны 15 дюймов ?

Заодно поставьте уже кнопку запуска этого окна рядом с веселиньким паровозиком.
Сделки
 
Известная фича. Каждый фильтрует по своему. У меня проблема была забыта после того, как поставил условие что каждый trade_num должен быть  больше предыдущего.
sendTransaction - требует какой то "торговый счет" - попытка #2
 
Цитата
Quikos написал:
Цитата
Kolossi написал:
В этой ситуации смысла наезжать на разработчиков никакого нет.
Оставь свои фантазии при себе.
Хамить обязательно?
sendTransaction - требует какой то "торговый счет" - попытка #2
 
А с чего вы взяли, что этот параметр обязательный? Ответ на транзакцию вы получаете от сервера брокера. Если он настроил его так, что поле ACCOUNT необходимо для обработки, то оно обязано быть. Точно так же как,  допустим, в таблице текущих торгов моего брокера нет поля с датой дивотсечки, а в альфе есть.  В этой ситуации смысла наезжать на разработчиков никакого нет. Вот если бы этот параметр требовал ваш терминал перед отправкой на сервер то он был было обязательным.  В общем смысла поднимать фоновый шум в данной ситуации нет.
sendTransaction - требует какой то "торговый счет" - попытка #2
 
Ну просит, так поставьте. Ваш брокер так решил.
sendTransaction - требует какой то "торговый счет" - попытка #2
 
Основные настройки/Торговля/Настройка счетов. Верхняя строчка
sendTransaction - требует какой то "торговый счет" - попытка #2
 
Quikos, вы сначала сами пытаетесь разобраться или сразу сюда строчите?
SetUpdateCallback - не срабатывает после первого запуска скрипта
 
Цитата
nikolz написал:
В квике можно создавать сколько угодно потоков
При этом надо использовать общий глобальный стек.
В нем решены проблемы синхронизации для main и для любых других.
----------------
я приводил пример  с пулом потоков
Использовал его для обработки колбеков по 200 инструментов.
в итоге максимальное количество потоков которые были открыты пулом составило 12.
Никаких проблем с синхронизацией не было.
Спасибо, посмотрю. Однако сейчас уже это не совсем актуально поскольку каждый скрипт и есть отдельный поток, а переменные между скриптами можно передавать через общее пространство переменных.  Жаль только что нет возможности запускать дерево скриптов.
SetUpdateCallback - не срабатывает после первого запуска скрипта
 
Цитата
Quikos написал:
Цитата
Kolossi написал:
Как и повода жаловаться на  SetUpdateCallback.
Хотите сказать - у Вас описываемого мной косяка разрабов не наблюдается ?
Нет не наблюдается. Просто может быть потому что я сразу подстраховался и забил. Жалко времени на это тратить.
Реальная функция из скрипта, была написана на ранних версиях квика и с тех пор не трогалась:
Код
function GetDS(p) -- функция закачки  данных
   local error_desc=""
   if p==1 then -- дневные
...
   elseif p==2 then -- тиковые
      dsa,error_desc=CreateDataSource(p_classcode, trw.p_seccode, INTERVAL_TICK)
      while not dsa or dsa:Size()==0 do
         local n=100
         while n>0 do
            sleep(100)
            if dsa and dsa:Size()>0 then break end
            n=n-1
         end
         if not dsa or dsa:Size()==0 then
            dsa,error_desc=CreateDataSource(p_classcode, trw.p_seccode, INTERVAL_TICK) -- повтор 
         end
         if error_desc~=nil and error_desc~="" then
            message("TICK, "..p_classcode.."/"..trw.p_seccode.."/".."Source2 error==>" .. error_desc)
            return 0
         end
      end
      dsa:SetEmptyCallback()
      return    dsa:Size()

   else
      return 0
   end
end
Полагаю счетчик и повтор решили возможную проблему.
SetUpdateCallback - не срабатывает после первого запуска скрипта
 
Цитата
Nikolay написал:
Не лучшее решение, оно блокирует исполнение кода. Запросы где время ответа неизвестно, лучше решать через очереди задач ожидания. Потоков в lua нет, но, как минимум, не блокировать весь код. Если, например, скрипт обрабатывает много инструментов и потоков данных, то ждать после каждого заказа - много времени пройдет пока до последнего дойдет. Или надо что-то другое постоянно контролировать, пока по другому инструменту заказ сделали. То что долго идет ответ - это не повод для уже работающих инструментов ждать.
Не от хорошей жизни, данные не всегда успевают.  Поскольку, как вы заметили, потоков в луа нет, пришлось на каждый инструмент(тикер) сделать по скрипту. Ну а в отдельном скрипте без базы никаких задач нет.
К стати, пока ни при какой нагрузке ожидание начала загрузки больше секунды-двух не встретил, а базы подгружается в основном либо при запуске, либо на открытии сессии.  Как и повода жаловаться на  SetUpdateCallback. Хотя в основном как колбэк используется OnAllTrade, база больше для расчетов.
SetUpdateCallback - не срабатывает после первого запуска скрипта
 
Пардон, очепятка

while not ds or ds:Size()==0 do
sleep(50)
end

Ну еще счетчик циклов для повторной попытки загрузки
SetUpdateCallback - не срабатывает после первого запуска скрипта
 
Я после ds=CreateDataSource(...) ставлю

while ds:Size()>0 do
sleep(50)
end
И следом назначение колбэка
Функция подключения к серверу
 
Специальной нет. Вообще то реконнект оформляется в меню квика. Но при желании можно оформить скрипт нажимающий кнопки в окне соединения после дисконекта.
Как заполняется размер таблицы исторических свечей ?
 
Цитата
nikolz написал:
Цитата
Kolossi написал:

  Вы серьезно это предлагаете? Вычисления с точностью +/- 20% ? Спасибо, не надо ))

Относительно Вашего утверждения о точности +-20% , оно голословное.
---------------------------------
Если нет, то покажите результаты теста и я с Вами соглашусь.
nikolz, если вы возьмете последние пять 1-минутных свечей и будете в них что-нибудь считать, то начале текущей минуты общее расчетное время будет чуть более четырех минут, а в конце чуть менее пяти.  Вы не по верите, но это разница в 20% общего расчетного времени. Заметьте, я очень сдержан и терпелив )
Как заполняется размер таблицы исторических свечей ?
 
Цитата

Так совершение сделки "по рынку" - это по сути такое же выставление заявки на покупку к примеру, просто сразу совпадающее с предложением. Навряд ли это где то это отдельно фиксируется.
Это фиксируется в ленте сделок.  В сделке всегда одна часть по рынку другая лимитная, по другому не получится. И если лимитная стояла на продажу то сделка маркируется как "покупка" и наоборот.
На практике, если например стадо трейдеров начинают хватать бумагу как караси перловку, то в ленте резко подскакивает частота сделок "покупка". Т.е.
в большей части сделок лимитная часть на продажу, а рыночная на покупку.
Как заполняется размер таблицы исторических свечей ?
 
Quikos, если я поставлю заявку на покупку и она в итоге сработает, а потом куплю выставленную кем-то на продажу, т.е. совершу две покупки - одну лимитную, одну по рынку, то в ленте сделок эти две сделки будут обозначены одна как "покупка" другая как "продажа".
Потому что в любой сделке присутствует и покупка и продажа в равных долях,  а в ленте отражается та часть сделки которая "по рынку". Как-то так.
Как заполняется размер таблицы исторических свечей ?
 
Цитата
nikolz написал:
Цитата
Kolossi написал:
 Тут не соглашусь. Я  практически не пользуюсь индикаторами после десятка лет экспериментов. Не буду сейчас освещать причины.
Но использую ряд параметров которые делают расчет "от текущего времени назад" Например "изменение объема за последние пять минут"
или "скорость изменения спроса/предложения за последний час. Для этого не подходят пятиминутные или часовые свечи.
Повторю свой вопрос: как узнать что тиковая база получила все исторические данные и идет прием текущих. По первому onAllTrade?
Полагаю, что решить Вашу задачу для оценки изменения параметров на интервале в 5 минут вполне хватило бы и 1 минутных свечей.
Вы серьезно это предлагаете? Вычисления с точностью +/- 20% ? Спасибо, не надо ))
Но.
Если мне еще расскажете как получить значение количества сделок "по рынку" не используя ленту сделок я обещаю подумать.

P.S. Только про начинающих и циклы притормозите, перебор слегка.
Как заполняется размер таблицы исторических свечей ?
 
Цитата
nikolz написал:
но с тиками проблема в том, что они уж точно придут пакетом сразу куча сделок и все в один текущий момент
физически терминал будет перелопачивать "вчерашний день", так как куча сделок уже прошла.
Полагаю что тики как правило пытаются использовать начинающие, но реально они имеют ценность лишь в HFT и в дата центре и скорее всего не в терминале КВИК.
Тут не соглашусь. Я не практически не пользуюсь индикаторами после десятка лет экспериментов. Не буду сейчас освещать причины.
Но использую ряд параметров которые делают расчет "от текущего времени назад" Например "изменение объема за последние пять минут"
или "скорость изменения спроса/предложения за последний час. Для этого не подходят пятиминутные или часовые свечи.
Повторю свой вопрос: как узнать что тиковая база получила все исторические данные и идет прием текущих. По первому onAllTrade?
Как заполняется размер таблицы исторических свечей ?
 
Цитата
nikolz написал:
Если Вам очень важно знать все ли свечи Вы приняли,
то просто проверьте дату и время последней и сравните с текущем временем и датой.
nikolz,  а как для ds с тиковым интервалом?
CreateDataSource("TQBR", "VTBR", 1), Получаю ошибку: TQBR - unknown class code.
 
Цитата
Nikolay написал:
Если выведете данные по переменной _G.INTERVAL_M1, то будет видно, что тип число, значение 1. В qlua много таких глобальных переменных ввели.

Можно даже просто вывести все, что есть в _G через pairs. Будут видны даже недокументированные.
Ну если все так просто, то можно было бы ставить 1 в параметр. Но нет.
Как заполняется размер таблицы исторических свечей ?
 
Цитата
Quikos написал:
Цитата
Kolossi написал:
это легко посмотреть при помощи ds:Size() в цикле.
Это не достоверный результат, может цикл не успеет выловить когда размер таблицы условно нулевой.
На мелких таймфреймах вполне себе достоверный
CreateDataSource("TQBR", "VTBR", 1), Получаю ошибку: TQBR - unknown class code.
 
Цитата
nikolz написал:
Цитата
Kolossi написал:
CreateDataSource
INTERVAL_M1 - имеет тип NUMBER и равен 1.
В луа нет понятия "константа"
Безценноые замечания, но не ко мне их адресовать ))
См. доки qlua:

Список констант для передачи в параметр interval: Параметр

Значение интервала

INTERVAL_TICK

Тиковые данные

INTERVAL_M1

1 минута

Может ли такое быть
 
Не по порядку. Вернее не всегда по порядку. На время сделки надо поглядывать.
CreateDataSource("TQBR", "VTBR", 1), Получаю ошибку: TQBR - unknown class code.
 
Там интервал должен стоять не 1, а константа INTERVAL_M1. Хотя в доках какой-то умник написал NUMBER
Как заполняется размер таблицы исторических свечей ?
 
это легко посмотреть при помощи ds:Size() в цикле.
Запрос данных после разрыва соединения
 
if IsConnected()==true...
SetCell crash, Устновка цветов не по порядку вызывает краш Quik а
 
В OnStop поставьте DestroyTable(t_id)
Как из скрипта lua узначть что терминал QUIK загрузился полностью и подгрузил данные эккаунта ?, Как из скрипта lua узначть что терминал QUIK загрузился полностью и подгрузил данные эккаунта ?
 
Интересно, если CreateDataSource получает, к примеру, часовую свечу с временем текущего часа равной текущему часу сервера, можно ли считать что загрузка завершена?
Волшебное исчезание меток
 
Цитата
Владимир написал:
Kolossi, Кому как. Мне, например,  для торговли только Lua и нужен. А тема здесь направлена на потенциальное изменение софта Квика. НЕ НАДО ЭТОГО ДЕЛАТЬ!!!
Как обычно на любом форуме есть человек постоянно лезущий в любую тему "со своим единственно правильным мнением" не обращая внимание на то, что оно никого не интересует. Давайте не будем засорять ветку.
Волшебное исчезание меток
 
Владимир, дык для торговли и Lua не нужен, только здесь другая тема.
Волшебное исчезание меток
 
Владимир,я имел ввиду закрытие терминала после его зависания и последующий запуск. А с сохранением жизненно важных переменных и таблиц у меня давно все отлажено.

В итоге я считаю, что отсутствие меток на графике при наличии их параметров в системе в подобной ситуации является багом и подлежит рассмотрению и исправлению в ближайших версиях квика.  Но похоже так считаю только я (
Волшебное исчезание меток
 
Цитата
Nikolay написал:
А метки да, исчезают. Как я понимаю из-за ошибки создания дампа состояния при падении. Приходится хранить параметры метки в файле состояния скрипта. Впрочем, я предпочитаю все хранить независимо, чтобы всегда иметь возможность при перезапуске проверить и выявить все различия.
Там есть еще один прикол - после выпада в дамп и последующего запуска GetLabelParams возвращает параметры метки, хотя на графике ее нет.
Приходится их по одной удалять их по возвращаемому uid и создавать с новым из сохраненных параметров.
Волшебное исчезание меток
 
Всем добрый день!

Столкнулся с тем, что после аварийного выхода из терминала  при его зависании по сторонней причине, исчезают все метки
добавленные при помощи функции  AddLabel после последнего запуска скрипта.
Очень неприятно и в голову ничего не пришло кроме сохранения параметров меток в файл при их создании с последующим удалением и пересозданием каждой при новом запуске.
Наверное можно было бы решить эту проблему имея в lua функцию сохранения параметров терминала
в файл info.wnd, но увы. Кто-то нашел решение этой проблемы?

Попутно изучая в доках функцию AddLabel на предмет что курили разработчики когда придумали использовать для параметра "Время в формате «ЧЧММСС»..." тип "NUMBER" наехал вот на такую шутку:
Код
   local a="09:15:18"
   local b=string.gsub(a,":","")
   local c=tonumber(b)
   local d=tonumber(string.gsub(a,":",""))
   message(tostring(c).." "..tostring(d))
Результат:
91518 nil

Кто коллекционирует, дарю ))
v.9.8.0.11, Lua 5.3.5
Получение цены инструмента
 
Цитата
nikolz написал:
и еще..
если торгуете неликвидом, то в качестве признака торговой сессии можно использовать опять же время и наличие заявок.
Но я роботов на неликвид не делаю.  
Все бы ничего, но я живу в стране где время отличается от московского и переводится на летнее/зимнее. Геморно, со статусом проще.
Получение цены инструмента
 
Владимир, у каждого свои тараканы. У меня робот должен отличать основную сессию от предторговой и постторговой на которых он тоже торгует. Поэтому  статус проверяется. Естественно при помощи getparamex2 на левом тикере.

Задача, по которой был задан вопрос была в переборе класса и фильтрации инструментов по средне-дневному объему и уходу прайса от экстремального значения. При минимальных затратах ресурса на минимально требуемом железе.
Как я написал, решение ее меня на данный момент устраивает. Спасибо за подробные советы.
Получение цены инструмента
 
В принципе с подпиской получилось нормально. Всем спасибо.

Задумался вот, а почему статус торговой сессии нужно получать по определенному инструменту а не в общим параметром?
Получение цены инструмента
 
Цитата
Nikolay написал:
Если  настроено получение потока данных для необходимых инструментов и заданы получаемые параметры, то да. Такая настройка будет не умной, как ее называют в интерфейсе. Тогда можно не открывать ни одной таблица, ни один график.
Если параметры не заданы, то можно заказать его через ParamRequest  https://luaq.ru/ParamRequest.html
Если я правильно понимаю, то оформление потока это то же создание ds и включение ленты сделок.
Мне же нужно после получения листинга по классу получить  текущую цену для некоторых тикеров из листа. Настраивать для каждого поток для этого лишний расход ресурса который не бесконечен.
Получение цены инструмента
 
Цитата
Владимир написал:
Кстати, руками в ТТТ занести ничего нельзя, таблица только для чтения.
Кстати, тикер в ней сам по себе не появляется и не удаляется.
Получение цены инструмента
 
Подскажите, есть ли возможность получения цены последней сделки по инструменту запросом с сервера не занося его в таблицу текущих торгов руками и не создавая всю базу через CreateDataSource ?
Запуск скрипта из примера подвешивает терминал Quik
 
Цитата
nikolz написал:
В примере уже есть sleep на 3 секунды
куда еще и зачем?
До тех пор пока #MAIN_QUEUE не станет отличной от нуля нет там никакого слипа
Узнать цену покупки актива.
 
Alexey Danin,
К стати хотел спросить, а чем "балансовая стоимость" отличается от "цены приобретения" ? Или это одно и тоже просто таблицы делали разные разные люди со своими терминами в голове?
Узнать цену покупки актива.
 
Цитата
Alexey Danin написал:
Цитата
Kolossi написал:
Поэтому возможность получать данные с этой таблицы хотелось бы иметь.
Можем зарегистрировать пожелание на доработку функционала. Регистрируем?
Конечно, доступ к таблице "Состояние счета" средствами QLua.
Спасибо.
Страницы: Пред. 1 2 3 4 5 6 След.
Наверх