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

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

Страницы: Пред. 1 2 3 4 5 6 След.
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.
Спасибо.
Узнать цену покупки актива.
 
Цитата
Alexey Danin написал:
Здравствуйте.

Цитата
Kolossi написал:
А как насчет получения средней цены покупки по инструменту, точнее параметра "Балансовая цена" в таблице Состояние счета?
К сожалению, средствами QLUA данную таблицу не получить.

Однако параметры данной таблицы формируются на основе позиций клиента, которые отражены в соответствующих таблицах терминала, к которым в свою очередь можно получить доступ средствами QLUA.
Подробное описание полей Таблицы "Состояние счёта" находится в  Руководство пользователя QUIK v.9.7zip, 14.6 МБ  -> Раздел 3. Просмотр информации -> 3.5 Состояние счета.
Да не получается. Конечно я веду среднюю позиции средствами и возможностями скриптов. Как правило она совпадает с балансовой ценой, но стоит провести сделку мимо скрипта и весь результат можно кидать в помойное ведро. Поэтому возможность получать данные с этой таблицы хотелось бы иметь.
Узнать цену покупки актива.
 
Цитата
nikolz написал:
Цитата
Kolossi написал:
А как насчет получения средней цены покупки по инструменту, точнее параметра "Балансовая цена" в таблице Состояние счета?
Если Вы пытаетесь ответить на вопрос темы, то читайте внимательнее вопрос.
Если просто выпендриваетесь, то нахрена?
У часто пишущих по любому поводу стандартный симптом - когда не знаешь ответ нужно нахамить и все наладится ))
Узнать цену покупки актива.
 
Цитата
nikolz написал:
Цитата
Ренат написал:
getItem('firm_holding') .
Вы же хотите узнать цену сделки, так и читайте ее из таблицы сделок.
причем здесь позиция по инструментам?
и где Вы в позиции увидели цену?
Ну да, с ценой сделки козе понятно. )
А как насчет получения средней цены покупки по инструменту, точнее параметра "Балансовая цена" в таблице Состояние счета?
Хотелось бы узнать, где про ЭТО прчитать.
 
Цитата
nikolz написал:

В документации QLua в разделе: "Функции для работы с таблицами Рабочего места QUIK"
-------------------
написано:
-----------------
В таблицах Рабочего места QUIK, созданных с помощью скриптов на языке Lua,  
поддержаны следующие возможности :
 ..
  пользовательские фильтры,
 ...
 ===========================
А где там написано про  фильтры на Lua?  Созданная на Lua таблица поддерживает установку пользовательских фильтров.
Капризничаете. Дай вам волю так вы потребуете возможность убрать столбец с нумерацией и привязку таблицы к конкретному окну. Много вас таких, а разработчики серьезными делами заняты )))
Хотелось бы узнать, где про ЭТО прчитать.
 
Читать после нажатия правой клавиши мыши на заголовок столбца в меню "Фильтр по..."  
Работа с таблицами Квика
 
А, нашел. Забавно )
Работа с таблицами Квика
 
Цитата
nikolz написал:
В  друг откуда ни возьмись появилось...

в вызове функции  NUMBER AddColumn (NUMBER t_id, NUMBER iCode, STRING name, BOOLEAN  is_default, NUMBER par_type, NUMBER width)  в примере документации (приложение 1)  появляется функция формата:    t:AddColumn("test1", QTABLE_INT_TYPE, 10, format1 )
---------------
Предупреждать надо.
Это откуда дровишки? В документации LUA в файловом архиве и в файлах последней версии на arqatech.com/ru такого нет.
Подписка на стакан OnQuote в quik 9.7.1
 
Цитата
Nikolay написал:
OnQuote - это и есть доступный колбек. Объявленная глобально такая функция будет вызываться на каждый чих в стакане.
Т.к. таких изменение очень, очень много, и на каждое изменение вызывается с, то память и забивается, т.к.
getQuoteLevel2 возвращает две таблицы, две строки. А это не так и мало. И делается это так часто, что сборщик мусора просто не успевает.

Если Вам не нужны данные стакана в каждом срезе без пропусков, то в колбеке надо просто установить флаг, что есть новый стакан по инструменту, а в потоке main его прочитать.
Пардон, невнятно выразился. Полагаю что проблема не в OnQuote, в этом легко убедится убрав из функции getQuoteLevel2.
Подписка на стакан OnQuote в quik 9.7.1
 
Чисто из любопытства: функция забивает память без вызова только своим присутствием в коде?
Или в этой версии она стала функцией обратного вызова?
Помогите разобраться: почему не выставляется заявка на покупку?
 
Хвостовой ноль после вычитания на смотрели?
Снова AddLabel
 
Цитата
Kolossi написал:

Описание проблемы:
В случае прикрепления графика якорем к таблице текущих торгов функция AddLabel лепит метку согласно только идентификатору в текущий на графике инструмент. T.е. метка о сделке по любому тикеру выставляется в текущее окно графика.    В итоге в одном окне мешанина из меток разнообразных инструментов, а при переключения на нужные они отсутствуют.  В настоящее время способов автоматически правильно разносить метки на графики соответствующих тикеров нет. Единственный вариант какой я придумал - вручную открывать нужное окно и запускать скрипт который перебирает список UIDов меток относящихся к этому тикеру, поштучно удаляет ее и выставляет заново с другим uid что бы она появилась на текущем графике.
Замечу, что метки покупки/продажи выставляемые самим Квиком попадают в окно нужного инструмента автоматически.

Предложение:

1. Доработать функцию AddLabel возможностью выставлять метку на график в соответствии с параметром "тикер инструмента". При отсутствии параметра пусть лепит в текущее окно.

или

2. Дать возможность позиционировать средствами qlua указатель в таблице текущих торгов на нужный тикер с тем что бы  текущий график переключился на нужный инструмент. Тут наверное придется создать еще функцию получения текущей позиции укозателя.

Прошу рассмотреть данные предложения.
Обязуюсь честно напоминать о них ежегодно )
А что, пожелания теперь не рассматриваются и не регистрируются?
Снова AddLabel
 
Интересный вариант с индикатором. Только с возвратом к вопросу о повторном выставлении.
Страницы: Пред. 1 2 3 4 5 6 След.
Наверх